内部表中没有记录

2020-08-19 12:01发布

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

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


我目前面临内部表数据全部消失的问题。 但是,我的透明表数据仍然存在

我不小心添加了这个无关的代码,导致它删除了内部表中的所有数据。

如果SY-SUBRC EQ 0。
       将GS_ZITEMS移动到GS_ZITEMSMOD。
       将GS_ZITEMSMOD附加到GT_ZITEMSMOD。
     万一。
   结局。
   从表GT_ZITEMSMOD修改ZEKPO03。

这是程序的调试结果,没有透明表记录传递到内部表中

(101.6 kB)

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

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


我目前面临内部表数据全部消失的问题。 但是,我的透明表数据仍然存在

我不小心添加了这个无关的代码,导致它删除了内部表中的所有数据。

如果SY-SUBRC EQ 0。
       将GS_ZITEMS移动到GS_ZITEMSMOD。
       将GS_ZITEMSMOD附加到GT_ZITEMSMOD。
     万一。
   结局。
   从表GT_ZITEMSMOD修改ZEKPO03。

这是程序的调试结果,没有透明表记录传递到内部表中

(101.6 kB)
付费偷看设置
发送
7条回答
亦是此间程序员
1楼 · 2020-08-19 12:26.采纳回答

您好,问题已解决,谢谢

四川大学会员
2楼-- · 2020-08-19 12:31

能否请您使用[CODE]按钮而不是屏幕截图发布您的代码。

追夢秋陽
3楼-- · 2020-08-19 12:45

你好,

首先我的问题。 如果您意外添加了不相关的代码,为什么不删除它?

除此之外,您提供的源代码部分有点短。 至少LOOP的开头会很有趣,

亲切的问候

Matthias

吹牛啤
4楼-- · 2020-08-19 12:25

什么是"我的透明桌子"? ZEKPO03?

MODIFY不会删除任何数据,它只会更新或插入。

调试器屏幕快照与ZEKPO03之间有什么关系?

抱歉,但是 您没有发布足够的信息。

哎,真难
5楼-- · 2020-08-19 12:36

抱歉,从您的角度来看这可能不是可行的代码。

这是子例程中代码的顺序。

内部循环:

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的所有记录

如果SY-SUBRC EQ 0。
       将GS_ZITEMS移动到GS_ZITEMSMOD。
       将GS_ZITEMSMOD附加到GT_ZITEMSMOD。
     万一。
   结局。
   从表GT_ZITEMSMOD修改ZEKPO03。

选择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。
天桥码农
6楼-- · 2020-08-19 12:23

AS 谢谢,请 关闭您的问题(与"已回答的标记"不同)。 谢谢。

三十六小时_GS
7楼-- · 2020-08-19 12:33

我确实想知道您是如何意外地添加代码的。

一周热门 更多>