Agregar Document Flow DBM
Agregar Document Flow DBM
*--------------------------------------------------------------------*
* Types
*--------------------------------------------------------------------*
TYPES: BEGIN OF ty_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
xblnr TYPE bkpf-xblnr,
waers TYPE bkpf-waers,
bldat TYPE bkpf-bldat,
budat TYPE bkpf-budat,
END OF ty_bkpf.
*--------------------------------------------------------------------*
* Tablas
*--------------------------------------------------------------------*
DATA: lt_document TYPE /dbm/docflow_documents_tt,
lt_bkpf TYPE TABLE OF ty_bkpf,
lt_bseg TYPE TABLE OF bseg,
lt_accountgl TYPE TABLE OF bapiacgl09,
lt_currencyamount TYPE TABLE OF bapiaccr09,
lt_return TYPE bapiret2_t.
*--------------------------------------------------------------------*
* Estructuras
*--------------------------------------------------------------------*
DATA: ls_document TYPE /dbm/docflow_documents,
ls_bkpf TYPE ty_bkpf,
ls_bseg TYPE bseg,
ls_docheader TYPE bapiache09,
ls_accountgl TYPE bapiacgl09,
ls_currencyamount TYPE bapiaccr09,
ls_return TYPE bapiret2,
ls_splhdr TYPE /dbm/splhdr_job,
ls_split_com TYPE /dbm/split_com.
*--------------------------------------------------------------------*
* Variables
*--------------------------------------------------------------------*
DATA: lv_obj_type TYPE bapiacrev-obj_type,
lv_obj_key TYPE bapiacrev-obj_key,
lv_obj_sys TYPE bapiacrev-obj_sys,
lv_tabix TYPE sytabix.
*--------------------------------------------------------------------*
* Objetos
*--------------------------------------------------------------------*
DATA: lo_order TYPE REF TO /dbm/cl_order.
*--------------------------------------------------------------------*
* Constantes
*--------------------------------------------------------------------*
CONSTANTS: c_bkpf TYPE char5 VALUE 'BKPFF',
c_rfbu TYPE char4 VALUE 'RFBU',
c_sb TYPE char2 VALUE 'SB',
c_e TYPE char1 VALUE 'E',
c_rv TYPE blart VALUE 'RV',
c_pcga TYPE char4 VALUE 'PCGA',
c_1000 TYPE char4 VALUE '1000',
c_018 TYPE /dbm/oe_docflow-seqno VALUE '018',
c_ob_bkpf TYPE /dbm/oe_docflow-objtype VALUE 'BKPF',
c_idoc TYPE bkpf-awtyp VALUE 'IDOC'.
*--------------------------------------------------------------------*
lo_order ?= io_ord_object.
IF sy-subrc EQ 0.
SELECT bukrs, belnr, gjahr, xblnr, waers, bldat, budat INTO TABLE @lt_bkpf
FROM bkpf
WHERE gjahr EQ @sy-datum+0(4)
AND bukrs EQ @lo_order->ms_vbak_com-bukrs_vf
AND blart EQ @c_rv
AND awkey EQ @ls_document-docnum
AND awtyp EQ @c_idoc.
IF sy-subrc EQ 0.
SORT lt_bkpf BY belnr DESCENDING.
IF sy-subrc EQ 0.
* -------------------------------------------------
* --> BAPI Acc.Document: Fill account GL
* -------------------------------------------------
LOOP AT lt_bseg INTO ls_bseg.
CLEAR ls_accountgl.
ls_accountgl-itemno_acc = ls_bseg-buzei.
ls_accountgl-gl_account = ls_bseg-hkont.
ls_accountgl-item_text = lo_order->ms_vbak_com-vbeln.
ls_accountgl-fisc_year = sy-datlo(4) .
ls_accountgl-fis_period = sy-datlo+4(2) .
ls_accountgl-pstng_date = sy-datlo .
ls_accountgl-value_date = sy-datlo .
ls_accountgl-profit_ctr = ls_bseg-prctr .
ls_accountgl-orderid = ls_bseg-aufnr.
APPEND ls_accountgl TO lt_accountgl.
IF ls_bseg-bschl = '40'.
ls_currencyamount-amt_doccur = ( ls_bseg-dmbtr * -1 ).
ELSE.
ls_currencyamount-amt_doccur = abs( ls_bseg-dmbtr ).
ENDIF.
ENDLOOP.
* -------------------------------------------------
* Llamar a la función de carga de documento contable
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_docheader
IMPORTING
obj_type = lv_obj_type
obj_key = lv_obj_key
obj_sys = lv_obj_sys
TABLES
accountgl = lt_accountgl
currencyamount = lt_currencyamount
return = lt_return.
ls_splhdr-docnum = lv_obj_key+0(10).
ls_splhdr-docyear = sy-datum+0(4).
APPEND ls_splhdr TO lo_order->mt_splhdr_detail.
lo_order->splhdr_change( ).
lo_order->mo_docflow->create(
EXPORTING
iv_borobj = c_ob_bkpf
iv_seqno = c_018
io_order = lo_order
IMPORTING
et_return = lt_return ).
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.