Dynpro错误对话框编程

2020-08-18 09:43发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我试图创建2个屏幕,屏幕9002...

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

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


我试图创建2个屏幕,屏幕9002是不可编辑的,屏幕9003是可编辑的,对于这2个屏幕,我使用了不同的变量,但使用了相同的ztables。 我正在显示9003 frm 9001屏幕PAI屏幕。

当我调用屏幕9003时,它引发了Dyn Pro错误,代码如下

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

 表格:ZEKKO_03,
         ZEKPO_03。

 控件:使用屏幕9002,""的TC_ZEKPO类型表视图,用于显示
           使用屏幕9003的TC_ZEKPO2类型表视图。""进行编辑


 数据:OK_CODE TYPE SY-UCOMM,
        ZEKKO_03的GT_ZEKKO类型表,
        GWA_ZEKKO TYPE ZEKKO_03,
        ZEKPO_03的GT_ZEKPO类型表,
        GWA_ZEKPO就像LINE OF gt_zekpo,
        GV_EBELN TYPE ZEBELN_EL。

 数据:
        ZEKKO_03的GT_ZEKKO2类型表,
        GWA_ZEKKO2 TYPE ZEKKO_03,
        ZEKPO_03的GT_ZEKPO2类型表,
        GWA_ZEKPO2类似于LINE OF gt_zekpo。


 数据:f1 TYPE char1,
       gv_tabix TYPE sy-tabix。
 *&---------------------------------------------  ------------------------ *
 *&包括MZDLGPROG_03_REPORTO01
 *&------------------------------------------------  --------------------- *

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

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

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

 如果f1 <> 1。

 SELECT ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc FROM zekko_03
   表格gt_zekko的对应字段
   其中ebeln = gwa_zekko-ebeln。

 选择单个ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc从zekko_03
   gwa_zekko的对应字段
   其中ebeln = gwa_zekko-ebeln。

 读取表gt_zekko INTO gwa_zekko索引sy-tabix。

 SELECT EBELP MATNR怪异LGORT Menge Meins
   来自zekpo_03的表格gt_zekpo的对应字段
    其中ebeln = gwa_zekko-ebeln。

 其他。

   如果gv_tabix不是INITIAL。
       删除gt_zekko索引gv_tabix。
       删除gt_zekpo索引gv_tabix。
   万一。
 万一。



 ENDMODULE。

 *&------------------------------------------------  --------------------- *
 *&模块FETCH_DATA_EDIT输出
 *&------------------------------------------------  --------------------- *
 *&
 *&------------------------------------------------  --------------------- *
 MODULE FETCH_DATA_EDIT输出。
 *设置PF-STATUS'xxxxxxxx'。
 * SET TITLEBAR'xxx'。

   SELECT ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc FROM zekko_03
   表格gt_zekko的对应字段
   其中ebeln = gwa_zekko-ebeln。

 选择单个ebeln lifnr ekorg ekgrp bukrs waers zterm zdesc从zekko_03
   gwa_zekko的对应字段
   其中ebeln = gwa_zekko-ebeln。

 读取表gt_zekko INTO gwa_zekko索引sy-tabix。

 SELECT EBELP MATNR怪异LGORT Menge Meins
   来自zekpo_03的表格gt_zekpo的对应字段
    其中ebeln = gwa_zekko-ebeln。

 ENDMODULE。
 *&---------------------------------------------  ------------------------ *
 *&模块USER_COMMAND_9003 INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组USER_COMMAND_9003输入。
 *案例ok_code。
 *
 *结束。

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

        当" DEL"。
     获取光标行gv_tabix。
     f1 = 1。
    呼叫屏幕9002。

 *在gt_zekpo的WHERE MARK ='X'处循环。
 *删除gt_zekpo。
 * ENDLOOP。
 *如果SY-SUBRC <> 0。
 *获取光标字段FLD线LINNO偏移量OFF。
 *设置光标字段FLD线LINNO偏移量OFF。
 *如果FLD CP'GT_ZEKPO *'并且SY-SUBRC = 0。
 * LINNO = LINNO + TC_ZEKPO-TOP_LINE-1。
 *删除GT_ZEKPO索引LINNO。
 * TC_ZEKPO-LINES = TC_ZEKPO-LINES-1。
 *        万一。
 *      万一。


 *使用键gwa_zekko-ebeln读取gt_zekko到gwa_zekko中。
 *如果gwa_zekko-ebeln不是INITIAL。
 *从表gt_zekko中删除ZEKKO_03。
 *从表gt_zekpo中删除zekpo_03。
 *      万一。

   结束。

 ENDMODULE。
 *&------------------------------------------------  --------------------- *
 *&模块MODIFY_IT_ZEKPO INPUT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 模组MODIFY_GT_ZEKPO输入。
   从gwa_zekpo2修改gt_zekpo2
   索引TC_ZEKPO2-CURRENT_LINE。

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



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

     当"显示"时。
             如果GWA_ZEKKO-EBELN是INITIAL。
         信息"请输入文件编号" TYPE" E"。
       其他。
         致电屏幕9002。
       万一。

     当"创建"时。
       呼叫屏幕9003。<<<<以显示可编辑屏幕


   结束。

 ENDMODULE。

(25.4 kB)
付费偷看设置
发送
7条回答

您好 A S

您可以在一个屏幕中进行显示/编辑。 这样,将来将需要少得多的维护。 您需要做的就是在 PBO 中修改屏幕字段属性。 屏幕事件。

例如:

 *&-------------------------------  -------------------------------------- *
 *&模块SCREEN_0001_PBO输出
 *&------------------------------------------------  --------------------- *
 模组screen_0001_pbo输出。
   数据:
     gv_action TYPE i。 在模块中声明的变量是全局的

   gv_action =0。"显示为默认值
   如果p_chg = abap_true。  "用户选择的某些选项
     gv_action =1。"允许编辑
   万一。

   环视屏幕。
     如果screen-name ='INPUT'。  "您也可以在这里检查SCREEN-GROUP1 .. GROUP4
       屏幕输入= gv_action。
       修改屏幕。
     万一。
   结局。
 ENDMODULE。

在屏幕上:

输出前的过程。
   

致谢,

Mateusz

DafaDDDa
2楼-- · 2020-08-18 10:06

您说"当我调用屏幕9003时,它抛出了Dyn Pro错误"。

请提供错误详细信息。 准确的错误文本,简短的转储内容(如果有),出现的确切行号等。

亦是此间程序员
3楼-- · 2020-08-18 10:07

为什么要创建2个屏幕?

您可以使用"组"选项来处理"屏幕"元素的属性。

野沐沐
4楼-- · 2020-08-18 10:11

您好,Sandra,不再具有dynpro错误转储。 但是我遇到了PBO,要在编辑模式下显示。

我在另一个线程中提出了

jovirus
5楼-- · 2020-08-18 10:13

AS

除非业务部门明确要求,否则最好将所有字段都放在一个屏幕中,以避免复杂性和更好的维护。

简而言之,了解模块编程中的事件非常重要:

PBO-输入之前的处理负责显示的所有字段特征,事件在触发之前触发 屏幕显示出来。 因此,必须在此处对屏幕的所有功能进行编码。

PAI-输入后的处理负责屏幕中所有字段的验证,此事件将针对您在屏幕中执行的所有操作触发

现在,让我们知道您要实现的目标以及面临的问题。

请注意!

追夢秋陽
6楼-- · 2020-08-18 10:10

SCREEN-NAME包含名称 您的输入字段。 在我的示例中,该字段称为INPUT。

您需要检查屏幕上显示的字段是什么名称。

关于,
Mateusz

一周热门 更多>