相比较表控件填写数据,我觉得步循环对于界面编辑性更佳。
1、先摆一下表头的文本
2、必须先选中一行,然后找到步骤循环定义。
出现两行,之后就可以任意拉伸行数
3、屏幕
源代码:
*全局变量
data:
gs_lines type sy-index, "有值的行数
gs_items type sy-index,"页面总行数
gs_total type sy-index, "总页数
gs_pages type sy-tabix,”页码
gs_start type sy-index , "起始行
gs_end type sy-index ,"终止行
gs_cons type sy-index value 5.“固定页面行数
data:begin of gt_data occurs 0.
data item type sy-index.
include structure ztsd_htfk .
data end of gt_data .
data gt_htfk like table of gt_data with header line .
屏幕逻辑流:
PROCESS BEFORE OUTPUT.
MODULE INITIALIZATION .
LOOP .
MODULE READ_ITAB.
ENDLOOP .
PROCESS AFTER INPUT.
2
LOOP .
CHAIN.
FIELD GT_HTFK-ITEM .
FIELD GT_HTFK-ZFKRQ MODULE get_vbakhb ON INPUT .
FIELD GT_HTFK-ZFKLX MODULE get_fklems ON INPUT .
FIELD GT_HTFK-ZFKMS.
FIELD GT_HTFK-ZFKBL .
FIELD GT_HTFK-ZFKJE .
FIELD GT_HTFK-ZFKHB .
FIELD GT_HTFK-ZREMARKS.
MODULE MOD_ITAB.
ENDCHAIN .
ENDLOOP .
MODULE FRM_USECOMMD .
PBO:
MODULE initialization OUTPUT.
DATA lv_title TYPE string .
DATA lv_mery TYPE char20.
IF t180-trtyp = 'A'.
LOOP AT SCREEN .
CASE screen-name .
WHEN 'VBAK-ZJBJD' OR 'VBAK-ZVERS'.
screen-input = 0 .
MODIFY SCREEN .
WHEN 'GT_HTFK-ZFKRQ'
OR 'GT_HTFK-ZFKLX'
OR 'GT_HTFK-ZFKJE'
OR 'GT_HTFK-ZFKBL'
OR 'GT_HTFK-ZFKHB'
OR 'GT_HTFK-ZREMARKS'.
screen-input = 0 .
MODIFY SCREEN .
ENDCASE .
ENDLOOP .
ELSE .
vbak-zupda = 'X'.
ENDIF .
PERFORM pfm_pagelines .
ENDMODULE .
FORM pfm_pagelines .
CLEAR:gs_total, gs_lines.
LOOP AT gt_data WHERE zfkrq IS NOT INITIAL .
gs_lines = gs_lines + 1 .
ENDLOOP .
*总页数
DATA(gs_mod) = gs_lines MOD gs_cons .
IF gs_mod EQ 0 ."整除
gs_total = gs_lines DIV gs_cons ."求商
ELSE .
gs_total = gs_lines DIV gs_cons + 1 ."不整除+1
ENDIF .
ENDFORM.
FORM frm_readdata .
REFRESH: gt_htfk .
LOOP AT gt_data INTO DATA(gp) WHERE item BETWEEN gs_start AND gs_end .
APPEND gp TO gt_htfk.
ENDLOOP .
ENDFORM.
PAI:
*----------------------------------------------------------------------*
MODULE frm_usecommd INPUT.
CASE fcode .
WHEN 'PON'.
PERFORM frm_pageup.
PERFORM frm_savepage .
PERFORM frm_readdata .
fcode = 'ENT1'.
WHEN 'PDW'.
PERFORM frm_pagedown.
PERFORM frm_savepage .
PERFORM frm_readdata .
fcode = 'ENT1'.
WHEN 'ClEAR'.
PERFORM frm_cleardata .
PERFORM frm_readdata .
fcode = 'ENT1'.
WHEN OTHERS .
PERFORM frm_savepage .
PERFORM frm_readdata .
* WHEN 'POST'.
* PERFORM frm_postdb .
* fcode = 'ENT1'.
ENDCASE .
ENDMODULE.
FORM frm_pageup .
"初始行数大于固定行数,上一页才有意义
IF gs_start GT gs_cons .
gs_start = gs_start - gs_cons .
gs_end = gs_start + gs_cons - 1 .
gs_pages = gs_pages - 1 ."页码
ENDIF .
ENDFORM.
FORM frm_pagedown .
"终止行数小于总行数,下一页才有意义
IF t180-trtyp NE 'A'.
IF gs_end LT gs_items .
gs_start = gs_start + gs_cons .
gs_end = gs_start + gs_cons - 1 .
gs_pages = gs_pages + 1 ."页码
ENDIF .
ELSE .
IF gs_end LT gs_lines .
gs_start = gs_start + gs_cons .
gs_end = gs_start + gs_cons - 1 .
gs_pages = gs_pages + 1 ."页码
ENDIF .
ENDIF .
ENDFORM.
FORM frm_cleardata .
**选择删除
LOOP AT gt_htfk .
CLEAR: gt_data.
gt_data-item = gt_htfk-item .
MODIFY gt_data INDEX gt_htfk-item .
CLEAR gt_htfk.
gt_htfk-item = gt_data-item .
MODIFY gt_htfk .
ENDLOOP .
endform .
*----------------------------------------------------------------------*
FORM frm_readdata .
REFRESH: gt_htfk .
LOOP AT gt_data INTO DATA(gp) WHERE item BETWEEN gs_start AND gs_end .
APPEND gp TO gt_htfk.
ENDLOOP .
ENDFORM.
FORM frm_postdb .
DATA lt_htfk TYPE TABLE OF ztsd_htfk WITH HEADER LINE.
DATA lv_posnr TYPE int1 .
LOOP AT gt_data WHERE zfkrq IS NOT INITIAL .
MOVE-CORRESPONDING gt_data TO lt_htfk .
APPEND lt_htfk .
ENDLOOP .
SORT lt_htfk BY zfkrq .
LOOP AT lt_htfk ASSIGNING FIELD-SYMBOL(<fs>).
lv_posnr = lv_posnr + 1 .
<fs>-zposnr = lv_posnr .
ENDLOOP .
IF lt_htfk[] IS NOT INITIAL .
MODIFY ztsd_htfk FROM TABLE lt_htfk .
IF sy-subrc EQ 0.
REFRESH:gt_data,gt_htfk.
CLEAR: gt_data,gt_htfk .
ENDIF .
ENDIF .
ENDFORM.