SAP SMARTFORMS标题换页打印自动判断

最近项目需要做一些单据打印,又遇到了那个熟悉的需求,明细标题行要在换页的时候也进行打印,如果只是简单的只有一种明细清单,那将标题行放在Windows窗口中就行了,但如果有多种明细清单,就不能这么做了,因为每种明细清单标题可能是不一样的,换页的时候是需要根据当前是哪种明细数据来打印对应的标题行的,记得之前做法都是先打印出来,或者根据行高去计算,看到第几行需要换页,然后写代码计算行数,MOD求余,使用换页命令进行换页等等一些操作,嫌麻烦就扒了一下系统标准代码,从标准判断换页的逻辑中抽离出来了一小部分封装了一个通用函数,后面判断换页只需要调用一下就好了,无需一堆逻辑去手动计算,再通过命令调用换页之类的操作了。

标准判断换页的逻辑在 SSFCOMP_TABLE_BEGINperform tab_use_definition 中,也可以自己去打断点看看。

效果如下:

实现方式:

1.创建函数ZCHECK_NEW_PAGE

**********************************************************************
* 根据行高判断下一行是否需要换页
* 参照函数SSFCOMP_TABLE_BEGIN中perform tab_use_definition中的处理
**********************************************************************
FUNCTION ZCHECK_NEW_PAGE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(I_VALUE)
*"     REFERENCE(I_UNIT) TYPE  CHAR2
*"  EXPORTING
*"     REFERENCE(E_NEW_PAGE) TYPE  FLAG
*"----------------------------------------------------------------------
* Units
  CONSTANTS:
    UNIT_CHARACTER(2)  VALUE 'CH',
    UNIT_CENTIMETER(2) VALUE 'CM',
    UNIT_MILLIMETER(2) VALUE 'MM',
    UNIT_POINT(2)      VALUE 'PT',
    UNIT_LINE(2)       VALUE 'LN',
    UNIT_TWIP(2)       VALUE 'TW',
    UNIT_INCH(2)       VALUE 'IN'.

  DATA:
    L_FACTOR      TYPE F,
    LV_CONV_VALUE TYPE I.

  CASE I_UNIT.
    WHEN UNIT_TWIP.
      L_FACTOR = 1.
    WHEN UNIT_POINT.
      L_FACTOR = 20.
    WHEN UNIT_CENTIMETER.
      L_FACTOR = 1440 / 254 * 100.
    WHEN UNIT_MILLIMETER.
      L_FACTOR = 144 / 254 * 100.
    WHEN UNIT_INCH.
      L_FACTOR = 1440.
    WHEN OTHERS.
      L_FACTOR = 0.
  ENDCASE.

  LV_CONV_VALUE = I_VALUE * L_FACTOR.

  ASSIGN ('(SAPLSTXBC)FT-REM_HEIGHT') TO FIELD-SYMBOL(<FS_REM_HEIGHT>).
  IF <FS_REM_HEIGHT> - LV_CONV_VALUE + 12 <= 0.
    E_NEW_PAGE = 'X'.
  ELSE.
    E_NEW_PAGE = ''.
  ENDIF.

ENDFUNCTION.

2.在smartforms中添加以下逻辑:

 传入参数为明细内容行的高度和高度单位,也就是下一行即将要打印的行的高度信息

当判断下一行明细会换页打印时,在此之前先打印标题,即实现标题行随换页一起打印的效果 

 打印完换页后的标题行和换页后的第一行明细后,清空标识,保证每一页只会打印一次标题

借助这个函数,我们就能快速的知道下一行是否需要换页,从而可以在换页后的最开始,去决定我们想要打印的东西。

以上。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeveloperMrMeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值