Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Batch clearing using 'BAPI_ACC_DOCUMENT_POST' issue..

kopisbear
Explorer
0 Likes
3,146

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 😕

1 ACCEPTED SOLUTION
Read only

kopisbear
Explorer
0 Likes
2,228

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.

2 REPLIES 2
Read only

kopisbear
Explorer
0 Likes
2,229

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.

Read only

petrosy
Explorer
0 Likes
2,228

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