点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
我正在使用创建的2个屏幕进行对话框编程。 第一个屏幕包含带有删除按钮的zebeln字段,第二个屏幕包含zekko_03的字段和zekpo_03的表控件。 我遇到的两个问题:
首先,对标头执行select语句时,提示错误,提示数据类型不兼容。
其次,表控件删除(删除按钮功能代码'DEL')存在问题,我在网上查找了一些不适用于我的案例的方法,包括以下逻辑。
我使用的表格如下
*&--------------------------------------------- ------------------------ * *&包括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)
您好 A S
第一个问题,SELECT问题。 您的代码如下:
但是,ZEKKO_03中的字段如下:
现在,当您执行SELECT INTO TABLE语句时,系统尝试按照从数据库中检索字段的顺序将SELECT中的字段放入表中。 在您的情况下,系统尝试按以下方式分配字段:
看到问题了吧? 数据库中的LIFNR字段的值已分配给GT_ZEKKO表的EKRGP字段。 字段具有不同的类型,因此会出现错误。
解决方案是更改SELECT语句中字段的顺序以匹配GT_ZEKKO内部表的字段顺序,或者将INTO TABLE替换为 INTO对应表字段选项。
< p>第二个问题,记录未删除。这是您用于DEL用户命令的代码。
首先,我将索引检索到您创建的变量中,而不是系统使用的变量中,因为某些操作之后这些变量可能会被覆盖。 因此,如下所示:
第二,当F1 = 1时,用于删除的代码将不会执行,因为它包含在另一个IF子句中。
可能的解决方法是:
我希望这对您有所帮助。
此致
Mateusz
实际上我想删除 基于在第一个屏幕的参数中输入的选定记录(在不可编辑模式下,我将所有字段和表都设置为不可编辑的上级需求),因此我使用了sy-tabix。
我做的另一种方式是使用
我不确定我是否还错过了删除操作
一周热门 更多>