SD-客户未提货清单(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-06-26
*& Program Type        :  Report
*& Description         :  客户未提货清单
*&---------------------------------------------------------------------*
REPORT ZSDR003.
*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:VBAK,VBAP,MSKA,MCHB.

TYPE-POOLS:SLIS,T001W.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATA:TOPMAT  LIKE CSTMAT .
DATA:DSTST   LIKE CSDATA-XFELD .
DATA:STB     LIKE STPOX OCCURS WITH HEADER LINE  .
DATA:MATCAT  LIKE CSCMAT OCCURS WITH HEADER LINE  .
DATA:GT_MARD LIKE MARD OCCURS WITH HEADER LINE  .
DATA:GT_MSKA LIKE MSKA OCCURS WITH HEADER LINE  .
DATA:E_MT61D LIKE MT61D  .
DATA:E_MDKP  LIKE MDKP  .
DATA:MDPSX   LIKE MDPS OCCURS WITH HEADER LINE  .
DATA:MDEZX   LIKE MDEZ OCCURS WITH HEADER LINE  .
DATA:MDSUX   LIKE MDSU OCCURS WITH HEADER LINE  .

TYPESBEGIN OF GTS_DATA,
         VBELN   TYPE  VBAP-VBELN,                      "销售订单
         POSNR   TYPE  VBAP-POSNR,                      "销售订单行项目
         KUNNR   TYPE  VBAK-KUNNR,                      "客户
         KUNNF   TYPE  VBAK-KUNNR,                      "付款方
         VDATU   TYPE  VBAK-VDATU,                      "交期
         NAME1   TYPE  KNA1-NAME1,                      "客户名称
         MATNR   TYPE  VBAP-MATNR,                      "物料
         MAKTX   TYPE  MAKT-MAKTX,                      "物料描述
         CMGST   TYPE  VBAK-CMGST,                      "信用状态
         ABGRU   TYPE  VBAP-ABGRU,                      "拒绝原因
         LIFSK   TYPE  VBAK-LIFSK,                      "交货冻结
         LFGSA   TYPE  VBAP-LFGSA,                      "项目交货状态
         EDATU   TYPE  VBEP-EDATU,                      "订单首个交期
         KWMENG  TYPE  VBAP-KWMENG,                     "订单数量
         VRKME   TYPE  VBAP-VRKME,                      "单位
         ZWQSL   TYPE  VBAP-KWMENG,                     "未清数量
         MVGR1   TYPE  VBAP-MVGR1,                      "未及时提货客户原因分类
         TDLINE2 TYPE  CHAR200,                         "客户未及时提货-内部原因
         TDLINE3 TYPE  CHAR200,                         "客户未及时提货-其他原因
         ARKTX   TYPE  VBAP-ARKTX,                      "项目文本
         CHARG   TYPE  MSKA-CHARG,                      "批次
         WERKS   TYPE  MSKA-WERKS,                      "批次工厂
         LGORT   TYPE  MSKA-LGORT,                      "批次库位
         KALAB   TYPE  MSKA-KALAB,                      "批次数量(非限制)
         MEINS   TYPE  MARA-MEINS,                      "批次数量单位
         GRACED1 TYPE  ZTCNPU-GRACED1,                  "客户未提宽限天数1
         GRACED2 TYPE  ZTCNPU-GRACED2,                  "客户未提宽限天数2
         GRACED3 TYPE  ZTCNPU-GRACED3,                  "客户未提宽限天数3
         EXDATJ  TYPE  ZTCNPU-GRACED1,                  "超过交期天数
         EXDATS  TYPE  ZTCNPU-GRACED1,                  "超过生产天数
         DATUM   TYPE  DATS,                            "当天日期
         PCDAT   TYPE  DATS,                            "批次生产日期
         DKDAT   TYPE  ZTCNPU-GRACED1,                  "生产到库存天数

         FLAG    TYPE  C    ,                           "
       END OF GTS_DATA.

DATAGT_DATA        TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_A      TYPE TABLE OF GTS_DATA WITH HEADER LINE.

TYPESBEGIN OF GTS_NDATA,
         MATNR   TYPE  MCHB-MATNR,                      "物料
         MAKTX   TYPE  MAKT-MAKTX,                      "物料描述
         CHARG   TYPE  MCHB-CHARG,                      "批次
         PCDAT   TYPE  DATS,                            "批次生产日期
         DKDAT   TYPE  ZTCNPU-GRACED1,                  "生产到库存天数
         WERKS   TYPE  MCHB-WERKS,                      "批次工厂
         LGORT   TYPE  MCHB-LGORT,                      "批次库位
         CLABS   TYPE  MCHB-CLABS,                      "批次数量(非限制)
         MEINS   TYPE  MARA-MEINS,                      "批次数量单位
         GRACED1 TYPE  ZTCNPU-GRACED1,                  "客户未提宽限天数1
         GRACED2 TYPE  ZTCNPU-GRACED2,                  "客户未提宽限天数2
         GRACED3 TYPE  ZTCNPU-GRACED3,                  "客户未提宽限天数3
         EXDATJ  TYPE  ZTCNPU-GRACED1,                  "超过交期天数
         EXDATS  TYPE  ZTCNPU-GRACED1,                  "超过生产天数
         DATUM   TYPE  DATS,                            "当天日期
       END OF GTS_NDATA.

DATAGT_NDATA       TYPE TABLE OF GTS_NDATA WITH HEADER LINE.
DATAGT_NDATA_A     TYPE TABLE OF GTS_NDATA WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS P_RD1 RADIOBUTTON GROUP GP1 DEFAULT 'X' USER-COMMAND MXX."用来隐藏 p_AUFNR
PARAMETERS P_RD2 RADIOBUTTON GROUP GP1 ."用来显示 p_AUFNR
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME.
SELECT-OPTIONSS_AUART  FOR   VBAK-AUART   MODIF ID MXX DEFAULT 'KB'.            "销售凭证类型
*SELECT-OPTIONS: S_AUART  FOR   VBAK-AUART   MODIF ID MXX DEFAULT 'ZOR1'.          "销售凭证类型
SELECT-OPTIONSS_VBELN  FOR   VBAK-VBELN   MODIF ID MXX .                        "销售订单
SELECT-OPTIONSS_KUNNR  FOR   VBAK-KUNNR   MODIF ID MXX .                        "客户(售达方)
SELECT-OPTIONSS_KUNNF  FOR   VBAK-KUNNR   MODIF ID MXX .                        "客户(付款方)
SELECT-OPTIONSS_MATNR  FOR   VBAP-MATNR   MODIF ID MXX .                        "物料
SELECT-OPTIONSS_VKORG  FOR   VBAK-VKORG   MODIF ID MXX .                        "销售组织
SELECT-OPTIONSS_LGORT  FOR   MSKA-LGORT   MODIF ID MXX DEFAULT 'FG01'.          "库位(批次)
SELECT-OPTIONSS_WERKS  FOR   MSKA-WERKS   MODIF ID MXX .                        "工厂(批次)
*SELECT-OPTIONS: S_CHARG  FOR   MCHB-CHARG   MODIF ID MXZ .                        "批次
SELECTION-SCREEN END OF BLOCK B2.

AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN  .
    "控制下拉列表(文本框也是一样)的必输性:外观上打钩,但不自动校验
    IF P_RD1 'X' AND SCREEN-GROUP1 'MXY'.
      "显示
      SCREEN-ACTIVE '1'.
*      SCREEN-REQUIRED = '2'."外观上打钩,但不自动校验
      MODIFY SCREEN.
    ELSEIF SCREEN-GROUP1 'MXY'"
      "隐藏
      SCREEN-ACTIVE '0'.
*      SCREEN-REQUIRED = '2'.
      MODIFY SCREEN.
    ENDIF.
    IF P_RD2 'X' AND SCREEN-GROUP1 'MXZ'.
      "显示
      SCREEN-ACTIVE '1'.
*      SCREEN-REQUIRED = '2'."外观上打钩,但不自动校验
      MODIFY SCREEN.
    ELSEIF SCREEN-GROUP1 'MXZ'"
      "隐藏
      SCREEN-ACTIVE '0'.
*      SCREEN-REQUIRED = '2'.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA E_OBJEK  TYPE  CUOBN .
  DATA E_OBTAB  TYPE  TABELLE .
  DATA E_KLART  TYPE  KLASSENART .
  DATA E_CLASS  TYPE  KLASSE_D .
  DATA OBJECTKEY  TYPE  BAPI1003_KEY-OBJECT .
  DATA ALLOCVALUESNUM  TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM  WITH HEADER LINE .
  DATA ALLOCVALUESCHAR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR WITH HEADER LINE .
  DATA ALLOCVALUESCURR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR WITH HEADER LINE .
  DATA RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE .
  DATA LS_MCH1_KEY TYPE ZMCH1_KEY .
  DATA GT_BLDAT TYPE TABLE OF MATDOC WITH HEADER LINE .
  DATA GT_LIPS  TYPE TABLE OF LIPS WITH HEADER LINE .
  DATA GS_LIPS  TYPE LIPS .
  DATA TDID        TYPE TABLE OF TDID WITH HEADER LINE .
  DATA TLINE       TYPE TABLE OF TLINE WITH HEADER LINE .
  DATA TDNAME      TYPE TDOBNAME .

  CLEAR GT_DATA[].
  SELECT
  VBAP~VBELN
  VBAP
~POSNR
  VBAP
~MATNR
  VBAP
~LFGSA
  VBAP
~KWMENG
  VBAP
~VRKME
  VBAP
~MVGR1
  VBAK
~KUNNR
  VBAK
~VDATU
  VBAK
~CMGST
  VBAK
~LIFSK
  MSKA
~CHARG
  MSKA
~WERKS
  MSKA
~LGORT
  MSKA
~KALAB
*  VBPA~KUNNR AS KUNNF
  INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
    
FROM VBAP
    INNER 
JOIN MSKA ON VBAP~VBELN MSKA~VBELN AND VBAP~POSNR MSKA~POSNR
    INNER 
JOIN VBAK ON VBAP~VBELN VBAK~VBELN
*    LEFT  JOIN VBPA ON VBAP~VBELN = VBPA~VBELN AND VBAP~POSNR = VBPA~POSNR AND VBPA~PARVW = 'AG'
    WHERE VBAK~AUART IN S_AUART
      
AND VBAK~KUNNR IN S_KUNNR
      
AND VBAK~VKORG IN S_VKORG
      
AND VBAP~MATNR IN S_MATNR
      
AND MSKA~LGORT IN S_LGORT
      
AND MSKA~WERKS IN S_WERKS
      
AND VBAP~VBELN IN S_VBELN
      
.

  LOOP AT GT_DATA .

    CLEAR TDID .
    CLEAR TDID[] .
    TDID '0002'.
    APPEND TDID .
    TDID '0003'.
    APPEND TDID .

    TDNAME GT_DATA-VBELN && GT_DATA-POSNR.

    LOOP AT TDID.
      CLEAR TLINE .
      CLEAR TLINE[] .
      CALL FUNCTION 'READ_TEXT'
        EXPORTING
          OBJECT          'VBBP'
          NAME            TDNAME
          
ID              TDID
          
LANGUAGE        'E'
        TABLES
          LINES           TLINE
        
EXCEPTIONS
          OBJECT          1
          ID              2
          LANGUAGE        3
          NAME            4
          NOT_FOUND       5
          REFERENCE_CHECK 6.

      CASE TDID.
        WHEN '0002'.
          LOOP AT TLINE.
            GT_DATA-TDLINE2 TLINE-TDLINE .
          ENDLOOP.
        WHEN '0003'.
          LOOP AT TLINE.
            GT_DATA-TDLINE3 TLINE-TDLINE .
          ENDLOOP.
        WHEN OTHERS.
      ENDCASE.

      CLEAR TLINE .
    ENDLOOP.

    SELECT SINGLE KUNNR INTO GT_DATA-KUNNF FROM VBPA
      
WHERE VBELN GT_DATA-VBELN
*        AND POSNR = GT_DATA-POSNR
        AND PARVW 'AG'
       .

    GT_DATA-DATUM SY-DATUM .
    SELECT SINGLE NAME1 INTO GT_DATA-NAME1 FROM KNA1
      
WHERE KUNNR GT_DATA-KUNNR
      
.
    SELECT SINGLE MAKTX INTO GT_DATA-MAKTX FROM MAKT
      
WHERE MATNR GT_DATA-MATNR
      
.
    SELECT SINGLE EDATU INTO GT_DATA-EDATU FROM VBEP
      
WHERE VBELN GT_DATA-VBELN
        
AND POSNR GT_DATA-POSNR
        
.
    SELECT SINGLE MEINS INTO GT_DATA-MEINS FROM MARA
      
WHERE MATNR GT_DATA-MATNR
        
.
    SELECT SINGLE GRACED1 GRACED2 GRACED3 INTO CORRESPONDING FIELDS OF GT_DATA FROM ZTCNPU
      
WHERE KUNNR GT_DATA-KUNNR
        
AND WERKS GT_DATA-WERKS
        
.

*批次生产日期
    CLEAR E_OBJEK .
    CLEAR E_OBTAB .
    CLEAR E_KLART .
    CLEAR E_CLASS .
    CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
      EXPORTING
        I_MATNR GT_DATA-MATNR
        I_CHARG 
GT_DATA-CHARG
        I_WERKS 
GT_DATA-WERKS
      
IMPORTING
        E_OBJEK E_OBJEK
        E_OBTAB 
E_OBTAB
        E_KLART 
E_KLART
        E_CLASS 
E_CLASS.

    CLEARALLOCVALUESNUM  ALLOCVALUESNUM[]  .
    CLEARALLOCVALUESCHAR ALLOCVALUESCHAR[] .
    CLEARALLOCVALUESCURR ALLOCVALUESCURR[] .
    IF GT_DATA-CHARG IS NOT INITIAL.
      CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
        EXPORTING
*         OBJECTKEY       = OBJECTKEY
          OBJECTKEY_LONG  E_OBJEK
          OBJECTTABLE     
E_OBTAB
          CLASSNUM        
E_CLASS
          CLASSTYPE       
E_KLART
*         KEYDATE         = SY-DATUM
*         LANGUAGE        = SY-LANGU
        TABLES
          ALLOCVALUESNUM  ALLOCVALUESNUM[]
          ALLOCVALUESCHAR 
ALLOCVALUESCHAR[]
          ALLOCVALUESCURR 
ALLOCVALUESCURR[]
          
RETURN          RETURN[].
    ENDIF.
    DATAE_CHAR_FIELD LIKE  CHA_CLASS_VIEW-SOLLWERT .
    LOOP AT ALLOCVALUESNUM.
      IF ALLOCVALUESNUM-CHARACT_DESCR '生产日期'.
        CLEAR E_CHAR_FIELD .
        CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
          EXPORTING
            I_NUMBER_OF_DIGITS       '0'
            I_FLTP_VALUE             ALLOCVALUESNUM-VALUE_FROM
            I_VALUE_NOT_INITIAL_FLAG 
'X'
            I_SCREEN_FIELDLENGTH     16
          IMPORTING
            E_CHAR_FIELD             E_CHAR_FIELD.

        IF E_CHAR_FIELD IS NOT INITIAL.
          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
            EXPORTING
              INPUT  E_CHAR_FIELD
            
IMPORTING
              OUTPUT E_CHAR_FIELD.

          GT_DATA-PCDAT E_CHAR_FIELD.
        ENDIF.

      ENDIF.

      CLEAR ALLOCVALUESNUM .
    ENDLOOP.

*生产到库存天数:当前日期-批次生产日期
    GT_DATA-DKDAT SY-DATUM GT_DATA-PCDAT .

*超过交期天数:当天日期 - 订单交期
    GT_DATA-EXDATJ SY-DATUM GT_DATA-VDATU .

*超过生产天数:当前日期  -(批次生产日期+客户未提宽限天数1 + 客户未提宽限天数2+ 客户未提宽限天数1
    GT_DATA-EXDATS SY-DATUM GT_DATA-PCDAT + GT_DATA-GRACED1 + GT_DATA-GRACED2 + GT_DATA-GRACED3 ).

*未清数量:销售订单的数量 - sum(销售订单行项目已开具的所有DN单,并且发货过账(LIKP-WBSTK = ’C‘代表已发货过账)的数量)
    CLEAR GS_LIPS.
    CLEAR GT_LIPS[].
    SELECT
      LIPS~LFIMG
      LIPS
~SHKZG
      
INTO CORRESPONDING FIELDS OF TABLE GT_LIPS[]
      
FROM LIPS
      INNER 
JOIN LIKP ON LIPS~VBELN LIKP~VBELN
      
WHERE LIPS~KDAUF GT_DATA-VBELN
        
AND LIPS~KDPOS GT_DATA-POSNR
        
AND LIKP~WBSTK 'C'
        .
    LOOP AT GT_LIPS.
      IF GT_LIPS-SHKZG IS NOT INITIAL.
        GT_LIPS-LFIMG GT_LIPS-LFIMG * -.
      ENDIF.
      GS_LIPS-LFIMG GS_LIPS-LFIMG + GT_LIPS-LFIMG .
      CLEAR GT_LIPS .
    ENDLOOP.
    GT_DATA-ZWQSL GT_DATA-KWMENG GS_LIPS-LFIMG .

    MODIFY GT_DATA .
    CLEAR GT_DATA .
  ENDLOOP.

  DELETE GT_DATA[] WHERE KUNNF NOT IN S_KUNNF .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA_N
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA_N .
  DATA E_OBJEK  TYPE  CUOBN .
  DATA E_OBTAB  TYPE  TABELLE .
  DATA E_KLART  TYPE  KLASSENART .
  DATA E_CLASS  TYPE  KLASSE_D .
  DATA OBJECTKEY  TYPE  BAPI1003_KEY-OBJECT .
  DATA ALLOCVALUESNUM  TYPE TABLE OF BAPI1003_ALLOC_VALUES_NUM  WITH HEADER LINE .
  DATA ALLOCVALUESCHAR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CHAR WITH HEADER LINE .
  DATA ALLOCVALUESCURR TYPE TABLE OF BAPI1003_ALLOC_VALUES_CURR WITH HEADER LINE .
  DATA RETURN TYPE TABLE OF BAPIRET2 WITH HEADER LINE .
  DATA LS_MCH1_KEY TYPE ZMCH1_KEY .
  DATA GT_BLDAT TYPE TABLE OF MATDOC WITH HEADER LINE .
  DATA GT_LIPS  TYPE TABLE OF LIPS WITH HEADER LINE .
  DATA GS_LIPS  TYPE LIPS .
  DATA TDID        TYPE TABLE OF TDID WITH HEADER LINE .
  DATA TLINE       TYPE TABLE OF TLINE WITH HEADER LINE .
  DATA TDNAME      TYPE TDOBNAME .

  CLEAR GT_NDATA_A[].
  SELECT
  VBAP~MATNR
  
INTO CORRESPONDING FIELDS OF TABLE GT_NDATA_A[]
    
FROM VBAP
*    INNER JOIN MSKA ON VBAP~VBELN = MSKA~VBELN AND VBAP~POSNR = MSKA~POSNR
    INNER JOIN VBAK ON VBAP~VBELN VBAK~VBELN
*    LEFT  JOIN VBPA ON VBAP~VBELN = VBPA~VBELN AND VBAP~POSNR = VBPA~POSNR AND VBPA~PARVW = 'AG'
    WHERE VBAK~AUART IN S_AUART
      
AND VBAK~KUNNR IN S_KUNNR
      
AND VBAK~VKORG IN S_VKORG
      
AND VBAP~MATNR IN S_MATNR
      
AND VBAP~VBELN IN S_VBELN
      
.

  SORT GT_NDATA_A BY MATNR .
  DELETE ADJACENT DUPLICATES FROM GT_NDATA_A[] COMPARING MATNR.

  IF GT_NDATA_A[] IS NOT INITIAL.

    CLEAR GT_NDATA[] .
    SELECT INTO CORRESPONDING FIELDS OF TABLE GT_NDATA[] FROM MCHB
      
FOR ALL ENTRIES IN GT_NDATA_A[]
      
WHERE MATNR GT_NDATA_A-MATNR
        
AND LGORT IN S_LGORT
        
AND WERKS IN S_WERKS
      
.

    LOOP AT GT_NDATA.
      SELECT SINGLE MAKTX INTO GT_NDATA-MAKTX FROM MAKT
        
WHERE MATNR GT_NDATA-MATNR
        
.
      SELECT SINGLE MEINS INTO GT_NDATA-MEINS FROM MARA
        
WHERE MATNR GT_NDATA-MATNR
        
.
*批次生产日期
      CLEAR E_OBJEK .
      CLEAR E_OBTAB .
      CLEAR E_KLART .
      CLEAR E_CLASS .
      CALL FUNCTION 'VB_BATCH_2_CLASS_OBJECT'
        EXPORTING
          I_MATNR GT_NDATA-MATNR
          I_CHARG 
GT_NDATA-CHARG
          I_WERKS 
GT_NDATA-WERKS
        
IMPORTING
          E_OBJEK E_OBJEK
          E_OBTAB 
E_OBTAB
          E_KLART 
E_KLART
          E_CLASS 
E_CLASS.

      CLEARALLOCVALUESNUM  ALLOCVALUESNUM[]  .
      CLEARALLOCVALUESCHAR ALLOCVALUESCHAR[] .
      CLEARALLOCVALUESCURR ALLOCVALUESCURR[] .
      IF GT_NDATA-CHARG IS NOT INITIAL.
        CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
          EXPORTING
*           OBJECTKEY       = OBJECTKEY
            OBJECTKEY_LONG  E_OBJEK
            OBJECTTABLE     
E_OBTAB
            CLASSNUM        
E_CLASS
            CLASSTYPE       
E_KLART
*           KEYDATE         = SY-DATUM
*           LANGUAGE        = SY-LANGU
          TABLES
            ALLOCVALUESNUM  ALLOCVALUESNUM[]
            ALLOCVALUESCHAR 
ALLOCVALUESCHAR[]
            ALLOCVALUESCURR 
ALLOCVALUESCURR[]
            
RETURN          RETURN[].
      ENDIF.
      DATAE_CHAR_FIELD LIKE  CHA_CLASS_VIEW-SOLLWERT .
      LOOP AT ALLOCVALUESNUM.
        IF ALLOCVALUESNUM-CHARACT_DESCR '生产日期'.
          CLEAR E_CHAR_FIELD .
          CALL FUNCTION 'QSS0_FLTP_TO_CHAR_CONVERSION'
            EXPORTING
              I_NUMBER_OF_DIGITS       '0'
              I_FLTP_VALUE             ALLOCVALUESNUM-VALUE_FROM
              I_VALUE_NOT_INITIAL_FLAG 
'X'
              I_SCREEN_FIELDLENGTH     16
            IMPORTING
              E_CHAR_FIELD             E_CHAR_FIELD.

          IF E_CHAR_FIELD IS NOT INITIAL.
            CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
              EXPORTING
                INPUT  E_CHAR_FIELD
              
IMPORTING
                OUTPUT E_CHAR_FIELD.

            GT_NDATA-PCDAT E_CHAR_FIELD.
          ENDIF.

        ENDIF.

        CLEAR ALLOCVALUESNUM .
      ENDLOOP.

      GT_NDATA-DATUM SY-DATUM .

*生产到库存天数:当前日期-批次生产日期
      GT_NDATA-DKDAT SY-DATUM GT_NDATA-PCDAT .

      MODIFY GT_NDATA .
      CLEAR GT_NDATA .
    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-INFO_FIELDNAME 'CLR'.  "行颜色代码的字段
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .
  IF P_RD1 IS NOT INITIAL.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        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_DATA[].
  ELSE .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        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_NDATA[].
  ENDIF.

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 =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.
*      wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.

*    IF wa_fieldcat-fieldname =  'MSLMB' or wa_fieldcat-fieldname =  'WCBMB'.
*      wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
*    ENDIF.

    IF wa_fieldcat-fieldname 'PLNBEZ' OR wa_fieldcat-fieldname 'MATNR' .
      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 'AUFNR' .
      wa_fieldcat-ref_tabname 'AUFK'.
      wa_fieldcat-ref_fieldname 'AUFNR'.
    ENDIF.

    APPEND wa_fieldcat TO gt_fieldcat.
    CLEAR wa_fieldcat.
  END-OF-DEFINITION.
  IF P_RD1 IS NOT INITIAL.
    FILL_FIELD :
      'VBELN'    '销售订单',
      'POSNR'    '销售订单行项目',
      'KUNNR'    '客户',
      'NAME1'    '客户名称',
      'KUNNF'    '付款方',
      'VDATU'    '交期',
      'MATNR'    '物料',
      'MAKTX'    '物料描述',
      'CMGST'    '信用状态',
      'ABGRU'    '拒绝原因',
      'LIFSK'    '交货冻结',
      'LFGSA'    '项目交货状态',
      'EDATU'    '订单首个交期',
      'KWMENG'   '订单数量',
      'VRKME'    '单位',
      'ZWQSL'    '未清数量',
      'MVGR1'    '未及时提货客户原因分类',
      'TDLINE2'  '客户未及时提货-内部原因',
      'TDLINE3'  '客户未及时提货-其他原因',
      'ARKTX'    '项目文本',
      'CHARG'    '批次',
      'WERKS'    '批次工厂',
      'LGORT'    '批次库位',
      'KALAB'    '批次数量(非限制)',
      'MEINS'    '批次数量单位',
      'GRACED1'  '客户未提宽限天数1',
      'GRACED2'  '客户未提宽限天数2',
      'GRACED3'  '客户未提宽限天数3',
      'EXDATJ'   '超过交期天数',
      'EXDATS'   '超过生产天数',
      'PCDAT'    '批次生产日期',
      'DKDAT'    '生产到库存天数',
      'DATUM'    '当前日期'.
  ELSE .
    FILL_FIELD :
      'MATNR'    '物料',
      'MAKTX'    '物料描述',
      'CHARG'    '批次',
      'PCDAT'    '批次生产日期',
      'DKDAT'    '生产到库存天数',
      'WERKS'    '批次工厂',
      'LGORT'    '批次库位',
      'CLABS'    '批次数量(非限制)',
      'MEINS'    '批次数量单位',
*      'GRACED1'  '客户未提宽限天数1',
*      'GRACED2'  '客户未提宽限天数2',
*      'GRACED3'  '客户未提宽限天数3',
*      'EXDATJ'   '超过交期天数',
*      'EXDATS'   '超过生产天数',
      'DATUM'    '当前日期'.
  ENDIF.


ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
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' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_DATA .
        READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
        SET PARAMETER ID 'AUN' FIELD GT_DATA-VBELN.
        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
      ELSEIF IS_SELFIELD-FIELDNAME =  'CHARG' .
        IF P_RD1 IS NOT INITIAL.
          MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
*          CHECK IS_SELFIELD-TABINDEX > 0.
*          CLEAR GT_DATA .
*          READ TABLE GT_DATA INDEX IS_SELFIELD-TABINDEX.
*          SET PARAMETER ID 'MAT' FIELD GT_DATA-MATNR.
*          SET PARAMETER ID 'WRK' FIELD GT_DATA-WERKS.
*          SET PARAMETER ID 'CHA' FIELD GT_DATA-CHARG.
*          SET PARAMETER ID 'LAG' FIELD GT_DATA-LGORT.
*          CALL TRANSACTION 'MSC3N' AND SKIP FIRST SCREEN.
        ELSE .
          CHECK IS_SELFIELD-TABINDEX > 0.
          CLEAR GT_NDATA .
          READ TABLE GT_NDATA INDEX IS_SELFIELD-TABINDEX.
          SET PARAMETER ID 'MAT' FIELD GT_NDATA-MATNR.
          SET PARAMETER ID 'WRK' FIELD GT_NDATA-WERKS.
          SET PARAMETER ID 'CHA' FIELD GT_NDATA-CHARG.
          SET PARAMETER ID 'LAG' FIELD GT_NDATA-LGORT.
          CALL TRANSACTION 'MSC3N' AND SKIP FIRST SCREEN.
        ENDIF.
      ELSE .
        MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
      ENDIF .
    WHEN 'POST_T'.
  ENDCASE.

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

INITIALIZATION .

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
  IF P_RD1 IS NOT INITIAL.
    PERFORM FOM_GETDATA .
  ELSE.
    PERFORM FOM_GETDATA_N .
  ENDIF.
  PERFORM FRM_DISPLAY.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值