Foro de programacion ABAP

SAP / ABAP => Programación ABAP => Mensaje iniciado por: jorgee90 en 13 de Mayo de 2016, 10:58:30 am

Título: Modificar BADI para una BAPI
Publicado por: jorgee90 en 13 de Mayo de 2016, 10:58:30 am
Buenas !!

Estoy empezando con ABAP y tengo un poco de lio con esto que os voy a mostrar.

Tengo un programa donde subo un txt y me lo tiene que validar. Salen unas claves contables por defecto y yo las cambio por otras. Para ello tengo una BADI. Y luego llamo a la BAPI... Me han mandado un mail con lo que tengo que hacer pero... he modificado la badi y he llamado a la bapi... y ahí me he quedado.... no se seguir. Os comparto el mail y por si me puede ayudar.

Yo lo que hice es cambiar las claves propuestas (01/21/31)… por claves que no afectarán al volumen de negocio mediante la BADI es la siguiente: BADI_ACC_DOCUMENT, implementación: IF_EX_ACC_DOCUMENT, método change.

El código es el siguiente:

  METHOD if_ex_acc_document~change.

    DATA: ls_extension TYPE bapiparex,
          ls_accit     TYPE accit.

    CLEAR: ls_extension.

* Modificamos las claves contables según las que obtuvimos a través del importe.

    LOOP AT c_extension2 INTO ls_extension.
      IF ls_extension-structure = 'BSCHLD'.
        CLEAR: ls_accit.
        READ TABLE c_accit INTO ls_accit WITH KEY posnr = ls_extension-valuepart1.
        IF sy-subrc = 0.
          ls_accit-bschl = ls_extension-valuepart2.
        ENDIF.
        MODIFY c_accit FROM ls_accit INDEX sy-tabix TRANSPORTING bschl.
      ENDIF.
    ENDLOOP.

    LOOP AT c_extension2 INTO ls_extension.
      IF ls_extension-structure = 'BSCHLK'.
        CLEAR: ls_accit.
        READ TABLE c_accit INTO ls_accit WITH KEY posnr = ls_extension-valuepart1.
        IF sy-subrc = 0.
          ls_accit-bschl = ls_extension-valuepart2.
        ENDIF.
        MODIFY c_accit FROM ls_accit INDEX sy-tabix TRANSPORTING bschl.
      ENDIF.
    ENDLOOP.

  ENDMETHOD.


Los valuespart 1 y valuespart2 te los has de llevar en el programa que llame a la BAPI en la tabla de esta misma extensión2.

Este es el código para rellenar la tabla extension2 (en mi caso contra la tabla interna it_ext2).

* En el caso de clientes.
  LOOP AT it_accountreceivable WHERE sp_gl_ind IS INITIAL.
    gs_ext2-structure = 'BSCHLD'.
    gs_ext2-valuepart1 = it_accountreceivable-itemno_acc.
    LOOP AT it_currencyamount WHERE  itemno_acc EQ gs_ext2-valuepart1.
      IF  it_currencyamount-amt_doccur > 0.
        gs_ext2-valuepart2 = '04'.
      ELSE.
        gs_ext2-valuepart2 = '14'.
      ENDIF.
    ENDLOOP.
    APPEND gs_ext2 TO it_ext2.
  ENDLOOP.

Y esta la forma de llamar la BAPI:

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
      EXPORTING
        documentheader    = gd_documentheader
        customercpd       = gd_customercpd
        contractheader    = gd_fica_hd
      IMPORTING
        obj_type          = l_type
        obj_key           = l_key
        obj_sys           = l_sys
      TABLES
        accountgl         = it_accountgl[]
        accountreceivable = it_accountreceivable[]
        accountpayable    = it_accountpayable[]
        accounttax        = it_accounttax[]
        currencyamount    = it_currencyamount[]
        criteria          = it_criteria[]
        valuefield        = it_valuefield[]
        extension1        = it_ext[]
        return            = it_return[]
        paymentcard       = it_paymentcard[]
        contractitem      = it_fica_it[]
        extension2        = it_ext2[]
        realestate        = it_re[].


En tu caso, deberás cambiar el 04, por lo que desees, 05,15 etc.

Qué pasos debo de seguir?

Gracias

Un saludo,