EWM中的编程过帐更改

2020-08-16 00:41发布

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

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


大家好,

我有以下要求:创建一个可以在EWM中执行过帐更改的功能模块(由后台程序调用)。

现在,我找到了以下功能模块:/SCWM/STOCK_CHANGE,但是我不清楚如何用数据填充它。 这里有人知道什么功能模块或方法可用于填写导入参数吗?

当您从UI进行发布更改时,所有这些都发生在类/SCWM/CL_UI_POST中,但是我看不到如何在没有UI元素的情况下使用该类的某些部分。

此致

Rob

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

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


大家好,

我有以下要求:创建一个可以在EWM中执行过帐更改的功能模块(由后台程序调用)。

现在,我找到了以下功能模块:/SCWM/STOCK_CHANGE,但是我不清楚如何用数据填充它。 这里有人知道什么功能模块或方法可用于填写导入参数吗?

当您从UI进行发布更改时,所有这些都发生在类/SCWM/CL_UI_POST中,但是我看不到如何在没有UI元素的情况下使用该类的某些部分。

此致

Rob

付费偷看设置
发送
6条回答
N-Moskvin
1楼 · 2020-08-16 01:11.采纳回答

我回到这个问题是因为此刻它变得越来越紧迫:我已经确定了几个可能的候选功能模块可以为我完成此任务,但是,遗憾的是,它们都没有被记录(或 就此发布)。

有/scwm/gm_create,/scwm/gm_post,/scwm/stock_change

我对任何示例代码都很满意,提示了如何解决这个问题,...

xfwsx85
2楼-- · 2020-08-16 00:55

始终感谢Rob

lukcy2020
3楼-- · 2020-08-16 01:05

嗨,大家好,

我设法解决了这个问题。 我使用类/SCWM/CL_UI_POST来做到这一点。

步骤是:

  1. 实例化/SCWM/CL_UI_POST(对象LR_UI_POST)
  2. 初始化/SCMB/CL_EES_DEFAULTS => init以填充默认值(仓库等)
  3. 使用从第2步收到的esdus_manager填充默认值
  4. 调用METHOD lr_UI_post->('QUERY')填充内部表。
  5. 将内部表更改为您的规格/需求(例如:过程类型,目标箱等)
  6. 调用方法lr_UI_post-> UPDATE以更新详细信息
  7. 调用METHOD lr_UI_post->('EXECUTE')
  8. 调用方法lr_UI_post->('SAVE')
  9. 下班并等待


希望这会有所帮助,请更改回答的主题。


此致

桑托什


N-Moskvin
4楼-- · 2020-08-16 01:10

嗨,桑托什,

如果可以的话,请您分享示例代码。 我们正面临着同样的问题。

谢谢

Srinivasa

追夢秋陽
5楼-- · 2020-08-16 00:47

一切都变得简单。 我喜欢实现的

CALL FUNCTION'/SCWM/STOCK_CHANGE'

导出

is_header = ls_header

it_item = lt_item

导入

et_bapiret = lt_bapiret

ev_severity = lv_severity。

CALL FUNCTION'/SCWM/GM_POST'。

提交工作并等待。

clasier
6楼-- · 2020-08-16 01:04

我也遇到了同样的问题,但是专门在商品收到我使用的功能模块/SCWM/STOCK_CHANGE和/SCWM/之后更新库存类型。 GM_POST,我可以根据需要提供用于修改的方法。

如果以下代码无法满足您的要求,我建议您打开事务SAAB并激活断点/SCWM/GM,然后使用事务/n/SCWM/POST进行发布并找到功能模块/SCWM/STOCK_CHANGE,并查看有关示例的导入结构和表中传递的Standart代码,我相信,如果您更改为仅使用标准格式,就像我在我的案例中所做的那样,那么它将起作用。

祝你好运

亚历克斯。

 METHOD update_stock_type。
/scwm/aqua的数据lt_aqua类型标准表。
 数据it_item类型/scwm/tt_spitem。
 数据is_item类型/scwm/s_spitem。
 数据lt_bapiret类型TYPE bapiret2_t。
 数据lv_severity TYPE bapi_mtype。
 DATA is_quan TYPE/scwm/s_quan。
/scwm/ordim_c的数据lt_ordim_c类型标准表。
 数据lv_cat类型/lime/stock_category。


 "对于我的情况,有必要存在一个我们要更新的HU的内部表,并且为了仅显示示例,请考虑它是lt_hus

 "获取有关水上HU的信息
 选择 *
 从/scwm/aqua
 进入表lt_aqua
 对于lt_hus中的所有条目
 在哪里lgnum EQ lv_lgnum
 和huident EQ lt_hus-huident。

 如果sy-subrc <> 0。
 "如果找不到数据,请执行您自己的逻辑

 万一。

 "获取更新的物品信息
 选择 *
 从/scdl/db_proci_i
 插入表@DATA(lt_proci_update)
 docid EQ @ gs_screen_items-proci-docid。

 如果sy-subrc <> 0。
 清除lt_proci_update。

 "如果找不到数据,请执行您自己的逻辑

 万一。

 "通过发布获取为HU创建的任务
 选择 *
 从/scwm/ordim_c
 进入表lt_ordim_c
 对于lt_ewmt021中的所有条目
 在哪里lgnum EQ gs_screen_header-lgnum
 和dguid_hu EQ lt_ewmt021-guid_hu。

 如果sy-subrc <> 0。
 清除:lt_ewmt021,lt_proci_update,lt_ordim_c。

 "如果找不到数据,请执行您自己的逻辑

 万一。

 循环至lt_hus ASSIGNING FIELD-SYMBOL()。

 使用键huident =  -huident ASSIGNING FIELD-SYMBOL()读取表lt_aqua。

 如果未分配。
 继续。
 万一。

 读取表lt_proci_update WITH KEY docid =  -docid
 itemid =  -itemid分配字段符号()。

 如果未分配。
 继续。
 万一。

 使用键dguid_hu =  -guid_hu ASSIGNING FIELD-SYMBOL()读取表lt_ordim_c。

 如果未分配。
 继续。
 万一。

 "在这种情况下,更新将是将库存类型从冻结改为未冻结
 "要更新的库存类型
 将 -cat移动到lv_cat。
 将lv_cat中所有'B'事件替换为'F'。

 "获取QUAN信息
 单选*
 从/scwm/quan
 INTO @DATA(ls_quan)
 guid_stock EQ @  -guid_stock在哪里
 和guid_parent EQ @  -guid_parent。

 "使用当前的行迭代器设置ID
 is_item-id = sy-tabix。
 is_item-id_group = sy-tabix + 1。
 is_item-direction ='T'。
 is_item-squant_set = abap_true。
 is_item-procty = -/scwm/procty。
 is_item-guid_hu =  -guid_hu。
 is_item-huident =  -huident。

 " HU节省的库存数量
 is_quan-unit =  -uom。
 is_quan-quan = -数量。
 APPEND is_quan TO is_item-t_quan。

 "有关Wharehouse中HU的信息
 is_item-loc-lgnum = gs_screen_header-lgnum。
 is_item-loc-lgtyp =  -lgtyp。
 is_item-loc-lgpla =  -lgpla。

 "传递HU的当前信息
 is_item-source_s-idx_stock = ls_quan-idx_stock。
 is_item-source_s-guid_stock =  -guid_stock。
 is_item-source_s-matid =  -matid。
 is_item-source_s-cat =  -cat。
 is_item-source_s-owner = -所有者。
 is_item-source_s-owner_role =  -owner_role。
 is_item-source_s-titled =  -titled。
 is_item-source_s-entitled_role =  -entitled_role。
 is_item-source_s-qdoccat =  -doccat。
 is_item-source_s-qdocid =  -docid。
 is_item-source_s-qitmid =  -itemid。

 "通过信息传递我们想要对库存进行的修改
 is_item-dest_s-matid =  -matid。
 is_item-dest_s-cat = lv_cat。  "我们将要修改的内容
 is_item-dest_s-matid =  -matid。
 is_item-dest_s-qdoccat =  -doccat。
 is_item-dest_s-qdocid =  -docid。
 is_item-dest_s-qitmid =  -itemid。
 is_item-dest_s-owner = -所有者。
 is_item-dest_s-owner_role =  -owner_role。
 is_item-dest_s-titled =  -titled。
 is_item-dest_s-entitled_role =  -entitled_role。

 APPEND is_item至it_item。
 清除is_item。

 结局。

 "调用库存变更功能模块以继续更新HU
 通话功能'/SCWM/STOCK_CHANGE'
 出口
 is_header = VALUE/scwm/s_gmheader(lgnum = gs_screen_header-lgnum
 created_by =  -created_by
 created_at =  -created_at
 代码='/SCWM/POST')
 it_item = it_item
 输入
 et_bapiret = lt_bapiret
 ev_severity = lv_severity。

 在lt_bapiret分配字段符号()处循环播放。

 IF 类型的EQ'E'。
 通话功能" YOUR_MESSAGE_FUNCTION"
 出口
 iv_id =  -id
 iv_number = -编号
 iv_typ = -类型
 iv_var1 = -消息_v1
 iv_var2 = -消息_v2
 iv_var3 = -消息_v3
 iv_var4 = -消息_v4。
 清除:lt_proci_update,lt_ordim_c。
 "实施罗蒂娜·德埃罗
 万一。

 结局。

 "将尝试发布更改,为此功能模块将生成一个新任务
 尝试。
 数据lv_tanum TYPE/scwm/tanum。
 通话功能'/SCWM/GM_POST'
 输入
 ev_tanum = lv_tanum
 et_bapiret = lt_bapiret
 ev_severity = lv_severity。
 捕获/scwm/cx_core。

 循环lt_bapiret分配。

 IF 类型的EQ'E'。
 通话功能" YOUR_MESSAGE_FUNCTION"
 出口
 iv_id =  -id
 iv_number = -编号
 iv_typ = -类型
 iv_var1 = -消息_v1
 iv_var2 = -消息_v2
 iv_var3 = -消息_v3
 iv_var4 = -消息_v4。
 清除:lt_proci_update,lt_ordim_c。
 "在出现错误时实施自己的逻辑
 万一。

 结局。

 ENDTRY。

 提交工作并等待。

 ENDMETHOD。

一周热门 更多>