Realizar Transferencia de un Activo Fijo a otro (Transacción ABUMN) mediante una función Z en lugar de un Batch INPUT / BAPI or FUNCTION for Transactión ABUMN
En lo personal en ABAP no me gusta utilizar los BATCH INPUT, pero no siempre se puede encontrar una BAPI que haga lo que necesitamos.
En esta ocasión, se me requirió poder realizar el traspaso de un activo fijo a otro (ya existente) mediante la transacción ABUMN.
Estuve buscando por una BAPI o función que realizará esto, en lugar de un batch input pero no pude encontrar algo al respecto.
Después de realizar un debug a la transacción ABUMN pude determinar que la función AMDP_USER_COMMAND_PROCESS es la que realiza el traspaso de un activo a otro; solo que hay dos detalles en esta función que me obligaron a crear una función Z basada en la función AMDP_USER_COMMAND_PROCESS:
- No devolvía mensajes de error en un tabla interna (por lo general utilizando la estructura de la BAPIRET2
- Manda mensajes mediante ventanas popup
Notas a considerar:
El programa tiene comentado las llamadas a la función AMDP_MESSAGE_SEND porque esta función hace que los mensajes aparezcan en ventanas popup.
Para tener una idea de cuáles son los datos con los que se deben llenar los parámetros de la función, sugiero que se coloque un break en la llamada de la función AMDP_USER_COMMAND_PROCESS que se encuentra en el FORM USER_COMMAND_PROCESS del INCLUDE LAMDPFNN del grupo de funciones AMDP, ejecutar la transacción ABUMN y cuando se detenga en modo debug, revisar cada uno de los parámetros con que se llama a la función AMDP_USER_COMMAND_PROCESS.
La función que cree es la siguiente:
El código fuente es el siguiente:
FUNCTION zfunc_abumn.
*”———————————————————————-
*”*”Interfase local
*” IMPORTING
*” VALUE(I_FCODE) LIKE SY-UCOMM
*” VALUE(I_DATAR) LIKE SY-DATAR OPTIONAL
*” VALUE(I_PROGN) LIKE SY-REPID OPTIONAL
*” VALUE(I_NUMDOC) TYPE CHAR01
*” EXPORTING
*” VALUE(E_FCODE) LIKE SY-UCOMM
*” VALUE(E_FIRST_TAB) TYPE CHAR01
*” VALUE(E_LAST_TAB) TYPE CHAR01
*” TABLES
*” T_RAIFP2 STRUCTURE RAIFP2
*” T_RAIFP3 STRUCTURE RAIFP3 OPTIONAL
*” T_ANEPI STRUCTURE ANEPI OPTIONAL
*” BAPIRET2 STRUCTURE BAPIRET2
*” CHANGING
*” VALUE(C_RAIFP1) LIKE RAIFP1 STRUCTURE RAIFP1 OPTIONAL
*” VALUE(C_RAIFP2) LIKE RAIFP2 STRUCTURE RAIFP2 OPTIONAL
*” VALUE(C_RAIFP3) LIKE RAIFP3 STRUCTURE RAIFP3 OPTIONAL
*” EXCEPTIONS
*” ERROR_OCCURRED
*”———————————————————————-
DATA: lt_bapiret2 LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: lt_acchd LIKE acchd OCCURS 0 WITH HEADER LINE.
DATA: lt_accit LIKE accit OCCURS 0 WITH HEADER LINE.
DATA: lt_acccr LIKE acccr OCCURS 0 WITH HEADER LINE.
DATA: lt_accda LIKE accda OCCURS 0 WITH HEADER LINE.
DATA: ld_awref LIKE anek-belnr.
DATA: ld_awtyp LIKE anek-awtyp.
DATA: ld_aworg LIKE anek-aworg.
DATA: ld_awsys LIKE anek-awsys.
DATA: ld_bukrs LIKE anek-bukrs.
DATA: ld_fcode LIKE syst-ucomm.
DATA: lf_txnok.
DATA: lf_datar.
DATA: ld_answer.
DATA: vl_transacc TYPE sy-tcode.
e_fcode = i_fcode.
ld_fcode = i_fcode.
lf_datar = i_datar.
IF lf_datar IS INITIAL.
lf_datar = sy-datar.
ENDIF.
sy-tcode = ‘ABUMN’.
MOVE ‘MIGO’ TO vl_transacc.
EXPORT vl_transacc TO MEMORY ID ‘ZTCODE’.
EXPORT i_numdoc TO MEMORY ID ‘ZNUMDOC’.
* Reiterwechsel?
CALL FUNCTION ‘TABSTRIP_OKCODE_TRANSMIT’
EXPORTING
i_okcode = i_fcode
IMPORTING
e_first_tab_reached = e_first_tab
e_last_tab_reached = e_last_tab.
* IF NOT SF_FCALL IS INITIAL.
CALL FUNCTION ‘AMDP_BAPI_CALL_ON_TRANSACTION’
EXPORTING
i_raifp1 = c_raifp1
IMPORTING
e_txnok = lf_txnok
TABLES
t_raifp2 = t_raifp2
t_raifp3 = t_raifp3
CHANGING
c_fcode = e_fcode.
IF lf_txnok IS INITIAL.
RAISE error_occurred.
ENDIF.
* ENDIF.
CALL FUNCTION ‘ACC5_RETURN_APPEND_OR_CHECK’
EXPORTING
i_refresh_return = ‘X’.
CALL FUNCTION ‘AMBU_CALL_AC_DOCUMENT_CHECK’
TABLES
t_acchd = lt_acchd
t_accit = lt_accit
t_acccr = lt_acccr
t_accda = lt_accda
t_return = lt_bapiret2.
** im RWIN aufgetretene Fehler bzw. Erfolgsmeldung ausgeben
* CALL FUNCTION ‘AMDP_MESSAGE_SEND’
* TABLES
* t_return = lt_bapiret2
* CHANGING
* c_fcode = e_fcode “<0584750
* EXCEPTIONS
* OTHERS = 4.
* RWIN zwecks Verbuchung aufrufen
CHECK sy-subrc = 0.
CALL FUNCTION ‘ACC5_RETURN_APPEND_OR_CHECK’
EXPORTING
i_refresh_return = ‘X’.
CALL FUNCTION ‘AMBU_CALL_AC_DOCUMENT_POST’
IMPORTING
e_awref = ld_awref
e_aworg = ld_aworg
e_awtyp = ld_awtyp
e_awsys = ld_awsys
TABLES
t_acchd = lt_acchd
t_accit = lt_accit
t_acccr = lt_acccr
t_accda = lt_accda
t_return = lt_bapiret2.
** <<<<<<<<<<<<<<<<<< Begin of note 722938 >>>>>>>>>>>>>>>>>>
** im RWIN aufgetretene Fehler prüfen
* CALL FUNCTION ‘AMDP_MESSAGE_SEND’
* EXPORTING
* i_just_check = ‘X’
* TABLES
* t_return = lt_bapiret2
* CHANGING
* c_fcode = e_fcode
* EXCEPTIONS
* OTHERS = 4.
* IF sy-subrc <> 0.
** Fehler im Post -> Harte A-Msg wegen Rollback
* MESSAGE ID sy-msgid TYPE ‘A’ NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
*
* CHECK sy-subrc = 0.
* BAPI für COMMIT aufrufen
CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’.
MOVE lt_bapiret2[] TO bapiret2[].
** jetzt erst im RWIN aufgetretene Erfolgsmeldung ausgeben
* CALL FUNCTION ‘AMDP_MESSAGE_SEND’
* TABLES
* t_return = lt_bapiret2
* CHANGING
* c_fcode = e_fcode
* EXCEPTIONS
* OTHERS = 4.
** <<<<<<<<<<<<<<<<<<< End of note 722938 >>>>>>>>>>>>>>>>>>>
ENDFUNCTION.
Espero que les sea útil esta información.
Saludos!
Atentamente
Moisés Collí Aké
!! Orgullosamente Yucateco ¡¡
New NetWeaver Information at SAP.com
Very Helpfull