屏幕设置步循环

相比较表控件填写数据,我觉得步循环对于界面编辑性更佳。

1、先摆一下表头的文本

bbf5dae42aed132eda94bf695fc442c9.png

 2、必须先选中一行,然后找到步骤循环定义。 37f948e1dfb5ad5f7c5bf08048f58e8d.png

 出现两行,之后就可以任意拉伸行数0732f450ccb00a3b0abc9ef0962f99dd.png

3、屏幕

5eab8c660096fa7eaf4642b7ae50a37f.png

源代码:

*全局变量
  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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值