Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

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:

  1. No devolvía mensajes de error en un tabla interna (por lo general utilizando la estructura de la BAPIRET2
  2. 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 ¡¡