MM po项目行添加确认行数据

2020-07-16  本文已影响0人  abapCiCi

使用如下bapi 可以实现确认行的插入修改更新

1.BAPI_PO_CHANGE ” 确认行的控制 01 确认 02 粗收货 。。。
2.ME_CONFIRMATION_UPDATE “ 更新确认行数据
3.EINKBELEG_WRITE_DOCUMENT ” 更新数据历史记录的记载

在确认中主要注意以下几个点

1.一定要使用 BAPI_PO_CHANGE有两个因素
1.1 会出现界面不显示而 数据库中存在数据
1.2 无法定位是哪个确认控制类型 会对收货造成影响
1.3 当用户正在更改项目时容易出现数据问题,数据不一

2.对于ME_CONFIRMATION_UPDATE中的参数解读
2.1 yekes 都是指old 数据, 常常在删除时使用 ,删除时要带上xekes 必选 可以设置空的内表
2.2 更新和修改时不必带入 yekes 直接在xekes 中更改你想要更改的数据,最好先获取数据库中的数据确保原始数据准确,其次 I U D 分别是插入 更新 删除。

3.EINKBELEG_WRITE_DOCUMENT 更改历史记录
3.1 获取函数的规律是 对象值+_WRITE_DOCUMENT ,对象值可以在cdpos 中查看,
3.2 具体使用时的代码如下

CALL FUNCTION 'EINKBELEG_WRITE_DOCUMENT'
                        EXPORTING
                          objectid                    = lv_objectid
                          tcode                         = sy-tcode
                          utime                         = sy-uzeit
                          udate                         = sy-datum
                          username                 = sy-uname
*                         PLANNED_CHANGE_NUMBER         = ' '
                          object_change_indicator       = 'U'
                          planned_or_real_changes    = 'R'
                          upd_ekes                                   = 'U'
                        TABLES
                          icdtxt_einkbeleg              = lt_cdtxt
                          xekes                                   = lt_xekes
                          yekes                                   = lt_yekes
                                .
                      IF sy-subrc = 0.
                         COMMIT WORK .
                       ELSE.
                         ROLLBACK WORK.
                      ENDIF.

lv_objectid 就是你要更改的po ,所有的更改都是以po 为 依据的。

我当前的业务需要添加确认行 自定义类型,在spro中路径 物料管理--采购---确认---定义外部确认类别 设置你自己的类型。


确认行数据.png
IF lt_xekes IS NOT INITIAL.

             CALL FUNCTION 'BAPI_PO_CHANGE'
                     EXPORTING
                       purchaseorder = ls_input-ebeln
                     TABLES
                       return        = gt_return
                       poitem        = gt_poitem
                       poitemx       = gt_poitemx.

           READ TABLE gt_return INTO gs_return WITH KEY type = 'E'."判断是否可以更改>
           IF sy-subrc = 0.
                        ls_log-message = '@0A@PO更新失败,无法更新  更新异常,po 被占用. '.
                        gv_error_mess  = 'X'.
           ELSE.
             SELECT *
                FROM ekes
                FOR ALL ENTRIES IN @lt_xekes
                WHERE ebeln     = @lt_xekes-ebeln
                AND   ebelp     = @lt_xekes-ebelp
                AND   ebtyp     = @lv_type
                INTO TABLE   @lt_yekes.

              LOOP AT lt_yekes ASSIGNING FIELD-SYMBOL(<fs_yekes>).
                <fs_yekes>-kz = 'D'.
              ENDLOOP.

             CALL FUNCTION 'ME_CONFIRMATION_UPDATE'
             EXPORTING
                  i_ebeln = ls_input-ebeln
             TABLES
*                  yekes   = lt_yekes
                  xekes   = lt_xekes  "new  新增和修改
                  .
               IF sy-subrc EQ 0.
                 ls_log-message = '@08@更新成功'.
                 COMMIT WORK .
                 lv_objectid = ls_input-ebeln.
                      CALL FUNCTION 'EINKBELEG_WRITE_DOCUMENT'
                        EXPORTING
                          objectid                      = lv_objectid
                          tcode                         = sy-tcode
                          utime                         = sy-uzeit
                          udate                         = sy-datum
                          username                      = sy-uname
*                         PLANNED_CHANGE_NUMBER         = ' '
                          object_change_indicator       = 'U'
                          planned_or_real_changes       = 'R'
                          upd_ekes                      = 'U'
                        TABLES
                          icdtxt_einkbeleg              = lt_cdtxt
                          xekes                         = lt_xekes
                          yekes                         = lt_yekes
                                .
                      IF sy-subrc = 0.
                         COMMIT WORK .
                       ELSE.
                         ROLLBACK WORK.
                      ENDIF.

              ELSE.
                ls_log-message = '@0A@更新失败,插入失败'.
                gv_error_mess  = 'X'.
                ROLLBACK WORK .
              ENDIF.
              ENDIF.
上一篇下一篇

猜你喜欢

热点阅读