MM-PR交货信息报表(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZMMR130
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-10-06
*& Program Type        :  Report
*& Description         :  PR交货信息报表
*&---------------------------------------------------------------------*
REPORT ZMMR130.

TABLES:EBAN,EKPO,EKKO,LIPS,VBRK,VBRP.

TYPE-POOLS:SLIS,T001W,ICON.
DATA OK_CODE         TYPE SY-UCOMM.
DATA OK_SAVE         TYPE SY-UCOMM.
"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATALS_STYLE TYPE LVC_S_STYL,
      LT_STYLE TYPE TABLE OF LVC_S_STYL.
DATAIW_CELLCOLOR TYPE LVC_T_SCOL WITH HEADER LINE.
TYPESBEGIN OF GTS_DATA,
         BANFN     TYPE  EBAN-BANFN,                      "请购单
         BNFPO     TYPE  EBAN-BNFPO,                      "请购项目
         AFNAM     TYPE  EBAN-AFNAM,                      "申请者
         BEDNR     TYPE  EBAN-BEDNR,                      "需求跟踪号
         MATNR     TYPE  EBAN-MATNR,                      "物料
         MAKTX     TYPE  MAKT-MAKTX,                      "物料描述
         IDNLF     TYPE  EBAN-IDNLF,                      "费用单号
         MENGE_PR  TYPE  EBAN-MENGE,                      "申请数量
         MEINS_PR  TYPE  EBAN-MEINS,                      "单位

         EBELN     TYPE  EBAN-EBELN,                      "采购订单
         EBELP     TYPE  EBAN-EBELP,                      "采购订单项目
         MENGE_PO  TYPE  EKPO-MENGE,                      "数量
         MEINS_PO  TYPE  EKPO-MEINS,                      "采购单位
         TXZ01     TYPE  EKPO-TXZ01,                      "短文本
         BEDNR_PO  TYPE  EKPO-BEDNR,                      "项目交货日期
         EINDT     TYPE  EKET-EINDT,                      "项目交货日期

         MENGE_JH  TYPE  EKBE-MENGE,                      "交货数量
         MENGE_WS  TYPE  EKBE-MENGE,                      "交货数量
         AEDAT     TYPE  EKKO-AEDAT,                      "采购订单创建日期

         CELLCOLOR TYPE  LVC_T_SCOL,                      "单元格颜色
         STYLE     TYPE  LVC_T_STYL,                      "控制不可编辑
       END OF GTS_DATA.

DATAGT_ALV    TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_ALV_A  TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_ALV_B  TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_LIPS   TYPE TABLE OF LIPS WITH HEADER LINE .

SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONSS_BANFN FOR EBAN-BANFN MODIF ID MXY .  "请购单
SELECT-OPTIONSS_AFNAM FOR EBAN-AFNAM MODIF ID MXY .  "申请者
SELECT-OPTIONSS_BADAT FOR EBAN-BADAT MODIF ID MXY .  "请求日期
"SELECT-OPTIONS: S_BEDNR FOR EBAN-BEDNR MODIF ID MXY .  "需求跟踪号
SELECT-OPTIONSS_MATNR FOR EBAN-MATNR MODIF ID MXY .  "物料
SELECT-OPTIONSS_EKGRP FOR EBAN-EKGRP MODIF ID MXY .  "采购组
SELECT-OPTIONSS_MATKL FOR EBAN-MATKL MODIF ID MXY .  "物料组
SELECT-OPTIONSS_WERKS FOR EBAN-WERKS MODIF ID MXY .  "工厂
SELECT-OPTIONSS_AEDAT FOR EKKO-AEDAT MODIF ID MXY .  "采购订单创建日期
SELECT-OPTIONSS_IDNLF FOR EBAN-IDNLF MODIF ID MXY .  "费用单号
SELECT-OPTIONSS_BSART FOR EBAN-BSART MODIF ID MXY DEFAULT 'Z1'.  "凭证类型
SELECTION-SCREEN END OF BLOCK B2.

*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA GT_EKBE TYPE TABLE OF EKBE WITH HEADER LINE .

  CLEAR GT_ALV[].
  SELECT
    BANFN
    BNFPO
    AFNAM
    BEDNR
    MATNR
    MENGE 
AS MENGE_PR
    MEINS 
AS MEINS_PR
    EBELN
    EBELP
    IDNLF
  
INTO CORRESPONDING FIELDS OF TABLE GT_ALV[] FROM EBAN
    
WHERE BANFN IN S_BANFN
      
AND AFNAM IN S_AFNAM
   
"   AND BEDNR IN S_BEDNR
      AND MATNR IN S_MATNR
      
AND EKGRP IN S_EKGRP
      
AND MATKL IN S_MATKL
      
AND WERKS IN S_WERKS
      
AND BSART IN S_BSART
      
AND BADAT IN S_BADAT
      
.

  IF GT_ALV[] IS NOT INITIAL.
    LOOP AT GT_ALV.
      SELECT SINGLE MAKTX INTO  GT_ALV-MAKTX FROM MAKT
       
WHERE MATNR GT_ALV-MATNR
       
.
      SELECT SINGLE AEDAT INTO  GT_ALV-AEDAT FROM EKKO
       
WHERE EBELN GT_ALV-EBELN
       
.
      SELECT SINGLE
        MENGE AS MENGE_PO
        MEINS 
AS MEINS_PO
        BEDNR 
AS BEDNR_PO
        TXZ01
        
INTO CORRESPONDING FIELDS OF GT_ALV FROM EKPO
        
WHERE EBELN GT_ALV-EBELN
          
AND EBELP GT_ALV-EBELP
        
.
      SELECT SINGLE
        EINDT
        
INTO GT_ALV-EINDT FROM EKET
        
WHERE EBELN GT_ALV-EBELN
          
AND EBELP GT_ALV-EBELP
          
AND ETENR '1'
          .
      CLEAR GT_EKBE[].
      SELECT INTO CORRESPONDING FIELDS OF TABLE GT_EKBE[] FROM EKBE
        
WHERE EBELN GT_ALV-EBELN
          
AND EBELP GT_ALV-EBELP
          
AND BWART IN ('101','102','123','122')
          .
      LOOP AT GT_EKBE .
        IF GT_EKBE-BWART '102' OR GT_EKBE-BWART '122'.
          GT_EKBE-MENGE GT_EKBE-MENGE * -.
        ENDIF.

        GT_ALV-MENGE_JH GT_ALV-MENGE_JH + GT_EKBE-MENGE .

        CLEAR GT_EKBE .
      ENDLOOP.

      GT_ALV-MENGE_WS GT_ALV-MENGE_PO GT_ALV-MENGE_JH .

      MODIFY GT_ALV .
      CLEAR GT_ALV .
    ENDLOOP.
  ENDIF.

  DELETE GT_ALV[] WHERE AEDAT NOT IN S_AEDAT .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
  S_LAYOUT-COLTAB_FIELDNAME 'CELLCOLOR'"单元格颜色内表字段
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_SAVE                   'A'
      IS_LAYOUT                S_LAYOUT
      IT_FIELDCAT              
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_ALV[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    WA_FIELDCAT-FIELDNAME &1.
    WA_FIELDCAT-SELTEXT_L &2.

    IF WA_FIELDCAT-FIELDNAME =  'CKBOX' .
      WA_FIELDCAT-CHECKBOX 'X'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME =  'MENGE_T' .
      WA_FIELDCAT-REF_TABNAME 'AUFM'.
      WA_FIELDCAT-REF_FIELDNAME 'MENGE'.
      WA_FIELDCAT-OUTPUTLEN '13'.
      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME =  'LGORT_T' .
      WA_FIELDCAT-EDIT 'X'.
    ENDIF .

    IF WA_FIELDCAT-FIELDNAME 'PLNBEZ'
       OR WA_FIELDCAT-FIELDNAME 'MATNR'
       OR WA_FIELDCAT-FIELDNAME 'MATNRT'
      .
      WA_FIELDCAT-REF_TABNAME 'MARA'.
      WA_FIELDCAT-REF_FIELDNAME 'MATNR'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'ARKTX' OR WA_FIELDCAT-FIELDNAME 'WAKTX' .
      WA_FIELDCAT-REF_TABNAME 'VBAP'.
      WA_FIELDCAT-REF_FIELDNAME 'ARKTX'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'VBELN_DN' .
      WA_FIELDCAT-REF_TABNAME 'LIPS'.
      WA_FIELDCAT-REF_FIELDNAME 'VBELN'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'BANFN' .
      WA_FIELDCAT-REF_TABNAME 'EBAN'.
      WA_FIELDCAT-REF_FIELDNAME 'BANFN'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'BLDAT'
       OR WA_FIELDCAT-FIELDNAME 'BUDAT'
      .
      WA_FIELDCAT-REF_TABNAME 'MATDOC'.
      WA_FIELDCAT-REF_FIELDNAME 'BLDAT'.
*      WA_FIELDCAT-EDIT = 'X'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'MESSAGE' .
      WA_FIELDCAT-OUTPUTLEN '100'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'TYPBO'
     OR WA_FIELDCAT-FIELDNAME 'TYPAI'
      .
      WA_FIELDCAT-ICON 'X'.
      WA_FIELDCAT-OUTPUTLEN '13'.
    ENDIF.

    IF WA_FIELDCAT-FIELDNAME 'TYPBO'
     OR WA_FIELDCAT-FIELDNAME 'TYPAI'
      .
      WA_FIELDCAT-ICON 'X'.
    ENDIF.

    APPEND WA_FIELDCAT TO GT_FIELDCAT.
    CLEAR WA_FIELDCAT.
  END-OF-DEFINITION.

  FILL_FIELD :
     'BANFN'       '请购单',
     'BNFPO'       '请购项目',
     'AFNAM '      '申请者',
*     'BEDNR_PO'    '采购确认交货日期',
     'BEDNR_PO'       '采购确认交货日期',
     'MATNR'       '物料',
     'MAKTX'       '物料描述',
     'IDNLF'       '费用单号',
     'MENGE_PR'    '申请数量',
     'MEINS_PR'    '单位',
     'EBELN'       '采购订单',
     'EBELP'       '采购订单项目',
     'AEDAT'       '采购订单创建日期',
     'MENGE_PO'    '数量',
     'MEINS_PO'    '采购单位',
     'TXZ01'       '短文本',
     'EINDT'       '项目交货日期',
     'MENGE_JH'    '已收货货数量',
     'MENGE_WS'    '未收货货数量'.

ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN1'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATAREF TYPE REF TO CL_GUI_ALV_GRID.
  DATA LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:L_BUKRS TYPE T001K-BUKRS.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.

    WHEN '&IC1'."表示双击
      IF IS_SELFIELD-FIELDNAME =  'BANFN' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_ALV .
        READ TABLE GT_ALV INDEX IS_SELFIELD-TABINDEX.
        IF GT_ALV-BANFN IS NOT INITIAL.
          SET PARAMETER ID 'BAN' FIELD GT_ALV-BANFN.
          CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN.
        ENDIF.

      ELSE .
        MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
      ENDIF .
  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.
ENDFORM.

START-OF-SELECTION.

  PERFORM FOM_GETDATA.
  PERFORM FRM_DISPLAY.

*&SPWIZARD: DECLARATION OF TABLECONTROL 'TBC_01' ITSELF
  CONTROLSTBC_01 TYPE TABLEVIEW USING SCREEN 0100.

*&SPWIZARD: OUTPUT MODULE FOR TC 'TBC_01'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TBC_01_CHANGE_TC_ATTR OUTPUT.
  DESCRIBE TABLE GT_LIPS LINES TBC_01-LINES.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  CANCEL  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
  LEAVE TO SCREEN .
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
  OK_SAVE SY-UCOMM .
  CLEAR SY-UCOMM .
  CLEAR OK_CODE .
  CASE  OK_SAVE.
    WHEN 'BACK'  .
      LEAVE TO SCREEN .
    WHEN OTHERS .
  ENDCASE .
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'PF_0100'.
  SET TITLEBAR  'TITLE_0100'.
ENDMODULE.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值