SD-SO交货信息报表(开发笔记)

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

TABLES:VBAK,VBAP,LIKP,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,
         CKBOX      TYPE  C,
         VBELN_SO   TYPE  VBAK-VBELN,                      "销售凭证
         KUNNR      TYPE  VBAK-KUNNR,                      "售达方
         NAME1      TYPE  KNA1-NAME1,                      "售达方
         VKORG      TYPE  VBAK-VKORG,                      "销售组织
         BSTNK      TYPE  VBAK-BSTNK,                      "客户参考
         POSNR_SO   TYPE  VBAP-POSNR,                      "销售凭证
         MATNR      TYPE  VBAP-MATNR,                      "物料编码
         MAKTX      TYPE  MAKT-MAKTX,                      "物料描述
         KDMAT      TYPE  VBAP-KDMAT,                      "客户物料
         POSTX      TYPE  KNMT-POSTX,                      "客户物料描述

         KWMENG     TYPE  VBAP-KWMENG,                     "数量
         VRKME      TYPE  VBAP-VRKME,                      "单位
         WERKS      TYPE  VBAP-WERKS,                      "工厂
         NETPR      TYPE  VBAP-NETPR,                      "净价
         NETWR      TYPE  VBAP-NETWR,                      "净值
         WAERK      TYPE  VBAP-WAERK,                      "货币

         VBELN_DN   TYPE  LIPS-VBELN,                      "DN单号
         POSNR_DN   TYPE  LIPS-POSNR,                      "DN单号
         WERKS_DN   TYPE  LIPS-WERKS,                      "DN工厂
         LGORT_DN   TYPE  LIPS-LGORT,                      "DN库位
         LFIMG_DN   TYPE  LIPS-LFIMG,                      "交货数量
         KCMENG_DN  TYPE  LIPS-KCMENG,                     "累计批数量
         UECHA_DN   TYPE  LIPS-UECHA,                      "上层项目

         MENGE_GZ   TYPE  MSEG-MENGE,                      "交货过账数量
         MBLNR_GZ   TYPE  MSEG-MBLNR,                      "交货过账数量
         ZEILE_GZ   TYPE  MSEG-ZEILE,                      "交货过账数量

         BUDAT_MKPF TYPE  MSEG-BUDAT_MKPF,                      "交货过账数量

         VBELN_VF   TYPE  VBRP-VBELN,                      "开票凭证
         POSNR_VF   TYPE  VBRP-POSNR,                      "开票项目
         FKIMG_VF   TYPE  VBRP-FKIMG,                      "开票数量
         NETWR_VF   TYPE  VBRP-NETWR,                      "开票净值
         MWSBP_VF   TYPE  VBRP-MWSBP,                      "开票税额
         ZHSJE_VF   TYPE  VBRP-NETWR,                      "开票含税金额

         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_VBELN FOR VBAK-VBELN MODIF ID MXY .  "销售凭证
SELECT-OPTIONSS_KUNNR FOR VBAK-KUNNR MODIF ID MXY .  "客户
SELECT-OPTIONSS_VKORG FOR VBAK-VKORG MODIF ID MXY .  "销售组织
SELECT-OPTIONSS_WERKS FOR VBAP-WERKS MODIF ID MXY .  "工厂
SELECT-OPTIONSS_DNELN FOR LIPS-VBELN MODIF ID MXY .  "DN编号
SELECT-OPTIONSS_MATNR FOR VBAP-MATNR MODIF ID MXY .  "物料

SELECTION-SCREEN END OF BLOCK B2.


*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA GT_VBRP TYPE TABLE OF VBRP WITH HEADER LINE .
  DATA GT_MSEG TYPE TABLE OF MSEG WITH HEADER LINE .
  DATA GT_VBFA TYPE TABLE OF VBFA WITH HEADER LINE .
  CLEAR GT_ALV[].
  SELECT
    VBAK~VBELN AS VBELN_SO
    VBAK
~KUNNR
    VBAK
~VKORG
    VBAK
~BSTNK
    VBAP
~POSNR AS POSNR_SO
    VBAP
~MATNR
    VBAP
~KWMENG
    VBAP
~VRKME
    VBAP
~WERKS
    VBAP
~NETPR
    VBAP
~NETWR
    VBAP
~WAERK
    VBAP
~KDMAT
    LIPS
~VBELN  AS VBELN_DN
    LIPS
~POSNR  AS POSNR_DN
    LIPS
~LGORT  AS LGORT_DN
    LIPS
~LFIMG  AS LFIMG_DN
    LIPS
~KCMENG AS KCMENG_DN
    LIPS
~UECHA  AS UECHA_DN
  
INTO CORRESPONDING FIELDS OF TABLE GT_ALV[]
    
FROM VBAP
    INNER 
JOIN VBAK ON VBAK~VBELN VBAP~VBELN
    
LEFT  JOIN LIPS ON LIPS~VGBEL VBAP~VBELN AND LIPS~VGPOS VBAP~POSNR
    
WHERE VBAP~VBELN IN S_VBELN
      
AND VBAP~WERKS IN S_WERKS
      
AND VBAP~MATNR IN S_MATNR
      
AND VBAK~KUNNR IN S_KUNNR
      
AND VBAK~VKORG IN S_VKORG
      
.
  DELETE GT_ALV[] WHERE VBELN_DN NOT IN S_DNELN .
  SORT GT_ALV[] BY VBELN_SO POSNR_SO VBELN_DN POSNR_DN .
  GT_ALV_A[] GT_ALV[].
  DELETE GT_ALV[] WHERE UECHA_DN IS NOT INITIAL .

  IF GT_ALV[] IS NOT INITIAL.
    LOOP AT GT_ALV.

      IF GT_ALV-LFIMG_DN IS INITIAL
        AND GT_ALV-UECHA_DN IS INITIAL
        AND GT_ALV-VBELN_DN IS NOT INITIAL
        AND GT_ALV-POSNR_DN IS NOT INITIAL
        .

        GT_ALV-LFIMG_DN GT_ALV-KCMENG_DN .

        CLEAR IW_CELLCOLOR .
        IW_CELLCOLOR-FNAME 'VBELN_DN'.
        IW_CELLCOLOR-COLOR-COL 3.
        IW_CELLCOLOR-COLOR-INT 1.
        IW_CELLCOLOR-COLOR-INV 0.
        APPEND IW_CELLCOLOR TO GT_ALV-CELLCOLOR.

        CLEAR IW_CELLCOLOR .
        IW_CELLCOLOR-FNAME 'POSNR_DN'.
        IW_CELLCOLOR-COLOR-COL 3.
        IW_CELLCOLOR-COLOR-INT 1.
        IW_CELLCOLOR-COLOR-INV 0.
        APPEND IW_CELLCOLOR TO GT_ALV-CELLCOLOR.

      ENDIF.

      SELECT SINGLE NAME1 INTO GT_ALV-NAME1 FROM KNA1
        
WHERE KUNNR GT_ALV-KUNNR
        
.

      SELECT SINGLE MAKTX INTO GT_ALV-MAKTX FROM MAKT
        
WHERE MATNR GT_ALV-MATNR
        
.

      SELECT SINGLE POSTX INTO GT_ALV-POSTX FROM KNMT
        
WHERE KDMAT GT_ALV-KDMAT
        
.

*交货过账数量
      CLEAR GT_VBFA[].
      SELECT  *
      
INTO CORRESPONDING FIELDS OF TABLE GT_VBFA[]
        
FROM VBFA
        
WHERE VBFA~VBELV GT_ALV-VBELN_DN
          
AND VBFA~POSNV GT_ALV-POSNR_DN
          
AND VBFA~VBTYP_N IN 'R','h' )
          AND VBFA~VBTYP_N <> ''
          .

      LOOP AT GT_VBFA.
        IF GT_VBFA-PLMIN '-'.
          GT_VBFA-RFMNG GT_VBFA-RFMNG * -.
        ENDIF.
        GT_ALV-MENGE_GZ GT_ALV-MENGE_GZ + GT_VBFA-RFMNG .

        GT_ALV-MBLNR_GZ GT_VBFA-VBELN .
        GT_ALV-ZEILE_GZ GT_VBFA-POSNN .



**     'FKIMG_VF'    'DN开票数量合计',
*        GT_ALV-FKIMG_VF = GT_ALV-FKIMG_VF + GT_VBRP-FKIMG .
*
**     'NETWR_VF'    'DN开票净值合计',
*        GT_ALV-NETWR_VF = GT_ALV-NETWR_VF + GT_VBRP-NETWR .
*
**     'MWSBP_VF'    'DN开票税额合计'.
*        GT_ALV-MWSBP_VF = GT_ALV-MWSBP_VF + GT_VBRP-MWSBP .

        CLEAR GT_VBFA.
      ENDLOOP.
      SELECT SINGLE BUDAT_MKPF INTO GT_ALV-BUDAT_MKPF FROM MSEG
        
WHERE MBLNR GT_ALV-MBLNR_GZ
          
AND ZEILE GT_ALV-ZEILE_GZ
        
.


*开票数量
      CLEAR GT_VBRP[] .
      SELECT
         VBRP~FKIMG
         VBRP
~NETWR
         VBRP
~MWSBP
      
INTO CORRESPONDING FIELDS OF TABLE GT_VBRP[]
        
FROM VBRP
        INNER 
JOIN VBRK ON VBRP~VBELN VBRK~VBELN
        
WHERE VBRP~VGBEL  GT_ALV-VBELN_DN
          
AND VBRP~VGPOS  GT_ALV-POSNR_DN
          
AND VBRK~FKART  <> 'F8'
          AND VBRK~FKSTO  ''
          AND VBRK~FKSTO  ''
          AND VBRK~SFAKN  ''
          .
      CLEAR GT_ALV-FKIMG_VF.
      CLEAR GT_ALV-NETWR_VF.
      CLEAR GT_ALV-MWSBP_VF.
      LOOP AT GT_VBRP.

*     'FKIMG_VF'    'DN开票数量合计',
        GT_ALV-FKIMG_VF GT_ALV-FKIMG_VF + GT_VBRP-FKIMG .

*     'NETWR_VF'    'DN开票净值合计',
        GT_ALV-NETWR_VF GT_ALV-NETWR_VF + GT_VBRP-NETWR .

*     'MWSBP_VF'    'DN开票税额合计'.
        GT_ALV-MWSBP_VF GT_ALV-MWSBP_VF + GT_VBRP-MWSBP .

        CLEAR GT_VBRP.
      ENDLOOP.

*     'ZHSJE_VF'    'DN含税金额合计'.
      GT_ALV-ZHSJE_VF GT_ALV-NETWR_VF + GT_ALV-MWSBP_VF .

      MODIFY GT_ALV .
      CLEAR GT_ALV .
    ENDLOOP.
  ENDIF.

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 'KUNNR' .
      WA_FIELDCAT-REF_TABNAME 'VBAK'.
      WA_FIELDCAT-REF_FIELDNAME 'KUNNR'.
    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 :
     'VBELN_SO'    '销售凭证',
     'POSNR_SO'    '销售凭证项目',
     'BSTNK '      '客户参考',
     'KUNNR'       '客户',
     'NAME1'       '客户名称',
     'MATNR'       '物料编码',
     'MAKTX'       '物料描述',
     'KDMAT'       '客户物料',
     'POSTX'    '客户物料描述',
     'KWMENG'      '数量',
     'VRKME'       '单位',
     'WERKS'       '工厂',
     'NETPR'       '净价',
     'NETWR'       '净值',
     'WAERK'       '货币',
     'VBELN_DN'    'DN单号',
     'POSNR_DN'    'DN项目',
     'LGORT_DN'    '库位',
     'LFIMG_DN'    '交货单数量',
     'MENGE_GZ'    '交货过账数量',
     'BUDAT_MKPF'    '交货过账日期',
     'FKIMG_VF'    'DN开票数量合计',
     'NETWR_VF'    'DN开票净值合计',
     'ZHSJE_VF'    'DN含税金额合计'.
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 =  'VBELN_DN' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_ALV .
        READ TABLE GT_ALV INDEX IS_SELFIELD-TABINDEX.
        IF GT_ALV-VBELN_DN IS NOT INITIAL.
          SET PARAMETER ID 'VL' FIELD GT_ALV-VBELN_DN.
          CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
        ENDIF.

      ELSEIF IS_SELFIELD-FIELDNAME =  'VBELN_SO' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_ALV .
        READ TABLE GT_ALV INDEX IS_SELFIELD-TABINDEX.
        IF GT_ALV-VBELN_SO IS NOT INITIAL.
          SET PARAMETER ID 'AUN' FIELD GT_ALV-VBELN_SO.
          CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
        ENDIF.

      ELSEIF IS_SELFIELD-FIELDNAME =  'POSNR_DN' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_ALV .
        READ TABLE GT_ALV INDEX IS_SELFIELD-TABINDEX.
        IF GT_ALV-VBELN_DN IS NOT INITIAL
          AND GT_ALV-POSNR_DN IS NOT INITIAL
          .
          CLEAR GT_LIPS[].
          SELECT INTO CORRESPONDING FIELDS OF TABLE GT_LIPS[] FROM LIPS
            
WHERE VBELN GT_ALV-VBELN_DN
              
AND UECHA GT_ALV-POSNR_DN
              
.
          IF GT_LIPS[] IS NOT INITIAL.
            CALL SCREEN 0100 STARTING AT 3 3.
          ENDIF.
        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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值