ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ZR_FI_012

ZR_FI_012

原创 Linux操作系统 作者:williamzhou 时间:2019-04-29 10:09:08 0 删除 编辑

*===============================基本信息===============================*
* 标题:寄售明细表
* 创建日期: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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ZR_FI_011
下一篇: ZR_FI_013
请登录后发表评论 登录
全部评论

注册时间:2006-03-01

  • 博文量
    43
  • 访问量
    41967