*===============================基本信息===============================*
* 标题:寄售明细表
* 创建日期:2005-01-03
*===============================定 义===============================*
************************************************************************
* 基本代码
************************************************************************
REPORT ZR_FI_004
NO STANDARD PAGE HEADING
LINE-COUNT 65
LINE-SIZE 174
MESSAGE-ID ZFI1.
************************************************************************
* INCLUDE:包含文件
************************************************************************
INCLUDE OLE2INCL.
************************************************************************
* TABLE: 定义TABLE
************************************************************************
TABLES: KNA1, "客户主文件的一般数据
MAKT, "物料描述
LIKP, "SD凭证:交货抬头数据
LIPS, "SD凭证:交货项目数据
VBAK, "销售凭证:抬头数据
VBAP, "销售凭证:项目数据
VBFA, "销售凭证流
VBRK, "出具发票:抬头数据
VBRP, "出具发票:项数据
VBUK, "销售凭证:抬头状态和管理数据
VBUP, "销售凭证:项目状态
MKPF, "抬头:物料凭证
MSEG. "凭证段:物料
************************************************************************
*INTERNAL TABLES
************************************************************************
*定义内表ITABS
*报表最后输出时使用的数据
DATA: BEGIN OF IT_PRINT_001 OCCURS 0.
DATA FLAG.
DATA CNO LIKE KNA1-KUNNR. "客户代码,送达方
DATA CNAME LIKE KNA1-NAME1. "客户名称
DATA CLASS LIKE KNA1-NAME1. "事务类别
DATA ORDERNO LIKE LIKP-VBELN. "交退货单号
DATA ORDERDATE LIKE LIKP-ERDAT. "交货单/退货交货单日期
DATA OLDERDATE LIKE LIKP-ERDAT. "交货单原始日期
DATA OTHERNO LIKE LIKP-VBELN. "交货单参考单号
DATA PRODNO LIKE LIPS-MATNR. "产品型号
DATA PRODNAME LIKE MAKT-MAKTX. "产品名称
DATA PRODQTY LIKE LIPS-LFIMG. "数量
DATA WAERK LIKE VBAP-WAERK. "币别
DATA PRICE LIKE LIPS-NETPR. "原币单价
DATA AMOUNT LIKE LIPS-NETPR. "原币金额
DATA PRICE2 LIKE LIPS-NETPR. "本币单价
DATA AMOUNT2 LIKE LIPS-NETPR. "本币金额
DATA PRODQTY_C(20).
DATA AMOUNT_C(20).
DATA AMOUNT2_C(20).
DATA VGBEL LIKE LIPS-VGBEL. "参考凭证的凭证号(销售订单号)
DATA KDMAT LIKE LIPS-KDMAT. "客户物料号
DATA BSTNK LIKE VBAK-BSTNK. "采购订单编号
DATA FKSTK LIKE VBUK-FKSTK. "是否已开票
DATA: END OF IT_PRINT_001.
DATA: IT_PRINT_002 LIKE IT_PRINT_001 OCCURS 10 WITH HEADER LINE."
DATA: IT_PRINT_003 LIKE IT_PRINT_001 OCCURS 10 WITH HEADER LINE."
DATA: IT_PRINT_004 LIKE IT_PRINT_001 OCCURS 10 WITH HEADER LINE."
*定义内表(取交货单原始单号)
DATA: BEGIN OF IT_PRINT_005 OCCURS 0.
DATA VBELN LIKE VBFA-VBELN. "后续销售和分销凭证
DATA ERDAT LIKE VBFA-ERDAT. "记录创建日期
DATA ERZET LIKE VBFA-ERZET. "输入时间
DATA AEDAT LIKE VBFA-AEDAT. "最近一次更改的日期
DATA: END OF IT_PRINT_005.
*定义内表(取销售净价及货币)
DATA: BEGIN OF IT_PRINT_006 OCCURS 0.
DATA NETPR LIKE VBAP-NETPR. "净价
DATA WAERK LIKE VBAP-WAERK. "SD 凭证货币
DATA: END OF IT_PRINT_006.
*定义内表(取汇率)
DATA: BEGIN OF IT_PRINT_007 OCCURS 0.
DATA UKURS LIKE TCURR-UKURS. "汇率
DATA GDATU LIKE TCURR-GDATU. "汇率有效起始日期
DATA: END OF IT_PRINT_007.
*往数据库增加运行日志
DATA: BEGIN OF IT_ZREPORTLOG OCCURS 0.
INCLUDE TYPE ZREPORTLOG.
DATA: END OF IT_ZREPORTLOG.
************************************************************************
* CONSTANTS : 定义常量
************************************************************************
************************************************************************
* TYPE : 定义数据类型
************************************************************************
TYPE-POOLS: SLIS.
************************************************************************
* DATA : 定义变量
************************************************************************
*单据表格上相关坐标值定义
DATA: A1 TYPE I VALUE 0,
A2 TYPE I VALUE 0,
A3 TYPE I VALUE 0,
A4 TYPE I VALUE 0,
A5 TYPE I VALUE 0,
A6 TYPE I VALUE 0,
A7 TYPE I VALUE 0,
A8 TYPE I VALUE 0,
A9 TYPE I VALUE 0.
DATA: B1 TYPE I VALUE 0,
B2 TYPE I VALUE 0,
B3 TYPE I VALUE 0,
B4 TYPE I VALUE 0,
B5 TYPE I VALUE 0,
B6 TYPE I VALUE 0,
B7 TYPE I VALUE 0,
B8 TYPE I VALUE 0.
DATA: NAME_LAST LIKE USER_ADDR-NAME_LAST,
NAME_FIRST LIKE USER_ADDR-NAME_FIRST,
NAME(16).
DATA: G_TOTAL LIKE LIPS-NETPR.
*用于ALV控件双击事件
DATA: G_SELECTED_FIELD_VALUE(80).
*ALV控件构造时需要的参数
DATA: G_ALV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
G_ALV_FIELDCAT_LINE LIKE LINE OF G_ALV_FIELDCAT,
G_ALV_EVENT TYPE SLIS_T_EVENT.
*ALV控件输出的表头
DATA: G_ALV_LISTHEADER TYPE SLIS_T_LISTHEADER.
*指定ALV控件触发TOP_OF_PAGE事件时调用的子程序
DATA: G_ALV_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME
VALUE 'F_ALV_EVENT_TOP_OF_PAGE'.
DATA: G_ALV_FORMNAME_END_OF_LIST TYPE SLIS_FORMNAME
VALUE 'F_ALV_EVENT_END_OF_LIST'.
*指定ALV控件的显示特征
DATA : G_ALV_LAYOUT TYPE SLIS_LAYOUT_ALV.
************************************************************************
* DEFINE: 定义宏
************************************************************************
*普通报表格式的输出宏
DEFINE MACRO1. "画表格
WRITE: AT /A1 SY-VLINE.
WRITE: AT B1 &1.
WRITE: AT A2 SY-VLINE.
WRITE: AT B2 &2.
WRITE: AT A3 SY-VLINE.
WRITE: AT B3 &3.
WRITE: AT A4 SY-VLINE.
WRITE: AT B4 &4.
WRITE: AT A5 SY-VLINE.
WRITE: AT B5 &5 RIGHT-JUSTIFIED.
WRITE: AT A6 SY-VLINE.
WRITE: AT B6 &6 RIGHT-JUSTIFIED.
WRITE: AT A7 SY-VLINE.
WRITE: AT B7 &7.
WRITE: AT A8 SY-VLINE.
WRITE: AT B8 &8.
WRITE: AT A9 SY-VLINE.
END-OF-DEFINITION.
************************************************************************
* SELECTION SCREEN : 定义报表筛选条件
************************************************************************
*确定过滤参数
SELECTION-SCREEN BEGIN OF BLOCK BLK_001 WITH FRAME. TITLE BLK_001 .
PARAMETERS : P_BUKRS LIKE GLT0-BUKRS OBLIGATORY DEFAULT '1000'."公司代码
PARAMETERS : P_DATE LIKE VBRK-FKDAT OBLIGATORY DEFAULT SY-DATUM."日期
SELECT-OPTIONS: P_COMP FOR KNA1-KUNNR. "客户代码
SELECTION-SCREEN END OF BLOCK BLK_001.
*选择报表类型
SELECTION-SCREEN BEGIN OF BLOCK BLK_002 WITH FRAME. TITLE BLK_002 .
PARAMETERS: P_REPORT RADIOBUTTON GROUP R1,
P_ALV RADIOBUTTON GROUP R1 DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK BLK_002.
*选择文件
*代码“NO-DISPLAY”的作用:隐藏参数
SELECTION-SCREEN BEGIN OF BLOCK BLK_003 WITH FRAME. TITLE BLK_003 .
PARAMETERS: P_FILE LIKE CFFILE-FILENAME NO-DISPLAY .
SELECTION-SCREEN END OF BLOCK BLK_003.
*===============================事 件===============================*
************************************************************************
* INITIALIZATION.启动程序开始执行
************************************************************************
INITIALIZATION.
BLK_001 = '检索参数'.
BLK_002 = '报表类型'.
BLK_003 = '文件参数'.
PERFORM. SUB_INI.
************************************************************************
* AT SELECTION SCREEN:
************************************************************************
AT SELECTION-SCREEN.
PERFORM. F_CHECK_INPUT. "检查用户输入
************************************************************************
* START OF SELECTION:
************************************************************************
START-OF-SELECTION.
*往数据库增加运行日志
IT_ZREPORTLOG-MANDT = SY-MANDT.
IT_ZREPORTLOG-TCODE = SY-TCODE.
IT_ZREPORTLOG-DATUM = SY-DATUM.
IT_ZREPORTLOG-UZEIT = SY-UZEIT.
IT_ZREPORTLOG-UNAME = SY-UNAME.
IT_ZREPORTLOG-TITLE = SY-TITLE.
APPEND IT_ZREPORTLOG.
INSERT INTO ZREPORTLOG VALUES IT_ZREPORTLOG .
PERFORM. F_READ_DATA.
IF P_REPORT = 'X'.
PERFORM. F_PRINT_REPORT.
ELSEIF P_ALV = 'X'.
PERFORM. F_PRINT_ALV.
ENDIF.
************************************************************************
* END OF SELECTION
************************************************************************
END-OF-SELECTION.
************************************************************************
* TOP OF PAGE
************************************************************************
TOP-OF-PAGE.
PERFORM. SUB_HEAD.
************************************************************************
* END OF PAGE
************************************************************************
END-OF-PAGE.
PERFORM. SUB_BOTTOM.
************************************************************************
* LINE SELECTION
************************************************************************
AT LINE-SELECTION .
************************************************************************
* AT PFXX:
************************************************************************
AT PFXX.
************************************************************************
* AT USER-COMMAND
************************************************************************
AT USER-COMMAND.
*===============================子 例 程===============================*
*&---------------------------------------------------------------------*
*过滤条件有效性检查
*&---------------------------------------------------------------------*
FORM. F_CHECK_INPUT.
"判断是否存在该客户记录
SELECT SINGLE *
INTO KNA1
FROM KNA1
WHERE KUNNR IN P_COMP.
IF SY-SUBRC <> 0.
MESSAGE E000.
ENDIF.
ENDFORM. " F_CHECK_INPUT
*&---------------------------------------------------------------------*
*从数据库中读取数据,填充报表输出时所用的内表
*&---------------------------------------------------------------------*
FORM. F_READ_DATA.
DATA: L_PRICE TYPE P DECIMALS 6,
L_AMOUNT LIKE LIPS-NETPR,
L_PRICE2 TYPE P DECIMALS 6,
L_AMOUNT2 LIKE LIPS-NETPR,
L_CNAME LIKE KNA1-NAME1,
L_PRODNAME LIKE MAKT-MAKTX.
DATA: ZHS TYPE I VALUE 0. "总行数
DATA: L_VBELN LIKE VBFA-VBELN, "后续销售和分销凭证
L_ERDAT LIKE VBFA-ERDAT. "记录创建日期
*取寄售发货订单(ZKB+)/取寄售结算退货订单(ZKR+)/
*取寄售结算发货订单(ZKE-)/取寄售退货订单(ZKA-)
SELECT A~MATNR AS PRODNO "物料号
A~LFIMG AS PRODQTY "实际已交货量
B~KUNNR AS CNO "送达方
B~VBELN AS ORDERNO "交货单号
B~LFDAT AS ORDERDATE "交货日期
D~AUART AS CLASS "交货类型
* B~KODAT AS OLDERDATE "拣配日期
A~VGBEL "参考凭证的凭证号(销售订单号)
A~KDMAT
D~BSTNK
C~FKSTK
FROM LIPS AS A INNER JOIN LIKP AS B ON A~VBELN = B~VBELN
INNER JOIN VBUK AS C ON A~VBELN = C~VBELN
INNER JOIN VBAK AS D ON A~VGBEL = D~VBELN
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_001
WHERE B~KUNNR IN P_COMP AND
B~LFDAT <= P_DATE AND
D~VKORG = P_BUKRS AND
* B~LFART = 'LF' AND "交货
( D~AUART = 'ZKB' OR "取寄售记录
D~AUART = 'ZKR' OR
D~AUART = 'ZKE' OR
D~AUART = 'ZKA' ).
* ( C~KOSTK = 'B' OR "全部拣配/堆放状态
* C~KOSTK = 'C' ) AND
* ( C~FKSTK <> 'C' AND C~FKSTK <> 'B' ). "出具发票状态
*取交货单参考单号
LOOP AT IT_PRINT_001.
SELECT VBELN
ERDAT
ERZET
AEDAT
FROM VBFA
INTO CORRESPONDING FIELDS OF TABLE IT_PRINT_005
WHERE VBELV = IT_PRINT_001-VGBEL AND
VBTYP_N = 'J'. "表示是交货单类型
DESCRIBE TABLE IT_PRINT_005 LINES ZHS.
SORT IT_PRINT_005 BY ERDAT ERZET.
IF ZHS > 1.
LOOP AT IT_PRINT_005.
L_VBELN = IT_PRINT_005-VBELN.
L_ERDAT = IT_PRINT_005-ERDAT.
MOVE L_VBELN TO IT_PRINT_001-OTHERNO.
MOVE L_ERDAT TO IT_PRINT_001-OLDERDATE.
MODIFY IT_PRINT_001.
EXIT.
ENDLOOP.
ENDIF.
ENDLOOP.
*取单价及金额
G_TOTAL = 0.
LOOP AT IT_PRINT_001.
SELECT NETPR
FROM VBAP
INTO L_PRICE
WHERE VBELN = IT_PRINT_001-VGBEL AND
MATNR = IT_PRINT_001-PRODNO.
ENDSELECT.
L_AMOUNT = L_PRICE * IT_PRINT_001-PRODQTY.
G_TOTAL = G_TOTAL + L_AMOUNT.
MOVE L_PRICE TO IT_PRINT_001-PRICE.
MOVE L_AMOUNT TO IT_PRINT_001-AMOUNT.
MODIFY IT_PRINT_001 INDEX SY-TABIX.
ENDLOOP.
*取客户名称
LOOP AT IT_PRINT_001.
SELECT SINGLE NAME1 AS CNAME
FROM KNA1
INTO L_CNAME
WHERE KUNNR = IT_PRINT_001-CNO.
MOVE L_CNAME TO IT_PRINT_001-CNAME.
MODIFY IT_PRINT_001 INDEX SY-TABIX.
ENDLOOP.
*取产品名称
LOOP AT IT_PRINT_001.
SELECT SINGLE MAKTX
FROM MAKT
INTO L_PRODNAME
WHERE MATNR = IT_PRINT_001-PRODNO.
MOVE L_PRODNAME TO IT_PRINT_001-PRODNAME.
MODIFY IT_PRINT_001 INDEX SY-TABIX.
ENDLOOP.
*事务类别处理
LOOP AT IT_PRINT_001.
CASE IT_PRINT_001-CLASS.
WHEN 'ZKB'.
IT_PRINT_001-CLASS = '寄售发货订单'.
IT_PRINT_001-PRODQTY_C = IT_PRINT_001-PRODQTY.
IT_PRINT_001-AMOUNT_C = IT_PRINT_001-AMOUNT.
WHEN 'ZKR'.
IT_PRINT_001-CLASS = '寄售结算退货订单'.
IT_PRINT_001-PRODQTY_C = IT_PRINT_001-PRODQTY.
IT_PRINT_001-AMOUNT_C = IT_PRINT_001-AMOUNT.
WHEN 'ZKE'.
IT_PRINT_001-CLASS = '寄售结算发货订单'.
IT_PRINT_001-PRODQTY_C = IT_PRINT_001-PRODQTY.
IT_PRINT_001-AMOUNT_C = IT_PRINT_001-AMOUNT.
IF IT_PRINT_001-PRODQTY <> 0.
CONCATENATE '-' IT_PRINT_001-PRODQTY_C INTO IT_PRINT_001-PRODQTY_C.
CONDENSE IT_PRINT_001-PRODQTY_C.
ENDIF.
IF IT_PRINT_001-AMOUNT <> 0.
CONCATENATE '-' IT_PRINT_001-AMOUNT_C INTO IT_PRINT_001-AMOUNT_C.
CONDENSE IT_PRINT_001-AMOUNT_C.
ENDIF.
IT_PRINT_001-PRODQTY = 0 - IT_PRINT_001-PRODQTY.
IT_PRINT_001-AMOUNT = 0 - IT_PRINT_001-AMOUNT.
WHEN 'ZKA'.
IT_PRINT_001-CLASS = '寄售退货订单'.
IT_PRINT_001-PRODQTY_C = IT_PRINT_001-PRODQTY.
IT_PRINT_001-AMOUNT_C = IT_PRINT_001-AMOUNT.
IF IT_PRINT_001-PRODQTY <> 0.
CONCATENATE '-' IT_PRINT_001-PRODQTY_C INTO IT_PRINT_001-PRODQTY_C.
CONDENSE IT_PRINT_001-PRODQTY_C.
ENDIF.
IF IT_PRINT_001-AMOUNT <> 0.
CONCATENATE '-' IT_PRINT_001-AMOUNT_C INTO IT_PRINT_001-AMOUNT_C.
CONDENSE IT_PRINT_001-AMOUNT_C.
ENDIF.
IT_PRINT_001-PRODQTY = 0 - IT_PRINT_001-PRODQTY.
IT_PRINT_001-AMOUNT = 0 - IT_PRINT_001-AMOUNT.
ENDCASE.
MODIFY IT_PRINT_001 INDEX SY-TABIX.
ENDLOOP.
SORT IT_PRINT_001 BY CNO ORDERDATE PRODNO.
ENDFORM. " F_READ_DATA
*&---------------------------------------------------------------------*
* 普通报表格式的打印
*&---------------------------------------------------------------------*
FORM. F_PRINT_REPORT.
ENDFORM. " F_PRINT_REPORT
*&---------------------------------------------------------------------*
*A ALV报表格式的打印
*&---------------------------------------------------------------------*
FORM. F_PRINT_ALV.
REFRESH G_ALV_LISTHEADER[].
PERFORM. F_ALV_MODIFY_LISTHEADER .
REFRESH G_ALV_FIELDCAT.
PERFORM. F_ALV_BUILD_FIELDCAT.
PERFORM. F_ALV_BUILD_EVENTCAT.
PERFORM. F_ALV_DISPLAY.
STOP.
ENDFORM. " F_PRINT_ALV
*&---------------------------------------------------------------------*
*& 设置ALV报表输出时的抬头信息
*&---------------------------------------------------------------------*
FORM. F_ALV_MODIFY_LISTHEADER .
DATA : L_ALV_LISTHEADER_LINE LIKE LINE OF G_ALV_LISTHEADER.
L_ALV_LISTHEADER_LINE-TYP = 'H'.
L_ALV_LISTHEADER_LINE-KEY = ''.
L_ALV_LISTHEADER_LINE-INFO = '寄售明细表'.
APPEND L_ALV_LISTHEADER_LINE TO G_ALV_LISTHEADER.
ENDFORM. " F_ALV_MODIFY_LISTHEADER
*&---------------------------------------------------------------------*
*& 设置ALV报表输出时的字段 NEED MODIFY
*&---------------------------------------------------------------------*
FORM. F_ALV_BUILD_FIELDCAT .
DATA : COL_POS TYPE I VALUE 0.
G_ALV_LAYOUT-GET_SELINFOS = 'X'.
G_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
G_ALV_LAYOUT-DETAIL_POPUP = 'X'.
G_ALV_LAYOUT-BOX_FIELDNAME = 'FLAG'.
G_ALV_LAYOUT-NO_KEYFIX = 'X'.
G_ALV_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIPS'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'VGBEL'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'VGBEL'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '销售订单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '销售订单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '销售订单号'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '销售订单号'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'VBAK'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'BSTNK'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'BSTNK'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '客户采购单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '客户采购单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '客户采购单号'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '客户采购单号'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'KNA1'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'KUNNR'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'CNO'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '客户代码'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '客户代码'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '客户代码'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '客户代码'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'KNA1'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'NAME1'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'CNAME'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '客户名称'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '客户名称'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '客户名称'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '客户名称'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'KNA1'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'NAME1'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'CLASS'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '事务类别'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '事务类别'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '事务类别'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '事务类别'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIKP'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'VBELN'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'ORDERNO'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '交退货单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '交退货单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '交退货单号'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '交退货单号'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIKP'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'ERDAT'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'ORDERDATE'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '交退货日期'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '交退货日期'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '交退货日期'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '交退货日期'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIKP'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'ERDAT'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'OLDERDATE'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '交货单原始日期'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '交货单原始日期'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '交货单原始日期'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '交货单原始日期'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIKP'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'VBELN'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'OTHERNO'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '交货单参考单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '交货单参考单号'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '交货单参考单号'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '交货单参考单号'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIPS'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MATNR'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'PRODNO'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '产品型号'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '产品型号'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '产品型号'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '产品型号'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIPS'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'KDMAT'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'KDMAT'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '客户型号'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '客户型号'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '客户型号'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '客户型号'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'MAKT'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'MAKTX'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'PRODNAME'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '产品名称'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '产品名称'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '产品名称'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '产品名称'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIPS'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'LFIMG'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'PRODQTY_C'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '数量'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '数量'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '数量'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '数量'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
*-权限控制,CCCC权限组能显示“销售价格”相关字段
AUTHORITY-CHECK OBJECT 'ZREPORT' ID 'BEGRU' FIELD 'CCCC'.
IF SY-SUBRC = 0 .
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIPS'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'NETPR'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'PRICE'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '单价'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '单价'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '单价'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '单价'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ADD 1 TO COL_POS.
G_ALV_FIELDCAT_LINE-REF_TABNAME = 'LIPS'.
G_ALV_FIELDCAT_LINE-TABNAME = 'IT_PRINT_001'.
G_ALV_FIELDCAT_LINE-REF_FIELDNAME = 'NETPR'.
G_ALV_FIELDCAT_LINE-FIELDNAME = 'AMOUNT_C'.
G_ALV_FIELDCAT_LINE-KEY = ''.
G_ALV_FIELDCAT_LINE-DDICTXT(1) = 'L'.
G_ALV_FIELDCAT_LINE-SELTEXT_S = '金额'.
G_ALV_FIELDCAT_LINE-SELTEXT_L = '金额'.
G_ALV_FIELDCAT_LINE-SELTEXT_M = '金额'.
G_ALV_FIELDCAT_LINE-REPTEXT_DDIC = '金额'.
G_ALV_FIELDCAT_LINE-COL_POS = COL_POS.
APPEND G_ALV_FIELDCAT_LINE TO G_ALV_FIELDCAT.
ENDIF.
ENDFORM. " F_ALV_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& 改变ALV的TOP_OF_PAGE事件处理过程
*&---------------------------------------------------------------------*
FORM. F_ALV_BUILD_EVENTCAT .
DATA : LS_EVENT TYPE SLIS_ALV_EVENT.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = G_ALV_EVENT.
READ TABLE G_ALV_EVENT WITH KEY NAME =
SLIS_EV_TOP_OF_PAGE INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE G_ALV_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
APPEND LS_EVENT TO G_ALV_EVENT.
ENDIF.
ENDFORM. " F_ALV_BUILD_EVENTCAT
*&---------------------------------------------------------------------*
*& 调用ALV控件的输出程序
*&---------------------------------------------------------------------*
FORM. F_ALV_DISPLAY .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = 'ZR_FI_012'
I_CALLBACK_USER_COMMAND = 'F_ALV_USER_COMMAND'
IS_LAYOUT = G_ALV_LAYOUT
IT_FIELDCAT = G_ALV_FIELDCAT
I_SAVE = 'A'
IT_EVENTS = G_ALV_EVENT
I_GRID_TITLE = ''
TABLES
T_OUTTAB = IT_PRINT_001
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM. " F_ALV_DISPLAY
*&---------------------------------------------------------------------*
*& ALV控件双击事件的接口
*&---------------------------------------------------------------------*
FORM. F_ALV_USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA S_TEMP(100) TYPE C.
CASE R_UCOMM.
WHEN '&IC1'. "NEED MODIFY
IF RS_SELFIELD-SEL_TAB_FIELD = 'IT_PRINT_001-MATNR'.
G_SELECTED_FIELD_VALUE = RS_SELFIELD-VALUE.
"需调用其它程序。
ENDIF.
WHEN OTHERS.
ENDCASE.
ENDFORM. "F_ALV_USER_COMMAND
*&---------------------------------------------------------------------*
*& 调用ALV控件的抬头输出程序
*&---------------------------------------------------------------------*
FORM. F_ALV_EVENT_TOP_OF_PAGE.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = G_ALV_LISTHEADER.
ENDFORM. "F_ALV_EVENT_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& 输出ALV的页脚
*&---------------------------------------------------------------------*
FORM. F_ALV_EVENT_END_OF_LIST.
WRITE: / '总计:',G_TOTAL.
ENDFORM. "F_ALV_EVENT_END_OF_LIST
*&---------------------------------------------------------------------*
*& 单据表头显示
*&---------------------------------------------------------------------*
FORM. SUB_HEAD.
ENDFORM. " SUB_OUTPUTHEAD
*&---------------------------------------------------------------------
*& 单据表尾显示
*&---------------------------------------------------------------------
FORM. SUB_BOTTOM.
*取制单人
CLEAR NAME_LAST.
CLEAR NAME_FIRST.
CLEAR NAME.
SELECT NAME_LAST NAME_FIRST
FROM USER_ADDR
INTO (NAME_LAST, NAME_FIRST)
WHERE BNAME = SY-UNAME . "取logon 帐号
ENDSELECT.
CONCATENATE NAME_LAST(4) NAME_FIRST(8) INTO NAME.
WRITE: AT 70 '操作员',NAME+0(10) LEFT-JUSTIFIED .
WRITE: AT 90 '打印时间:',SY-DATUM,SY-UZEIT.
ENDFORM. "SUB_BOTTOM
*&---------------------------------------------------------------------*
*& 单据表格上相关坐标值初始
*&---------------------------------------------------------------------*
FORM. SUB_INI .
MOVE 1 TO A1. "
MOVE 2 TO B1.
MOVE 12 TO A2. "
MOVE 13 TO B2.
MOVE 30 TO A3. "
MOVE 31 TO B3.
MOVE 35 TO A4. "
MOVE 36 TO B4.
MOVE 50 TO A5. "
MOVE 51 TO B5.
MOVE 74 TO A6. "
MOVE 75 TO B6.
MOVE 99 TO A7. "
MOVE 100 TO B7.
MOVE 102 TO A8. "
MOVE 103 TO B8.
MOVE 120 TO A9.
ENDFORM. " SUB_INI
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/765243/viewspace-253295/ ,如需转载,请注明出处,否则将追究法律责任。