在dialog中创建Steploops程序.docx
《在dialog中创建Steploops程序.docx》由会员分享,可在线阅读,更多相关《在dialog中创建Steploops程序.docx(14页珍藏版)》请在冰豆网上搜索。
在dialog中创建Steploops程序
Step-loops是ABAP中非常古老的技术,自从Tablecontrol大量使用后Step-loops就急剧减少了,但是在某种场合中除了使用step-loops而别无选择,例如RadioFrequency。
Step-loops有两种类型
∙固定Step-loops
显示的条数固定
∙可变Step-loops
根据屏幕的大小,增加step-loops的条数
1、新建标准screen100,并定义ok_code
se51 格式布局屏幕样式
Column_1/Column_2
WA-COL1/WA-COL2
一起选中两列的input/output框,然后Edit->Grouping->StepLoop->Define
调整step-loops显示的条数
RLMOB-PPGUP/RLMOB-PPGDN
程序流:
1.PROCESSBEFOREOUTPUT.
2. MODULEstatus_0100.
3. MODULEpgup_down.
4. LOOPATitabINTOwaCURSORcFROMn1TOn2.
5. MODULEtransp_itab_out.
6. ENDLOOP.
7.
8.PROCESSAFTERINPUT.
9. MODULEcancelATEXIT-COMMAND.
10. LOOP.
11. MODULEtransp_itab_in.
12. ENDLOOP.
13. MODULEuser_command_0100.
复制代码
2、新建程序se38
1.*Numberofrecordstobedisplayed
2.PARAMETERS:
p_numTYPEi.
3.*Typestodeclaretheinternaltableforrecords
4.TYPES:
BEGINOFt_itab,
5. col1TYPEi,
6. col2TYPEi,
7. ENDOFt_itab.
8.*Internaltablefortherecords
9.DATA:
itabTYPESTANDARDTABLEOFt_itab,
10.*Workareafortherecords
11. wa LIKELINEOFitab.
12.DATA:
13.*Indexoftherowofstep-loop
14. idx TYPEi,
15.*CurrentLinetobedisplayed
16. line TYPEi,
17.*TotalRowsofstep-looptobedisplayedonsinglepage
18. linesTYPEi,
19.*FinalLimitofsteplooprowsthatcanbedisplayed
20. limitTYPEi,
21.*Cursorposition
22. c TYPEi,
23.*Lowerlimitoftherecordindextobedisplayedonapage
24. n1 TYPEiVALUE1,
25.*Upperlimitoftherecordindextobedisplayedonapage
26. n2 TYPEi,
27.*Variabletohandlenextpagenavigation
28. y_v_next TYPE i,
29.*Variabletohandlepreviouspagenavigation
30. y_v_prev TYPE i,
31. y_v_limitTYPEi.
32.DATA:
ok_codeTYPEsy-ucomm,
33. save_okTYPEsy-ucomm.
34.
35.START-OF-SELECTION.
36.*Buildingtherecordstobedisplayedaspertheselectionscreenentry
37. DOp_numTIMES.
38. wa-col1=sy-index.
39. wa-col2=sy-index**2.
40. APPENDwaTOitab.
41. ENDDO.
42. IFp_num<0.
43. n2=p_num.
44. ELSE.
45. n2=5.
46. ENDIF.
47. CALLSCREEN100.
48.*----------------------------------------------------------------------*
49.* MODULEstatus_0100OUTPUT
50.*----------------------------------------------------------------------*
51.*
52.*----------------------------------------------------------------------*
53.MODULEstatus_0100OUTPUT.
54. SETPF-STATUS'STATUS_100'.
55.ENDMODULE. "status_0100OUTPUT
56.*----------------------------------------------------------------------*
57.* MODULEtransp_itab_outOUTPUT
58.*----------------------------------------------------------------------*
59.*
60.*----------------------------------------------------------------------*
61.MODULEtransp_itab_outOUTPUT.
62. idx=sy-stepl+line.
63. READTABLEitabINTOwaINDEXidx.
64.ENDMODULE. "transp_itab_outOUTPUT
65.*----------------------------------------------------------------------*
66.* MODULEtransp_itab_inINPUT
67.*----------------------------------------------------------------------*
68.*
69.*----------------------------------------------------------------------*
70.MODULEtransp_itab_inINPUT.
71. lines=sy-loopc.
72. idx=sy-stepl+line.
73. MODIFYitabFROMwaINDEXidx.
74.ENDMODULE. "transp_itab_inINPUT
75.*----------------------------------------------------------------------*
76.* MODULEuser_command_0100INPUT
77.*----------------------------------------------------------------------*
78.*
79.*----------------------------------------------------------------------*
80.MODULEuser_command_0100INPUT.
81. DATA:
y_v_indexTYPEsy-index.
82. DATA:
y_lv_d TYPEf,
83. y_lv_divTYPEi,
84. y_curr_p_numTYPEi.
85. save_ok=ok_code.
86. CLEARok_code.
87. CASEsave_ok.
88. WHEN'BACK'.
89. LEAVETOSCREEN0.
90.*WhenPageDownisHit
91. WHEN'PGDN'.
92.*Numberofscreensrequiredforoutputif5recordsperscreen
93. y_lv_d=p_num/5.
94. y_lv_div=CEIL(y_lv_d).
95. y_curr_p_num=y_lv_div*5.
96. y_v_index=y_v_next+1.
97. IFy_v_next98. y_v_next=y_v_next+1.
99. ELSE.
100. y_v_next=y_lv_div.
101. ENDIF.
102. y_v_prev=y_v_next.
103. IFy_v_next<>y_lv_div.
104. n2=p_num-5* y_v_next.
105. IFn2>5.
106. n2=5*y_v_next.
107. ENDIF.
108. n1=1.
109. line=line+lines.
110. limit=y_curr_p_num-lines.
111. IFline>limit.
112. line=limit.
113. ENDIF.
114. ELSE.
115. y_v_next=y_v_next-1.
116. ENDIF.
117.*WhenPageUpisHit
118. WHEN'PGUP'.
119. n2=5*y_v_next.
120. IFn1<0.
121. n1=1.
122. ENDIF.
123. IFy_v_next>0.
124. y_v_next=y_v_next-1.
125. ELSE.
126. y_v_next=0.
127. ENDIF.
128. y_v_prev=y_v_next.
129. IFlineNE0ANDy_curr_p_numGT5.
130. line=y_v_next*5.
131. ELSE.
132. line=0.
133. y_v_index=y_v_next-1.
134. ENDIF.
135. IFline<0.
136. line=0.
137. ENDIF.
138.
139. ENDCASE.
140.ENDMODULE. "user_command_0100INPUT
141.*----------------------------------------------------------------------*
142.* MODULEcancelINPUT
143.*----------------------------------------------------------------------*
144.*
145.*----------------------------------------------------------------------*
146.MODULEcancelINPUT.
147. LEAVEPROGRAM.
148.ENDMODULE. "cancelINPUT
149.*&---------------------------------------------------------------------*
150.*& Module PGUP_DOWN OUTPUT
151.*&---------------------------------------------------------------------*
152.* text
153.*----------------------------------------------------------------------*
154.MODULEpgup_downOUTPUT.
155. DATA:
y_v_divTYPEi,
156. y_v_dTYPEf,
157. y_v_tempTYPEi.
158.
159. DESCRIBETABLEitab[]LINESp_num.
160. y_v_d=p_num/5.
161. y_v_limit=CEIL(y_v_d).
162. y_v_temp=y_v_limit-1.
163. IFp_numLE5.
164. PERFORMy_f_hide_fieldUSING'RLMOB-PPGDN'.
165. PERFORMy_f_hide_fieldUSING'RLMOB-PPGUP'.
166. ELSEIFy_v_next =y_v_limit.
167. PERFORMy_f_hide_fieldUSING'RLMOB-PPGDN'.
168. PERFORMy_f_show_fieldUSING'RLMOB-PPGUP'.
169. ELSEIFy_v_prevISINITIAL.
170. PERFORMy_f_hide_fieldUSING'RLMOB-PPGUP'.
171. ELSEIFy_v_nextGTy_v_limit.
172. PERFORMy_f_hide_fieldUSING'RLMOB-PPGDN'.
173. ELSEIFy_v_temp=y_v_next.
174. PERFORMy_f_hide_fieldUSING'RLMOB-PPGDN'.
175. ENDIF.
176.ENDMODULE. "PGUP_DOWN OUTPUT
177.*&---------------------------------------------------------------------*
178.*& Form Y_F_HIDE_FIELD
179.*&---------------------------------------------------------------------*
180.* text
181.*----------------------------------------------------------------------*
182.* -->P_0372 text
183.*----------------------------------------------------------------------*
184.FORMy_f_hide_field USING value(p_name).
185. LOOPATSCREEN.
186. IFscreen-name=p_name.
187. screen-active ='0'.
188. screen-invisible='1'.
189. MODIFYSCREEN.
190. EXIT.
191. ENDIF.
192. ENDLOOP.
193.ENDFORM. "Y_F_HIDE_FIELD
194.*&---------------------------------------------------------------------*
195.*& Form Y_F_SHOW_FIELD
196.*&---------------------------------------------------------------------*
197.* text
198.*----------------------------------------------------------------------*
199.* -->P_0388 text
200.*----------------------------------------------------------------------*
201.FORMy_f_show_field USING value(p_name).
202. LOOPATSCREEN.
203. IFscreen-name=p_name.
204. screen-active='1'.
205. MODIFYSCREEN.
206. EXIT.
207. ENDIF.
208. ENDLOOP.
209.ENDFORM. "Y_F_SHOW_FIELD
复制代码
3、GUI状态
4、程序执行效果
输入总共的数据条数