使用BAPI_SALESORDER_CHANGE添加新项目和条件时出现问题

2020-08-30 06:00发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 我正在尝试使用bap...

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

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


嗨,

我正在尝试使用bapi BAPI_SALESORDER_CHANGE通过添加有条件的新商品来更新销售订单。

我尝试了不同的方式,不同的值,但是我已经遇到了相同的问题:错误消息VH_BAPI 050-价格确定错误

这是我的代码的一部分(lt_poste和lt_condition是内部表,其中包含我的订单的新项目和新条件)

   清除:ls_headerx,ls_bapisdls。
   ls_headerx-updateflag ='U'。  "更新代码
   ls_bapisdls-cond_handl ='X'。 维持状态的标志

 * ==循环浏览我的新物品
   循环到lt_postes INTO ls_postes。

 * ==项目数据
     清除:ls_items,ls_itemsx。
     ls_items-itm_number = ls_postes-posnr
     ls_itemsx-itm_number = ls_postes-posnr。

     ls_itemsx-updateflag ='I'。 创建代码

     ls_items-item_categ = ls_postes-pstyv。
     ls_itemsx-item_categ ='X'。
     ls_items-material = ls_postes-matnr。
     ls_itemsx-material ='X'。
     ls_items-short_text = ls_postes-arktx。
     ls_itemsx-short_text ='X'。
     ls_items-plant = ls_postes-werks。
     ls_itemsx-plant ='X'。
     ls_items-mat_pr_grp = ls_postes-kondm。
     ls_itemsx-mat_pr_grp ='X'。
     ls_items-tax_class1 = ls_postes-taxm1。
     ls_itemsx-tax_class1 ='X'。
     ls_items-ex_rate_fi = ls_postes-kurrf。
     ls_itemsx-ex_rate_fi ='X'。
     ls_items-exch_rate_fi_v = ls_postes-kurrf。
     ls_itemsx-exch_rate_fi_v ='X'。
     ls_items-po_itm_no = ls_postes-posex。
     ls_itemsx-po_itm_no ='X'。
     ls_items-reason_rej = ls_postes-abgru。
     ls_itemsx-reason_rej ='X'。

     从vbkd INTO中选择一个bstkd bstdk(ls_items-purch_no_c,ls_items-purch_date)
     在哪里vbeln = me-> s_vbak-vbeln
     AND posnr = ls_postes-posnr。
     如果sy-subrc = 0。
       ls_itemsx-purch_date ='X'。
       ls_itemsx-purch_no_c ='X'。
     万一。

     清除ls_items-wbs_elem。
     通话功能'CONVERSION_EXIT_ABPSP_OUTPUT'
       出口
         输入= ls_postes-ps_psp_pnr
       输入
         输出= ls_items-wbs_elem。

     ls_itemsx-wbs_elem ='X'。

     将ls_items附加到lt_items。
     附加ls_itemsx到lt_itemsx。

 * ==条件数据
     在lt_condition INTO ls_condition中循环。
       清除:ls_bapicond,ls_bapicondx。

       ls_bapicond-itm_number = ls_postes-posnr。
       ls_bapicondx-itm_number = ls_postes-posnr。
       ls_bapicond-cond_type = ls_condition-kschl。
       ls_bapicondx-cond_type = ls_condition-kschl。
       ls_bapicond-cond_value = ls_condition-kbetr/10。
       ls_bapicondx-cond_value = c_x。

       清除lv_krech。
       从t685a选择单个krech进入lv_krech
         其中kappl ='V'
         AND kschl = ls_condition-kschl。

       ls_bapicond-calctypcon = lv_krech。

       如果lv_krech ='C'。  "定价条件
         ls_bapicond-currency ='EUR'。
         ls_bapicondx-currency = c_x。
       万一。

       ls_bapicond-cond_updat ='I'
       ls_bapicondx-updateflag ='I'

       将ls_bapicond附加到lt_bapicond。
       附加ls_bapicondx到lt_bapicondx。

     结局。
 结局

 * == BAPI执行
   通话功能'BAPI_SALESORDER_CHANGE'
     出口
       salesdocument =我-> s_vbak-vbeln
       order_header_inx = ls_headerx
       逻辑开关= ls_bapisdls
     桌子
       返回= lt_bapiret2
       order_item_in = lt_items
       order_item_inx = lt_itemsx
       condition_in = lt_bapicond
       条件_inx = lt_bapicondx。

   清除ls_bapiret2。
   将lt_bapiret2表读入具有密钥类型='E'的ls_bapiret2中。
   如果sy-subrc <> 0。
     调用功能" BAPI_TRANSACTION_COMMIT"。
   万一。
 

所以我收到一条错误消息,指示无法确定价格。

即:000010:处理终止; 定价错误(KOMP-FXMSG = 801)

我尝试更新其他值,但没有任何改变。

我只有2个条件要添加到我的商品中:PR00和ZMAR(%类型)

所以这是条件表中已填充的其他字段,但是,我也有相同的消息:

APPLICATIO = V

CALCTYPCON = A(ZMAR)或B(PR00)

STAT_CON = X(仅适用于ZMAR)

CONDORIGIN = C

GROUPCOND = X(仅适用于ZMAR)

CONDCNTRL = C

CONDCLASS = A(ZMAR)或C(PR00)

CONDCHAMAN = X

有没有我可以忘记的领域? 你知道我可能在哪里错了吗?

非常感谢您的回答。

6条回答
浮生未央
2020-08-30 06:24

我找到了解决方法。

我尝试应用OSS注释1306890(BAPI:缺少条件),但没有任何变化。

我的问题是因为有时我的物品没有税收分类(TAXM1)。 但是在我的代码中,我正在等待该字段。

解决方案是,当Tax Clasfication字段为初始字段(tax_class1 ='')时,我不必在BAPISDITMX中"标记"同一字段。

一周热门 更多>