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

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

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

效果如下:

SAP SMARTFORMS标题换页打印自动判断_第1张图片

SAP SMARTFORMS标题换页打印自动判断_第2张图片

实现方式:

1.创建函数ZCHECK_NEW_PAGE

SAP SMARTFORMS标题换页打印自动判断_第3张图片

SAP SMARTFORMS标题换页打印自动判断_第4张图片

**********************************************************************
* 根据行高判断下一行是否需要换页
* 参照函数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().
  IF  - LV_CONV_VALUE + 12 <= 0.
    E_NEW_PAGE = 'X'.
  ELSE.
    E_NEW_PAGE = ''.
  ENDIF.

ENDFUNCTION.

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

SAP SMARTFORMS标题换页打印自动判断_第5张图片 传入参数为明细内容行的高度和高度单位,也就是下一行即将要打印的行的高度信息SAP SMARTFORMS标题换页打印自动判断_第6张图片

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

SAP SMARTFORMS标题换页打印自动判断_第7张图片

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

SAP SMARTFORMS标题换页打印自动判断_第8张图片

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

以上。

你可能感兴趣的:(SAP技术小知识,sap,abap,erp)