目录:
1、ALV选择列印盘点卡内容
2、列印内容按盘点号码分页、每8笔盘点项次分页
3、每张盘点卡打印8行数据,不足8行数据要打印空行
************************************************************************ * Program Name : * Descriptions : 盘点清册列印 * T-Code : * Updates Tables : * Input Parameters : * Output Parameters : * Return Codes : * Special Logic : * Includes : ************************************************************************ * Modification Log ************************************************************************ * Date Ver. Programmer Descriptions * -------- ---- ------------ ------------------------------------------- * 2020 2.22 XXX Create * ************************************************************************ REPORT ZMMRTEST. *********************************************************************** * Tables Definitions ************************************************************************ TABLES: ikpf,iseg. *TABLES:. ************************************************************************ * Data Definitions ************************************************************************ DATA: BEGIN OF gt_data OCCURS 0, checkbox(1) TYPE c, gjahr LIKE ikpf-gjahr, zldat LIKE ikpf-zldat, iblnr LIKE ikpf-iblnr, zeili LIKE iseg-zeili, werks LIKE ikpf-werks, lgort LIKE ikpf-lgort, lgpbe LIKE mard-lgpbe, mtart LIKE mara-mtart, matnr LIKE iseg-matnr, maktx LIKE makt-maktx, erfmg LIKE iseg-erfmg, erfme LIKE iseg-erfme, END OF gt_data. DATA: BEGIN OF gt_header OCCURS 0, iblnr LIKE ikpf-iblnr, gjahr LIKE ikpf-gjahr, werks LIKE ikpf-werks, lgort LIKE ikpf-lgort, zldat LIKE ikpf-zldat, END OF gt_header. DATA: BEGIN OF gt_item OCCURS 0, iblnr LIKE iseg-iblnr, gjahr LIKE iseg-gjahr, zeili LIKE iseg-zeili, lgpbe LIKE mard-lgpbe, mtart LIKE mara-mtart, matnr LIKE iseg-matnr, maktx LIKE makt-maktx, erfmg LIKE iseg-erfmg, erfme LIKE iseg-erfme, END OF gt_item. DATA: g_butxt LIKE t001-butxt, g_totalpage TYPE i. TYPE-POOLS: slis. DATA: gs_layout TYPE slis_layout_alv, gt_fieldcat TYPE slis_t_fieldcat_alv, wa_fieldcat TYPE slis_fieldcat_alv. "For Subtotal sorting CONSTANTS alv_pf_status TYPE slis_formname VALUE 'ALV_PF_STATUS'. *ALV自定義按鈕 CONSTANTS alv_user_command TYPE slis_formname VALUE 'ALV_USER_COMMAND'. ************************************************************************ * Includes Module ************************************************************************ ************************************************************************ * Selection Screen ************************************************************************ SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01. PARAMETERS: p_werks LIKE ikpf-werks DEFAULT '2000'. SELECT-OPTIONS: s_lgort FOR ikpf-lgort. SELECT-OPTIONS: s_iblnr FOR ikpf-iblnr. SELECT-OPTIONS: s_matnr FOR iseg-matnr. SELECTION-SCREEN END OF BLOCK b1. ************************************************************************ * Initialization ************************************************************************ INITIALIZATION. ************************************************************************ * At Selection Screen ************************************************************************ AT SELECTION-SCREEN. ************************************************************************ * At Selection Screen Output ************************************************************************ AT SELECTION-SCREEN OUTPUT. ************************************************************************ * Report Format ************************************************************************ TOP-OF-PAGE. END-OF-PAGE. ************************************************************************ * Main Process ************************************************************************ START-OF-SELECTION. PERFORM get_data. PERFORM display_data. END-OF-SELECTION. *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* FORM get_data. DATA: BEGIN OF lt_makt OCCURS 0, matnr LIKE makt-matnr, maktx LIKE makt-maktx, END OF lt_makt, BEGIN OF lt_mard OCCURS 0, matnr LIKE mard-matnr, lgort LIKE mard-lgort, lgpbe LIKE mard-lgpbe, END OF lt_mard. DATA: l_idx LIKE sy-tabix. "工厂 SELECT SINGLE butxt INTO g_butxt FROM t001 WHERE bukrs = p_werks. "盘点文件 SELECT ikpf~gjahr ikpf~zldat ikpf~iblnr iseg~zeili ikpf~werks ikpf~lgort iseg~matnr iseg~erfmg iseg~erfme mara~mtart INTO CORRESPONDING FIELDS OF TABLE gt_data FROM ikpf INNER JOIN iseg ON ikpf~gjahr = iseg~gjahr AND ikpf~iblnr = iseg~iblnr INNER JOIN mara ON iseg~matnr = mara~matnr WHERE ikpf~werks = p_werks AND ikpf~lgort IN s_lgort AND ikpf~iblnr IN s_iblnr AND iseg~matnr IN s_matnr. "物料说明 SELECT matnr maktx INTO TABLE lt_makt FROM makt WHERE matnr IN s_matnr. "仓库储位 SELECT matnr lgort lgpbe INTO TABLE lt_mard FROM mard WHERE werks = p_werks AND lgort IN s_lgort AND matnr IN s_matnr. SORT: gt_data BY gjahr iblnr zeili, lt_makt BY matnr, lt_mard BY matnr lgort. LOOP AT gt_data. l_idx = sy-tabix. "物料说明 READ TABLE lt_makt WITH KEY matnr = gt_data-matnr BINARY SEARCH. IF sy-subrc = 0. gt_data-maktx = lt_makt-maktx. ENDIF. "储位 READ TABLE lt_mard WITH KEY matnr = gt_data-matnr lgort = gt_data-lgort BINARY SEARCH. IF sy-subrc = 0. gt_data-lgpbe = lt_mard-lgpbe. ENDIF. MODIFY gt_data INDEX l_idx. ENDLOOP. ENDFORM. "GET_DATA *&---------------------------------------------------------------------* *& Form DISPLAY_DATA *&---------------------------------------------------------------------* FORM display_data. DATA: l_repid TYPE sy-repid, l_inclname TYPE trdir-name, l_idx LIKE sy-tabix. CLEAR: gt_fieldcat[],wa_fieldcat. l_repid = l_inclname = sy-cprog. "栏位最适宽度 gs_layout-colwidth_optimize = 'X'. "复选框 gs_layout-box_fieldname = 'CHECKBOX'. CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING I_PROGRAM_NAME = l_repid I_INTERNAL_TABNAME = 'GT_DATA' I_INCLNAME = l_inclname CHANGING CT_FIELDCAT = gt_fieldcat EXCEPTIONS INCONSISTENT_INTERFACE = 1 PROGRAM_ERROR = 2 OTHERS = 3. LOOP AT gt_fieldcat INTO wa_fieldcat. l_idx = sy-tabix. CASE wa_fieldcat-fieldname. WHEN 'CHECKBOX'. "技术字段,设置’X’后,该字段不会显示,也不能输出,如同MANDT字段一样的效果 wa_fieldcat-tech = 'X'. WHEN 'LGORT'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = '仓库'. wa_fieldcat-ddictxt = 'S'. WHEN 'ERFMG'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = '盘点数量'. wa_fieldcat-ddictxt = 'S'. WHEN 'ERFME'. wa_fieldcat-seltext_s = wa_fieldcat-seltext_m = wa_fieldcat-seltext_l = '单位'. wa_fieldcat-ddictxt = 'S'. ENDCASE. MODIFY gt_fieldcat FROM wa_fieldcat INDEX l_idx. ENDLOOP. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = sy-repid IS_LAYOUT = gs_layout IT_FIELDCAT = gt_fieldcat[] I_CALLBACK_PF_STATUS_SET = 'ALV_PF_STATUS' I_CALLBACK_USER_COMMAND = 'ALV_USER_COMMAND' I_SAVE = 'A' TABLES T_OUTTAB = gt_data EXCEPTIONS PROGRAM_ERROR = 1 OTHERS = 2. ENDFORM. "DISPLAY_DATA *&---------------------------------------------------------------------* *& Form ALV_PF_STATUS *&---------------------------------------------------------------------* FORM alv_pf_status USING rt_extab TYPE slis_t_extab. SET PF-STATUS 'STATUS_PRINT' . ENDFORM. " ALV_PF_STATUS *&---------------------------------------------------------------------* *& Form ALV_USER_COMMAND *&---------------------------------------------------------------------* FORM alv_user_command USING in_ucomm LIKE sy-ucomm in_selfield TYPE slis_selfield. DATA: l_iblnr LIKE ikpf-iblnr, l_count TYPE i. CASE in_ucomm. WHEN '&PRINT'. CLEAR: g_totalpage,l_count. CLEAR: gt_header[],gt_item[]. SORT gt_data BY iblnr zeili. LOOP AT gt_data WHERE checkbox = 'X'. "列印内容 MOVE-CORRESPONDING gt_data TO gt_header. APPEND gt_header. CLEAR gt_header. MOVE-CORRESPONDING gt_data TO gt_item. APPEND gt_item. CLEAR gt_item. "总页数 IF gt_data-iblnr <> l_iblnr. "当盘点号不一样则页码+1 g_totalpage = g_totalpage + 1. l_count = 1. ELSE. l_count = l_count + 1. IF l_count > 8. "盘点项次每次>8则页码+1 g_totalpage = g_totalpage + 1. l_count = 1. ENDIF. ENDIF. l_iblnr = gt_data-iblnr. ENDLOOP. "根据年度和盘点文件去重 DELETE ADJACENT DUPLICATES FROM gt_header COMPARING iblnr gjahr. * cl_demo_output=>write( g_butxt ). * cl_demo_output=>write( gt_item[] ). * cl_demo_output=>display( ). "执行打印 IF gt_item[] IS NOT INITIAL. PERFORM print_data. ELSE. MESSAGE TEXT-001 TYPE 'E'. ENDIF. ENDCASE. ENDFORM. " ALV_USER_COMMAND *&---------------------------------------------------------------------* *& Form PRINT_DATA *&---------------------------------------------------------------------* FORM print_data. DATA: l_fnam TYPE rs38l_fnam, ls_ssfctrlop TYPE ssfctrlop, ls_ssfcrescl TYPE ssfcrescl, ls_sscompop TYPE ssfcompop. "DATA: l_totalpage TYPE String. "填充用户手工输入打印弹框参数 ls_sscompop-tddest = 'FPW1'. ls_ssfctrlop-preview = 'X'. ls_ssfctrlop-no_dialog = 'X'. "ls_sscompop-tdimmed = 'X'. "页码格式转换 "l_totalpage = g_totalpage. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING FORMNAME = 'ZMMSTEST' IMPORTING FM_NAME = l_fnam EXCEPTIONS NO_FORM = 1 NO_FUNCTION_MODULE = 2 OTHERS = 3 . CALL FUNCTION l_fnam EXPORTING CONTROL_PARAMETERS = ls_ssfctrlop OUTPUT_OPTIONS = ls_sscompop USER_SETTINGS = '' G_BUTXT = g_butxt G_TOTALPAGE = g_totalpage IMPORTING JOB_OUTPUT_INFO = ls_ssfcrescl TABLES GT_HEADER = gt_header GT_ITEM = gt_item EXCEPTIONS FORMATTING_ERROR = 1 INTERNAL_ERROR = 2 SEND_ERROR = 3 USER_CANCELED = 4 OTHERS = 5 . ENDFORM. " PRINT_DATA
表头资料:标准段落选"段落格式"的S1(这里我想要SmartForms所有的字体内容靠左),其余参数默认
段落格式 | 说明 | 对其 | 缩排-左边界 | 行间距 | 字型集 | 字型大小 | 字型样式 |
S1 | 标准样式靠左 | 靠左对齐 | 0.1CM | 1LN | CHNEI | 10pt | |
S2 | 居中 | 置中 | 0CM | 1LN | CHNEI | 12pt | 粗体 |
S3 | 靠右 | 靠右对齐 | 0CM | 1LN | CHNEI | 10pt |
补充:S1的缩排-左边界有0.1CM是为了保证字体内容不要与表格线重合
链接:https://pan.baidu.com/s/10XDjhjL-lVUrNApv706e1A
提取码:qwcu