zoukankan      html  css  js  c++  java
  • SAP采购订单历史明细报表源代码(自己收藏)

    *&---------------------------------------------------------------------*
    *& Report  ZTESTXIAO002
    *&
    *&---------------------------------------------------------------------*
    *&
    *&
    *&---------------------------------------------------------------------*

    REPORT ZTESTXIAO002.

    TABLES:EKBE,EKPO,EKKO,LFA1.

    *定义ALV变量
    TYPE-POOLS: SLIS.
    DATA: FIELDCATALOG   TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
          GD_TAB_GROUP   TYPE SLIS_T_SP_GROUP_ALV,
          GD_LAYOUT      TYPE SLIS_LAYOUT_ALV,
          GD_REPID       LIKE SY-REPID,
          GT_EVENTS      TYPE SLIS_T_EVENT,
          GD_PRNTPARAMS  TYPE SLIS_PRINT_ALV,
          GT_SORT        TYPE SLIS_T_SORTINFO_ALV,
          GS_SORT        TYPE SLIS_SORTINFO_ALV,
          G_TITLE        TYPE LVC_TITLE.

    DATA:BEGIN OF GT_OUT OCCURS 0,
      EBELN LIKE EKBE-EBELN,      "采购订单号
      WERKS LIKE EKPO-WERKS,      "工厂
      AEDAT LIKE EKPO-AEDAT,      "采购凭证日期
      MATNR LIKE EKPO-MATNR,      "物料号
      TXZ01 LIKE EKPO-TXZ01,      "物料描述
      NETPR LIKE EKPO-NETPR,      "净价
      MENGE LIKE EKPO-MENGE,     "凭证数量
      BUZEI LIKE EKBE-BUZEI,      "行项目
      VGABE LIKE EKBE-VGABE,      "业务事件类
      BELNR LIKE EKBE-BELNR,      "凭证号
      MENGE1 LIKE EKBE-MENGE,      "数量
      BWART LIKE EKBE-BWART,      "移动类型
      BUDAT LIKE EKBE-BUDAT,      "过账日期
      HSWAE LIKE EKBE-HSWAE,      "货币
      LIFNR LIKE EKKO-LIFNR,      "供应商
      NAME1 LIKE LFA1-NAME1,      "供应商名称
      END OF GT_OUT.

    DATA:BEGIN OF GT_EKBE occurs 0,

      EBELN LIKE EKBE-EBELN,      "采购订单号
      BUZEI LIKE EKBE-BUZEI,      "行项目
      VGABE LIKE EKBE-VGABE,      "业务事件类
      BELNR LIKE EKBE-BELNR,      "凭证号
      MENGE1 LIKE EKBE-MENGE,      "数量
      BWART LIKE EKBE-BWART,      "移动类型
      BUDAT LIKE EKBE-BUDAT,      "过账日期
      HSWAE LIKE EKBE-HSWAE,      "货币
      MATNR LIKE EKPO-MATNR,      "物料号
      END OF GT_EKBE.

    DATA:BEGIN OF GT_EKKO occurs 0,
      EBELN LIKE EKBE-EBELN,      "采购订单号
      WERKS LIKE EKPO-WERKS,      "工厂
      AEDAT LIKE EKPO-AEDAT,      "采购凭证日期
      MATNR LIKE EKPO-MATNR,      "物料号
      TXZ01 LIKE EKPO-TXZ01,      "物料描述
      NETPR LIKE EKPO-NETPR,      "净价
      MENGE LIKE EKPO-MENGE,      "凭证数量
      LIFNR LIKE EKKO-LIFNR,      "供应商
      BUZEI LIKE EKBE-BUZEI,      "行项目
      VGABE LIKE EKBE-VGABE,      "业务事件类
      BELNR LIKE EKBE-BELNR,      "凭证号
      MENGE1 LIKE EKBE-MENGE,      "数量
      BWART LIKE EKBE-BWART,      "移动类型
      BUDAT LIKE EKBE-BUDAT,      "过账日期
      HSWAE LIKE EKBE-HSWAE,      "货币
    *  MATNR LIKE EKPO-MATNR,      "物料号
      END OF GT_EKKO.

    DATA:BEGIN OF GT_LFA1 occurs 0,
      LIFNR LIKE EKKO-LIFNR,      "供应商
      NAME1 LIKE LFA1-NAME1,      "供应商名称
      END OF GT_LFA1.

    "定义选择屏幕(输入条件)
    SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-001.
    SELECT-OPTIONS:   S_EBELN for EKBE-EBELN.  "采购订单号
    SELECTION-SCREEN END OF BLOCK BLOCK1.

    START-OF-SELECTION.
      "取数
      PERFORM GET_DATA.
      "处理数据
      PERFORM DEAL_DATA.
      "alv显示
      PERFORM ALV_DIS.

    END-OF-SELECTION.
    *&---------------------------------------------------------------------*
    *&      Form  GET_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM GET_DATA .

      SELECT
        EBELN
        BUZEI
        VGABE
        BELNR
        MENGE AS MENGE1
        BWART
        BUDAT
        HSWAE
        MATNR
        INTO CORRESPONDING FIELDS OF TABLE GT_EKBE
        FROM EKBE
        WHERE EBELN in S_EBELN.

      SELECT
         A~EBELN
         A~WERKS
         A~AEDAT
         A~MATNR
         A~TXZ01
         A~NETPR
         A~MENGE
         B~LIFNR
        INTO CORRESPONDING FIELDS OF TABLE GT_EKKO
        FROM EKPO AS A
        INNER JOIN EKKO AS B ON A~EBELN = B~EBELN
    *    inner join ekbe as c on A~EBELN = c~EBELN
        WHERE B~EBELN in S_EBELN.

      SELECT
        LIFNR
        NAME1
        INTO CORRESPONDING FIELDS OF TABLE GT_LFA1
        FROM LFA1
        FOR ALL ENTRIES IN GT_EKKO
        WHERE LIFNR = GT_EKKO-LIFNR.

    ENDFORM.                    " GET_DATA
    *&---------------------------------------------------------------------*
    *&      Form  DEAL_DATA
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM DEAL_DATA .  "给需要输出的字段赋值
    loop at GT_EKKO.
         READ TABLE GT_EKBE WITH KEY EBELN = GT_EKKO-EBELN.
         IF SY-SUBRC <> 0.
           MOVE-CORRESPONDING GT_EKKO TO GT_out.


         READ TABLE GT_LFA1 WITH KEY LIFNR = GT_EKKO-LIFNR.
         IF SY-SUBRC 0.
         GT_OUT-NAME1 = GT_LFA1-NAME1.
         ENDIF.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  = GT_OUT-MATNR
        IMPORTING
          OUTPUT = GT_OUT-MATNR.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  = GT_OUT-LIFNR
        IMPORTING
          OUTPUT = GT_OUT-LIFNR.
         append GT_out.
         clear      GT_EKKO.
         ENDIF.
    endloop.
     LOOP AT GT_EKBE.
        MOVE-CORRESPONDING GT_EKBE TO GT_OUT.
    *    GT_OUT-EBELN = GT_EKBE-EBELN.
    *    GT_OUT-BUZEI = GT_EKBE-BUZEI.
    *    GT_OUT-VGABE = GT_EKBE-VGABE.
    *    GT_OUT-BELNR = GT_EKBE-BELNR.
    *    GT_OUT-MENGE1 = GT_EKBE-MENGE1.
    *    GT_OUT-BWART = GT_EKBE-BWART.
    *    GT_OUT-BUDAT = GT_EKBE-BUDAT.
    *    GT_OUT-HSWAE = GT_EKBE-HSWAE.


         READ TABLE GT_EKKO WITH KEY EBELN = GT_EKBE-EBELN
                                     matnr = GT_EKBE-matnr.
         IF SY-SUBRC 0.
         GT_OUT-WERKS = GT_EKKO-WERKS.
         GT_OUT-AEDAT = GT_EKKO-AEDAT.
         GT_OUT-MATNR = GT_EKKO-MATNR.
         GT_OUT-TXZ01 = GT_EKKO-TXZ01.
         GT_OUT-NETPR = GT_EKKO-NETPR.
         GT_OUT-MENGE = GT_EKKO-MENGE.
         GT_OUT-LIFNR = GT_EKKO-LIFNR.
         ENDIF.


         READ TABLE GT_LFA1 WITH KEY LIFNR = GT_EKKO-LIFNR.
         IF SY-SUBRC 0.
         GT_OUT-NAME1 = GT_LFA1-NAME1.
         ENDIF.

        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  = GT_OUT-MATNR
        IMPORTING
          OUTPUT = GT_OUT-MATNR.
        CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
        EXPORTING
          INPUT  = GT_OUT-LIFNR
        IMPORTING
          OUTPUT = GT_OUT-LIFNR.

         APPEND GT_OUT.
         CLEAR  GT_OUT.

      ENDLOOP.

    ENDFORM.                    " DEAL_DATA
    *&---------------------------------------------------------------------*
    *&      Form  ALV_DIS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM ALV_DIS .

    *创建字段宏定义和输出字段赋值
      PERFORM FRM_BUILD_FIELDCATALOG.

    *定义输出模式
      GD_LAYOUT-NO_INPUT           'X'.
      GD_LAYOUT-COLWIDTH_OPTIMIZE  'X'.
      GD_LAYOUT-F2CODE             '&IC1'.  "Sets fcode for when double click(press f2)
      "gd_layout-box_fieldname      = 'BOX'.
      GD_LAYOUT-CELL_MERGE         'X'.
      GD_LAYOUT-ZEBRA              'X'.

    *使用ALV输出函数
      GD_REPID = SY-REPID.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                I_CALLBACK_PROGRAM       = GD_REPID
    **用户操作的参数
    *            I_CALLBACK_USER_COMMAND  = 'USER_COMMAND_4000' "自定义指向代码
    *ALV输出状态的参数
                I_CALLBACK_PF_STATUS_SET 'SET_PF_STATUS_3200' "菜单
    *输出模式参数
                IS_LAYOUT                = GD_LAYOUT
                IT_FIELDCAT              = FIELDCATALOG[]
                IS_PRINT                 = GD_PRNTPARAMS
                I_GRID_TITLE             = G_TITLE
                I_SAVE                   'X'
                "it_sort                  = gt_sort[]
           TABLES
    *用于输出ALV的内表
                T_OUTTAB                 = GT_OUT
           EXCEPTIONS
    *定义输出异常时的信息,配合MESSAGE语句使用
                PROGRAM_ERROR            1
                OTHERS                   2.

    ENDFORM.                    " ALV_DIS
    *&---------------------------------------------------------------------*
    *&      Form  FRM_BUILD_FIELDCATALOG
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *  -->  p1        text
    *  <--  p2        text
    *----------------------------------------------------------------------*
    FORM FRM_BUILD_FIELDCATALOG .

      "创建字段宏定义
      DEFINE ADD_FIELD.
        FIELDCATALOG-FIELDNAME =  &1.   "内表字段名称
        FIELDCATALOG-SELTEXT_M =  &2.    "字段输出名称
        FIELDCATALOG-NO_ZERO   =  &3.    "是否显示零
        FIELDCATALOG-JUST      =  &4.    "对齐方式
        FIELDCATALOG-EMPHASIZE =  &5.    "是否高亮
        FIELDCATALOG-CHECKBOX    = &6.  "是否带单选框
        FIELDCATALOG-EDIT      =  &7.    "可编辑
        APPEND FIELDCATALOG.
        CLEAR FIELDCATALOG.
      END-OF-DEFINITION.
    *输出字段赋值
      ADD_FIELD 'EBELN'                  '采购订单号'         '' 'L' '' '' ''.
      ADD_FIELD 'WERKS'                    '工厂'         '' 'L' '' '' ''.
      ADD_FIELD 'AEDAT'                    '凭证日期'         '' 'L' '' '' ''.
      ADD_FIELD 'MATNR'                    '物料号'         '' 'L' '' '' ''.
      ADD_FIELD 'TXZ01'                    '物料描述'         '' 'L' '' '' ''.
      ADD_FIELD 'NETPR'                  '净价'         '' 'L' '' '' ''.
      ADD_FIELD 'MENGE'                  '凭证数量'         '' 'L' '' '' ''.
      ADD_FIELD 'BUZEI'                    '行项目'         '' 'L' '' '' ''.
      ADD_FIELD 'VGABE'                    '业务事件类'         '' 'L' '' '' ''.
      ADD_FIELD 'BELNR'                    '凭证号'         '' 'L' '' '' ''.
      ADD_FIELD 'MENGE1'                  '数量'         '' 'L' '' '' ''.
      ADD_FIELD 'BWART'                  '移动类型'         '' 'L' '' '' ''.
      ADD_FIELD 'BUDAT'                  '过账日期'         '' 'L' '' '' ''.
      ADD_FIELD 'HSWAE'                  '货币'         '' 'L' '' '' ''.
      ADD_FIELD 'LIFNR'                    '供应商'         '' 'L' '' '' ''.
      ADD_FIELD 'NAME1'                    '供应商名称'         '' 'L' '' '' ''.


    ENDFORM.                    " FRM_BUILD_FIELDCATALOG
    *&---------------------------------------------------------------------*
    *&      Form  set_pf_status_3200
    *&---------------------------------------------------------------------*
    *       GUI定义
    *----------------------------------------------------------------------*
    *      -->EXTAB      text
    *----------------------------------------------------------------------*
    FORM SET_PF_STATUS_3200 USING  EXTAB TYPE SLIS_T_EXTAB.
      DATA: R_UCOMM LIKE SY-UCOMM.
      SET PF-STATUS 'MYSTATUS'.
    ENDFORM.

  • 相关阅读:
    SSL 1010——方格取数
    SSL 1558——科技庄园
    SSL 2295——暗黑破坏神
    SSL 2294——打包
    SSL 2293——暗黑游戏
    SSL 2305——竞赛总分
    SSL 1072——砝码称重
    SSL 2291——分组背包
    SSL 2290——潜水员
    SSL 2301——混合背包
  • 原文地址:https://www.cnblogs.com/275147378abc/p/6065746.html
Copyright © 2011-2022 走看看