更新计划订单 - 两次提交修改,只保存一次

时间:2016-12-07 21:07:47

标签: updates abap

我需要更新一个对象的两个信息:数量(PLAF-gsmng)并通过模块函数' MD_SET_ACTION_PLAF'刷新计划订单。 我成功地找到了分别更新每个数据的方法。但是当我执行这两个解决方案时,第二个修改不会保存在数据库中

你知道如何改变数量和数量吗?在PLAF(计划订单)表上设置操作?

您是否知道其他模块功能只更新数量?

可能缺少参数?

如果第二个对象被锁定(sm12为空,没有sy-subrc =已锁定)......并且未提交修改。

我试图:

  • 更改算法的顺序(刷新后,更改PLAF)
  • 添加,删除,移动COMMIT WORK&提交工作和等待
  • 添加DEQUEUE_ALL或DEQUEUE_EMPLAFE

这是当前的代码:

1)阅读数据

lv_plannedorder = '00000000001'

"Read PLAF data
SELECT SINGLE * FROM PLAF INTO ls_plaf WHERE plnum = lv_plannedorder.

2)更新数量数据

" Standard configuration for FM MD_PLANNED_ORDER_CHANGE
CLEAR ls_610.
ls_610-nodia = 'X'.     " No dialog display
ls_610-bapco = space.   " BAPI type. Do not use mode 2 -> Action PLAF-MDACC will be autmatically set up to APCH by the FM
ls_610-bapix = 'X'.     " Run BAPI
ls_610-unlox = 'X'.     " Update PLAF

" Customize values
MOVE p_gsmng TO ls_plaf-gsmng. " Change quantity value

MOVE sy-datlo TO ls_plaf-mdacd. " Change by/datetime, because ls_610-bapco <> 2.
MOVE sy-uzeit TO ls_plaf-mdact.

CALL FUNCTION 'MD_PLANNED_ORDER_CHANGE'
  EXPORTING
    ecm61o        = ls_610
    eplaf         = ls_plaf
  EXCEPTIONS
    locked        = 1
    locking_error = 2
    OTHERS        = 3.
" Already committed on the module function
" sy-subrc = 0

如果我进入PLAF表,我可以看到数量被编辑。它的工作:)

3)刷新BOM&amp;更改操作(MDACC)和其他字段

CLEAR ls_imdcd.
ls_imdcd-pafxl = 'X'.

CALL FUNCTION 'MD_SET_ACTION_PLAF'
  EXPORTING
    iplnum            = lv_plannedorder
    iaccto            = 'BOME'
    iaenkz            = 'X'
    imdcd             = ls_imdcd
  EXCEPTIONS
    illegal_interface = 1
    system_failure    = 2
    error_message     = 3
    OTHERS            = 4.

IF sy-subrc = 0.
  COMMIT WORK.
ENDIF.

如果我去桌面,没有修改(只能找到第2部分的修改版本。)

有什么想法吗? 也许是因为ls_610-bapco = space?

1 个答案:

答案 0 :(得分:1)

应该可以使用MD_SET_ACTION_PLAF更新计划订单数量,至少SAP帮助tells us如此。你为什么不这样用呢?

它要求更改数量可能如下所示:

DATA: lt_acct LIKE TABLE OF MDACCTO,
      ls_acct LIKE LINE OF lt_acct.

ls_acct-accto = 'BOME'.
APPEND lt_acct.
ls_acct-accto = 'CPOD'.
APPEND lt_acct.

is_mdcd-GSMNG = 'value'             "updated quantity value

CALL FUNCTION 'MD_SET_ACTION_PLAF'
EXPORTING
  iplnum            = iv_plnum
  iaenkz            = 'X'
  IVBKZ             = 'X'
  imdcd             = is_mdcd       "filled with your BOME-related data + new quantity
TABLES
 TMDACCTO           = lt_accto
EXCEPTIONS
  illegal_interface = 1
  system_failure    = 2    
  error_message     = 3.

因此不再需要单独调用MD_PLANNED_ORDER_CHANGE而不再需要更新问题。

我使用了可能这个词,因为我没有在Web上找到这个FM调用的任何例子(而且SAP文档非常模糊),所以我建议这个解决方案只是 / strong>,未经验证。

P.S。 T46AS表中列出了可能的操作,可以在imdcd事务中检查MDAC字段对订单的可能影响。对于单个订单,它有点像这个FM的GUI。