使用" BAPI_ACC_DOCUMENT_POST"问题进行批量清算。

2020-08-13 14:39发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

有人告诉我开发一个程序,该程序可以进行批处理清除以替换T-Code F-32/F-44(因为用户太懒了,感叹不休)。 我设法在alv上获得正确的结果,但是现在我在尝试进行清理时遇到问题。

看来我不能使用'POSTING_INTERFACE_CLEARING',因为此BAPI(实际上是BDC)无法进行部分清除。

因此,我决定使用'BAPI_ACC_DOCUMENT_POST'来完成这项工作。 我在参数" extension2"后附加了" rebzg"," rebzj"," rebzz",将给定的数据放入参数" dovumentheader"," accountgl"和" currencyamount"中。 现在这是问题所在:当我调试并调用函数'BAPI_ACC_DOCUMENT_CHECK'时,它返回一条错误消息"没有在项目000000001中指定帐户"(消息类F5,编号670)。

如果有人可以告诉我我的代码有什么问题,我将非常感谢。 还有另一种方法吗? 还是我将数据输入了错误的参数? 还是可以通过我不知道的一些神奇交易来完成? (很抱歉,如果我的描述不正确,两年内没有使用英语:-/

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,

有人告诉我开发一个程序,该程序可以进行批处理清除以替换T-Code F-32/F-44(因为用户太懒了,感叹不休)。 我设法在alv上获得正确的结果,但是现在我在尝试进行清理时遇到问题。

看来我不能使用'POSTING_INTERFACE_CLEARING',因为此BAPI(实际上是BDC)无法进行部分清除。

因此,我决定使用'BAPI_ACC_DOCUMENT_POST'来完成这项工作。 我在参数" extension2"后附加了" rebzg"," rebzj"," rebzz",将给定的数据放入参数" dovumentheader"," accountgl"和" currencyamount"中。 现在这是问题所在:当我调试并调用函数'BAPI_ACC_DOCUMENT_CHECK'时,它返回一条错误消息"没有在项目000000001中指定帐户"(消息类F5,编号670)。

如果有人可以告诉我我的代码有什么问题,我将非常感谢。 还有另一种方法吗? 还是我将数据输入了错误的参数? 还是可以通过我不知道的一些神奇交易来完成? (很抱歉,如果我的描述不正确,两年内没有使用英语:-/

付费偷看设置
发送
1条回答
zZ12138
1楼 · 2020-08-13 15:21.采纳回答

BDC做了...愚蠢的家伙,但它确实有效,关键是'MODE = E',哈哈。

使用'SAPMF05A''0122'执行bdc_dynpro。
   使用'BDC_OKCODE'执行PERC bdc_field
                                 '= SL'。
   使用'RF05A-XPOS1(4)'执行bdc_field
                                 'X'。
   使用'BKPF-BLDAT'执行bdc_field
                                 p_dat。
   使用'BKPF-BLART'执行bdc_field
                                 'AB'。
   使用'BKPF-BUKRS'执行bdc_field
                                 ls_data_tmp-bukrs。
   使用'BKPF-BUDAT'执行bdc_field
                                 p_dat。
   使用'BKPF-WAERS'执行bdc_field
                                 ls_data_tmp-waers。
   使用'BKPF-XBLNR'执行bdc_field
                                 ls_data_tmp-xblnr。
   使用'FS006-DOCID'执行bdc_field
                                 '*'。


   使用'SAPMF05A''0710'执行bdc_dynpro。
   使用'BDC_OKCODE'执行PERC bdc_field
                                 '= PA'。
   使用'RF05A-AGBUK'执行bdc_field
                                 ls_data_tmp-bukrs。
   使用'RF05A-AGKON'执行bdc_field
                                 ls_data_tmp-kunnr。
   使用'RF05A-AGKOA'执行bdc_field
                                 'D'。
   使用'RF05A-AGUMS'执行bdc_field
                                 ls_data_tmp-umskz。"" ABCDEFGIJKLMNOPQRSTUVWXZ"。
   使用'RF05A-XNOPS'执行bdc_field
                                 'X'。


   清除lv_posnr。


   使用'SAPDF05X''3100'执行bdc_dynpro。
   使用'BDC_OKCODE'执行PERC bdc_field
                                 '= PART'。
   使用'RF05A-ABPOS'执行bdc_field
                                 '1'。


   使用'SAPDF05X''3100'执行bdc_dynpro。
   使用'BDC_OKCODE'执行PERC bdc_field
                                 '= OSD'。
   使用'BDC_CURSOR'执行bdc_field
                                 'RFOPS_DK-BELNR(01)'。
   清除lv_posnr。
   循环到pt_data_tmp2 INTO DATA(ls_data_tmp2)。
     数据:lv_field(20)TYPE c。


     lv_posnr = lv_posnr + 1。
     使用'SAPDF05X''3100'执行bdc_dynpro。
     使用'BDC_OKCODE'执行PERC bdc_field
                                   '= PI'。"'= Z +'。
     lv_field ='DF05B-PSBET('&& lv_posnr &&')'。
     使用'BDC_CURSOR'执行PERC bdc_field
                                   lv_field。
     使用'RF05A-ABPOS'执行bdc_field
                                   '1'。
   结局。


   lv_posnr = lv_posnr + 1。


   使用'SAPDF05X''3100'执行bdc_dynpro。
   使用'BDC_OKCODE'执行PERC bdc_field
                                  '= BU'。
   lv_field ='DF05B-PSBET('&& lv_posnr &&')'。
   使用'BDC_CURSOR'执行bdc_field
                                 lv_field ..
   使用'RF05A-ABPOS'执行bdc_field
                                 '1'。


   清除lv_posnr。


   循环到pt_data_tmp2 INTO ls_data_tmp2。
     lv_posnr = lv_posnr + 1。
     清除:lv_fnam,lv_amt。
     使用'SAPDF05X''3100'执行bdc_dynpro。
     将'DF05B-PSZAH('lv_posnr')'连接到lv_fnam中。
     凝聚lv_fnam。
     如果ls_data_tmp2-shkzg ='S'。
       将ls_data_tmp2-pszah写到lv_amt货币ls_data_tmp2-waers。
       用空格替换lv_amt中所有','的出现。
       凝聚lv_amt。
     ELSEIF ls_data_tmp2-shkzg ='H'。
       将ls_data_tmp2-pszah写到lv_amt货币ls_data_tmp2-waers。
       用空格替换lv_amt中所有','的出现。
       凝聚lv_amt。
     万一。
     使用'BDC_OKCODE'执行PERC bdc_field
                                    '/00'。
     使用lv_fnam执行bdc_field
                                   lv_amt。
     使用'RF05A-ABPOS'执行bdc_field
                                   '1'。
   结局。


   使用'BDC_OKCODE'执行PERC bdc_field
                               '/00'。


   使用'SAPDF05X''3100'执行bdc_dynpro。
   使用'BDC_OKCODE'执行PERC bdc_field
                                 '= BU'。
   使用'RF05A-ABPOS'执行bdc_field
                                 '1'。


   使用gt_bdcdata进行交易'FB05'
                           模式'E'gv_mode
                           更新'
                           将信息发送到gt_msgtab。
 

一周热门 更多>