使用标准BAPI提交时的生产订单确认错误

2020-09-07 12:30发布

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

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


abap-code.txt

嗨,

我在提交生产订单确认标准FM'BAPI_PRODORDCONF_CREATE_TT'时遇到问题

我的ABAP代码在这里:

mtimetickets-orderid = inp_order_conf。 mtimetickets-operation = inp_opr_conf。 mtimetickets-plant ='2000'。 mtimetickets-yield ='1.000'。 mtimetickets-exec_fin_time = sy-uzeit。 mtimetickets-postg_date = sy数据。 mtimetickets-exec_fin_date = sy数据。 mtimetickets-fin_conf ='X'。 如果inp_assm_rep1_flag ='X'。 mtimetickets-sequence ='000001'。 ELSEIF inp_assm_rep2_flag ='X'。 mtimetickets-sequence ='000002'。 万一。 追加mtimetickets。 proposal-quantity ="。 proposal-activity =" X"。 proposal-date_and_time ='X'。 proposal-personnel ="。 proposal-goodsmovement =" X"。 呼叫功能'BAPI_PRODORDCONF_GET_TT_PROP'导出proposal =提议IMPORTING return = mreturn TABLES时间票= mtimetickets货物移动= mgoodsmovements link_conf_goodsmov = mlink_conf_goodsmov detail_return = mdetail_return。 。 如果mdetail_return-type <>'E'。 清除:mreturn,mdetail_return []。 如果不是mgoodsmovements是初始的。 在mgoodsmovements分配字段符号()处循环播放。 从mara WHERE中选择单个matkl到@DATA(mat_grp)matnr = @ -材料。 如果mat_grp ='SFG01'。 order_len = strlen(inp_order_conf)。 order_len = order_len-1. order_no = inp_order_conf + 0(order_len)。 万一。 从marc WHERE matnr = @ -材料中选择单项到@DATA(sup_id)。 IF sup_id ='102'。 CONCATENATE order_no'W'进入order_no。 ELSEIF sup_id ='104'。 CONCATENATE order_no'T'INTO order_no。 ELSEIF sup_id ='105'。 CONCATENATE order_no'A'INTO order_no。 ELSEIF sup_id ='101'。 order_no = inp_order_conf。 其他。 order_no ="。 万一。 如果mat_grp ='SFG01'或mat_grp ='FG01'。 mgoodsmovements-batch = order_no。 mgoodsmovements-quantity ='1.000'。 mgoodsmovements-no_more_gr ='X'。 修改mgoodsmovements运输批次数量no_more_gr。 万一。 结局。 万一。 调用功能'BAPI_PRODORDCONF_CREATE_TT'导出post_wrong_entries ='0'testrun =''重要返回= mreturn表时间票= mtimetickets货物移动= mgoodsmovements link_conf_goodsmov = mlink_conf_goodsmov * TR'*'_ MPORT_re_turn'* 导入* return = return。提交工作。等待最多5秒。ENDIF。

(28.7 kB)

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

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


abap-code.txt

嗨,

我在提交生产订单确认标准FM'BAPI_PRODORDCONF_CREATE_TT'时遇到问题

我的ABAP代码在这里:

mtimetickets-orderid = inp_order_conf。 mtimetickets-operation = inp_opr_conf。 mtimetickets-plant ='2000'。 mtimetickets-yield ='1.000'。 mtimetickets-exec_fin_time = sy-uzeit。 mtimetickets-postg_date = sy数据。 mtimetickets-exec_fin_date = sy数据。 mtimetickets-fin_conf ='X'。 如果inp_assm_rep1_flag ='X'。 mtimetickets-sequence ='000001'。 ELSEIF inp_assm_rep2_flag ='X'。 mtimetickets-sequence ='000002'。 万一。 追加mtimetickets。 proposal-quantity ="。 proposal-activity =" X"。 proposal-date_and_time ='X'。 proposal-personnel ="。 proposal-goodsmovement =" X"。 呼叫功能'BAPI_PRODORDCONF_GET_TT_PROP'导出proposal =提议IMPORTING return = mreturn TABLES时间票= mtimetickets货物移动= mgoodsmovements link_conf_goodsmov = mlink_conf_goodsmov detail_return = mdetail_return。 。 如果mdetail_return-type <>'E'。 清除:mreturn,mdetail_return []。 如果不是mgoodsmovements是初始的。 在mgoodsmovements分配字段符号()处循环播放。 从mara WHERE中选择单个matkl到@DATA(mat_grp)matnr = @ -材料。 如果mat_grp ='SFG01'。 order_len = strlen(inp_order_conf)。 order_len = order_len-1. order_no = inp_order_conf + 0(order_len)。 万一。 从marc WHERE matnr = @ -材料中选择单项到@DATA(sup_id)。 IF sup_id ='102'。 CONCATENATE order_no'W'进入order_no。 ELSEIF sup_id ='104'。 CONCATENATE order_no'T'INTO order_no。 ELSEIF sup_id ='105'。 CONCATENATE order_no'A'INTO order_no。 ELSEIF sup_id ='101'。 order_no = inp_order_conf。 其他。 order_no ="。 万一。 如果mat_grp ='SFG01'或mat_grp ='FG01'。 mgoodsmovements-batch = order_no。 mgoodsmovements-quantity ='1.000'。 mgoodsmovements-no_more_gr ='X'。 修改mgoodsmovements运输批次数量no_more_gr。 万一。 结局。 万一。 调用功能'BAPI_PRODORDCONF_CREATE_TT'导出post_wrong_entries ='0'testrun =''重要返回= mreturn表时间票= mtimetickets货物移动= mgoodsmovements link_conf_goodsmov = mlink_conf_goodsmov * TR'*'_ MPORT_re_turn'* 导入* return = return。提交工作。等待最多5秒。ENDIF。

(28.7 kB)
6条回答
哎,真难
1楼-- · 2020-09-07 13:14

好吧,看来您正在物料移动表中传递双行。

问题,恕我直言,是您在循环中使用了字段符号

 LOOP AT mgoodsmovements ASSIGNING 字段-SYMBOL()。

,然后使用MODIFY语句

 mgoodsmovements-batch = order_no。
           mgoodsmovements-quantity ='1.000'。
           mgoodsmovements-no_more_gr ='X'。
           修改mgoodsmovements运输批处理数量no_more_gr。

我敢肯定,您正在用这种方式复制一些行。

在循环中插入一个断点,然后在调用BAPI之前将一个断点: 我敢打赌,在循环之前,您在MGOODSMOVEMENTS表中有X行,而在调用BAPI时,则有另一行。

如果您使用字段符号,则在更改它们的值时 ,更改将反映在表上。

小c菟菟
2楼-- · 2020-09-07 13:12

嗨,穆斯塔法,

如果您使用" CODE"选项使其更具可读性,那肯定会更好。 会帮助我们了解您的错误。

BR

Simone

jovirus
3楼-- · 2020-09-07 13:01

您的外部程序在确认之前是否两次调用了BAPI? 任何机会? 还是在同一RFC连接中两次? 我想知道是否存在导致问题的缓存数据。

callcenter油条
4楼-- · 2020-09-07 13:11
 mtimetickets-orderid = inp_order_conf。
   mtimetickets-operation = inp_opr_conf。
   mtimetickets-plant ='2000'。
   mtimetickets-yield ='1.000'。
   mtimetickets-exec_fin_time = sy-uzeit。
   mtimetickets-postg_date = sy数据。
   mtimetickets-exec_fin_date = sy数据。
   mtimetickets-fin_conf ='X'。




   如果inp_assm_rep1_flag ='X'。
     mtimetickets-sequence ='000001'。
   ELSEIF inp_assm_rep2_flag ='X'。
     mtimetickets-sequence ='000002'。
   万一。


   追加mtimetickets。


 proposal-quantity ="。
   proposal-activity =" X"。
   proposal-date_and_time ='X'。
   proposal-personnel ="。
   proposal-goodsmovement =" X"。


 通话功能'BAPI_PRODORDCONF_GET_TT_PROP'
     出口
       提议=提议
     输入
       返回= mreturn
     桌子
       时间票= mtimetickets
       货物移动=货物移动
       link_conf_goodsmov = mlink_conf_goodsmov
       detail_return = mdetail_return。
   。


   如果mdetail_return-type <>'E'。


     清除:mreturn,mdetail_return []。


     如果不是mgoodsmovements是初始的。
       在mgoodsmovements分配字段符号()处循环播放。


         选择单个matkl INTO @DATA(mat_grp)
           从马拉
           在哪里matnr = @ -材料。


         如果mat_grp ='SFG01'。
           order_len = strlen(inp_order_conf)。
           order_len = order_len-1。
           order_no = inp_order_conf + 0(order_len)。
         万一。


         选择单次输入@DATA(sup_id)
           从马克
           在哪里matnr = @ -材料。


         IF sup_id ='102'。
           CONCATENATE order_no'W'进入order_no。
         ELSEIF sup_id ='104'。
           CONCATENATE order_no'T'INTO order_no。
         ELSEIF sup_id ='105'。
           CONCATENATE order_no'A'INTO order_no。
         ELSEIF sup_id ='101'。
           order_no = inp_order_conf。
         其他。
           order_no ="。
         万一。


         如果mat_grp ='SFG01'或mat_grp ='FG01'。
           mgoodsmovements-batch = order_no。
           mgoodsmovements-quantity ='1.000'。
           mgoodsmovements-no_more_gr ='X'。
           修改mgoodsmovements运输批次数量no_more_gr。
         万一。


       结局。
     万一。


     通话功能'BAPI_PRODORDCONF_CREATE_TT'
       出口
         post_wrong_entries ='0'
         testrun =''
       输入
         返回= mreturn
       桌子
         时间票= mtimetickets
         货物移动=货物移动
         link_conf_goodsmov = mlink_conf_goodsmov" mlink_conf_goodsmov
         detail_return = mdetail_return
       。


 *通话功能'BAPI_TRANSACTION_COMMIT'
 *出口
 *等待='X'
 *重要
 * return =回报。


     提交工作。
     等待最多5秒。


   万一。
 
代楠1984
5楼-- · 2020-09-07 13:16

您在第一个调用中正确检查了RETURN,但没有为第二个调用检查并返回COMMIT WORK,即使有错误?

大简至美
6楼-- · 2020-09-07 12:58
# p#
我已经从.NET调用了外部调试器,并在此时调试了整个程序

  提交工作。
     等待最多5秒。


 它会创建转储。

一周热门 更多>