‎2020 Aug 03 10:36 AM
Hi guys,
I was told to develop a program that could do batch clearing to replace T-Code F-32/F-44 (cause the users are too lazy to clear one by one, sigh). I managed to get the right outcome in the alv but now I'm facing a problem while trying to do the clearing.
It appears that I cannot use 'POSTING_INTERFACE_CLEARING' because this BAPI(actually a BDC) cannot do the partial clearing.
So I decided to use 'BAPI_ACC_DOCUMENT_POST' to do the job. I appended 'rebzg' 'rebzj' 'rebzz' to parameter 'extension2', put the given data in the parameters 'dovumentheader' and 'accountgl' and 'currencyamount'. Now here is the problem: when I debug and call function 'BAPI_ACC_DOCUMENT_CHECK', it returns an error that says ''No account is specified in item 000000001" (Message class F5, No. 670).
If anyone could tell me what's wrong with my code, I'd really appreciate it. Is there another way to do it? Or maybe I put data in the wrong parameter? Or maybe it can be done by some magical transaction that I'm not aware? (sorry if my description was inaccurate, haven't used English in two years 😕
‎2020 Aug 11 11:10 AM
Did it by BDC...Dumb as hell but it works, the key line is 'MODE = E', lol.
PERFORM bdc_dynpro USING 'SAPMF05A' '0122'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SL'.
PERFORM bdc_field USING 'RF05A-XPOS1(4)'
'X'.
PERFORM bdc_field USING 'BKPF-BLDAT'
p_dat.
PERFORM bdc_field USING 'BKPF-BLART'
'AB'.
PERFORM bdc_field USING 'BKPF-BUKRS'
ls_data_tmp-bukrs.
PERFORM bdc_field USING 'BKPF-BUDAT'
p_dat.
PERFORM bdc_field USING 'BKPF-WAERS'
ls_data_tmp-waers.
PERFORM bdc_field USING 'BKPF-XBLNR'
ls_data_tmp-xblnr.
PERFORM bdc_field USING 'FS006-DOCID'
'*'.
PERFORM bdc_dynpro USING 'SAPMF05A' '0710'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PA'.
PERFORM bdc_field USING 'RF05A-AGBUK'
ls_data_tmp-bukrs.
PERFORM bdc_field USING 'RF05A-AGKON'
ls_data_tmp-kunnr.
PERFORM bdc_field USING 'RF05A-AGKOA'
'D'.
PERFORM bdc_field USING 'RF05A-AGUMS'
ls_data_tmp-umskz."'ABCDEFGIJKLMNOPQRSTUVWXZ'.
PERFORM bdc_field USING 'RF05A-XNOPS'
'X'.
CLEAR lv_posnr.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PART'.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=OSD'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RFOPS_DK-BELNR(01)'.
CLEAR lv_posnr.
LOOP AT pt_data_tmp2 INTO DATA(ls_data_tmp2).
DATA: lv_field(20) TYPE c.
lv_posnr = lv_posnr + 1.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PI'." '=Z+'.
lv_field = 'DF05B-PSBET(' && lv_posnr && ')'.
PERFORM bdc_field USING 'BDC_CURSOR'
lv_field.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
ENDLOOP.
lv_posnr = lv_posnr + 1.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
lv_field = 'DF05B-PSBET(' && lv_posnr && ')'.
PERFORM bdc_field USING 'BDC_CURSOR'
lv_field..
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
CLEAR lv_posnr.
LOOP AT pt_data_tmp2 INTO ls_data_tmp2.
lv_posnr = lv_posnr + 1.
CLEAR : lv_fnam, lv_amt.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
CONCATENATE 'DF05B-PSZAH(' lv_posnr ')' INTO lv_fnam.
CONDENSE lv_fnam.
IF ls_data_tmp2-shkzg = 'S'.
WRITE ls_data_tmp2-pszah TO lv_amt CURRENCY ls_data_tmp2-waers.
REPLACE ALL OCCURRENCES OF ',' IN lv_amt WITH space.
CONDENSE lv_amt.
ELSEIF ls_data_tmp2-shkzg = 'H'.
WRITE ls_data_tmp2-pszah TO lv_amt CURRENCY ls_data_tmp2-waers.
REPLACE ALL OCCURRENCES OF ',' IN lv_amt WITH space.
CONDENSE lv_amt.
ENDIF.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING lv_fnam
lv_amt.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
ENDLOOP.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
CALL TRANSACTION 'FB05' USING gt_bdcdata
MODE 'E'gv_mode
UPDATE 'S'
MESSAGES INTO gt_msgtab.
‎2020 Aug 11 11:10 AM
Did it by BDC...Dumb as hell but it works, the key line is 'MODE = E', lol.
PERFORM bdc_dynpro USING 'SAPMF05A' '0122'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SL'.
PERFORM bdc_field USING 'RF05A-XPOS1(4)'
'X'.
PERFORM bdc_field USING 'BKPF-BLDAT'
p_dat.
PERFORM bdc_field USING 'BKPF-BLART'
'AB'.
PERFORM bdc_field USING 'BKPF-BUKRS'
ls_data_tmp-bukrs.
PERFORM bdc_field USING 'BKPF-BUDAT'
p_dat.
PERFORM bdc_field USING 'BKPF-WAERS'
ls_data_tmp-waers.
PERFORM bdc_field USING 'BKPF-XBLNR'
ls_data_tmp-xblnr.
PERFORM bdc_field USING 'FS006-DOCID'
'*'.
PERFORM bdc_dynpro USING 'SAPMF05A' '0710'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PA'.
PERFORM bdc_field USING 'RF05A-AGBUK'
ls_data_tmp-bukrs.
PERFORM bdc_field USING 'RF05A-AGKON'
ls_data_tmp-kunnr.
PERFORM bdc_field USING 'RF05A-AGKOA'
'D'.
PERFORM bdc_field USING 'RF05A-AGUMS'
ls_data_tmp-umskz."'ABCDEFGIJKLMNOPQRSTUVWXZ'.
PERFORM bdc_field USING 'RF05A-XNOPS'
'X'.
CLEAR lv_posnr.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PART'.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=OSD'.
PERFORM bdc_field USING 'BDC_CURSOR'
'RFOPS_DK-BELNR(01)'.
CLEAR lv_posnr.
LOOP AT pt_data_tmp2 INTO DATA(ls_data_tmp2).
DATA: lv_field(20) TYPE c.
lv_posnr = lv_posnr + 1.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=PI'." '=Z+'.
lv_field = 'DF05B-PSBET(' && lv_posnr && ')'.
PERFORM bdc_field USING 'BDC_CURSOR'
lv_field.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
ENDLOOP.
lv_posnr = lv_posnr + 1.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
lv_field = 'DF05B-PSBET(' && lv_posnr && ')'.
PERFORM bdc_field USING 'BDC_CURSOR'
lv_field..
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
CLEAR lv_posnr.
LOOP AT pt_data_tmp2 INTO ls_data_tmp2.
lv_posnr = lv_posnr + 1.
CLEAR : lv_fnam, lv_amt.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
CONCATENATE 'DF05B-PSZAH(' lv_posnr ')' INTO lv_fnam.
CONDENSE lv_fnam.
IF ls_data_tmp2-shkzg = 'S'.
WRITE ls_data_tmp2-pszah TO lv_amt CURRENCY ls_data_tmp2-waers.
REPLACE ALL OCCURRENCES OF ',' IN lv_amt WITH space.
CONDENSE lv_amt.
ELSEIF ls_data_tmp2-shkzg = 'H'.
WRITE ls_data_tmp2-pszah TO lv_amt CURRENCY ls_data_tmp2-waers.
REPLACE ALL OCCURRENCES OF ',' IN lv_amt WITH space.
CONDENSE lv_amt.
ENDIF.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING lv_fnam
lv_amt.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
ENDLOOP.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_dynpro USING 'SAPDF05X' '3100'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=BU'.
PERFORM bdc_field USING 'RF05A-ABPOS'
'1'.
CALL TRANSACTION 'FB05' USING gt_bdcdata
MODE 'E'gv_mode
UPDATE 'S'
MESSAGES INTO gt_msgtab.
‎2021 Sep 28 1:05 AM
Hi Mason,
I am tasked to do something similar but POSTING_INTERFACE_CLEARING is off the table for reasons I can't get into here as is a BDC session. Were you able to any clearing with BAPI_ACC_DOCUMENT_POST? This starting to become a serious pain in my butt
Thanks