Creazione Cespite (ASSET) Temporaneo
Problematica:
Creare un programma custom che selezionando delle RdA, secondo delle logiche, consente
di creare dei cespite temporanei, per ogni posizione che abbia la
contabilizzazione ad “A” (cespite) , e successivamente creare il relativo OdA.
In pratica,
stiamo simulando la creazione dell’OdA (ME21N) in riferimento a delle RdA.
Nella schermata successiva, al pulsante "Crea Cespite"
E' associato il seguente codice:
SET PARAMETER ID 'ANK' FIELD ztrda_cq_ce-anlkl.
SET PARAMETER ID 'BUK' FIELD ztrda_cq_ce-bukrs.
DATA: l_anla TYPE anla,
l_anlz TYPE anlz,
l_nassets_max TYPE ra02s-nassets,
lt_anltab TYPE STANDARD TABLE OF raist06 INITIAL SIZE 0.
CLEAR: l_anla, l_anlz, l_nassets_max.
FREE: lt_anltab.
l_anla-bukrs = ztrda_cq_ce-bukrs.
l_anla-lifnr = gs_ekko_output-lifnr.
l_anla-meins = ztrda_cq_ce-meins.
l_anla-txt50 = ztrda_cq_ce-txz01.
l_anla-anlkl = ztrda_cq_ce-anlkl.
l_anla-bstdt = sy-datum.
l_anlz-werks = ztrda_cq_ce-werks.
l_nassets_max = 1.
CALL FUNCTION 'CREATE_ASSET'
EXPORTING
i_anla = l_anla
i_anlz = l_anlz
i_nassets = l_nassets_max
i_nassets_max = l_nassets_max
i_dark = ' '
i_nassets_fix = ' '
i_called_by_purchase_order = 'X'
TABLES
t_assets = lt_anltab
EXCEPTIONS
missing_company_code = 1
missing_asset_class = 2
missing_asset_mainnumber = 3
internal_error = 4
OTHERS = 5.
IF NOT lt_anltab[] IS INITIAL.
READ TABLE lt_anltab INTO DATA(ls_cespite) INDEX 1.
DATA: lv2_anln1 TYPE anla-anln1,
lv2_anln2 TYPE anla-anln2.
ztrda_cq_ce-anln1 = ls_cespite-temp_anln1.
ztrda_cq_ce-anln2 = ls_cespite-anln2.
l_nassets_max = 1.
CALL FUNCTION 'CREATE_ASSET'
EXPORTING
i_anla = l_anla
i_anlz = l_anlz
i_nassets = l_nassets_max
i_nassets_max = l_nassets_max
i_dark = ' '
i_nassets_fix = ' '
i_called_by_purchase_order = 'X'
TABLES
t_assets = lt_anltab
EXCEPTIONS
missing_company_code = 1
missing_asset_class = 2
missing_asset_mainnumber = 3
internal_error = 4
OTHERS = 5.
IF NOT lt_anltab[] IS INITIAL.
READ TABLE lt_anltab INTO DATA(ls_cespite) INDEX 1.
DATA: lv2_anln1 TYPE anla-anln1,
lv2_anln2 TYPE anla-anln2.
ztrda_cq_ce-anln1 = ls_cespite-temp_anln1.
ztrda_cq_ce-anln2 = ls_cespite-anln2.
* Questa PERFORM è IMPORTANTISSIMA, dato che setta una variabile globale standard
* (PROC_ANLA)
* Se settata questa variabile, nello standard della creazione dell'oda
* consente di richiamare il flusso logico di trasformazione del cespite
*temporaneo in cespite effettivo PERFORM knt_anla_verb_merken IN PROGRAM saplmepo USING 'X'.
ENDIF.
Nella parte di codice dove viene richiamata la bapi di creazione dell'OdA
CALL FUNCTION 'BAPI_PO_CREATE1'
, in caso di errore non richiamare la
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
Perchè a sua
volta richiama la "FORM initialize_tables."
nell'include LAISTF4O dove viene pulita tutta la tabella ARB_GES, che contiene
tutti i cespiti temporanei.
Nel caso di utilizzo della ROLLBACK, una volta risolto gli errori della BAPI, senza uscire dal programma, e rilanciando la bapi di creazione dell'OdA si verifica l'errore AY185
“Errore di
sistema. Immobilizzazione INTERN-0001 non trovata. “
Questo perchè la tabella che contiene i cespiti temporanei è stata cancellata dalla Rollback.
NOTA: INSERIRE UN BREAK-POINT nel FM CREATE_ASSET_CONFIRM dove è presente il seguente codice. Se la tabella "ARB_GES" è valorizzata, allora la creazione dell'OdA andrà a buon fine.
LOOP AT arb_ges.
* >>> START of change note 1712247 >>>
* Ist Anlage in T_ASSETS übergeben worden?
IF i_ignore_anln2 EQ con_x.
READ TABLE t_assets WITH KEY temp_anln1 = arb_ges-anln1.
ELSE.
READ TABLE t_assets WITH KEY temp_anln1 = arb_ges-anln1
anln2 = arb_ges-anln2.
ENDIF.
* <<< END of change note 1712247 <<<
* nichtgefundene merken
IF sy-subrc <> 0.
MOVE-CORRESPONDING arb_ges TO lt_deltab.
APPEND lt_deltab.
ENDIF.
ENDLOOP.
* >>> START of change note 1712247 >>>
* Ist Anlage in T_ASSETS übergeben worden?
IF i_ignore_anln2 EQ con_x.
READ TABLE t_assets WITH KEY temp_anln1 = arb_ges-anln1.
ELSE.
READ TABLE t_assets WITH KEY temp_anln1 = arb_ges-anln1
anln2 = arb_ges-anln2.
ENDIF.
* <<< END of change note 1712247 <<<
* nichtgefundene merken
IF sy-subrc <> 0.
MOVE-CORRESPONDING arb_ges TO lt_deltab.
APPEND lt_deltab.
ENDIF.
ENDLOOP.
EBOOK: le mie guide sono visualizzabili cliccando sui link:
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
1. SAP EWM (Extended Warehouse Management)
3. SAP VIM (Vendor Invoice Management)
SE MI CONTATTATE IN PRIVATO, PAGATE LA META' DEL PREZZO DI AMAZON, E POTETE SCEGLIERE IL FORMATO WORD o PDF.
>>> RECENSIONI DEI LIBRI su Amazon Kindle <<<
Ebook: SAP CDS: https://www.amazon.it/dp/B0B9BD1RN3#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP MM: https://www.amazon.it/dp/B0C3MKD9BR#customerReviews
Ebook: SAP MII: https://www.amazon.it/dp/B0C4392MY9#customerReviews
Ebook: SAP VIM: https://www.amazon.it/dp/B0C6FBK8QN#customerReviews
Ebook: SAP EWM: https://www.amazon.it/dp/B0CL6TXP1V#customerReviews
Nessun commento:
Posta un commento