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 1/3 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