0% found this document useful (0 votes)
81 views4 pages

Agregar Document Flow DBM

This document defines a method that: 1. Searches for a revaluation document for an order. 2. Extracts accounting document data from the document and order. 3. Calls a BAPI to post the accounting document to the system. 4. Updates order data if the posting is successful.

Uploaded by

hipo_
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
81 views4 pages

Agregar Document Flow DBM

This document defines a method that: 1. Searches for a revaluation document for an order. 2. Extracts accounting document data from the document and order. 3. Calls a BAPI to post the accounting document to the system. 4. Updates order data if the posting is successful.

Uploaded by

hipo_
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

METHOD /dbm/if_oe_action_exe~execution.

*--------------------------------------------------------------------*
* 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.

*-> Busqueda del documento revalorización de unidades

CALL FUNCTION '/DBM/OE_MAIN_DOCFLOW_READ_ALL'


EXPORTING
iv_vbeln = lo_order->ms_vbak_com-vbeln
iv_borobj = 'VBRK'
IMPORTING
et_documents = lt_document
EXCEPTIONS
internal_error = 1
OTHERS = 2.

IF sy-subrc EQ 0.

SORT lt_document BY docnum DESCENDING.

READ TABLE lt_document INTO ls_document INDEX 1.

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.

READ TABLE lt_bkpf INTO ls_bkpf INDEX 1.

SELECT * INTO TABLE @lt_bseg


FROM bseg
WHERE bukrs EQ @ls_bkpf-bukrs
AND belnr EQ @ls_bkpf-belnr
AND gjahr EQ @ls_bkpf-gjahr.

IF sy-subrc EQ 0.

CLEAR: lt_accountgl, lt_currencyamount, lt_return.

LOOP AT lt_bseg INTO ls_bseg WHERE bwtar NE space.


EXIT.
ENDLOOP.

* --> BAPI Acc.Document: Fill Hedaer structure


SELECT SINGLE vhcle INTO ls_docheader-header_txt FROM vlcvehicle WHERE
vguid = lo_order->ms_vbak_com-vguid.
ls_docheader-obj_type = c_bkpf.
ls_docheader-obj_key = c_1000.
CONCATENATE sy-sysid sy-mandt INTO ls_docheader-obj_sys.
ls_docheader-bus_act = c_rfbu.
ls_docheader-username = sy-uname.
ls_docheader-ref_doc_no = ls_document-docnum.
ls_docheader-comp_code = ls_bkpf-bukrs.
ls_docheader-doc_date = ls_bkpf-bldat.
ls_docheader-pstng_date = ls_bkpf-budat.
ls_docheader-trans_date = ls_bkpf-budat.
ls_docheader-fisc_year = ls_bkpf-gjahr.
ls_docheader-doc_type = c_sb.
ls_docheader-acc_principle = c_pcga.

* -------------------------------------------------
* --> 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.

* ltem 1, Currency Amount


CLEAR ls_currencyamount.
ls_currencyamount-itemno_acc = ls_bseg-buzei.
ls_currencyamount-currency = ls_bkpf-waers.

IF ls_bseg-bschl = '40'.
ls_currencyamount-amt_doccur = ( ls_bseg-dmbtr * -1 ).
ELSE.
ls_currencyamount-amt_doccur = abs( ls_bseg-dmbtr ).
ENDIF.

APPEND ls_currencyamount TO lt_currencyamount.

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.

READ TABLE lt_return INTO ls_return WITH KEY type = c_e.


IF sy-subrc NE 0.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'


EXPORTING
wait = abap_true.

READ TABLE lo_order->mt_splhdr_com INTO ls_splhdr INDEX 1.


lv_tabix = sy-tabix.
CALL METHOD lo_order->ext_slctd_set( iv_index = lv_tabix iv_tabname =
'MT_SPLHDR_COM' ).
CALL METHOD lo_order->int_slctd_set( iv_index = lv_tabix iv_tabname =
'MT_SPLHDR_COM' ).
CALL METHOD lo_order->int_slctd_set( iv_index = lv_tabix iv_tabname =
'MT_SPLIT_COM' ).

READ TABLE lo_order->mt_splhdr_com INTO ls_splhdr WITH KEY slctd =


abap_true.
IF sy-subrc NE 0.
READ TABLE lo_order->mt_splhdr_com INTO ls_splhdr WITH KEY slctd_ext =
abap_true .
ENDIF.

IF ls_splhdr IS NOT INITIAL.

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 ).

LOOP AT lo_order->mt_split_com INTO ls_split_com WHERE slctd = 'X'.


ls_split_com-zbelnr = ls_splhdr-docnum.
APPEND ls_split_com TO lo_order->mt_split_detail.
ENDLOOP.

IF lo_order->mt_split_detail[] IS NOT INITIAL.


lo_order->split_change( ).
ENDIF.

ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.

ENDMETHOD.

You might also like