SAP ABAP

发布时间:2025-12-09 11:45:54 浏览次数:1

在一次房地产项目做售后服务时,当时给用户做了一个集合各种单据并可显示代办单据数字的平台,界面如下:

客服人员可以直观的看到处于各个状态的代办单据数,点击数字就能穿透进入ALV:

双击案件编号,即可穿透进入通知单详细界面:

这里简单介绍如何实现在界面上显示动态数字,点击数字并能够穿透进入ALV清单界面。

(1)屏幕显示数字

先在程序里建立屏幕,在屏幕绘制器中定义显示屏幕:

注意:在字段程式中设定只是输出字段;在显示中设定点两下的回应。

在PBO中给显示字段赋值:

PBO Module中的代码:

  1 MODULE CHECK_GV_S1_10  OUTPUT.  2   CLEAR: GV_COUNT, GV_S1_10.  3   REFRESH GT_QMNUM.  4   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0001'   'S1'.  5   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT.  6   GV_S1_10  = GV_COUNT.  7   8   CLEAR: GV_COUNT.  9   REFRESH GT_QMNUM. 10   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0004'   'S3'. 11   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 12  13   GV_S1_10  =  GV_S1_10 + GV_COUNT. 14   MODIFY  SCREEN. 15   REFRESH   GT_QMNUM. 16 ENDMODULE. 17  18 MODULE CHECK_GV_S1_20  OUTPUT. 19   CLEAR: GV_COUNT, GV_S1_20. 20   REFRESH GT_QMNUM. 21   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0002'   'S1'. 22   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 23   GV_S1_20  = GV_COUNT. 24   MODIFY  SCREEN. 25   REFRESH   GT_QMNUM. 26 ENDMODULE. 27  28 MODULE CHECK_GV_S1_30  OUTPUT. 29   CLEAR: GV_COUNT, GV_S1_30. 30   REFRESH GT_QMNUM. 31   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0003'   'S1'. 32   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 33   GV_S1_30  = GV_COUNT. 34  35   CLEAR: GV_COUNT. 36   REFRESH GT_QMNUM. 37   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0006'   'S3'. 38   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 39  40   GV_S1_30  =  GV_S1_30 + GV_COUNT. 41   MODIFY  SCREEN. 42   REFRESH   GT_QMNUM. 43 ENDMODULE. 44  45 MODULE CHECK_GV_S1_35  OUTPUT. 46   CLEAR: GV_COUNT, GV_S1_35 . 47   REFRESH GT_QMNUM. 48   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0004'   'S1'. 49   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 50   GV_S1_35   = GV_COUNT. 51  52   CLEAR: GV_COUNT. 53   REFRESH GT_QMNUM. 54   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0007'   'S3'. 55   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 56  57   GV_S1_35   =  GV_S1_35  + GV_COUNT. 58   MODIFY  SCREEN. 59   REFRESH   GT_QMNUM. 60 ENDMODULE. 61  62 MODULE CHECK_GV_S1_40  OUTPUT. 63   CLEAR: GV_COUNT, GV_S1_40 . 64   REFRESH GT_QMNUM. 65   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0005'   'S1'. 66   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 67   GV_S1_40   = GV_COUNT. 68  69   CLEAR: GV_COUNT. 70   REFRESH GT_QMNUM. 71   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0008'   'S3'. 72   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 73  74   GV_S1_40   =  GV_S1_40  + GV_COUNT. 75   REFRESH   GT_QMNUM. 76 ENDMODULE. 77  78 MODULE CHECK_GV_S1_50  OUTPUT. 79   CLEAR: GV_COUNT, GV_S1_50 . 80   REFRESH GT_QMNUM. 81   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0016'   'S1'. 82   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 83   GV_S1_50   = GV_COUNT. 84  85   CLEAR: GV_COUNT. 86   REFRESH GT_QMNUM. 87   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0014'   'S3'. 88   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT. 89  90   GV_S1_50   =  GV_S1_50  + GV_COUNT. 91   MODIFY  SCREEN. 92   REFRESH   GT_QMNUM. 93 ENDMODULE. 94  95 MODULE CHECK_GV_S1_60  OUTPUT. 96   CLEAR: GV_COUNT, GV_S1_60 . 97   REFRESH GT_QMNUM. 98   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0006'   'S1'. 99   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT.100   GV_S1_60   = GV_COUNT.101   MODIFY SCREEN.102   REFRESH   GT_QMNUM.103 ENDMODULE.104 105 MODULE CHECK_GV_S1_70  OUTPUT.106   CLEAR: GV_COUNT, GV_S1_70  .107   REFRESH GT_QMNUM.108   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0007'   'S1'.109   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT.110   GV_S1_70    = GV_COUNT.111 112   CLEAR: GV_COUNT.113   REFRESH GT_QMNUM.114   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0010'   'S3'.115   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT.116 117   GV_S1_70    =  GV_S1_70   + GV_COUNT.118   MODIFY  SCREEN.119   REFRESH   GT_QMNUM.120 ENDMODULE.121 122 MODULE CHECK_GV_S1_80  OUTPUT.123   CLEAR: GV_COUNT, GV_S1_80  .124   REFRESH GT_QMNUM.125   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0008'   'S1'.126   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT.127   GV_S1_80    = GV_COUNT.128 129   CLEAR: GV_COUNT.130   REFRESH GT_QMNUM.131   PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0011'   'S3'.132   DESCRIBE TABLE  GT_QMNUM  LINES  GV_COUNT.133 134   GV_S1_80    =  GV_S1_80   + GV_COUNT.135   MODIFY  SCREEN.136   REFRESH   GT_QMNUM.137 ENDMODULE.

PERFORM中的代码:

 1 FORM  GET_NOTI_LIST   TABLES IT_QMNUM   TYPE  TT_QMNUM 2                       USING  I_STAT  TYPE  J_ESTAT 3                              I_QMART   TYPE  QMART. 4   DATA: BEGIN OF  LT_OBJNR  OCCURS 0, 5           OBJNR TYPE  J_OBJNR, 6         END OF LT_OBJNR. 7   CLEAR:LT_OBJNR. 8   REFRESH: LT_OBJNR[]. 9 10   select  OBJNR11     INTO TABLE  LT_OBJNR12     FROM  JEST13     WHERE  STAT  =  I_STAT14     AND   OBJNR  LIKE  'QM%'15     AND  INACT  =  ' '.16 17   IF  SY-SUBRC = 0.18     select  QMNUM                                  "#EC CI_NO_TRANSFORM19       INTO  TABLE  IT_QMNUM20       FROM  QMEL21       FOR ALL ENTRIES IN  LT_OBJNR22       WHERE  OBJNR = LT_OBJNR-OBJNR23       AND  QMART   =  I_QMART24       AND  PHASE  NE  425       AND  PHASE  NE  5 .26   ENDIF.27 28 ENDFORM.

(2)点击数字进入ALV界面

在PAI中定义点击事件:

这里是使用GET CURSOR FIELD <L_filed>获取屏幕字段名,再根据字段名来取数。这里示例取数,当然应该有更简洁的写法:

  1 FORM  LIST_NITILIST  USING  P_FIELD  TYPE  C.  2   SET PARAMETER ID  'YFG_CUR_FIELD'  FIELD P_FIELD.  3   REFRESH SELTAB.  4   CASE  P_FIELD.  5     WHEN  'GV_S1_10'.  6       REFRESH  GT_QMNUM.  7       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0001'   'S1'.  8       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.  9         CLEAR  SELTAB_WA. 10         SELTAB_WA-SELNAME  =  'S_QMNUM'. 11         SELTAB_WA-SIGN  =  'I'. 12         SELTAB_WA-OPTION  =  'EQ'. 13         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM. 14         APPEND  SELTAB_WA TO  SELTAB. 15       ENDLOOP. 16  17       REFRESH  GT_QMNUM. 18       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0004'   'S3'. 19       CLEAR  WA_QMNUM. 20       LOOP AT  GT_QMNUM   INTO  WA_QMNUM. 21         CLEAR  SELTAB_WA. 22         SELTAB_WA-SELNAME  =  'S_QMNUM'. 23         SELTAB_WA-SIGN  =  'I'. 24         SELTAB_WA-OPTION  =  'EQ'. 25         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM. 26         APPEND  SELTAB_WA TO  SELTAB. 27       ENDLOOP. 28  29     WHEN 'GV_S1_20'. 30       REFRESH GT_QMNUM. 31       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0002'   'S1'. 32       CLEAR  WA_QMNUM. 33       LOOP AT  GT_QMNUM   INTO  WA_QMNUM. 34         CLEAR  SELTAB_WA. 35         SELTAB_WA-SELNAME  =  'S_QMNUM'. 36         SELTAB_WA-SIGN  =  'I'. 37         SELTAB_WA-OPTION  =  'EQ'. 38         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM. 39         APPEND  SELTAB_WA TO  SELTAB. 40       ENDLOOP. 41  42     WHEN  'GV_S1_30'. 43       REFRESH GT_QMNUM. 44       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0003'   'S1'. 45       CLEAR  WA_QMNUM. 46       LOOP AT  GT_QMNUM   INTO  WA_QMNUM. 47         CLEAR  SELTAB_WA. 48         SELTAB_WA-SELNAME  =  'S_QMNUM'. 49         SELTAB_WA-SIGN  =  'I'. 50         SELTAB_WA-OPTION  =  'EQ'. 51         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM. 52         APPEND  SELTAB_WA TO  SELTAB. 53       ENDLOOP. 54  55       REFRESH GT_QMNUM. 56       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0006'   'S3'. 57       CLEAR  WA_QMNUM. 58       LOOP AT  GT_QMNUM   INTO  WA_QMNUM. 59         CLEAR  SELTAB_WA. 60         SELTAB_WA-SELNAME  =  'S_QMNUM'. 61         SELTAB_WA-SIGN  =  'I'. 62         SELTAB_WA-OPTION  =  'EQ'. 63         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM. 64         APPEND  SELTAB_WA TO  SELTAB. 65       ENDLOOP. 66  67     WHEN 'GV_S1_35'. 68       REFRESH GT_QMNUM. 69       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0004'   'S1'. 70       CLEAR  WA_QMNUM. 71       LOOP AT  GT_QMNUM   INTO  WA_QMNUM. 72         CLEAR  SELTAB_WA. 73         SELTAB_WA-SELNAME  =  'S_QMNUM'. 74         SELTAB_WA-SIGN  =  'I'. 75         SELTAB_WA-OPTION  =  'EQ'. 76         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM. 77         APPEND  SELTAB_WA TO  SELTAB. 78       ENDLOOP. 79  80       REFRESH GT_QMNUM. 81       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0007'   'S3'. 82       CLEAR  WA_QMNUM. 83       LOOP AT  GT_QMNUM   INTO  WA_QMNUM. 84         CLEAR  SELTAB_WA. 85         SELTAB_WA-SELNAME  =  'S_QMNUM'. 86         SELTAB_WA-SIGN  =  'I'. 87         SELTAB_WA-OPTION  =  'EQ'. 88         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM. 89         APPEND  SELTAB_WA TO  SELTAB. 90       ENDLOOP. 91  92     WHEN  'GV_S1_40'. 93       REFRESH GT_QMNUM. 94       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0005'   'S1'. 95       CLEAR  WA_QMNUM. 96       LOOP AT  GT_QMNUM   INTO  WA_QMNUM. 97         CLEAR  SELTAB_WA. 98         SELTAB_WA-SELNAME  =  'S_QMNUM'. 99         SELTAB_WA-SIGN  =  'I'.100         SELTAB_WA-OPTION  =  'EQ'.101         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.102         APPEND  SELTAB_WA TO  SELTAB.103       ENDLOOP.104 105       REFRESH GT_QMNUM.106       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0008'   'S3'.107       CLEAR  WA_QMNUM.108       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.109         CLEAR  SELTAB_WA.110         SELTAB_WA-SELNAME  =  'S_QMNUM'.111         SELTAB_WA-SIGN  =  'I'.112         SELTAB_WA-OPTION  =  'EQ'.113         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.114         APPEND  SELTAB_WA TO  SELTAB.115       ENDLOOP.116 117     WHEN 'GV_S1_50'.118       REFRESH GT_QMNUM.119       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0016'   'S1'.120       CLEAR  WA_QMNUM.121       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.122         CLEAR  SELTAB_WA.123         SELTAB_WA-SELNAME  =  'S_QMNUM'.124         SELTAB_WA-SIGN  =  'I'.125         SELTAB_WA-OPTION  =  'EQ'.126         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.127         APPEND  SELTAB_WA TO  SELTAB.128       ENDLOOP.129 130       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0014'   'S3'.131       CLEAR  WA_QMNUM.132       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.133         CLEAR  SELTAB_WA.134         SELTAB_WA-SELNAME  =  'S_QMNUM'.135         SELTAB_WA-SIGN  =  'I'.136         SELTAB_WA-OPTION  =  'EQ'.137         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.138         APPEND  SELTAB_WA TO  SELTAB.139       ENDLOOP.140 141     WHEN  'GV_S1_60'.142       REFRESH GT_QMNUM.143       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0006'   'S1'.144       CLEAR  WA_QMNUM.145       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.146         CLEAR  SELTAB_WA.147         SELTAB_WA-SELNAME  =  'S_QMNUM'.148         SELTAB_WA-SIGN  =  'I'.149         SELTAB_WA-OPTION  =  'EQ'.150         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.151         APPEND  SELTAB_WA TO  SELTAB.152       ENDLOOP.153 154     WHEN 'GV_S1_70'.155       REFRESH GT_QMNUM.156       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0007'   'S1'.157       CLEAR  WA_QMNUM.158       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.159         CLEAR  SELTAB_WA.160         SELTAB_WA-SELNAME  =  'S_QMNUM'.161         SELTAB_WA-SIGN  =  'I'.162         SELTAB_WA-OPTION  =  'EQ'.163         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.164         APPEND  SELTAB_WA TO  SELTAB.165       ENDLOOP.166 167       REFRESH GT_QMNUM.168       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0010'   'S3'.169       CLEAR  WA_QMNUM.170       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.171         CLEAR  SELTAB_WA.172         SELTAB_WA-SELNAME  =  'S_QMNUM'.173         SELTAB_WA-SIGN  =  'I'.174         SELTAB_WA-OPTION  =  'EQ'.175         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.176         APPEND  SELTAB_WA TO  SELTAB.177       ENDLOOP.178 179     WHEN  'GV_S1_80'.180       REFRESH GT_QMNUM.181       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0008'   'S1'.182       CLEAR  WA_QMNUM.183       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.184         CLEAR  SELTAB_WA.185         SELTAB_WA-SELNAME  =  'S_QMNUM'.186         SELTAB_WA-SIGN  =  'I'.187         SELTAB_WA-OPTION  =  'EQ'.188         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.189         APPEND  SELTAB_WA TO  SELTAB.190       ENDLOOP.191 192       REFRESH GT_QMNUM.193       PERFORM  GET_NOTI_LIST   TABLES   GT_QMNUM   USING  'E0011'   'S3'.194       CLEAR  WA_QMNUM.195       LOOP AT  GT_QMNUM   INTO  WA_QMNUM.196         CLEAR  SELTAB_WA.197         SELTAB_WA-SELNAME  =  'S_QMNUM'.198         SELTAB_WA-SIGN  =  'I'.199         SELTAB_WA-OPTION  =  'EQ'.200         SELTAB_WA-LOW  =   WA_QMNUM-QMNUM.201         APPEND  SELTAB_WA TO  SELTAB.202       ENDLOOP.203 204   ENDCASE.205 206   IF  SELTAB   IS NOT  INITIAL .207     CLEAR  SELTAB_WA.208     SELTAB_WA-SELNAME  =  'C_B01'.209     SELTAB_WA-SIGN  =  'I'.210     SELTAB_WA-OPTION  =  'EQ'.211     SELTAB_WA-LOW  =   'X'.212     APPEND  SELTAB_WA TO  SELTAB.213 214     CLEAR  SELTAB_WA.215     SELTAB_WA-SELNAME  =  'C_B03'.216     SELTAB_WA-SIGN  =  'I'.217     SELTAB_WA-OPTION  =  'EQ'.218     SELTAB_WA-LOW  =   'X'.219     APPEND  SELTAB_WA TO  SELTAB.220 221     CLEAR  SELTAB_WA.222     SELTAB_WA-SELNAME  =  'C_B04'.223     SELTAB_WA-SIGN  =  'I'.224     SELTAB_WA-OPTION  =  'EQ'.225     SELTAB_WA-LOW  =   'X'.226     APPEND  SELTAB_WA TO  SELTAB.227 228     CLEAR  SELTAB_WA.229     SELTAB_WA-SELNAME  =  'S_QMART'.230     SELTAB_WA-SIGN  =  'I'.231     SELTAB_WA-OPTION  =  'EQ'.232     SELTAB_WA-LOW  =   'S1'.233     APPEND  SELTAB_WA TO  SELTAB.234 235     CLEAR  SELTAB_WA.236     SELTAB_WA-SELNAME  =  'S_QMART'.237     SELTAB_WA-SIGN  =  'I'.238     SELTAB_WA-OPTION  =  'EQ'.239     SELTAB_WA-LOW  =   'S2'.240     APPEND  SELTAB_WA TO  SELTAB.241 242     CLEAR  SELTAB_WA.243     SELTAB_WA-SELNAME  =  'S_QMART'.244     SELTAB_WA-SIGN  =  'I'.245     SELTAB_WA-OPTION  =  'EQ'.246     SELTAB_WA-LOW  =   'S3'.247     APPEND  SELTAB_WA TO  SELTAB.248 249     CLEAR  SELTAB_WA.250     SELTAB_WA-SELNAME  =  'S_QMART'.251     SELTAB_WA-SIGN  =  'I'.252     SELTAB_WA-OPTION  =  'EQ'.253     SELTAB_WA-LOW  =   'S4'.254     APPEND  SELTAB_WA TO  SELTAB.255 256     SUBMIT  YFG_PM_NOTIF_LIST257 *      VIA SELECTION-SCREEN258           WITH  SELECTION-TABLE    SELTAB259           AND RETURN.260   ELSE.261     MESSAGE  '無當前狀態的案件存在'   TYPE  'S'  DISPLAY LIKE  'E'.262     EXIT.263   ENDIF.

这里ALV是通过另一个程序YFG_PM_NOTIF_LIST实现的,在此Function中根据屏幕字段作为条件,给YFG_PM_NOTIF_LIST可执行程序的选择屏幕填充数据。这里C_B01、C_B03、C_B04位选择屏幕单选按钮。

SAP下一页
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477