Вы находитесь на странице: 1из 5

FUNCTION zfm_clear_documents_kunnr.

*"----------------------------------------------------------------------

*"*"Local Interface:

*" IMPORTING

*" VALUE(I_KUNNR) TYPE LIFNR

*" VALUE(I_BELNR) TYPE BELNR_D

*" VALUE(I_KEYDATE) TYPE BAPI3007-KEY_DATE DEFAULT '20141231'

*" VALUE(I_FISYR) TYPE CHAR4

*" VALUE(I_BUKRS) TYPE BUKRS

*" EXPORTING

*" VALUE(E_MESSAGE) TYPE CHAR20

*" VALUE(E_RECORDCOUNT) TYPE INT4

*" TABLES

*" ET_ZDT_CUST_DET STRUCTURE ZDT_VEND_DET OPTIONAL

*" IT_LINEITEMS STRUCTURE BAPI3007_2 OPTIONAL

*"----------------------------------------------------------------------

TYPES: BEGIN OF ty_belnr,

sign(1),

option(2),

low TYPE augbl,

high TYPE augbl,

END OF ty_belnr.

DATA: t_lineitems TYPE TABLE OF bapi3007_2,

w_lineitems TYPE bapi3007_2,

t_belnr TYPE TABLE OF ty_belnr,

w_belnr TYPE ty_belnr,

t_bsad TYPE TABLE OF bsad,

w_bsid TYPE bsid,

w_bsad TYPE bsad,

t_zdt_cust_det TYPE TABLE OF zdt_cust_det,


w_zdt_cust_det TYPE zdt_cust_det,

w_return TYPE bapireturn,

l_kunnr TYPE kunnr VALUE '474',

t_ausz1 TYPE TABLE OF ausz1,

w_ausz1 TYPE ausz1,

t_ausz2 TYPE TABLE OF ausz2,

w_ausz2 TYPE ausz2,

l_belnr TYPE belnr_d,

l_count TYPE int4,

l_fisyr TYPE char4,

l_sno TYPE int4,

l_postingdate TYPE budat,

t_bsik TYPE TABLE OF bsik.

CLEAR: w_ausz1,w_ausz2,w_lineitems,l_count,l_kunnr,

l_postingdate,w_lineitems,l_belnr,l_fisyr,

e_recordcount.

REFRESH: t_lineitems[],t_ausz1,t_ausz2.

l_kunnr = i_kunnr.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

input = l_kunnr

IMPORTING

output = l_kunnr.

l_belnr = i_belnr.

l_fisyr = i_fisyr.

l_postingdate = i_keydate.

CALL FUNCTION 'BAPI_AP_ACC_GETOPENITEMS'

EXPORTING

companycode = i_bukrs
customer = l_kunnr

keydate = l_postingdate

IMPORTING

return = w_return

TABLES

lineitems = t_lineitems.

SORT t_lineitems BY doc_no ASCENDING.

DELETE t_lineitems WHERE clr_doc_no <> space.

* delete ADJACENT DUPLICATES FROM t_lineitems COMPARING doc_no.

SELECT SINGLE * FROM bsid INTO w_bsid WHERE bukrs = i_bukrs AND

kunnr = l_kunnr AND

belnr = l_belnr.

IF sy-subrc = 0.

SORT t_lineitems[] BY pstng_date ASCENDING item_num ASCENDING.

DESCRIBE TABLE t_lineitems LINES l_count.

LOOP AT t_lineitems INTO w_lineitems.

e_recordcount = e_recordcount + 1.

w_ausz1-belnr = w_lineitems-doc_no.

w_ausz1-bukrs = w_lineitems-comp_code.

w_ausz1-gjahr = w_lineitems-fisc_year.

w_ausz1-buzei = w_lineitems-item_num.

APPEND w_ausz1 TO t_ausz1.

w_ausz2-bukrs = w_bsid-bukrs.

w_ausz2-aktio = 'A'.

w_ausz2-augbl = w_bsid-belnr.

w_ausz2-augdt = l_postingdate.

w_ausz2-auggj = w_bsid-gjahr.

APPEND w_ausz2 TO t_ausz2.

CALL FUNCTION 'CLEAR_DOCUMENTS' " IN UPDATE TASK

TABLES
t_ausz1 = t_ausz1

t_ausz2 = t_ausz2.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

w_belnr-sign = 'I'.

w_belnr-option = 'EQ'.

w_belnr-low = w_lineitems-doc_no.

APPEND w_belnr TO t_belnr.

CLEAR: w_lineitems,w_belnr.

REFRESH: t_ausz2[],t_ausz1[].

ENDLOOP.

SELECT * FROM bsad INTO TABLE t_bsad WHERE bukrs = i_bukrs AND

kunnr = l_kunnr AND

belnr IN t_belnr.

IF t_bsad[] IS NOT INITIAL.

CLEAR: w_lineitems ,w_bsad,w_zdt_cust_det,l_sno.

LOOP AT t_lineitems INTO w_lineitems.

READ TABLE t_bsad INTO w_bsad WITH KEY bukrs = w_lineitems-comp_code

kunnr = w_lineitems-customer

belnr = w_lineitems-doc_no.

CALL FUNCTION 'GUID_CREATE'

IMPORTING

ev_guid_16 = w_zdt_cust_det-z_sno.

IF sy-subrc = 0.

w_zdt_cust_det-z_bukrs = w_bsad-bukrs.

w_zdt_cust_det-z_kunnr = w_bsad-kunnr.

w_zdt_cust_det-z_belnr = w_bsad-belnr.

w_zdt_cust_det-z_status = 'X'.

w_zdt_cust_det-z_clearingdoc = l_belnr.

w_zdt_cust_det-z_desc = 'Cleared'.
APPEND w_zdt_cust_det TO t_zdt_cust_det.

ELSE.

w_zdt_cust_det-z_bukrs = w_lineitems-comp_code.

w_zdt_cust_det-z_kunnr = w_lineitems-customer.

w_zdt_cust_det-z_belnr = w_lineitems-doc_no.

w_zdt_cust_det-z_status = ' '.

w_zdt_cust_det-z_clearingdoc = ' '.

w_zdt_cust_det-z_desc = 'Not cleared'.

APPEND w_zdt_cust_det TO t_zdt_cust_det.

ENDIF.

CLEAR: w_lineitems ,w_bsad,w_zdt_cust_det.

ENDLOOP.

*-----Update Log Table------------*

INSERT zdt_cust_det FROM TABLE t_zdt_cust_det.

IF sy-subrc = 0.

e_message = 'update sucess'.

ELSE.

e_message = 'update fail'.

ENDIF.

et_zdt_cust_det[] = t_zdt_cust_det[].

REFRESH:t_zdt_cust_det[].

ENDIF.

ENDIF.

ENDFUNCTION.

Вам также может понравиться