2020-08-19 12:01发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我目前面临内部表数据全部消失的问题。 但是,我的透明表数据仍然存在
我不小心添加了这个无关的代码,导致它删除了内部表中的所有数据。
如果SY-SUBRC EQ 0。 将GS_ZITEMS移动到GS_ZITEMSMOD。 将GS_ZITEMSMOD附加到GT_ZITEMSMOD。 万一。 结局。 从表GT_ZITEMSMOD修改ZEKPO03。
这是程序的调试结果,没有透明表记录传递到内部表中
您好,问题已解决,谢谢
能否请您使用[CODE]按钮而不是屏幕截图发布您的代码。
你好,
首先我的问题。 如果您意外添加了不相关的代码,为什么不删除它?
除此之外,您提供的源代码部分有点短。 至少LOOP的开头会很有趣,
亲切的问候
Matthias
什么是"我的透明桌子"? ZEKPO03?
MODIFY不会删除任何数据,它只会更新或插入。
调试器屏幕快照与ZEKPO03之间有什么关系?
抱歉,但是 您没有发布足够的信息。
抱歉,从您的角度来看这可能不是可行的代码。
这是子例程中代码的顺序。
内部循环:
1。 获取所有包含标题的100条记录的行头的数据
2。 读取具有row_id索引的表
3。 使用键ebeln获取单行标题数据
4。 使用键ebeln获取单行订单项数据
5。 更新采购订单
外循环:
1。 分配另一个变量lt_zheader_upd_n以加载新的标题数据
2。 分配另一个可用的lt_zitems_upd_n以加载新的订单项数据
在执行SAVE_DATABASE_UPDATE子例程之前,我使用了与之相同的方法进行了SAVE_DATABASE_DELETE(删除行)和SAVE_DATABASE_RELOAD(将行从标准表重新加载到Z表)。
MODULE USER_COMMAND_0100输入。 调用方法CL_GUI_CFW => DISPATCH。 案例SY-UCOMM。 当"更新"。 执行SAVE_DATABASE_UPDATE。 结束。
FORM SAVE_DATABASE_UPDATE。 数据:ZEKKO03的LT_ZHEADER_UPD TYPE TABLE, ZEKPO03的LT_ZITEMS_UPD TYPE TABLE, LS_ZHEADER_UPD TYPE ZEKKO03, LS_ZITEMS_UPD之类的LT_ZITEMS_UPD。 数据:ZEKKO03的LT_ZHEADER_UPD_N TYPE TABLE, ZEKPO03的LT_ZITEMS_UPD_N类型表, LS_ZHEADER_UPD_N TYPE ZEKKO03, LS_ZITEMS_UPD_N与LINE_ZITEMS_UPD_N类似。 数据:LT_INDEX_REL类型LVC_T_ROW, LT_ROWID_REL TYPE LVC_T_ROID, LS_ROWID_REL与LINE_ROWID_REL类似。 呼叫方法G_GRID_LEFT-> GET_SELECTED_ROWS 输入 ET_INDEX_ROWS = LT_INDEX_REL ET_ROW_NO = LT_ROWID_REL。 将LT_ROWID_REL循环到LS_ROWID_REL。 呼叫方法ZCL_03_DATA_MODEL => SELECT_PURCHASE_ORDERS 出口 * IV_KEY = IV_MAX_ROWS = IV_MAX_ROWS 输入 IT_ZHEADER = LT_ZHEADER_UPD * IT_ZITEMS = * ES_BAPIRET2 = 。 读取表LT_ZHEADER_UPD索引LS_ROWID_REL-ROW_ID到LS_ZHEADER_UPD。 呼叫方法ZCL_03_DATA_MODEL => SELECT_PURCHASE_ORDERS 出口 IV_KEY = LS_ZHEADER_UPD-EBELN * IV_MAX_ROWS = 0 输入 IT_ZHEADER = LT_ZHEADER_UPD * IT_ZITEMS = * ES_BAPIRET2 = 。 呼叫方法ZCL_03_DATA_MODEL => SELECT_PURCHASE_ORDERS 出口 IV_KEY = LS_ZHEADER_UPD-EBELN * IV_MAX_ROWS = 0 输入 * IT_ZHEADER = IT_ZITEMS = LT_ZITEMS_UPD * ES_BAPIRET2 = 。 呼叫方法ZCL_03_DATA_MODEL => UPDATE_PURCHASE_ORDERS 出口 IT_ZHEADER = LT_ZHEADER_UPD IT_ZITEMS = LT_ZITEMS_UPD *重要 * ES_BAPIRET2 = 。 结局。 呼叫方法ZCL_03_DATA_MODEL => SELECT_PURCHASE_ORDERS 出口 * IV_KEY = IV_MAX_ROWS = IV_MAX_ROWS 输入 IT_ZHEADER = lt_zheader_upd_n * IT_ZITEMS = * ES_BAPIRET2 = 。 呼叫方法ZCL_03_DATA_MODEL => SELECT_PURCHASE_ORDERS 出口 IV_KEY = ls_zheader_upd-ebeln * IV_MAX_ROWS = 0 输入 * IT_ZHEADER = IT_ZITEMS = lt_zitems_upd_n * ES_BAPIRET2 = 。 呼叫方法ZCL_03_DATA_MODEL => UPDATE_PURCHASE_ORDERS 出口 IT_ZHEADER = lt_zheader_upd_n IT_ZITEMS = lt_zitems_upd_n *重要 * ES_BAPIRET2 = 。 gt_zheader = lt_zheader_upd_n。 """ ALV输出表 gt_zitems = lt_zitems_upd_n。 """" ALV输出表 <<<在此处意外添加的代码>>> g_grid_left-> refresh_table_display()。 g_grid_right-> refresh_table_display()。 清除lt_zitems_upd_n。 清除lt_zheader_upd_n。 清除lt_zitems_upd。 ENDFORM。
我不小心在下面的代码中添加了导致问题的SAVE_DATABASE_UPDATE子例程,一旦执行,它就以某种方式删除了itab的所有记录
选择PO的方法(对于使用ekko和ekpo字段的ztables所有字段im)
方法SELECT_PURCHASE_ORDERS。 数据:LS_ZHEADER类型ZEKKO03。 如果IV_KEY是INITIAL。 SELECT MANDT EBELN BEDAT BSART LIFNR WAERS KNUMV 插入表IT_ZHEADER 从ZEKKO03 在哪里EBELN EQ IV_KEY。 如果SY-SUBRC = 0。 IF IV_MAX_ROWS GT 0。 SELECT MANDT EBELN EBELP BUKRS WERKS MATNR MENGE MEINS NETPR 从ZEKPO03到表IT_ZITEMS到IV_MAX_ROWS行 在哪里EBELN EQ IV_KEY。 ES_BAPIRET2-TYPE ='S'。 ES_BAPIRET2-MESSAGE ='记录找到输入行'。 ELSEIF IV_MAX_ROWS均衡器0。 SELECT MANDT EBELN EBELP BUKRS WERKS MATNR MENGE MEINS NETPR 从ZEKPO03到表IT_ZITEMS 在哪里EBELN EQ IV_KEY。 ES_BAPIRET2-TYPE ='S'。 ES_BAPIRET2-MESSAGE ='找到所有记录'。 否则。 ES_BAPIRET2-TYPE ='E'。 ES_BAPIRET2-MESSAGE ='未找到记录'。 万一。 其他。 "此语句属于sy-subrc(以上所有内容均已满足) SELECT MANDT EBELN BEDAT BSART LIFNR WAERS KNUMV 从ZEKKO03到表IT_ZHEADER 最多IV_MAX_ROWS行。 在IT_ZHEADER处进入LS_ZHEADER。 ""将订单项连接到标题 SELECT MANDT EBELN EBELP BUKRS WERKS MATNR MENGE MEINS NETPR 从ZEKPO03附录表IT_ZITEMS EBELN EQ LS_ZHEADER-EBELN在哪里。 结局。 万一。 其他。 SELECT MANDT EBELN EBELP BUKRS WERKS MATNR MENGE MEINS NETPR为" ALV"程序添加了""" 进入表IT_ZITEMS 从ZEKPO03 在哪里EBELN EQ IV_KEY。 为ALV程序添加了SELECT MANDT EBELN BEDAT BSART LIFNR WAERS KNUMV"""" 插入表IT_ZHEADER 从ZEKKO03 在哪里EBELN EQ IV_KEY。 ENDIF。
更新PO的方法
方法UPDATE_PURCHASE_ORDERS。 数据:LS_ZHEADER TYPE ZEKKO03, LS_ZITEMS TYPE ZEKPO03, LV_COUNT_HEADER I型, LV_COUNT_ITEMS类型I。 如果IT_ZHEADER不是INITIAL。 在IT_ZHEADER处进入LS_ZHEADER。 从ZEKKO03选择COUNT(*)进入LV_COUNT_HEADER EBELN = LS_ZHEADER-EBELN。 结局。 如果LV_COUNT_HEADER GT 0。 从表IT_ZHEADER更新ZEKKO03。 如果SY-SUBRC = 0。 ES_BAPIRET2-TYPE ='S'。 ES_BAPIRET2-MESSAGE ='已成功更新表ZEKKO03'。 其他。 ES_BAPIRET2-TYPE ='E'。 ES_BAPIRET2-MESSAGE ='更新表ZEKKO03时出错。 万一。 万一。 万一。 如果IT_ZITEMS不是INITIAL,并且IT_ZHEADER不是INITIAL。 在IT_ZITEMS处进入LS_ZITEMS。 从ZEKPO03选择COUNT(*)放入LV_COUNT_ITEMS EBELN EQ LS_ZITEMS-EBELN在哪里。 结局。 如果LV_COUNT_ITEMS GT 0。 从表IT_ZITEMS更新ZEKPO03。 如果SY-SUBRC = 0。 ES_BAPIRET2-TYPE ='S'。 CONCATENATE ES_BAPIRET2-MESSAGE'已成功为表ZEKPO03更新'INTO ES_BAPIRET2-MESSAGE。 其他。 ES_BAPIRET2-TYPE ='E'。 CONCATENATE ES_BAPIRET2-MESSAGE'请在ZEPKO03之前更新ZEKKO03的详细信息',进入ES_BAPIRET2-MESSAGE。 万一。 万一。 万一。 ENDMETHOD。
AS 谢谢,请 关闭您的问题(与"已回答的标记"不同)。 谢谢。
我确实想知道您是如何意外地添加代码的。
最多设置5个标签!
您好,问题已解决,谢谢
能否请您使用[CODE]按钮而不是屏幕截图发布您的代码。
你好,
首先我的问题。 如果您意外添加了不相关的代码,为什么不删除它?
除此之外,您提供的源代码部分有点短。 至少LOOP的开头会很有趣,
亲切的问候
Matthias
什么是"我的透明桌子"? ZEKPO03?
MODIFY不会删除任何数据,它只会更新或插入。
调试器屏幕快照与ZEKPO03之间有什么关系?
抱歉,但是 您没有发布足够的信息。
抱歉,从您的角度来看这可能不是可行的代码。
这是子例程中代码的顺序。
内部循环:
1。 获取所有包含标题的100条记录的行头的数据
2。 读取具有row_id索引的表
3。 使用键ebeln获取单行标题数据
4。 使用键ebeln获取单行订单项数据
5。 更新采购订单
外循环:
1。 分配另一个变量lt_zheader_upd_n以加载新的标题数据
2。 分配另一个可用的lt_zitems_upd_n以加载新的订单项数据
在执行SAVE_DATABASE_UPDATE子例程之前,我使用了与之相同的方法进行了SAVE_DATABASE_DELETE(删除行)和SAVE_DATABASE_RELOAD(将行从标准表重新加载到Z表)。
我不小心在下面的代码中添加了导致问题的SAVE_DATABASE_UPDATE子例程,一旦执行,它就以某种方式删除了itab的所有记录
选择PO的方法(对于使用ekko和ekpo字段的ztables所有字段im)
更新PO的方法
AS 谢谢,请 关闭您的问题(与"已回答的标记"不同)。 谢谢。
我确实想知道您是如何意外地添加代码的。
一周热门 更多>