删除表控件中的行问题

2020-08-18 15:26发布

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

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


我正在使用创建的2个屏幕进行对话框编程。 第一个屏幕包含带有删除按钮的zebeln字段,第二个屏幕包含zekko_03的字段和zekpo_03的表控件。 我遇到的两个问题:

首先,对标头执行select语句时,提示错误,提示数据类型不兼容。

其次,表控件删除(删除按钮功能代码'DEL')存在问题,我在网上查找了一些不适用于我的案例的方法,包括以下逻辑。

我使用的表格如下

tbl-po-header.png

 *&---------------------------------------------  ------------------------ *
 *&包括MZDLGPROG_03_REPORTTOP-模块池SAPMZDLGPROG_03_REPORT
 *&------------------------------------------------  --------------------- *
 程序SAPMZDLGPROG_03_REPORT。

 数据:OK_CODE TYPE SY-UCOMM,
        ZEKKO_03的GT_ZEKKO类型表,
        GWA_ZEKKO TYPE ZEKKO_03,
        ZEKPO_03的GT_ZEKPO类型表,
        GWA_ZEKPO TYPE ZEKPO_03,
        GV_EBELN TYPE ZEBELN_EL,
        MARK TYPE CE_MARK,
        gv_flag类型char1。


 控件:使用屏幕9002的TC_ZEKPO类型表。

 数据:f1 TYPE char1。
 *&---------------------------------------------  ------------------------ *
 *&包括MZDLGPROG_03_REPORTO01
 *&------------------------------------------------  --------------------- *

 *&------------------------------------------------  --------------------- *
 *&模块STATUS_9001输出
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 模组STATUS_9001输出。
  设置PF-STATUS'ZSTATUS'。
  设置标题栏" ZTITLE"。
 ENDMODULE。

 *&------------------------------------------------  --------------------- *
 *&模块STATUS_9002 OUTPUT
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 MODULE STATUS_9002 OUTPUT。
  设置PF-STATUS'ZSTATUS'。
  设置标题栏" ZTITLE1"。
 ENDMODULE。
 *&------------------------------------------------  --------------------- *
 *&模块FETCH_DATA OUTPUT
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 模块FETCH_DATA输出。


 如果f1 <> 1。

 从zekko_03到表gt_zekko中选择SELECT ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc。 此选择语句的<<<<问题

 选择单个ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc从zekko_03
   gwa_zekko的对应字段
   其中ebeln = gwa_zekko-ebeln。
 读取表gt_zekko INTO gwa_zekko INDEX sy-tabix。
 SELECT EBELP MATNR怪异LGORT Menge Meins
   来自zekpo_03的表格gt_zekpo的对应字段
    其中ebeln = gwa_zekko-ebeln。


 如果f1 = 1。

   如果sy-tabix不是INITIAL。
       删除gt_zekko索引sy-tabix。
       删除gt_zekpo索引sy-tabix。
   万一。
 万一。
 万一。


 ENDMODULE。
 *&---------------------------------------------  ------------------------ *
 *&包括MZDLGPROG_03_REPORTI01
 *&------------------------------------------------  --------------------- *
 *&------------------------------------------------  --------------------- *
 *&模块USER_COMMAND_9002 INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组USER_COMMAND_9002输入。
   情况为OK_CODE。
     当"返回"时。
       设置屏幕0。
       离开屏幕0。

   结束。

 ENDMODULE。
 *&------------------------------------------------  --------------------- *
 *&模块MODIFY_IT_ZEKPO INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组MODIFY_GT_ZEKPO输入。
   从gwa_zekpo修改gt_zekpo
   INDEX TC_ZEKPO-CURRENT_LINE。

 ENDMODULE。
 *&------------------------------------------------  --------------------- *
 *&模块USER_COMMAND_9001 INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组USER_COMMAND_9001输入。

   情况为OK_CODE。
     当"返回"或"退出"或"取消"时。
       离开程序。
     当"删除"时。
       如果GWA_ZEKKO-EBELN是INITIAL。
         信息"请输入文件编号" TYPE" E"。
       其他。
         致电屏幕9002。
       万一。

     当" DEL"。
     获取光标线sy-tabix。
     f1 = 1。


   结束。

 ENDMODULE。
输出前的过程。
   模块状态_9002。
     模块fetch_data。
   通过控制TC_ZEKPO光标将GT_ZEKPO放入GWA_ZEKPO中
 TC_ZEKPO-CURRENT_LINE。

   结局。

 输入后的过程。
 在gt_zekpo循环。
   模块modify_gt_zekpo。
 结束循环。
   模组USER_COMMAND_9002。

(5.5 KB)

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

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


我正在使用创建的2个屏幕进行对话框编程。 第一个屏幕包含带有删除按钮的zebeln字段,第二个屏幕包含zekko_03的字段和zekpo_03的表控件。 我遇到的两个问题:

首先,对标头执行select语句时,提示错误,提示数据类型不兼容。

其次,表控件删除(删除按钮功能代码'DEL')存在问题,我在网上查找了一些不适用于我的案例的方法,包括以下逻辑。

我使用的表格如下

tbl-po-header.png

 *&---------------------------------------------  ------------------------ *
 *&包括MZDLGPROG_03_REPORTTOP-模块池SAPMZDLGPROG_03_REPORT
 *&------------------------------------------------  --------------------- *
 程序SAPMZDLGPROG_03_REPORT。

 数据:OK_CODE TYPE SY-UCOMM,
        ZEKKO_03的GT_ZEKKO类型表,
        GWA_ZEKKO TYPE ZEKKO_03,
        ZEKPO_03的GT_ZEKPO类型表,
        GWA_ZEKPO TYPE ZEKPO_03,
        GV_EBELN TYPE ZEBELN_EL,
        MARK TYPE CE_MARK,
        gv_flag类型char1。


 控件:使用屏幕9002的TC_ZEKPO类型表。

 数据:f1 TYPE char1。
 *&---------------------------------------------  ------------------------ *
 *&包括MZDLGPROG_03_REPORTO01
 *&------------------------------------------------  --------------------- *

 *&------------------------------------------------  --------------------- *
 *&模块STATUS_9001输出
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 模组STATUS_9001输出。
  设置PF-STATUS'ZSTATUS'。
  设置标题栏" ZTITLE"。
 ENDMODULE。

 *&------------------------------------------------  --------------------- *
 *&模块STATUS_9002 OUTPUT
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 MODULE STATUS_9002 OUTPUT。
  设置PF-STATUS'ZSTATUS'。
  设置标题栏" ZTITLE1"。
 ENDMODULE。
 *&------------------------------------------------  --------------------- *
 *&模块FETCH_DATA OUTPUT
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 模块FETCH_DATA输出。


 如果f1 <> 1。

 从zekko_03到表gt_zekko中选择SELECT ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc。 此选择语句的<<<<问题

 选择单个ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc从zekko_03
   gwa_zekko的对应字段
   其中ebeln = gwa_zekko-ebeln。
 读取表gt_zekko INTO gwa_zekko INDEX sy-tabix。
 SELECT EBELP MATNR怪异LGORT Menge Meins
   来自zekpo_03的表格gt_zekpo的对应字段
    其中ebeln = gwa_zekko-ebeln。


 如果f1 = 1。

   如果sy-tabix不是INITIAL。
       删除gt_zekko索引sy-tabix。
       删除gt_zekpo索引sy-tabix。
   万一。
 万一。
 万一。


 ENDMODULE。
 *&---------------------------------------------  ------------------------ *
 *&包括MZDLGPROG_03_REPORTI01
 *&------------------------------------------------  --------------------- *
 *&------------------------------------------------  --------------------- *
 *&模块USER_COMMAND_9002 INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组USER_COMMAND_9002输入。
   情况为OK_CODE。
     当"返回"时。
       设置屏幕0。
       离开屏幕0。

   结束。

 ENDMODULE。
 *&------------------------------------------------  --------------------- *
 *&模块MODIFY_IT_ZEKPO INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组MODIFY_GT_ZEKPO输入。
   从gwa_zekpo修改gt_zekpo
   INDEX TC_ZEKPO-CURRENT_LINE。

 ENDMODULE。
 *&------------------------------------------------  --------------------- *
 *&模块USER_COMMAND_9001 INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组USER_COMMAND_9001输入。

   情况为OK_CODE。
     当"返回"或"退出"或"取消"时。
       离开程序。
     当"删除"时。
       如果GWA_ZEKKO-EBELN是INITIAL。
         信息"请输入文件编号" TYPE" E"。
       其他。
         致电屏幕9002。
       万一。

     当" DEL"。
     获取光标线sy-tabix。
     f1 = 1。


   结束。

 ENDMODULE。
输出前的过程。
   模块状态_9002。
     模块fetch_data。
   通过控制TC_ZEKPO光标将GT_ZEKPO放入GWA_ZEKPO中
 TC_ZEKPO-CURRENT_LINE。

   结局。

 输入后的过程。
 在gt_zekpo循环。
   模块modify_gt_zekpo。
 结束循环。
   模组USER_COMMAND_9002。

(5.5 KB)
付费偷看设置
发送
2条回答
Cikesha
1楼-- · 2020-08-18 15:44

您好 A S

第一个问题,SELECT问题。 您的代码如下:

数据:
   gt_zekko zekko_03的类型表。

 从zekko_03到表gt_zekko中选择SELECT ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc。  <<<<该选择语句的问题

但是,ZEKKO_03中的字段如下:

 EBELN,EKGRP,EKORG,BUKRS,LIFNR,WAERS,ZTERM,ZDESC 

现在,当您执行SELECT INTO TABLE语句时,系统尝试按照从数据库中检索字段的顺序将SELECT中的字段放入表中。 在您的情况下,系统尝试按以下方式分配字段:

 gt_zekko-ebeln = zekko_03-ebeln。
 gt_zekko-ekgrp = zekko_03-lifnr。
 gt_zekko-ekorg = zekko_03-ekorg。
 等等

看到问题了吧? 数据库中的LIFNR字段的值已分配给GT_ZEKKO表的EKRGP字段。 字段具有不同的类型,因此会出现错误。

解决方案是更改SELECT语句中字段的顺序以匹配GT_ZEKKO内部表的字段顺序,或者将INTO TABLE替换为 INTO对应表字段选项。

< p>第二个问题,记录未删除。

这是您用于DEL用户命令的代码。

" DEL"时。
       获取光标线sy-tabix。
       f1 = 1。
   ENDCASE。

首先,我将索引检索到您创建的变量中,而不是系统使用的变量中,因为某些操作之后这些变量可能会被覆盖。 因此,如下所示:

获取光标线gv_tabix。

第二,当F1 = 1时,用于删除的代码将不会执行,因为它包含在另一个IF子句中。

如果f1 <> 1。
   从zekko_03到表gt_zekko中选择SELECT ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc。 此选择语句的<<<<问题

   选择单个ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc从zekko_03
     gwa_zekko的对应字段
     其中ebeln = gwa_zekko-ebeln。
   读取表gt_zekko INTO gwa_zekko INDEX sy-tabix。
   SELECT EBELP MATNR怪异LGORT Menge Meins
     来自zekpo_03的表格gt_zekpo的对应字段
     其中ebeln = gwa_zekko-ebeln。

   如果f1 =1。" <-此时条件始终为假
     如果sy-tabix不是INITIAL。
       删除gt_zekko索引sy-tabix。
       删除gt_zekpo索引sy-tabix。
     万一。
   万一。
 

可能的解决方法是:

如果f1 <> 1。
   选择...
 其他。  " <-ELSE而不是IF = 1
   如果gv_tabix不是INITIAL。
     删除gt_zekko索引gv_tabix。
     删除gt_zekpo索引gv_tabix。
   万一。
 endif。

我希望这对您有所帮助。

此致

Mateusz

野沐沐
2楼-- · 2020-08-18 15:38

实际上我想删除 基于在第一个屏幕的参数中输入的选定记录(在不可编辑模式下,我将所有字段和表都设置为不可编辑的上级需求),因此我使用了sy-tabix。

我做的另一种方式是使用

数据:gv_ebeln类型zekko_03-ebeln

 如果gv_ebeln不是INITIAL。
       删除gt_zekko,在其中ebeln = gwa_zekko-ebeln。
       删除gt_zekpo WHERE ebeln = gwa_zekpo-ebeln。
   ENDIF。

我不确定我是否还错过了删除操作

一周热门 更多>