SAP系统做打印单据用的, 感觉很不好用, 特别是要嵌入韩文时必须使用嵌入的word编辑器,运行速度简直不可忍受. 见过一些Adobe interactive form的示例, 看着相当不错, 不过据说需要花money额外买licence, 哪有smartform这种免费东西来得实惠.
一般打印需求,会要求有标题抬头,打印主体, 打印页脚.
在smartform中实现时, 抬头window作为secondary window, 而打印主体则是作为Main window, 页脚部分区域包含页码等内容,注意它的类型为Final window, 不然输出时可能有错误.
1. 合理使用Table , template.
前者是如同列表般输出, 可以多行多列重复输出. 而且可以设置table 的header, footer. Table 一行的高度是可调的,可以根据内容的多少自动整高度
Template则需要固定格式输出, 需要将所需要的表格画出格子, 然后将内容分配给各自的格子. 注意它的格子的大小是固定的, 如内容超出格子,将不会显示多余内容.
上例中是采用的Loop中嵌套Table输出. 注意 Table中其实对应的内表只有一行,只是这一行数据在显示时采用了多行显示.
每一行对应的抬头都是在Mani area中.
2. Table输出控制新页
譬如在输出20行后,打开新页输出.
我们需要得到输出的当前行, 而且需要注意与ABAP程序不同, sy-tabix不能标识此时table中的当前行索引, 需要采用一自增变量来作为内表索引号. 判断是否需要分页,采用余数MOD 计算
1> 定义Table内的索引及分页标记g_page
2> 根据分页标记变量决定是否转到新页
如果等于0的情况下
3. 调用两个smartform.
固定输出的内容需要采用两页输出, 方便的实现是分别实现两个smartform对应两页内容,调用流程如下:
FM: SSF_OPEN
FM: SSF_FUNCTION_MODULE_NAME FORM1
FM: SSF_FUNCTION_MODULE_NAME FORM2
FM: SSF_CLOSE
4. 程序与smartform间传递内表数据
因为一般smartform 要打印的内表类型都是定制化的, 而在标准smartform中如果传入的是内表类型, 则需要定义stuture类型在DDIC 中. 但这样会比较繁琐。可以通过下面的方法访问程序中的内表,而不用定义DDIC中的结构,如下:
1> Copy 结构类型到smartform的类型定义中
2> 定义输出内表
3> 初始化时获取程序输出内表内容
5. 在smartform中插入图片
首先在SE78 中上传图片
然后在Smartform中插入Graphic元素,如果需要调整图片大小,则需要调整DPI属性, 其值越大,图片越小.