Smartform-实例
- 格式:pdf
- 大小:451.19 KB
- 文档页数:7
SMARTFORM 实例根据图解练习1.创建report程序。
在report程序中取得数据和调用你创建的的smartform。
(下面我取得的数据放在G_TAB_TEST的内表中,在调用smartform(ZTEST_22_SF0001)传入)。
创建report程序步骤:输入tcode:se38.输入要创建的的report程序名称然后点击“创建”按钮。
输入相应的描述,选择类型为可执行程序,状态为测试程序。
然后点击“保存”按钮。
点击“本地保存按钮”。
然后开始编写代码。
Report代码如下:(代码内容不再讲解)*&---------------------------------------------------------------------* *& Report ZTEST_22_RSF0001*&*&---------------------------------------------------------------------* *&*&*&---------------------------------------------------------------------*REPORT ZTEST_22_RSF0001 NO STANDARD PAGE HEADING LINE-SIZE 150MESSAGE-ID ZBSUN.DATA:G_TAB_TEST LIKE STANDARD TABLE OF SFLIGHT,G_REC_TEST TYPE SFLIGHT.DATA:FM_NAME TYPE RS38L_FNAM.SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME.SELECT-OPTIONS S_LINE FOR G_REC_TEST-CARRID NO INTERVALS.SELECT-OPTIONS S_DATE FOR G_REC_TEST-FLDATE.SELECTION-SCREEN END OF BLOCK BLOCK1.INITIALIZATION.REFRESH G_TAB_TEST.CLEAR: G_REC_TEST,FM_NAME.START-OF-SELECTION.SELECT *INTO TABLE G_TAB_TESTFROM SFLIGHTWHERE CARRID IN S_LINEAND FLDATE IN S_DATE.IF SY-SUBRC <> 0.MESSAGE E001 WITH 'NO DATA'.* No data selected.ENDIF.END-OF-SELECTION.CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'EXPORTINGFORMNAME = 'ZTEST_22_SF0001' * VARIANT = ' '* DIRECT_CALL = ' 'IMPORTINGFM_NAME = FM_NAME* EXCEPTIONS* NO_FORM = 1* NO_FUNCTION_MODULE = 2* OTHERS = 3.IF SY-SUBRC <> 0.* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.CALL FUNCTION fm_name* EXPORTING* ARCHIVE_INDEX =* ARCHIVE_PARAMETERS =* CONTROL_PARAMETERS =* MAIL_APPL_OBJ =* MAIL_RECIPIENT =* MAIL_SENDER =* OUTPUT_OPTIONS =* USER_SETTINGS = 'X'* IMPORTING* DOCUMENT_OUTPUT_INFO =* JOB_OUTPUT_INFO =* JOB_OUTPUT_OPTIONS =TABLESG_TAB_TEST = G_TAB_TESTEXCEPTIONSFORMATTING_ERROR = 1INTERNAL_ERROR = 2SEND_ERROR = 3USER_CANCELED = 4OTHERS = 5 .IF SY-SUBRC <> 0.* <error handling>ENDIF.2.创建smartform程序。
1.2.3. 按回车(Enter)4. 字体和段落设计(程序名:zsf_test), 注:操作顺序见红色标记数字,以下不在提示。
4. 创建段落PN 步骤(注:有窗口重叠,标记3和标记4位于新的窗口中,后面不在提示.)5. 设置缩进和空格6. 设置PN字体8. 设置表头数据9. 保存10. 激活11. 创建SmartForm 版面设计,程序的名称:zsf_test12. 设置表格属性结果:13. 全局定义-> 类型(注:标记3定义类型代码见下面)标记3类型代码,自己动手复制即可(注:与后面创建的ALV程序中定义的数据类型部分相同):TYPES:BEGIN OF t_out, " MAIN 窗口使用VBELN LIKE VBAK-VBELN, "销售订单POSNR LIKE VBAP-POSNR, "项目编号MATNR LIKE VBAP-MATNR, "物料编号ARKTX LIKE VBAP-ARKTX, "物料描述KWMENG LIKE VBAP-KWMENG, "订单数量VRKME LIKE VBAP-VRKME, "销售单位NETPR LIKE VBAP-NETPR, "销售净价WAERK LIKE VBAP-WAERK, "货币名称BSTKD LIKE VBKD-BSTKD, "采购订单ZTERM LIKE VBKD-ZTERM, "付款条件DISPO LIKE MARC-DISPO, "物料计划人KUNNR LIKE KNA1-KUNNR, "客户编号NAME1 LIKE KNA1-NAME1, "客户名称ORT01 LIKE KNA1-ORT01, "所在城市STRAS LIKE KNA1-STRAS, "街道名称ADRNR LIKE KNA1-ADRNR, "详细地址TELF1 LIKE KNA1-TELF1, "固定电话END OF t_out,BEGIN OF t_lr, "左右[Left/Right]窗口使用VBELN LIKE VBAK-VBELN, "销售订单BSTNK LIKE VBAK-BSTNK, "采购订单BSTDK LIKE VBKD-BSTDK, "下单日期VBTYP LIKE VBAK-VBTYP, "订单类型NETWR LIKE VBAK-NETWR, "销售净价WAERK LIKE VBAK-WAERK, "货币名称ZTERM LIKE VBKD-ZTERM, "付款条件KUNNR LIKE KNA1-KUNNR, "客户编号NAME1 LIKE KNA1-NAME1, "客户名称ORT01 LIKE KNA1-ORT01, "所在城市STRAS LIKE KNA1-STRAS, "街道名称ADRNR LIKE KNA1-ADRNR, "详细地址TELF1 LIKE KNA1-TELF1, "固定电话END OF t_lr,BEGIN OF t_sum, "页脚[Footer]窗口使用NETPR TYPE S_PRICE, "销售总价WAERK TYPE S_CURRCODE, "货币名称END OF t_sum. "不要少此处的点号14.全局定义-> 全局数据(注意:利用定义的数据类型定义数据,详见步骤13)15. 全局定义-> 初始化(注:标记4中(ZSF_TEST)为后面创建的ALV程序文件名称)16. 全局定义-> 货币/数量字段17. 保存程序,方法同上18. 更改面名称,其他更改名称类似19. 打开页面布局预览20. 设置main 窗口21. 增加LOGO 窗口(注:如果多个窗口,可以拖拽窗口调整个个窗口的排列顺序)22. 增加LOGO 图片23. 设置LOGO 输出选项23. 创建新窗口24. 设置新窗口为Title窗口26. 同样的方法创建Right 窗口28. 各个窗口布局结果:29. 在Title 窗口中创建文本30. 在Title 窗口中设置标题32. 设置循环LFT_LOOP34 设置模板LFT35. 在LFT模板下创建L1_C1_TXT 文本[创建文本方法如上]模板中的各个属性设置表36 . 以同样的方法在Right窗口中创建并设置RGT_LOOP37. 以同样的方法RGT_LOOP下创建并设置RGT模板模板中的各个属性设置表38. 以同样的方法在Footer窗口中创建并设置Footer模板模板中的各个属性设置表39. 在Main 窗口下增加表41. 设置表行(步骤上同,帮省略)42. 在Grid 表头下创建表行44. 修改列名称45. 给列增加文本45. 方法同上,设置各个列结果:47. 以设置表头的步骤,设置主要区域(42 ~ 45)结果:49. 对脚标进行设置[LEFT窗口一样的操作过程] 49-1. 增加循环49-2 创建表行49-4 结果50. 在Main 窗口增加一个程序行51. 设置程序行为CODE_CLEAR,作为数据清理52. 同样的方法增加一个金额计算求和的SUM程序行53. 设置Main窗口表格边框54. 绘制LEFT 窗口LFT模板边框55. 同样的方法,绘制RIGHT 窗口RGT模板边框56保存并激活57-1. TCode 38 创建程序ZSF_TEST(注:详细代码附本教程最后部分)57-2. 设置选择文本57 -3.57-458. 切换到TCode 80 模式59. 创建GUI 状态60-1. 创建Print 按钮60-3.60-5.60-7.60-8. 结果61.保存并激活62-1.运行程序,结果一:62-2.运行程序,结果二:62-3.运行程序,结果三:恭喜你完成SMARTFORM。
第一种方法:不需要定义表格接口,需要定义全局定义(全局数据、类型、初始化等)首先按着需求,在tcode输入框中输入smartforms。
点击创建:在全局定义中定义类型:如图:定义全局数据在初始化选项卡中添加初始化的代码,如图代码如下:CONSTANTS: CNS_REPID(11) TYPE C VALUE'ZBC470_P_06'.DATA:LC_MEMID1(50) TYPE C,LC_MEMID2(50) TYPE C.CONCATENATE CNS_REPID SY-UNAME SY-DATUM '1'INTO LC_MEMID1.IMPORT GWA_HEADER FROM MEMORY ID LC_MEMID1.FREE MEMORY ID LC_MEMID1.CONCATENATE CNS_REPID SY-UNAME SY-DATUM '2'INTO LC_MEMID2.IMPORT GIT_ITEM FROM MEMORY ID LC_MEMID2.FREE MEMORY ID LC_MEMID2.其中LC_MEMID1和LC_MEMID2是在程序中定义的变量,(程序中定义的内存变量和smartforms中的初始化中定义的内存变量必须相同)。
IMPORT GWA_HEADER FROM MEMORY ID LC_MEMID1.是把LC_MEMID1里面的内容导入GWA_HEADER中,作为输出参数输出。
在smartforms中应用。
在程序中输出表单可以:CONCATENATE CNS_REPID SY-UNAME SY-DATUM '1'INTO LC_MEMID1.EXPORT GWA_HEADER FROM GWA_HEADER TO MEMORY ID LC_MEMID1.CONCATENATE CNS_REPID SY-UNAME SY-DATUM '2'INTO LC_MEMID2.EXPORT GIT_ITEM FROM GIT_ITEM TO MEMORY ID LC_MEMID2.PERFORM FRM_PRINTDATA.把表头数据存入 LC_MEMID1变量,把行项目数据存入LC_MEMID2中。
⼗三、Smartform事务代码:smartforms操作步骤及解释:1.通过事务代码进⼊smartform界⾯:输⼊smartform并回车2.smartform界⾯主要有表单、样式和⽂本模块三项:(1)表单:主要是绘制表单的表格内容等,相当于在word中绘制⼀个表格;(2)样式:主要是通过设置字体的⼤⼩、⾏⾼、对齐⽅式等,便于在表单中使⽤;(3)⽂本模块:主要⽤于设置固定的内容,⽐如标题之类的,标题也可以在表单中创建使⽤。
3.创建样式:输⼊样式名称,点击“创建”(样式名修改为YTEST,步骤⼀样,不作重新截图);点击“段落格式”,选择“创建节点”,输⼊名称,点击“√”;填写“描述”、选择“对齐⽅式”、“缩进”和“间距”根据实际需求填写;点击“字体”,根据实际需求选择字体族、字体⼤⼩和样式,是否需要下划线、颜⾊;(在底部“预览”,上图和下图对⽐,可以直观地看到字体的⼤⼩和样式的变化)点击“表头数据”,选择标准段落(标准段落也就是在表单中字体未选择指定样式的情况下,按默认样式);最后点击保存并激活,以上“样式”创建完毕。
2.创建表单:点击“表单”,输⼊表单名称,点击“创建”;点击“表格属性”,输⼊描述,选择“输⼊选项”,在样式中引⼊刚刚创建好的样式YTEST;点击“全局定义”,可以根据需要在此处定义变量;点击“%PAGE1新页⾯”,点击“输出选项”,根据实际打印需求选择打印纸张的格式:肖像格式(竖向)和横向格式;点击“MAIN主窗⼝”,点击“输出选项”,根据实际需求填写边距和宽⾼点击“MAIN主窗⼝“,右键,选择“创建”,选择“模板”;点击“%TEMPLATE1新建模板1”,绘制表格的⽅式有以下两种:(1)点击“画笔按钮”,直接可在⽩⾊画布中进⾏绘制;(2)点击“细节”,⽤填写数据的⽅式绘制(详情往下看);通过这些按钮给表格添加上边框;点击“细节”,可以看到刚刚绘制的表格形成了⼀个单元格的宽⾼数据,也可以根据实际需求进⾏修改和填写;注意:单元格的宽⾼总和不能⼤于模板和窗⼝的宽⾼,否则会报错;点击“%TEMPLATE1主窗⼝”,右键,选择“创建”,选择“⽂本”;点击“%TEXT1新⽂本1”,在空⽩处填写内容,在Styles中选择刚刚在样式中创建的样式P1添加变量:点击“插⼊字段”,输⼊变量名称(注意:变量需要⽤&包起来);点击“输出选项”,填写输出的⾏和列(对应于模板中绘制的表格);点击”激活“,再点击执⾏;再点击“执⾏”;打印预览:补充说明:⼀个页⾯可以包含可多个窗⼝,⼀个模板可包含⽂本;表格接⼝、变量的定义及使⽤之后补充。
引言目的及范围本文档主要介绍Smarform使用方法。
可适用于ABAP开发人员,分析人员使用。
--最全参考资料《SAP程序设计》文档结构文档的各章节介绍的内容如下:∙概述整个form的属性及用法∙完整案例∙附注Smartform应用及概述Smarform主要是SAP针对商业处理中固定格外文件批量打印的一种工具。
主要分为Form、Style、Textmodule三个组成部分,此三个组成部分都可以被单独创建和重复利用(T-CODE:SMARTFORMS),下面将分别讲解三种工具的使用方法。
上传背景图片输入TCODE:SE78:选择FormGraphicsStoredonDocumentServer GraphicsGeneralGraphicsBMAPBitmapImages点击按钮导入图片图片属性,导入成功FORM创建创建界面输入T-CODE:SMARTFORMS,进入以下界面,输入Form名称:ZHZP_SM_TEST,点击Create进入编辑窗口:此窗口分为三个区域:左边区域:包括全部变量,和树形结构的节点导航。
当点击相应的节点时,中间区域将会显示该节点的属性,中间区域:维护各个节点的属性等右边区域:图形化窗口绘制,可以手动调节节点分布位置,实现节点在页面的布局点击保存并选择PACKAGE和CR节点全局设置包含表格属性,表格接口,全局定义Field按钮控制Form中参数和系统变量的显示节点介绍Form是由不同类型的节点组成。
一个Form包含了一个或者多个Page,第一个Page是Form 执行的的开始(当创建Form时,系统默认创建这个Page),下面将讲解每个节点的功能及其包含的子节点,输入区域此两种节点创建FORM时,系统默认创建一个PAGE,和一个Mainwindow不包含下级节点的节点列表输出逻辑空控制节点其他节点所有节点共同的选项创建模板:T emplate节点用于创建文档中的静态表格,即在打印前已经确认了行数。
1. ЏА☦2. Form Attributes [code="java"]˖Style[/code]3. Form Interface[code="java"]˖ݙ˖IT_DATA LIKE ZXLI001IT_PURNM LIKE ZXLI002IT_BLANKS LIKE ZXLI001[/code] 4. Global Definitions[code="java"]˖1).WA_DATA TYPE ZXLI001WA_PURNM TYPE ZXLI002G_COUNT TYPE IG_CURRLINE TYPE IG_TOTALLINES TYPE IG_CURRPAGE TYPE IG_TOTALPAGE TYPE IWA_BLANKS TYPE ZXLI001C_X TYPE I2).˖G_TOTALLINES, IT_DATA.˖DESCRIBE TABLE IT_DATA LINES G_TOTALLINES.[/code]5. %LOOP2[code="java"]˖᭄-Ljloop -Ljݙ˖IT_PURNM INTO WA_PURNM.[/code]6. %LOOP3[code="java"]˖᭄-Ljloop -Ljݙ˖IT_DATA INTO WA_DATA. WHERE ˖PUR_NUM = WA_PURNM-PURNM[/code]7. %CODE3[code="java"]˖G_COUNT, C_X.˖G_COUNT = G_COUNT + 1.C_X = G_COUNT.[/code]8. %CODE2[code="java"]˖G_COUNT, G_TOTALPAGE.˖DATA : L_LINE TYPE I.L_LINE = G_COUNT MOD 10.IF L_LINE = 0.G_TOTALPAGE = G_COUNT DIV 10.ELSE.G_TOTALPAGE = G_COUNT DIV 10 + 1.ENDIF.L_LINE = 0.G_COUNT = 0.[/code]9. %LOOP1[code="java"]˖᭄-Ljloop -Ljݙ˖IT_DATA INTO WA_DATA. WHERE ˖PUR_NUM = WA_PURNM-PURNM[/code]10. %CODE1[code="java"]˖G_COUNT, C_CURRLINE.˖G_COUNT = G_COUNT + 1.G_CURRLINE = G_CURRLINE + 1.[/code]11. %TEMPLATE212. %CODE4[code="java"]˖G_COUNT, G_CURRPAGE.˖DATA : L_LINE TYPE I.L_LINE = G_COUNT MOD 10.IF L_LINE = 0.G_CURRPAGE = G_COUNT DIV 10.ELSE.G_CURRPAGE = G_COUNT DIV 10 + 1.ENDIF.[/code]13. %CODE5[code="java"]˖G_COUNT, IT_BLANKS.˖G_COUNT = G_COUNT MOD 10.IF G_COUNT <> 0.G_COUNT = 10 - G_COUNT.ENDIF.CLEAR IT_BLANKS[].DO G_COUNT TIMES.APPEND WA_BLANKS TO IT_BLANKS.ENDDO.G_COUNT = 0.[/code]14. %LOOP4 [code="java"]˖᭄-Ljloop -Ljݙ˖IT_BLANKS INTO WA_BLANKS.[/code] 15. %TEMPLATE4 16. %CONDITION1 [code="java"]˖G_CURRLINE <> G_TOTALLINES[/code] 17. %COMMAND1 [code="java"]˖Go to New Page -> %PAGE1[/code] 18. %CODE6 [code="java"]˖IT_DATA, IT_PURNM. ˖CLEAR IT_DATA[]. CLEAR IT_PURNM[].[/code]ABAP DictionaryˈᡞՈexcel ˈ≵ˈ ˈخsap Ոalv smartforms ˈাˈ໔ՈDŽ 1. ˈज़-Ljṗ-LjStyleStyle ˈT-Code smartforms ˈᮄStyle DŽStyle ˈ↉-Ljে⏲-Lj߯-LjབTH(Table Header)ǃetc.ˈ݊Ё᪂ˈᐌՈAlignment ǃেǃЁˈIndent Ё᪂Left Margin 2mmˈSpacing Ё᪂Line Spacing 1ln ˗✊Header DataЁ᪂Ո↉ˈϔՈḐ˗᳔ԧḐˈϔFontˈ᪂ԧǃǃԧǃϟˈৰStandard Setting Bar Code ໐᪂ՈDŽ2. ˈЁDŽTable Ё᪂likeЁՈԧˈẝЁ᫇Ոˈ᭄ЁˈৃĀZ āᓔՈԧˈT-Code SE11Ոৰˈ⚍ˈˈৰlikeՈഄˈᭆˈẝՈԧᓎDŽ3. ˈᅮЁDŽˈẜˈẝˈ໐TypesˈẝՈՈህSMARTFORMS ՈЏА☦њˈʽABAP Editor*&---------------------------------------------------------------------* *& Report ZT_XLI_001*&*&---------------------------------------------------------------------* *&*&*&---------------------------------------------------------------------* REPORT ZT_XLI_002.TYPE-POOLS : SLIS.TABLES : EKKO,EKPO.DATA : C_TABIX LIKE SY-TABIX.DATA : L_FM_NAME(30) TYPE C.TYPES : BEGIN OF TY_PURNM,PURNM TYPE EKKO-EBELN,END OF TY_PURNM.TYPES : BEGIN OF TY_EKKO,PUR_NUM TYPE EKKO-EBELN,CRT_DATE TYPE EKKO-AEDAT,VEND_NUM TYPE EKKO-LIFNR,PAY_KEY TYPE EKKO-ZTERM,END OF TY_EKKO.TYPES : BEGIN OF TY_EKPO,PUR_NO TYPE EKPO-EBELN,MAT_NUM TYPE EKPO-MATNR,PUR_TXT TYPE EKPO-TXZ01,PLT_NUM TYPE EKPO-WERKS,STOR_LOC TYPE EKPO-LGORT,END OF TY_EKPO.TYPES : BEGIN OF TY_DATA,SEL TYPE SEL,PUR_NUM TYPE EKKO-EBELN,CRT_DATE TYPE EKKO-AEDAT,VEND_NUM TYPE EKKO-LIFNR,PAY_KEY TYPE EKKO-ZTERM,MAT_NUM TYPE EKPO-MATNR,PUR_TXT TYPE EKPO-TXZ01,PLT_NUM TYPE EKPO-WERKS,STOR_LOC TYPE EKPO-LGORT,END OF TY_DATA.TYPES : BEGIN OF TY_SELS,PUR_NUM TYPE EKKO-EBELN,CRT_DATE TYPE EKKO-AEDAT,VEND_NUM TYPE EKKO-LIFNR,PAY_KEY TYPE EKKO-ZTERM,MAT_NUM TYPE EKPO-MATNR,PUR_TXT TYPE EKPO-TXZ01,PLT_NUM TYPE EKPO-WERKS,STOR_LOC TYPE EKPO-LGORT,END OF TY_SELS.DATA : WA_PURNM TYPE TY_PURNM.DATA : IT_PURNM TYPE STANDARD TABLE OF TY_PURNM WITH HEADER LINE.DATA : WA_EKKO TYPE TY_EKKO.DATA : IT_EKKO TYPE STANDARD TABLE OF TY_EKKO WITH HEADER LINE.DATA : WA_EKPO TYPE TY_EKPO.DATA : IT_EKPO TYPE STANDARD TABLE OF TY_EKPO WITH HEADER LINE.DATA : WA_DATA TYPE TY_DATA.*DATA : CT_DATA TYPE STANDARD TABLE OF TY_DATA WITH HEADER LINE.DATA : IT_DATA TYPE STANDARD TABLE OF TY_DATA WITH HEADER LINE.DATA : WA_SELS TYPE TY_SELS.DATA : IT_SELS TYPE STANDARD TABLE OF TY_SELS WITH HEADER LINE.DATA : IT_BLAK TYPE STANDARD TABLE OF TY_SELS WITH HEADER LINE.DATA : I_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE.DATA : I_LAYOUT TYPE SLIS_LAYOUT_ALV.DATA : WA_REPID LIKE SY-REPID.SELECTION-SCREEN BEGIN OF BLOCK BLK1.SELECTION-SCREEN SKIP 1.SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN COMMENT (20) TEXT-A01.SELECT-OPTIONS : S_PURNUM FOR EKKO-EBELN OBLIGATORY.SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK BLK1.START-OF-SELECTION.PERFORM GET_EKKO_EKPO.PERFORM GETDATA.PERFORM CATALOG.PERFORM ALVSHOW.*&---------------------------------------------------------------------* *& Form GET_EKKO_EKPO*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* FORM GET_EKKO_EKPO.IF S_PURNUM IS NOT INITIAL.* SELECT EBELN* FROM EKKO INTO TABLE IT_PURNM* WHERE EKKO~EBELN IN S_PURNUM.SELECT EBELN AEDAT LIFNR ZTERMFROM EKKO INTO TABLE IT_EKKOWHERE EKKO~EBELN IN S_PURNUM.SELECT EBELN MATNR TXZ01 WERKS LGORTFROM EKPO INTO TABLE IT_EKPOWHERE EKPO~EBELN IN S_PURNUM.DELETE IT_EKPO WHERE MAT_NUM = SPACE.ENDIF.ENDFORM. "GET_EKKO_EKPO*&---------------------------------------------------------------------* *& Form GETDATA*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* FORM GETDATA.LOOP AT IT_EKKO INTO WA_EKKO WHERE PUR_NUM <> SPACE.LOOP AT IT_EKPO INTO WA_EKPO WHERE PUR_NO = WA_EKKO-PUR_NUM.WA_DATA-PUR_NUM = WA_EKKO-PUR_NUM.WA_DATA-CRT_DATE = WA_EKKO-CRT_DATE.WA_DATA-VEND_NUM = WA_EKKO-VEND_NUM.WA_DATA-PAY_KEY = WA_EKKO-PAY_KEY.WA_DATA-MAT_NUM = WA_EKPO-MAT_NUM.WA_DATA-PUR_TXT = WA_EKPO-PUR_TXT.WA_DATA-PLT_NUM = WA_EKPO-PLT_NUM.WA_DATA-STOR_LOC = WA_EKPO-STOR_LOC.APPEND WA_DATA TO IT_DATA.ENDLOOP.ENDLOOP.ENDFORM. "GETDATA*&---------------------------------------------------------------------* *& Form CATALOG*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* FORM CATALOG.WA_REPID = SY-REPID.CLEAR I_FIELDCAT.DEFINE MAC_SET.I_FIELDCAT-REF_TABNAME = 'IT_DATA'.I_FIELDCAT-FIELDNAME = &1.I_FIELDCAT-SELTEXT_S = &2.I_FIELDCAT-SELTEXT_M = &2.I_FIELDCAT-SELTEXT_S = &2.I_FIELDCAT-COL_POS = &3.I_FIELDCAT-OUTPUTLEN = &4.APPEND I_FIELDCAT.END-OF-DEFINITION.MAC_SET 'PUR_NUM ' 'Purchase Number' C_TABIX '14'.MAC_SET 'CRT_DATE' 'Created Date' C_TABIX '11'.MAC_SET 'VEND_NUM' 'Vendor Number' C_TABIX '13'.MAC_SET 'PAY_KEY ' 'Payment Key' C_TABIX '10'.MAC_SET 'MAT_NUM ' 'Material Number' C_TABIX '14'.MAC_SET 'PUR_TXT ' 'Short Text' C_TABIX '20'.MAC_SET 'PLT_NUM ' 'Plant' C_TABIX '4'.MAC_SET 'STOR_LOC' 'Location' C_TABIX '6'.* I_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.I_LAYOUT-BOX_FIELDNAME = 'SEL'.ENDFORM. "CATALOG*&---------------------------------------------------------------------* *& Form ALVSHOW*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* FORM ALVSHOW.CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'EXPORTINGI_CALLBACK_PF_STATUS_SET = 'FM_SET_STATUS'I_CALLBACK_USER_COMMAND = 'FM_USER_COMMAND'I_CALLBACK_PROGRAM = WA_REPIDIS_LAYOUT = I_LAYOUTI_GRID_TITLE = 'PURCHASE LIST'IT_FIELDCAT = I_FIELDCAT[]TABLEST_OUTTAB = IT_DATAEXCEPTIONSPROGRAM_ERROR = 1OTHERS = 2.IF SY-SUBRC <> 0.MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNOWITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.ENDIF.ENDFORM. "ALVSHOW*&---------------------------------------------------------------------* *& Form FM_SET_STATUS*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* * -->EXTAB text*----------------------------------------------------------------------* FORM FM_SET_STATUS USING EXTAB TYPE SLIS_T_EXTAB.SET PF-STATUS 'BUTTON' .ENDFORM. "FM_SET_STATUS*&---------------------------------------------------------------------* *& Form FM_USER_COMMAND*&---------------------------------------------------------------------* * text*----------------------------------------------------------------------* * -->R_UCOMM text* -->RS_SELFIELD text*----------------------------------------------------------------------* FORM FM_USER_COMMAND USING R_UCOMM LIKE SY-UCOMMRS_SELFIELD TYPE SLIS_SELFIELD.CASE R_UCOMM.WHEN 'PRINT'.PERFORM FM_BUTTON_PRT.WHEN OTHERS.ENDCASE.ENDFORM. "FM_USER_COMMAND*&---------------------------------------------------------------------* *& Form FM_BUTTON_PRT*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM FM_BUTTON_PRT.LOOP AT IT_DATA INTO WA_DATA.IF WA_DATA-SEL = 'X'.WA_SELS-PUR_NUM = WA_DATA-PUR_NUM.WA_SELS-CRT_DATE = WA_DATA-CRT_DATE.WA_SELS-VEND_NUM = WA_DATA-VEND_NUM.WA_SELS-PAY_KEY = WA_DATA-PAY_KEY .WA_SELS-MAT_NUM = WA_DATA-MAT_NUM .WA_SELS-PUR_TXT = WA_DATA-PUR_TXT .WA_SELS-PLT_NUM = WA_DATA-PLT_NUM .WA_SELS-STOR_LOC = WA_DATA-STOR_LOC.APPEND WA_SELS TO IT_SELS.WA_PURNM-PURNM = WA_DATA-PUR_NUM.APPEND WA_PURNM TO IT_PURNM.SORT IT_PURNM BY PURNM ASCENDING.DELETE ADJACENT DUPLICATES FROM IT_PURNM COMPARING ALL FIELDS.ENDIF.ENDLOOP.CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'EXPORTINGFORMNAME = 'ZXLI_TEST_002'IMPORTINGFM_NAME = L_FM_NAMEEXCEPTIONSNO_FORM = 1NO_FUNCTION_MODULE = 2OTHERS = 3.CALL FUNCTION L_FM_NAMETABLESIT_DATA = IT_SELSIT_PURNM = IT_PURNMIT_BLANKS = IT_BLAK.CLEAR : IT_SELS[], "required ensure the internal table is newIT_PURNM[],IT_BLAK[].ENDFORM. "FM_BUTTON_PRT。
单据要求:实现步骤:(1)在创建smartforms的form之前建立段落样式,字体样式等:(2)创建smartforms的form表格(3)在表格接口———》表中建立两个表接口(),类型为like,后面的参考打印为se11中建立的表结构,可以自行设定。
(4)定义全局变量在初始化中DESCRIBE TABLE GTD_ITEM LINES G_TOTALLINES.//获取整个table中数据列表中总的行数TABLES:EKKO,EKPO,EKET,MAKT.//用于金额和数量的显示,因为他有些参考表,不能直接显示,不用这种方法可以在货币数量字段中新定义一些货币数量字段。
(5)在%page新页面上建立如图所示的结构:三个文件夹分别表示:单据名称,table的头部信息,还有单据头部信息,可以分别加上各自的样式(6)在mian中建立如图的结构1、%LOOP1表头循环设置:数据-〉loop循环-〉操作数:GTD_HEADER into GTH_HEADER作用:循环表头内表中的数据,每次打印一个凭证的行项目数据。
由于内表在这里不能有工作区,因此将每个表头数据放置到另外的工作区。
如图:2、%LOOP2循环明细数据,统计单张凭证行数设置:作用:由于在打印每张凭证及行项目之前,需要知道该凭证的总页数,因此需要首先计算gtd_ITEMS内表中有多少条当前凭证的行记录数。
3.统计总页数:4.%loop3循环明细数据,记录单张凭证数和积累行数:5.明细模板根据纸张要求设置它的宽度和显示高度还有根据要显示的数据列出表格数量和每格宽度高度。
在文本中写入变量:如图:6.计算当前页:7.记录空行:8.空数据条目循环:where条件为空作用:循环内表GTD_BLANKS,次数为内表中的记录数,即空行数,打印输出空行。
空数据条目循环模板设置要与前面的明细模板一只主窗口的高度必须等于你需要的高度,不要多,也不要少,在本例中,高度为10行x 11mm = 110mm,不一致分页效果将出现两页数据在一页而分页正常,导致错误。
Smartform报表实例目的:根据用户需求自定义打印报表。
说明:Smartform的创建需要指定页格式、样式,如果报表中存在条码,则需要指定条码格式。
涉及内容:页格式(SPAD)、条码格式(SE73)、样式(SMARTFORMS)、报表(SMARTFORMS)。
1.4 SMARTFORMS创建报表表格1.4.1 创建报表表格1、T-CODE:SMARTFORMS,输入表格名称,点击”创建“按钮,如图1.4.1-1:图1.4.1-12、输入表格的描述,然后保存,如图1.4.1-2:图1.4.1-21.4.2 全局设置-表格属性1、在表格属性的“输出选项”页签中指定页格式和样式,可以是系统标准的也可以是前面创建的,本练习选择前面自定义的页格式和样式,如图1.4.2-1:图1.4.2-11.4.3 全局设置-表格接口1、在表格接口的“导入”页签中配置Import参数(要同程序中调用该Smartform的程序的参数相同),本练习配置了5个导入参数,如图1.4.3-1:图1.4.3-1说明:a、可选和值传递选项处可以根据实际情况而定,如果勾选了可选的选项,则在程序调用时可不对该参数进行传递值,否则为必须传递的参数,如果没有对必须传递的参数传值就会报错;b、自定义上面的9个参数为系统生成,在“导出”页签中也有3个系统生成的参数,本练习不会使用到,所以不做详细介绍;c、“表”和“例外”页签中也可以进行参数配置,但是本练习都没使用到,所以也不做详细介绍;d、导入参数也可以是导入内表,这样可以在“页和窗口”的主窗口中进行循环打印。
1.4.4 全局设置-全局定义1、在全局定义的“全局数据”页签中配置Smartform中的参数,如图1.4.4-1:图1.4.4-1说明:a、全局数据中的参数通常是为了将表格接口中导入的参数进行处理并赋值。
2、在全局定义的“初始化”页签中将导入Smartform的参数进行处理后赋值给输出参数,如图1.4.4-2:图1.4.4-2说明:a、输入参数为值需要处理的参数;b、输出参数为输入参数处理后的数值返回,可以和输入参数同名,也可以再“全局数据”页签中进行自定义,本练习使用的是自定义的参数;c、本练习的值处理代码如下:MATNR = MATNR1 .MAKTX = MAKTX1 .BISMT = BISMT1 .LGORT = LGORT1 .CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'EXPORTINGINPUT = MEINS1LANGUAGE = SY-LANGUIMPORTING* LONG_TEXT =OUTPUT = MEINS* SHORT_TEXT =* EXCEPTIONS* UNIT_NOT_FOUND = 1* OTHERS = 2.IF SY-SUBRC <> 0.* Implement suitable error handling hereENDIF.*MEINS = MEINS1 .CONDENSE MATNR .CONDENSE MAKTX .CONDENSE MEINS .CONDENSE BISMT .CONDENSE LGORT .1.4.5 页和窗口-新页面经过1.4.1-1.4.4就完成了数据的处理。
SMARTFORM知识一、SMARTFORM的特征SMARTFORM是在SAPScript的基础之上产生的一种新的FORM制作方式,它完全兼容SAPScript。
在做SMARTFORM的过程中基本上不需要多少编程知识,它有一个图形界面来帮助我们完成工作。
这个图形界面由三个部分组成,它们分别是:Form Painter、PC Editer、Table Painter。
启动SMARTFORM设计的事务代码:SMARTFORMS,进入的界面如下:输入你要创建的SMARTFORM的名称,然后点击“创建”,进入下面的Form Builder界面:注:上面另外两个选项Style、Text module分别是用来定义FORM的样式和文本模块的。
上面的屏幕分为三个部分:Form Painter:主要用来设计SMARTFORM输出页面的格式,可以在页面上包含窗口和图(最右边)形,还可以指定它们在页面上的位置以及它们的大小等。
在图片左上角的工具栏有一个按钮可以用来显示和隐藏这个窗口。
PC Editer:主要用来初始化文本(TEXT)和域(FIELD),它包含的功能主要有以下几个方(中间)面,1)输入、删除、选择、Navigating in the SAP Form Builder:它主要用来显示一个SMARTFORM的层次结构。
(最左边)当你在层次结构中选择了一个NODE(结点)后,在上面截屏的中间部分会显示这个NODE的MAINTENANCE屏幕。
二、在做FORM前要了解的几个概念1、FORM的结构:一个FORM往往是由页面(PAGES)、输出区域(OUTPUT AREAS即WINDOWS)、地址栏(ADDRESS)、图形(GRAPHICS,比如公司LOGO)、数据(DATA)、以及文本内容(TEXT)组成。
2、主窗体和子窗体:(MAIN WINDOWSAND SUBWINDOWS)这是页面上两个不同的输出区域,用来输出数据,文本等内容。
Smartforms 范例程序解析1.业务说明读取三个表:SCUSTOM---- 航班用户(customers)----master data存储航班用户的信息,如上SPFLI---航班计划(connections)-记录个航班公司,每个航班的路线起降时间等。
---master dataSBOOK -----航班订票(bookings)--记录航班公司ID,航班号,日期,登记号,机票等--business data通过客户号和SCUSTOM表相连。
通过(航班公司)ID,和(航班)号和SPFLI 相连。
2.程序解析*----------------------------------------------------------------------** Report SF_EXAMPLE_03*----------------------------------------------------------------------** Printing of documents using Smart Forms: in this example* the carrids are also sorted when printing the customers* bookings*----------------------------------------------------------------------*report sf_example_03.data: carr_id type sbook-carrid, "承运人cust_id type scustom-id, "客户号fm_name type rs38l_fnam, "smartforms tech namecontrol type ssfctrlop, "Smart Forms: 控制结构传递控制控制参数errtab type tsferror. "SAP Smart Forms: 运行时错误DATA job_output_info TYPE ssfcrescl.DATA job_output_options TYPE ssfcresop.select-options: s_custid for cust_id default50to60,s_carrid for carr_id ."default 'LH' to 'LH'. parameter: p_form type tdsfname default'SF_EXAMPLE_03'.data: customers type ty_customers,bookings type ty_bookings,connections type ty_connections,customer type scustom. "航空客户信息的行结构,因为我们要按客户分组(分页输出)************************ DATA RETRIEVAL ************************* get data of bookingsselect * from scustom into table customerswhere id in s_custidorder by primary key.************************ PRINTING OF DATA *********************** get the name of the generated function module using the logical* Smart Forms name--用smartforms的逻辑名获得技术名p_form---->fm_name call function'SSF_FUNCTION_MODULE_NAME'exporting formname = p_form* variant = ' '* direct_call = ' 'importing fm_name = fm_nameexceptions no_form = 1no_function_module = 2others = 3.if sy-subrc <> 0.* error handlingmessage id sy-msgid type sy-msgty number sy-msgnowith sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.exit.endif.control-no_dialog = 'X'.""不显示打印对话框control-preview = 'X'. "显示预览control-no_open = 'X'.control-no_close = 'X'.call function'SSF_OPEN'"打开接口,传递参数exporting* ARCHIVE_PARAMETERS =* USER_SETTINGS = 'X'* MAIL_SENDER =* MAIL_RECIPIENT =* MAIL_APPL_OBJ =* OUTPUT_OPTIONS =control_parameters = control* IMPORTING* JOB_OUTPUT_OPTIONS =exceptionsformatting_error = 1internal_error = 2send_error = 3user_canceled = 4others = 5.if sy-subrc <> 0.* error handlingmessage id sy-msgid type sy-msgty number sy-msgnowith sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.exit.endif.* print all the bookings of different customersloop at customers into customer.clear: bookings[], connections[]. "清除上一次的记录做两个内表,一次取出更好点select * from sbook into table bookingswhere customid = customer-idand carrid in s_carridorder by primary key.select * from spfli into table connectionsfor all entries in bookingswhere carrid = bookings-carridand connid = bookings-connidorder by primary key.* now call the generated function modulecall function fm_nameexporting* archive_index =* archive_parameters =control_parameters = control* mail_appl_obj =* mail_recipient =* mail_sender =* output_options =* user_settings = 'X'customer = customer "这里对应smartform里的表接口bookings = bookingsconnections = connections* importing document_output_info =* job_output_info =* job_output_options =exceptions formatting_error = 1internal_error = 2send_error = 3user_canceled = 4others = 5.if sy-subrc <> 0.* error handlingmessage id sy-msgid type sy-msgty number sy-msgnowith sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.endif.endloop.call function'SSF_CLOSE'"信息全部输出后,关闭接口* IMPORTING* JOB_OUTPUT_INFO =exceptionsformatting_error = 1internal_error = 2send_error = 3others = 4.if sy-subrc <> 0.* error handlingmessage id sy-msgid type sy-msgty number sy-msgnowith sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.endif.* analyse internal error table of Smart Forms “返回错误信息,分析原因并改正call function'SSF_READ_ERRORS'importingerrortab = errtab.if not errtab is initial.* add your handlingendif.3. smartform 解析3.1 样式3.2表格接口(或者说,程序和smartform的接口)3.3 全局定义(既然)如果把smartforms也理解为一个程序的话,这里定义smartforms可使用的变量。
报表要求:(见下表)要求:1、不是套打,表格线也需要输出2、每张报表打印8行记录,不足的空白行也需要输出3、按凭证号打印单据,可以连续打印多张报表。
一、se11中创建结构1. Header结构mblnr LIKE mseg-mblnr, " 凭证号bldat LIKE rkpf-rsdat, " 凭证日期c_so(16) TYPE c, " 销售订单号c_issdt LIKE sy-datum, " 发货日期werks LIKE mseg-werks, " 地点PLNAT_NAME LIKE t001w-name1, " 出货单位名称kokrs LIKE mseg-kokrs, " 控制范围kostl LIKE mseg-kostl, " 成本中心cc_name LIKE cskt-ktext, " 成本中心名称名称c_depart(45) TYPE c, " 领料部门bwart LIKE mseg-bwart, " 移动类型代码btext_mt LIKE t156t-btext, " 移动类型描述c_btext_mt(60) TYPE c, " 移动类型次数C_TOTAL(17) TYPE C, "合计输出时由用户手工填写2. item结构mblnr LIKE mseg-mblnr, " 物料凭证编号: 物料凭证rsnum LIKE rkpf-rsnum, " 凭证号: 预留单mjahr LIKE mseg-mjahr, " 物料凭证年度zeile LIKE mseg-zeile, " 序号bwart LIKE mseg-bwart, " 移动类型代码werks LIKE mseg-werks, " 地点kokrs LIKE mseg-kokrs, " 控制范围kostl LIKE mseg-kostl, " 成本中心matnr LIKE mseg-matnr, " 物料号码maktx LIKE makt-maktx, " 物料描述erfme LIKE mseg-erfme, " 计量单位c_planc LIKE resb-bdmng, " 计划数量(手工填写)c_outc LIKE mseg-erfmg, " 实发数量c_count(6) TYPE c, " 件数(手工填写)lgort LIKE mseg-lgort, " 仓储地点charg LIKE mseg-charg, " 备注二、创建样式:在创建Form之前,需要创建多种段落和字体样式,供Form中的文字使用。
需要设置多种“段落格式”,并且必须在“表头数据”中设定“标准段落”1.创建段落格式,一般有RH(Report Header),PD(Page Header), PB(Page Bottom),LD(Line Header and Details),字体:CNSONG,9pt。
注意最好在各段落的“首行缩”中设定1mm的缩进,否则,在Form中表格线和文字之间会没有任何间隙。
2.设置“表头数据”中“标准段落”3、保存并激活样式文件。
三、创建SmartForm1、在“全局设置”-〉“表格属性”-〉“输出选项”中设定“页格式”:即纸张的大小“样式”:设定本Form使用的默认样式文件,这里指定为第一步创建的样式文件。
2. 在“全局数据”中,定义全局的变量,我们需要定义如下几个变量wa_header type zheader, "表头数据工作区,由于SmartForms中的内表不能有HeaderLine,因此必须定义一个与内表结构一样的工作区wa_items type zitem "表单明细工作区wa_blanks type zitems "空白行工作区itab_blanks type zitems "空白行内表g_count type i "记录一张报表的明细的记录数量G_CURRLINE type i "记录所有报表共计打印了多少行,用于判断最后一页G_TOTALLINES type i "记录内表itab_items总行数,用于判断最后一页G_CURRPAGE type i "一个凭证的当前页码G_TOTALPAGE type i "一个凭证的总页码3、在“初始化”中,将传入的内表行数计算到刚设定的全局变量中DESCRIBE TABLE itab_ITEMS LINES G_TOTALLINES.至此,我们已经得到了表头和明细这2个内表的数据,下面准备画报表并输出数据。
4、在“页和窗口”中,在“%Page1”页下,添加3个窗口"MAIN主窗口": 在SmartForm中,只有窗口类型为“主窗口”的窗口,才能被循环。
例如,在最前面的样表中,明细数据有20条,不能在一页中打印输出完毕,需要输出4页才能打印完一张单据的数据,在这4张单据中,表头和表尾是不变的,但是表中间部分数据却是变化的,中间这个窗口需要被循环输出4次。
因此需要将这个窗口类型设定为“主窗口”。
在本例中为现实明细数据的这部分。
“窗口1”:从表最上面到明细栏的标题栏(包括标题栏)“窗口2”:最底下2行。
注意:窗口的宽度加上遍距不能大于纸张宽度。
创建好这三个窗口,设定好窗口的宽度,高度,以及位置信息。
下图是整个SmartForm 的结构注意,我将输出表头的窗口“%windows1 页头”放在了输出明细数据的窗口“主窗口”的下面,这是必须的,因为表头中的数据需要从表头内表itab_header中来。
loop1是循环内表itab_header,将数据放到表头工作区wa_header中。
因此,%windows1 页头窗口就可以直接使用工作区wa_header中的数据。
如果该窗口放在了主窗口的前面,那么至少第一页中表头会没有数据,而且后面每一页的表头显示的都是下一个表头的内容。
注:虽然打印机输出时,现打印%WINDOWS1 页头,再打印MAIN主窗口,最后打印%WINDOW2页尾窗口,但是程序执行时,却是按照上图中树结构从上到下进行处理的,是先处理MAIN主窗口,其次%WINDOWS1 页头,最后%WINDOW2页尾窗口的逻辑顺序,可以从跟踪SMARTFORMS程序得知。
下面详细介绍整个逻辑流程和代码:1、%LOOP1表头循环设置:数据-〉loop循环-〉操作数:itab_header into wa_header作用:循环表头内表中的数据,每次打印一个凭证的行项目数据。
由于内表在这里不能有工作区,因此将每个表头数据放置到另外的工作区。
2、%LOOP4计算单个凭证总页码设置:数据-〉loop循环-〉操作数:Itab_ITEMS INTO WA_ITEMSWHERE条件:IBLNR = WA_HEADER-IBLNR作用:由于在打印每张凭证及行项目之前,需要知道该凭证的总页数,因此需要首先计算itab_ITEMS内表中有多少条当前凭证的行记录数。
3、%CODE4累计单个凭证的行项目数输入参数:G_COUNT代码:G_COUNT = G_COUNT + 1.作用:累计当前凭证的行项目数。
4、%CODE1计算当前凭证总页码输入参数:G_TOTALPAGE,G_COUNT代码:G_TOTALPAGE = 0.*计算单个凭证的总页码G_TOTALPAGE = G_COUNT MOD 8.IF G_TOTALPAGE = 0.G_TOTALPAGE = G_COUNT DIV 8.ELSE.G_TOTALPAGE = G_COUNT DIV 8 + 1.ENDIF.G_COUNT = 0.作用:根据第三步累计的单个凭证的总行项目数,以及每页打印的行记录数(8),计算该凭证需要打印的总页数。
计算完毕以后,G_COUNT重新置0。
6、%LOOP2循环输出明细设置:数据-〉loop循环-〉操作数:Itab_ITEMS INTO WA_ITEMSWHERE条件:IBLNR = WA_HEADER-IBLNR作用:这里的循环条件与第2步的条件完全一致,准备循环打印当前凭证的所有行项目。
7、%CODE2记录行数加1输入参数:G_COUNT,G_CURRLINE代码:* 每打印一行行记录,记录数量加1G_COUNT = G_COUNT + 1.G_CURRLINE = G_CURRLINE + 1.作用:每循环一次,当前凭证打印的行记录数加1,所有凭证打印的总行记录数加1。
8、%TEMPLATE4数据明细作用:模板,行记录的表格,以及相关文本内容。
LOOP2每循环一次,就打印输出一行该模板以及文本内容。
行高一般为5mm(根据实际调整),注意模板的宽度不能超过窗口的宽度。
在“细节”中可以调整模板的每个单元格的宽度,以及每行的高度。
9、%TEXT22 - %TEXT30文本内容%TEXT22 序号:&G_COUNT(CZT4R)& 输出选项-〉输出结构:第1行第1列%TEXT23物料号码:&WA_ITEMS-MATNR& 输出选项-〉输出结构:第1行第2列依此类推。
10、%CODE5计算当前页码输入参数:G_COUNT,G_CURRPAGE代码:DATA: L_LINE TYPE I.L_LINE = G_COUNT MOD 8.IF L_LINE = 0.G_CURRPAGE = G_COUNT / 8.ELSE.G_CURRPAGE = G_COUNT DIV 8 + 1.ENDIF.作用:每输出一行,计算当前行所在的页码,即为当前页11、%CODE3计算空行输入参数:G_COUNT,Itab_BLANKS,WA_BLANKS代码:G_COUNT = G_COUNT MOD 8.* 需要的空记录行数IF G_COUNT <> 0.G_COUNT = 8 - G_COUNT.ENDIF.CLEAR Itab_BLANKS[].DO G_COUNT TIMES.APPEND wa_blanks to itab_blanks.ENDDO.G_COUNT = 0.作用:在当前凭证的所有有效数据行打印完毕以后,还需要计算需要打印多少空行,才能刚好打印满一张纸。
用计算的数量,填充内表itab_BLANKS,计算完毕以后,G_COUNT 必须清0。