REPORT ZMM025.
TYPE-POOLS: SLIS. "ALV显示使用到的共享池
TABLES: LIPS, MSEG, EKPO, T001W, LIKP, LFA1,KNA1.
*---------------------------------------------------------------------*
* 内表定义
*---------------------------------------------------------------------*
DATA: BEGIN OF TEST,
SEL_COL TYPE CHAR1, "选择框
NUM TYPE I, "序号
VBELN LIKE LIPS-VBELN, "发货单号
MATNR LIKE LIPS-MATNR, "物料号
ARKTX LIKE LIPS-ARKTX, "物料描述
MBLNR LIKE MSEG-MBLNR, "物料凭证
CPUDT_MKPF LIKE MSEG-CPUDT_MKPF, "凭证日期
LFIMG LIKE LIPS-LFIMG, "发货数量
MEINS LIKE MSEG-MEINS, "单位
LGORT LIKE LIPS-LGORT, "发货仓库
WERKS LIKE LIPS-WERKS, "发货工厂
LFDAT LIKE LIKP-LFDAT, "发货日期
ERNAM LIKE LIKP-ERNAM, "发货人
KBETR LIKE KONV-KBETR, "单价
KBETR_S LIKE KONV-KBETR, "服务费
DMBTR LIKE MSEG-DMBTR, "金额
NAME1 LIKE KNA1-NAME1, "客户
SGTXT LIKE MSEG-SGTXT, "备注
END OF TEST.
DATA: IT_TEST LIKE TABLE OF TEST WITH HEADER LINE, "数据表
IT_SELECTED LIKE TABLE OF TEST WITH HEADER LINE, "要打印的表项
IT_SFTAB LIKE TABLE OF TEST WITH HEADER LINE. "零时处理表
DATA: BEGIN OF IT_TEST1 OCCURS 0,
VBELN TYPE VBELN_VL, "交货单号,
KNUMV TYPE KNUMV, "单据条件数
KSCHL TYPE KSCHA, "条件类型
KBETR TYPE KBETR, "单价或服务费
END OF IT_TEST1.
DATA: BEGIN OF STUR_HELP , "定义一个结构,加OCCURS 0 表示内表
KUNNR TYPE KUNNR,
NAME1 TYPE NAME1_GP,
END OF STUR_HELP.
DATA: IT_HELP LIKE TABLE OF STUR_HELP. "定义一个没有工作区的搜索帮助内表
DATA: IT_RETURN LIKE TABLE OF DDSHRETVAL WITH HEADER LINE. "定义一同名内表与工作区的返回信息内表
DATA: IT_SFTAB_OUT LIKE TABLE OF ZMMS025 WITH HEADER LINE. "传入Smartforms的表
DATA: LINE_ID TYPE I,
LINE_ID1 TYPE I.
*---------------------------------------------------------------------*
* ALV层级关系定义
*---------------------------------------------------------------------*
DATA: WT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WT_LAYOUT TYPE SLIS_LAYOUT_ALV,
WT_EVENTS TYPE SLIS_T_EVENT.
DATA: REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
*---------------------------------------------------------------------*
* 用户选择屏幕
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_WERKS FOR LIPS-WERKS OBLIGATORY NO INTERVALS DEFAULT '1000' NO-EXTENSION. "发货工厂
SELECT-OPTIONS: S_NAME1 FOR KNA1-NAME1. "客户
SELECT-OPTIONS: S_LFDAT FOR LIKP-LFDAT. "发货日期
SELECT-OPTIONS: S_MATNR FOR LIPS-MATNR. "物料号
SELECT-OPTIONS: S_VBELN FOR LIPS-VBELN. "发货单号
SELECTION-SCREEN END OF BLOCK BLK01.
*--------------------------------------------------------------------*
*初始化事件 *
*--------------------------------------------------------------------*
INITIALIZATION.
CLEAR:IT_HELP,STUR_HELP.
SELECT KUNNR NAME1
INTO TABLE IT_HELP
FROM KNA1
UP TO 200 ROWS.
*--------------------------------------------------------------------*
*屏幕执行之前事件 *
*--------------------------------------------------------------------*
AT SELECTION-SCREEN.
*---------------------------------------------------------------------------------------------------
*输入帮助
*---------------------------------------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME1-LOW. "输入帮助,字段S_NAME1_LOW表示前一个
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "调用帮助函数F4IF_INT_TABLE_VALUE_REQUEST
EXPORTING
RETFIELD = 'NAME1'
VALUE_ORG = 'S'
TABLES
VALUE_TAB = IT_HELP
RETURN_TAB = IT_RETURN
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF IT_RETURN[] IS NOT INITIAL. "内表IT_RETURN不为空
READ TABLE IT_RETURN INDEX 1. "读内表IT_RETURN第一行
IF SY-SUBRC = 0. "IT_RETURN读取成功:0表示成功
S_NAME1-LOW = IT_RETURN-FIELDVAL . "S_NAME1-LOW 等于 内表IT_RETURN中的字段FIELDVAL
ENDIF.
ENDIF.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_NAME1-HIGH. "输入帮助,字段S_VBELMN_HIGH表示前一个
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' "调用帮助函数F4IF_INT_TABLE_VALUE_REQUEST
EXPORTING
RETFIELD = 'NAME1' "选择搜索帮助字段中的VBELN字段
VALUE_ORG = 'S'
TABLES
VALUE_TAB = IT_HELP "VALUE_TAB参数赋值
RETURN_TAB = IT_RETURN "参数返回值
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
IF IT_RETURN[] IS NOT INITIAL. "内表IT_RETURN不为空
READ TABLE IT_RETURN INDEX 1. "读内表IT_RETURN第一行
IF SY-SUBRC = 0. "IT_RETURN读取成功:0表示成功
S_NAME1-HIGH = IT_RETURN-FIELDVAL . "S_NAME1-HIGH 等于 内表IT_RETURN中的字段FIELDVAL
ENDIF.
ENDIF.
*---------------------------------------------------------------------*
* 执行操作
*---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM GET_DATA.
FORM GET_DATA.
SELECT A~VBELN
A~MATNR
A~ARKTX
B~MBLNR
B~CPUDT_MKPF
A~LFIMG
B~MEINS
A~LGORT
A~WERKS
C~LFDAT
C~ERNAM
D~NAME1
B~SGTXT
INTO CORRESPONDING FIELDS OF TABLE IT_TEST
FROM LIPS AS A INNER JOIN
MSEG AS B ON A~VBELN = B~VBELN_IM AND A~POSNR = B~VBELP_IM INNER JOIN
LIKP AS C ON A~VBELN = C~VBELN INNER JOIN
KNA1 AS D ON C~KUNNR = D~KUNNR
WHERE A~WERKS IN S_WERKS
AND D~NAME1 IN S_NAME1
AND C~LFDAT IN S_LFDAT
AND A~MATNR IN S_MATNR
AND A~VBELN IN S_VBELN.
SELECT A~VBELV
A~VBELN
B~KNUMV
C~KSCHL
C~KBETR
INTO CORRESPONDING FIELDS OF TABLE IT_TEST1
FROM VBFA AS A INNER JOIN
VBAK AS B ON A~VBELV = B~VBELN INNER JOIN
KONV AS C ON B~KNUMV = C~KNUMV
FOR ALL ENTRIES IN IT_TEST
WHERE A~VBELN = IT_TEST-VBELN.
IF SY-SUBRC = 0.
LOOP AT IT_TEST.
READ TABLE IT_TEST1 WITH KEY VBELN = IT_TEST-VBELN KSCHL = 'ZP0D'.
IF SY-SUBRC = 0.
IT_TEST-KBETR = IT_TEST1-KBETR.
ENDIF.
READ TABLE IT_TEST1 WITH KEY VBELN = IT_TEST-VBELN KSCHL = 'ZFWF'.
IF SY-SUBRC = 0.
IT_TEST-KBETR_S = IT_TEST1-KBETR.
ENDIF.
LINE_ID = LINE_ID + 1. "IT_DATA编号
IT_TEST-NUM = LINE_ID.
IF IT_TEST-KBETR <> 0 AND IT_TEST-LFIMG <> 0.
IT_TEST-DMBTR = IT_TEST-KBETR * IT_TEST-LFIMG + IT_TEST-KBETR_S.
ENDIF.
MODIFY IT_TEST.
ENDLOOP.
ENDIF.
** 填入批次属性 ********
* "数值型特性值
* DATA BEGIN OF IT_NUM OCCURS 0.
* INCLUDE STRUCTURE BAPI1003_ALLOC_VALUES_NUM.
* DATA END OF IT_NUM.
* "字符型特性值
* DATA BEGIN OF IT_CHAR OCCURS 0.
* INCLUDE STRUCTURE BAPI1003_ALLOC_VALUES_CHAR.
* DATA END OF IT_CHAR.
* "货币型特性值
* DATA BEGIN OF IT_CURR OCCURS 0.
* INCLUDE STRUCTURE BAPI1003_ALLOC_VALUES_CURR.
* DATA END OF IT_CURR.
* "返回值
* DATA BEGIN OF BAPI_RETURN OCCURS 0.
* INCLUDE STRUCTURE BAPIRET2.
* DATA END OF BAPI_RETURN.
*
* CLEAR:IT_NUM[], IT_CHAR[], IT_CURR[], BAPI_RETURN[].
*
* IF IT_TEST-CHARG IS NOT INITIAL.
*
* CALL FUNCTION 'ZMM_F002'
* EXPORTING
* I_MATNR = IT_TEST-MATNR "物料号
* I_CHARG = IT_TEST-CHARG "批次号
* "I_WERKS = IT_TEST-WERKS "工厂
* TABLES
* ALLOCVALUESNUM = IT_NUM "数值型特性值
* ALLOCVALUESCHAR = IT_CHAR "字符型特性值
* ALLOCVALUESCURR = IT_CURR "货币型特性值
* RETURN = BAPI_RETURN. "返回值
*
* ENDIF.
ENDFORM.
*--------------------------------------------------------------------*
*屏幕结束执行事件 *
*--------------------------------------------------------------------*
END-OF-SELECTION.
PERFORM SHOW_ALV.
*--------------------------------------------------------------------*
*子例程 *
*--------------------------------------------------------------------*
FORM SHOW_ALV.
* 定义ALV显示的具体格式
DATA: WLT_FIELDCAT LIKE LINE OF WT_FIELDCAT.
*ALV显示宏定义
DEFINE ALV_TEMP.
CLEAR WLT_FIELDCAT.
WLT_FIELDCAT-FIELDNAME = &1.
WLT_FIELDCAT-TABNAME = 'IT_TEST'.
WLT_FIELDCAT-NO_OUT = ' '.
WLT_FIELDCAT-SELTEXT_L = &2.
WLT_FIELDCAT-NO_ZERO = 'X'.
APPEND WLT_FIELDCAT TO WT_FIELDCAT.
END-OF-DEFINITION.
* 以下每一段为定义的一列
CLEAR: WT_FIELDCAT[].
* 勾选框
CLEAR WLT_FIELDCAT.
WLT_FIELDCAT-TABNAME = 'IT_TEST'.
WLT_FIELDCAT-FIELDNAME = 'SEL_COL'.
WLT_FIELDCAT-SELTEXT_L = '勾选框'.
WLT_FIELDCAT-CHECKBOX = 'X'.
WLT_FIELDCAT-EDIT = 'X'.
APPEND WLT_FIELDCAT TO WT_FIELDCAT.
ALV_TEMP 'NUM' '序号'.
ALV_TEMP 'WERKS' '发货工厂'.
ALV_TEMP 'LFDAT' '发货日期'.
ALV_TEMP 'VBELN' '发货单号'.
ALV_TEMP 'NAME1' '客户'.
ALV_TEMP 'MATNR' '物料号'.
ALV_TEMP 'ARKTX' '物料描述'.
ALV_TEMP 'LFIMG' '发货数量'.
ALV_TEMP 'MEINS' '单位'.
ALV_TEMP 'KBETR' '单价'.
ALV_TEMP 'KBETR_S' '服务费'.
ALV_TEMP 'DMBTR' '金额'.
ALV_TEMP 'LGORT' '发货仓库'.
ALV_TEMP 'SGTXT' '备注'.
WT_LAYOUT-COLWIDTH_OPTIMIZE = 'X'. "根据内容调整ALV显示的栏目宽度
* 调用系统函数将ALV呈现在接口上, 其显示的内容,为指定的内表
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-CPROG
IS_LAYOUT = WT_LAYOUT
IT_FIELDCAT = WT_FIELDCAT[]
I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
TABLES
T_OUTTAB = IT_TEST
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.
*GUI状态(ZFIRP0220_PF添加应用程序图标---打印按钮)
FORM PF_STATUS_SET USING P_EXTAB TYPE SLIS_T_EXTAB..
"Set the Button using the staus
"Copy the Standard status from the program SAPLKKBL status
" STANDARD using SE41, and use that here.
"Pf status
SET PF-STATUS 'ZMM025_PF'.
ENDFORM.
*用户命令
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
IF REF_GRID IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID.
ENDIF.
IF NOT REF_GRID IS INITIAL.
CALL METHOD REF_GRID->CHECK_CHANGED_DATA .
ENDIF.
CASE R_UCOMM.
WHEN 'B_PRINT'. "打印
PERFORM GET_PRINT.
WHEN 'ALLCHOOSE'. "全选
LOOP AT IT_TEST.
IT_TEST-SEL_COL = 'X'.
MODIFY IT_TEST.
ENDLOOP.
WHEN 'RECHOOSE'. "反选
LOOP AT IT_TEST.
IF IT_TEST-SEL_COL = 'X'.
IT_TEST-SEL_COL = ''.
ELSE.
IT_TEST-SEL_COL = 'X'.
ENDIF.
MODIFY IT_TEST.
ENDLOOP.
WHEN OTHERS.
ENDCASE.
RS_SELFIELD-REFRESH = 'X'. "刷新
ENDFORM.
*-------------------------------------
* 打印功能代码 调用smartforms
*-------------------------------------
FORM GET_PRINT.
DATA:
LW_PATH TYPE RSPOPNAME,
LW_FUNC_NAME TYPE RS38L_FNAM,
T_CONTROL_PARAMETERS TYPE SSFCTRLOP,
T_OUTPUT_OPTIONS TYPE SSFCOMPOP.
***获取SMARTFORMS的Function Module***
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZMMSF025' "SMARTFORMS表格设计器的表名
IMPORTING
FM_NAME = LW_FUNC_NAME "功能名称
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3.
CLEAR:T_CONTROL_PARAMETERS,T_OUTPUT_OPTIONS.
***Smart Forms: 控制结构*****
T_CONTROL_PARAMETERS-PREVIEW = 'X'. "不打印预览,X 则打印预览
T_CONTROL_PARAMETERS-NO_OPEN = 'X'. "新的假脱机请求(必写)
T_CONTROL_PARAMETERS-NO_CLOSE = 'X'. "不关闭新的假脱机请求(必写)
T_CONTROL_PARAMETERS-NO_DIALOG = ' '. "弹出打印设置的对话框,X 则不显示框
T_CONTROL_PARAMETERS-DEVICE = 'PRINTER'. "PRINTER\MAIL\TELEFAX,缺省是PRINTER
***SAP Smart Forms: 智能写作器 (传输) 选项*****
T_OUTPUT_OPTIONS-TDNOPREV = ' '. "是否打印预览,X是不预览。
T_OUTPUT_OPTIONS-TDNOPRINT = ' '. "没有打印预览的打印输出,设置X。
T_OUTPUT_OPTIONS-TDIMMED = ' '. "立即打印标志。
T_OUTPUT_OPTIONS-TDDEST = 'LP01'. "假脱机,输出设备。
***调用SSF_OPEN函数设置打印机,打开输出请求,使用用户打印设置必须调用SSF_OPEN***
CALL FUNCTION 'SSF_OPEN'
EXPORTING
OUTPUT_OPTIONS = T_OUTPUT_OPTIONS
CONTROL_PARAMETERS = T_CONTROL_PARAMETERS
USER_SETTINGS = ' '
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
LOOP AT IT_TEST WHERE SEL_COL = 'X'.
MOVE-CORRESPONDING IT_TEST TO IT_SELECTED.
CLEAR IT_SELECTED-NUM.
APPEND IT_SELECTED.
ENDLOOP.
LOOP AT IT_SELECTED.
MOVE-CORRESPONDING IT_SELECTED TO IT_SFTAB.
APPEND IT_SFTAB.
ENDLOOP.
SORT IT_SELECTED BY VBELN.
DELETE ADJACENT DUPLICATES FROM IT_SELECTED COMPARING VBELN NAME1 LFDAT.
LOOP AT IT_SELECTED.
LOOP AT IT_SFTAB WHERE VBELN = IT_SELECTED-VBELN AND NAME1 = IT_SELECTED-NAME1 AND LFDAT = IT_SELECTED-LFDAT.
MOVE-CORRESPONDING IT_SFTAB TO IT_SFTAB_OUT.
LINE_ID1 = LINE_ID1 + 1. "打印编号
IT_SFTAB_OUT-NUM = LINE_ID1.
APPEND IT_SFTAB_OUT.
ENDLOOP.
***调用Smartforms的Function Module打印***
CALL FUNCTION LW_FUNC_NAME
EXPORTING
CONTROL_PARAMETERS = T_CONTROL_PARAMETERS "设置不显示打印确认对话框
OUTPUT_OPTIONS = T_OUTPUT_OPTIONS "默认打印选项设置传输
USER_SETTINGS = SPACE
VBELN = IT_SELECTED-VBELN
NAME1 = IT_SELECTED-NAME1
LFDAT = IT_SELECTED-LFDAT
ERNAM = IT_SELECTED-ERNAM
TABLES
IT_TAB = IT_SFTAB_OUT "IT_TAB:SMARTFORMS中表格接口 -- 表 -- 参数名称
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* MESSAGE S008(ZHKTL1) WITH SY-SUBRC DISPLAY LIKE CNS_E.
* LEAVE LIST-PROCESSING.
ENDIF.
CLEAR: IT_SFTAB_OUT[],IT_SFTAB_OUT,LINE_ID1.
ENDLOOP.
CLEAR: IT_SFTAB,IT_SFTAB[],IT_SELECTED,IT_SELECTED[].
***关闭打印机设置***
CALL FUNCTION 'SSF_CLOSE'
* IMPORTING
* JOB_OUTPUT_INFO =
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
SAP-SD-废品销售发货报表+smartforms打印
最新推荐文章于 2024-08-13 17:43:20 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)