SAP: ZSD_R_LIST Sales order delivery due list report

47 篇文章 0 订阅
5 篇文章 0 订阅

 *&---------------------------------------------------------------------*
*& Report  ZSD_R_LIST
************************************************************************
* Program Name  :  ZSD_R_LIST
* Title         :  Sales order delivery due list report
* Author        :
* Change History :
*    Date       Author    Descriptions
* ========== ============ ==============================================
* 2012/09/12 yayun huang  Create
* 26 Nov 2012 Jimmy       add field Uploading Point(ABLAD)
*&---------------------------------------------------------------------*
REPORT  ZSD_R_LIST NO STANDARD PAGE HEADING.

TABLES:VBAK,VBAP,VBKD,KNA1,VBUP,VBEP,VBPA,LIPS,PRPS.
TYPES:BEGIN OF TS_ITAB1,
*a
      VBELN LIKE VBAK-VBELN,"Sales Document
      KUNNR LIKE VBAK-KUNNR,"Sold-to party
      AUART LIKE VBAK-AUART,"Sales Document Type
      VKORG LIKE VBAK-VKORG,"Sales Organization
      VTWEG LIKE VBAK-VTWEG,"Distribution Channel
      SPART LIKE VBAK-SPART,"Division
      VKBUR LIKE VBAK-VKBUR,"Sales Office
      VKGRP LIKE VBAK-VKGRP,"Sales Group
      AUDAT LIKE VBAK-AUDAT,"Document Date (Date Received/Sent)
"      vbtyp LIKE vbak-vbtyp,"SD document category
*b
      POSNR LIKE VBAP-POSNR,"Sales Document Item
      ABGRU LIKE VBAP-ABGRU, "Reason for rejection of quotations and sales orders
      WERKS LIKE VBAP-WERKS,"Plant (Own or External)
      KWMENG LIKE VBAP-KWMENG,"Cumulative Order Quantity in Sales Units
      VRKME LIKE VBAP-VRKME ,"  Sales unit
      PPSPNR LIKE VBAP-PS_PSP_PNR ,"Work Breakdown Structure Element (WBS Element)
      MATNR LIKE VBAP-MATNR,"Material Number
      ARKTX LIKE VBAP-ARKTX,"Short text for sales order item
      VSTEL LIKE VBAP-VSTEL,
      KDMAT LIKE VBAP-KDMAT," customer p/n
*c
      EDATU LIKE VBEP-EDATU,"Schedule line date
      BMENG LIKE VBEP-BMENG ," Confirmed Quantity
*d
      BSTKD LIKE VBKD-BSTKD,"Customer purchase order number
      VSART LIKE VBKD-VSART,"Shipping type
*add
      BSTDK LIKE VBKD-BSTDK,"Customer purchase order date
*e
      ZKUNNR LIKE VBPA-KUNNR,"Customer Number 1
      LAND1 LIKE  VBPA-LAND1,  "Country Key
      ABLAD LIKE VBPA-ABLAD,  "Uploading Point  "M1 add
*f
      LFSTA LIKE VBUP-LFSTA, "Delivery status
* rejection status
     ABSTK LIKE VBUK-ABSTK,

  END OF TS_ITAB1.

TYPES:BEGIN OF TS_ITAB,
      KUNNR LIKE VBAK-KUNNR,"Sold-to party
      TXTPA LIKE KUAGV-TXTPA,"Display text for partners (name, city, country, street)
      ZKUNNR LIKE VBPA-KUNNR,"Customer Number 1
*ADD
      ZTXTPA LIKE KUAGV-TXTPA,
      LAND1 LIKE  VBPA-LAND1,  "Country Key
      ABLAD LIKE VBPA-ABLAD,  "Uploading Point  "M1 add
      VSART LIKE VBKD-VSART,"Shipping type
      BEZEI LIKE TVFCVT-BEZEI, "Shipping type procedure group
      PPSPNR LIKE VBAP-PS_PSP_PNR ,"Work Breakdown Structure Element (WBS Element)
      POSID LIKE PRPS-POSID,"Work Breakdown Structure Element (WBS Element)
      AUART LIKE VBAK-AUART,"Sales Document Type
      VBELN LIKE VBAK-VBELN,"Sales Document
      POSNR LIKE VBAP-POSNR,"Sales Document Item
      BSTKD LIKE VBKD-BSTKD,"Customer purchase order number
*add
      BSTDK LIKE VBKD-BSTDK,"Customer purchase order date
      MATNR LIKE VBAP-MATNR,"Material Number
      ARKTX LIKE VBAP-ARKTX,"Short text for sales order item
      VSTEL LIKE VBAP-VSTEL,
      AUDAT LIKE VBAK-AUDAT,"Document Date (Date Received/Sent)
      EIATU LIKE VBEP-EDATU,"Schedule line date
      EDATU LIKE VBEP-EDATU,"Schedule line date
      ZDATU TYPE CHAR4,"LIKE vbep-edatu,"计算交货时间
      KWMENG LIKE VBAP-KWMENG,"Cumulative Order Quantity in Sales Units
      VRKME LIKE VBAP-VRKME ,"  Sales unit
      BMENG LIKE VBEP-BMENG ," Confirmed Quantity 需要汇总
      VSMNG LIKE VBEPD-VSMNG,"Delivered Qty 需要计算 DN交货数量
      LFSTA LIKE VBUP-LFSTA, "Delivery status
      ABGRU LIKE VBAP-ABGRU, "Reason for rejection of quotations and sales orders
      VKORG LIKE VBAK-VKORG,"Sales Organization
      VTWEG LIKE VBAK-VTWEG,"Distribution Channel
      SPART LIKE VBAK-SPART,"Division
      VKBUR LIKE VBAK-VKBUR,"Sales Office
      VKGRP LIKE VBAK-VKGRP,"Sales Group
      WERKS LIKE VBAP-WERKS,"Plant (Own or External)
*add
     " dntxt(255) TYPE c," dn text
      SOQTY LIKE VBAP-KWMENG,
      KOSTA LIKE VBUP-KOSTA,
*lips
      VGBEL LIKE LIPS-VBELN,
      VGPOS LIKE LIPS-POSNR,
      LFIMG LIKE LIPS-LFIMG,
      WADAT LIKE LIKP-WADAT_IST,
*vbap
      KDMAT LIKE VBAP-KDMAT," customer p/n
*add billing invoice
      VBELV LIKE VBFA-VBELV,"invoice number
      POSNV LIKE VBFA-POSNV,"invoice item
      ERDAT LIKE VBFA-ERDAT,"invoice date
*add text remark
      TEXT1(50) TYPE C,
      TEXT2(50) TYPE C,
      TEXT3(50) TYPE C,
      TEXT4(50) TYPE C,

* add step name
     SPNAME(40),
* rejection status
     ABSTK LIKE VBUK-ABSTK,
  END OF TS_ITAB.
***********************************************************************
*DOWNLOAD
DATA : BEGIN OF FLDITAB OCCURS 0,
      FLDNAME(40) TYPE C,
   END OF FLDITAB.
DATA:BEGIN OF DOWN_ITAB OCCURS 0,
      KUNNR LIKE VBAK-KUNNR,"Sold-to party
      TXTPA LIKE KUAGV-TXTPA,"Display text for partners (name, city, country, street)
      ZKUNNR LIKE VBPA-KUNNR,"Customer Number 1
      VSART LIKE VBKD-VSART,"Shipping type
      POSID LIKE PRPS-POSID,"Work Breakdown Structure Element (WBS Element)
      AUART LIKE VBAK-AUART,"Sales Document Type
      VBELN LIKE VBAK-VBELN,"Sales Document
      POSNR LIKE VBAP-POSNR,"Sales Document Item
      BSTKD LIKE VBKD-BSTKD,"Customer purchase order number
      MATNR LIKE VBAP-MATNR,"Material Number
      ARKTX LIKE VBAP-ARKTX,"Short text for sales order item
      AUDAT LIKE VBAK-AUDAT,"Document Date (Date Received/Sent)
      EIATU LIKE VBEP-EDATU,"Schedule line date
      EDATU LIKE VBEP-EDATU,"Schedule line date
      ZDATU LIKE VBEP-EDATU,"计算交货时间
      KWMENG LIKE VBAP-KWMENG,"Cumulative Order Quantity in Sales Units
      VRKME LIKE VBAP-VRKME ,"  Sales unit
      BMENG LIKE VBEP-BMENG ," Confirmed Quantity 需要汇总
      VSMNG LIKE VBEPD-VSMNG,"Delivered Qty 需要计算 DN交货数量
      LFSTA LIKE VBUP-LFSTA, "Delivery status
      ABGRU LIKE VBAP-ABGRU, "Reason for rejection of quotations and sales orders
*lips
      VGBEL LIKE LIPS-VBELN,
      VGPOS LIKE LIPS-POSNR,
      LFIMG LIKE LIPS-LFIMG,
      WADAT LIKE LIKP-WADAT_IST,
*vbap
      KDMAT LIKE VBAP-KDMAT," customer p/n
  END OF DOWN_ITAB.
***********************************************************************
DATA: T_ITAB TYPE STANDARD TABLE OF TS_ITAB WITH HEADER LINE,
      LT_ITAB TYPE STANDARD TABLE OF TS_ITAB WITH HEADER LINE,
      T_ITAB1 TYPE STANDARD TABLE OF TS_ITAB1 WITH HEADER LINE,
      T_VBAK TYPE STANDARD TABLE OF VBAK WITH HEADER LINE,
      T_VBAP TYPE STANDARD TABLE OF VBAP WITH HEADER LINE,
      T_VBKD TYPE STANDARD TABLE OF VBKD WITH HEADER LINE,
      T_KNA1 TYPE STANDARD TABLE OF KNA1 WITH HEADER LINE,
      T_VBUP TYPE STANDARD TABLE OF VBUP WITH HEADER LINE,
      T_VBPA TYPE STANDARD TABLE OF VBPA WITH HEADER LINE,
      T_LIPS TYPE STANDARD TABLE OF LIPS WITH HEADER LINE,
      T_LIKP TYPE STANDARD TABLE OF LIKP WITH HEADER LINE,
      T_VBEP TYPE STANDARD TABLE OF VBEP WITH HEADER LINE,
      T_PRPS TYPE STANDARD TABLE OF PRPS WITH HEADER LINE,
      T_VBRP TYPE STANDARD TABLE OF VBRP WITH HEADER LINE.
* get BEZEI TVFCVT data----t173
DATA: T_T173T TYPE STANDARD TABLE OF T173T WITH HEADER LINE.
*
DATA:P_NAME1(40) TYPE C.
DATA: D_EDATU TYPE SY-DATUM,
      S_DATA TYPE SY-DATUM,
      P_DATA TYPE SY-DATUM.
**********************************************************************
DATA: WA_CONTAINER TYPE SCRFNAME VALUE 'C8000' ,  "Delare ALV data
      ALV_GRID TYPE REF TO CL_GUI_ALV_TREE ,
      WA_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER .
DATA: GB_SORTFLD TYPE LVC_T_SORT.
DATA LS_STYLEROW TYPE LVC_S_STYL .
DATA LT_STYLETAB TYPE LVC_T_STYL .
DATA: LS_EDIT LIKE LVC_S_STYL,
      LT_EDIT TYPE LVC_T_STYL.
DATA: GT_FIELDCAT TYPE LVC_T_FCAT,
      GS_FIELDCAT TYPE LVC_S_FCAT.
DATA: L_VALID TYPE C .
DATA: LS_FIELDCAT TYPE LVC_S_FCAT.
DATA:L_POSNR TYPE VBPA-POSNR.
*UCOMM
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_CODE TYPE SY-UCOMM.
***********************************************************************
SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS:   P_EDATU FOR VBEP-EDATU OBLIGATORY  DEFAULT P_DATA TO  S_DATA ,"Requested delivery date
                  P_VSTEL FOR VBAP-VSTEL,"Shipping Point/Receiving Point
                  P_VKORG FOR VBAK-VKORG,"Sales Organization
                  P_VTWEG FOR VBAK-VTWEG,"Distribution Channel
                  P_SPART FOR VBAK-SPART,"Division
                  P_WERKS FOR VBAP-WERKS, "Plant (Own or External)
                  P_KUNNR FOR VBAK-KUNNR, "Sold-to party
                  P_KUNNR1 FOR VBPA-KUNNR, "Customer Number 1
                  P_LAND1 FOR VBPA-LAND1,  "Country Key
                  P_VSART FOR VBKD-VSART,"Shipping type
                  P_AUART FOR VBAK-AUART NO-EXTENSION NO INTERVALS."Sales Document Type
SELECT-OPTIONS:   P_VBELN FOR VBAK-VBELN,"Sales Document
                  P_MATNR FOR VBAP-MATNR,"Material Number
                  P_POSNR FOR VBAP-PS_PSP_PNR,"Work Breakdown Structure Element (WBS Element)
                  P_ABGRU FOR VBAP-ABGRU, "Reason for rejection of quotations and sales orders
                  P_LFSTA FOR VBUP-LFSTA NO-EXTENSION NO INTERVALS. "Delivery status
SELECTION-SCREEN: END OF BLOCK B1.

*SELECTION-SCREEN:BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
*SELECTION-SCREEN: BEGIN OF LINE,
*         COMMENT (21) c1.
*PARAMETERS:p_date TYPE i .
*SELECTION-SCREEN:COMMENT (30) c2.
*SELECTION-SCREEN:END OF LINE.
*SELECTION-SCREEN:END OF BLOCK b2.

INCLUDE ZSD_R_LIST_PBO.
INCLUDE ZSD_R_LIST_PA1.

INITIALIZATION.
  "c1 = 'Default Date offset'.
  "c2 = 'Day'.

LOAD-OF-PROGRAM.
*****设置默认值
  S_DATA = SY-DATUM + 30.
  P_DATA = SY-DATUM - 30.
*********************************************************************************************
START-OF-SELECTION.
  PERFORM GET_FORM.
  IF NOT T_ITAB[] IS INITIAL.
    PERFORM ADD_TEXT.
    PERFORM CALL_ALV.
  ELSE.
    MESSAGE 'No data Found' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.

 

 

*----------------------------------------------------------------------*
*       FORM .......
*----------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_FORM.
  SELECT
*a
      A~VBELN "Sales Document
      A~KUNNR "Sold-to party
      A~AUART "Sales Document Type
      A~VKORG "Sales Organization
      A~VTWEG "Distribution Channel
      A~SPART "Division
      A~VKBUR "Sales Office
      A~VKGRP "Sales Group
      A~AUDAT "Document Date (Date Received/Sent)
*b
      B~POSNR "Sales Document Item
      B~ABGRU "Reason for rejection of quotations and sales orders
      B~WERKS "Plant (Own or External)
      B~KWMENG "Cumulative Order Quantity in Sales Units
      B~VRKME "  Sales unit
      B~PS_PSP_PNR "Work Breakdown Structure Element (WBS Element)
      B~MATNR "Material Number
      B~ARKTX "Short text for sales order item
      B~VSTEL
      B~KDMAT " customer p/n
***c
      C~EDATU "Schedule line date
      C~BMENG " Confirmed Quantity
**d
      D~BSTKD "Customer purchase order number
      D~VSART "Shipping type
*add
      D~BSTDK"Customer purchase order date
*e
      E~KUNNR "Customer Number 1
      E~LAND1   "Country Key
      E~ABLAD "Uploadint point "M1 add
*f
      F~LFSTA

      G~ABSTK
     " f~kosta
    INTO TABLE T_ITAB1
    FROM VBAK AS A
        INNER JOIN VBAP AS B ON  A~VBELN = B~VBELN
        INNER JOIN VBEP AS C ON  C~VBELN = B~VBELN AND C~POSNR = B~POSNR AND C~ETENR = '0001'
        INNER JOIN VBKD AS D ON  A~VBELN = D~VBELN AND D~POSNR = '000000'
        INNER JOIN VBPA AS E ON  A~VBELN = E~VBELN AND E~PARVW = 'WE' AND E~POSNR = '000000'
        INNER JOIN VBUP AS F ON  A~VBELN = F~VBELN AND F~POSNR = B~POSNR
        LEFT JOIN  VBUK AS G ON G~VBELN = A~VBELN
  WHERE "a~vbtyp = 'C'
        A~VBELN IN P_VBELN
    AND A~KUNNR IN P_KUNNR
    AND A~VKORG IN P_VKORG
    AND A~VTWEG IN P_VTWEG
    AND A~SPART IN P_SPART
    AND A~AUART IN P_AUART
    AND B~VSTEL IN P_VSTEL
    AND B~WERKS IN P_WERKS
    AND B~MATNR IN P_MATNR
    AND B~PS_PSP_PNR IN P_POSNR
    AND B~ABGRU IN P_ABGRU
    AND C~EDATU IN P_EDATU
    AND D~VSART IN P_VSART
    AND E~KUNNR IN P_KUNNR1
    AND E~LAND1 IN P_LAND1
    AND F~LFSTA IN P_LFSTA.
*get
  IF NOT T_ITAB1[] IS INITIAL.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE T_VBEP
        FROM VBEP
      FOR ALL ENTRIES IN T_ITAB1
       WHERE VBELN = T_ITAB1-VBELN AND POSNR = T_ITAB1-POSNR.
*get lips
    SELECT * INTO CORRESPONDING FIELDS OF TABLE T_LIPS
      FROM LIPS
      FOR ALL ENTRIES IN T_ITAB1
      WHERE VGBEL = T_ITAB1-VBELN AND VGPOS = T_ITAB1-POSNR.
*get vbpa
    SELECT * INTO CORRESPONDING FIELDS OF TABLE T_VBPA
      FROM VBPA
      FOR ALL ENTRIES IN T_ITAB1
      WHERE VBELN = T_ITAB1-VBELN AND PARVW = 'WE'.
*get kna1
    IF T_VBPA[] IS  NOT INITIAL.
      SELECT * INTO CORRESPONDING FIELDS OF TABLE T_KNA1
        FROM KNA1
        FOR ALL ENTRIES IN T_VBPA
        WHERE KUNNR = T_VBPA-KUNNR.
    ENDIF.

*get prps
    SELECT * INTO CORRESPONDING FIELDS OF TABLE T_PRPS
      FROM PRPS
      FOR ALL ENTRIES IN T_ITAB1
      WHERE PSPNR = T_ITAB1-PPSPNR.
*
    LOOP AT T_ITAB1.
      MOVE-CORRESPONDING T_ITAB1 TO T_ITAB.
* get vbpa
      IF NOT T_VBPA[] IS INITIAL.
*        LOOP AT t_vbpa WHERE vbeln = t_itab1-vbeln AND posnr = t_itab1-posnr.
*          t_itab-zkunnr = t_vbpa-kunnr.
*        ENDLOOP.
        CLEAR T_VBPA.
        READ TABLE T_VBPA WITH  KEY VBELN = T_ITAB1-VBELN  POSNR = T_ITAB1-POSNR.
        IF SY-SUBRC <> 0.
          READ TABLE T_VBPA WITH KEY VBELN = T_ITAB1-VBELN POSNR = '000000'.
        ELSE.
          T_ITAB-ABLAD = T_VBPA-ABLAD.                      "M1 add
        ENDIF.
        T_ITAB-ZKUNNR = T_VBPA-KUNNR.
        IF T_ITAB-ZKUNNR NOT IN P_KUNNR1.
          DELETE T_ITAB INDEX SY-TABIX.
          CONTINUE.
        ENDIF.
        CLEAR:P_POSNR.
      ENDIF.
      CLEAR T_ITAB-BMENG.
*get vbep
      IF NOT T_VBEP[] IS INITIAL."取出bmeng的confirmod
        LOOP AT T_VBEP WHERE VBELN = T_ITAB1-VBELN AND POSNR = T_ITAB1-POSNR.
          T_ITAB-BMENG = T_ITAB-BMENG + T_VBEP-BMENG.
          IF T_VBEP-ETENR = '0001'.
            T_ITAB-EIATU = T_VBEP-EDATU.
            T_ITAB-EDATU = T_VBEP-EDATU.
            T_ITAB-ZDATU = SY-DATUM - T_VBEP-EDATU.
          ELSE.
            CLEAR T_ITAB-ZDATU.
            T_ITAB-EDATU = T_VBEP-EDATU.
            T_ITAB-ZDATU = SY-DATUM - T_VBEP-EDATU .
          ENDIF.
        ENDLOOP.
      ENDIF.
*get lips
      IF NOT T_LIPS[] IS INITIAL.
        LOOP AT T_LIPS WHERE VGBEL = T_ITAB1-VBELN AND VGPOS = T_ITAB1-POSNR.
          T_ITAB-VSMNG = T_ITAB-VSMNG + T_LIPS-LFIMG. "dn 数量
* get dn text
          "  CONCATENATE t_itab-dntxt t_lips-vbeln t_lips-posnr INTO t_itab-dntxt SEPARATED BY ''.
        ENDLOOP.
      ENDIF.
*get kna1------TXTPA
      IF NOT T_KNA1[] IS INITIAL.
        READ TABLE T_KNA1 WITH KEY  KUNNR = T_ITAB-KUNNR.
        IF SY-SUBRC = 0.
          CONCATENATE  T_KNA1-PSTLZ ' ' T_KNA1-REGIO ' ' T_KNA1-ORT01 '-' T_KNA1-ORT02 INTO P_NAME1.
          CONCATENATE T_KNA1-NAME1 '/' T_KNA1-STRAS '/' P_NAME1 INTO T_ITAB-TXTPA SEPARATED BY ' '.
        ENDIF.
        CLEAR :T_KNA1,P_NAME1.
        READ TABLE T_KNA1 WITH KEY KUNNR = T_ITAB-ZKUNNR.
        IF SY-SUBRC = 0.
          CONCATENATE  T_KNA1-PSTLZ ' ' T_KNA1-REGIO ' ' T_KNA1-ORT01 '-' T_KNA1-ORT02 INTO P_NAME1.
          CONCATENATE T_KNA1-NAME1 '/' T_KNA1-STRAS '/' P_NAME1 INTO T_ITAB-ZTXTPA SEPARATED BY ' '.
        ENDIF.
      ENDIF.

*GET VBUP
*      IF  NOT t_vbup[] IS INITIAL .
*        READ TABLE t_vbup WITH KEY vbeln = t_itab1-vbeln  posnr = t_itab1-posnr.
*        IF sy-subrc = 0.
*          t_itab-lfsta = t_vbup-lfsta.
*        ENDIF.
*      ENDIF.
*GET PRPS
      IF  NOT T_PRPS[] IS INITIAL.
        READ TABLE T_PRPS WITH KEY PSPNR = T_ITAB1-PPSPNR.
        IF SY-SUBRC = 0.
          T_ITAB-POSID = T_PRPS-POSID.
        ENDIF.
      ENDIF.
      T_ITAB-SOQTY = T_ITAB-BMENG - T_ITAB-VSMNG.
      APPEND T_ITAB.
      CLEAR T_ITAB.
    ENDLOOP.
*get t_lips data
    IF  NOT T_LIPS[] IS INITIAL.
* get t_likp ----wadat
      SELECT * INTO CORRESPONDING FIELDS OF TABLE T_LIKP
         FROM LIKP
        FOR ALL ENTRIES IN T_LIPS
        WHERE VBELN = T_LIPS-VBELN.
* get t_vbup -----kosta
      SELECT * INTO CORRESPONDING FIELDS OF TABLE T_VBUP
        FROM VBUP
        FOR ALL ENTRIES IN T_LIPS
        WHERE VBELN = T_LIPS-VBELN AND POSNR = T_LIPS-POSNR.
    ENDIF.
*GET T_LIPS T_LIKP
    DATA:P_C TYPE C,
         P_I TYPE I VALUE 1.
    SORT T_LIPS BY VBELN.
    LOOP AT T_ITAB.
      LOOP AT T_LIPS WHERE VGBEL = T_ITAB-VBELN AND VGPOS = T_ITAB-POSNR.
        MOVE-CORRESPONDING  T_ITAB TO LT_ITAB.
        LT_ITAB-VGBEL = T_LIPS-VBELN.
        LT_ITAB-VGPOS = T_LIPS-POSNR.
        LT_ITAB-LFIMG = T_LIPS-LFIMG.
        READ TABLE T_LIKP WITH KEY VBELN = T_LIPS-VBELN.
        IF SY-SUBRC = 0.
          LT_ITAB-WADAT = T_LIKP-WADAT_IST.
        ENDIF.
        READ TABLE T_VBUP WITH KEY VBELN = T_LIPS-VBELN POSNR = T_LIPS-POSNR.
        IF SY-SUBRC = 0.
          LT_ITAB-KOSTA = T_VBUP-KOSTA.
        ENDIF.
        APPEND LT_ITAB.
        P_C = 'X'.
        CLEAR: LT_ITAB,T_LIKP,T_LIPS,T_VBUP.
      ENDLOOP.
*
      IF  P_C = ''.
        MOVE-CORRESPONDING T_ITAB TO LT_ITAB.
        APPEND LT_ITAB.
        CLEAR:T_ITAB,LT_ITAB.
      ENDIF.
      CLEAR:P_C.
      CLEAR: LT_ITAB,T_LIKP,T_LIPS,T_ITAB.
    ENDLOOP.

    DELETE T_ITAB WHERE ZKUNNR NOT IN P_KUNNR1.
    DELETE LT_ITAB WHERE ZKUNNR NOT IN P_KUNNR1.
*order
    SORT T_ITAB BY KUNNR MATNR VBELN POSNR.
    SORT LT_ITAB BY KUNNR MATNR VBELN POSNR.
*Handle
    LOOP AT T_ITAB.
      LOOP AT LT_ITAB WHERE VBELN = T_ITAB-VBELN AND POSNR = T_ITAB-POSNR.
        IF P_I = 1 .
          P_I = P_I + 1.
          MODIFY LT_ITAB.
        ELSE.
          LT_ITAB-KWMENG = ''.
          LT_ITAB-BMENG = ''.
          LT_ITAB-VSMNG = ''.
          LT_ITAB-SOQTY = ''.
          MODIFY LT_ITAB.
        ENDIF.
      ENDLOOP.
      CLEAR:P_I.
      P_I = 1.
    ENDLOOP.


  ELSE.
    MESSAGE I000(OO) WITH 'No suitable purchasing documents found'.
  ENDIF.
ENDFORM.                    "GET_FORM
*&---------------------------------------------------------------------*
*&      Form  add_text
*&---------------------------------------------------------------------*
*       text  add fields
*----------------------------------------------------------------------*
FORM ADD_TEXT.
  DATA:L_LINES_1  TYPE STANDARD TABLE OF TLINE WITH HEADER LINE,
        L_LINES_2  TYPE STANDARD TABLE OF TLINE WITH HEADER LINE,
        L_LINES_3  TYPE STANDARD TABLE OF TLINE WITH HEADER LINE,
        L_LINES_4  TYPE STANDARD TABLE OF TLINE WITH HEADER LINE,
       L_TDNAME TYPE TDOBNAME.
  LOOP AT LT_ITAB.
    CONCATENATE LT_ITAB-VBELN LT_ITAB-POSNR INTO L_TDNAME.
*read text
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        ID                      = 'Z200'
        LANGUAGE                = SY-LANGU
        NAME                    = L_TDNAME
        OBJECT                  = 'VBBP'
      TABLES
        LINES                   = L_LINES_1
      EXCEPTIONS
        ID                      = 1
        LANGUAGE                = 2
        NAME                    = 3
        NOT_FOUND               = 4
        OBJECT                  = 5
        REFERENCE_CHECK         = 6
        WRONG_ACCESS_TO_ARCHIVE = 7.
    IF NOT L_LINES_1[] IS INITIAL.
      LOOP AT L_LINES_1.
        CONCATENATE LT_ITAB-TEXT1 L_LINES_1-TDLINE INTO LT_ITAB-TEXT1.
      ENDLOOP.
      MODIFY LT_ITAB TRANSPORTING TEXT1.
      CLEAR LT_ITAB.
    ENDIF.
*2
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        ID                      = 'Z201'
        LANGUAGE                = SY-LANGU
        NAME                    = L_TDNAME
        OBJECT                  = 'VBBP'
      TABLES
        LINES                   = L_LINES_2
      EXCEPTIONS
        ID                      = 1
        LANGUAGE                = 2
        NAME                    = 3
        NOT_FOUND               = 4
        OBJECT                  = 5
        REFERENCE_CHECK         = 6
        WRONG_ACCESS_TO_ARCHIVE = 7.
    IF NOT L_LINES_2[] IS INITIAL.
      LOOP AT L_LINES_2.
        CONCATENATE LT_ITAB-TEXT2 L_LINES_2-TDLINE INTO LT_ITAB-TEXT2.
      ENDLOOP.
      MODIFY LT_ITAB TRANSPORTING TEXT2.
      CLEAR LT_ITAB.
    ENDIF.
*3
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        ID                      = 'Z202'
        LANGUAGE                = SY-LANGU
        NAME                    = L_TDNAME
        OBJECT                  = 'VBBP'
      TABLES
        LINES                   = L_LINES_3
      EXCEPTIONS
        ID                      = 1
        LANGUAGE                = 2
        NAME                    = 3
        NOT_FOUND               = 4
        OBJECT                  = 5
        REFERENCE_CHECK         = 6
        WRONG_ACCESS_TO_ARCHIVE = 7.
    IF NOT L_LINES_3[] IS INITIAL.
      LOOP AT L_LINES_3.
        CONCATENATE LT_ITAB-TEXT3 L_LINES_3-TDLINE INTO LT_ITAB-TEXT3.
      ENDLOOP.
      MODIFY LT_ITAB TRANSPORTING TEXT3.
      CLEAR LT_ITAB.
    ENDIF.
*4
    CALL FUNCTION 'READ_TEXT'
      EXPORTING
        ID                      = 'Z203'
        LANGUAGE                = SY-LANGU
        NAME                    = L_TDNAME
        OBJECT                  = 'VBBP'
      TABLES
        LINES                   = L_LINES_4
      EXCEPTIONS
        ID                      = 1
        LANGUAGE                = 2
        NAME                    = 3
        NOT_FOUND               = 4
        OBJECT                  = 5
        REFERENCE_CHECK         = 6
        WRONG_ACCESS_TO_ARCHIVE = 7
        ENDLOOP.
    IF NOT L_LINES_4[] IS INITIAL.
      LOOP AT L_LINES_4.
        CONCATENATE LT_ITAB-TEXT4 L_LINES_4-TDLINE INTO LT_ITAB-TEXT4.
      ENDLOOP.
      MODIFY LT_ITAB TRANSPORTING TEXT4.
      CLEAR LT_ITAB.
    ENDIF.
    CLEAR:L_LINES_1,L_LINES_1[],L_LINES_2,L_LINES_2[],
        L_LINES_3,L_LINES_3[],L_LINES_4,L_LINES_4[],
        L_TDNAME.
  ENDLOOP.
*
  IF LT_ITAB[] IS NOT INITIAL.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE T_VBKD
      FROM VBKD
      FOR ALL ENTRIES IN LT_ITAB
        WHERE VBELN = LT_ITAB-VBELN
          AND POSNR = LT_ITAB-POSNR.
    LOOP AT  LT_ITAB.
      READ TABLE T_VBKD WITH KEY VBELN = LT_ITAB-VBELN POSNR = LT_ITAB-POSNR.
      IF SY-SUBRC = 0.
        LT_ITAB-VSART = T_VBKD-VSART.
*add
        LT_ITAB-BSTDK = T_VBKD-BSTDK.
        MODIFY LT_ITAB TRANSPORTING VSART BSTDK.
        CLEAR LT_ITAB.
      ENDIF.
    ENDLOOP.
*
    SELECT * INTO CORRESPONDING FIELDS OF TABLE T_VBRP
      FROM VBRP
      FOR ALL ENTRIES IN LT_ITAB
      WHERE  AUBEL = LT_ITAB-VBELN
        AND  AUPOS = LT_ITAB-POSNR
        AND  VGBEL = LT_ITAB-VGBEL
        AND  VGPOS = LT_ITAB-VGPOS.
    IF NOT T_VBRP[] IS INITIAL.
      LOOP AT LT_ITAB .
        READ TABLE T_VBRP WITH KEY  AUBEL = LT_ITAB-VBELN AUPOS = LT_ITAB-POSNR
                                    VGBEL = LT_ITAB-VGBEL VGPOS = LT_ITAB-VGPOS.
        IF SY-SUBRC = 0.
          LT_ITAB-VBELV = T_VBRP-VBELN. "invoice number
          LT_ITAB-POSNV = T_VBRP-POSNR. "invoice item
          LT_ITAB-ERDAT = T_VBRP-ERDAT. "invoice date
          MODIFY LT_ITAB.
          CLEAR LT_ITAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
*
    SELECT * INTO CORRESPONDING FIELDS OF TABLE T_T173T
      FROM T173T
      FOR ALL ENTRIES IN LT_ITAB
      WHERE VSART = LT_ITAB-VSART
        AND SPRAS = SY-LANGU.
    IF NOT T_T173T[] IS INITIAL.
      LOOP AT LT_ITAB.
        READ TABLE T_T173T WITH KEY VSART = LT_ITAB-VSART.
        IF SY-SUBRC = 0.
          LT_ITAB-BEZEI = T_T173T-BEZEI.
          MODIFY LT_ITAB TRANSPORTING BEZEI.
          CLEAR LT_ITAB.
        ENDIF.
      ENDLOOP.
    ENDIF.
*modify
    LOOP AT LT_ITAB.
      CALL FUNCTION 'CONVERSION_EXIT_AUART_OUTPUT'
        EXPORTING
          INPUT  = LT_ITAB-AUART
        IMPORTING
          OUTPUT = LT_ITAB-AUART.
*     get step name     - add start
      PERFORM GET_STEP_NAME USING LT_ITAB-VBELN LT_ITAB-ABSTK CHANGING LT_ITAB-SPNAME.
*     add end
      MODIFY LT_ITAB.
    ENDLOOP.
  ENDIF.
ENDFORM.                    "add_text
*----------------------------------------------------------------------*
*       FORM .......
*----------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CALL_ALV.
  TYPE-POOLS:SLIS.
  DATA: WA_ALV_FIELD1 TYPE SLIS_FIELDCAT_ALV ,    " 相当于工作区
      WA_ALV_FIELDCAT1  TYPE SLIS_T_FIELDCAT_ALV .  " 存放列名的捏表
  DATA: LW_LAYOUT TYPE SLIS_LAYOUT_ALV.
  DATA: IS_VARIANT TYPE DISVARIANT.
  IS_VARIANT-REPORT = SY-REPID.
  DATA: SLA TYPE LVC_S_LAYO.
  SLA-GRID_TITLE = 'Sales order delivery due list report'  .
  SLA-CWIDTH_OPT = 'X'.
  SLA-STYLEFNAME = 'FIELD_STYLE' .
  SLA-ZEBRA     = 'X' .
  SLA-NO_TOOLBAR = ' ' .
**************************************************************************
  DEFINE ALV_FIELD.
    CLEAR
     WA_ALV_FIELD1 .
    WA_ALV_FIELD1-COL_POS  = &1  .
    WA_ALV_FIELD1-FIELDNAME     = &2.
    " ls_fieldcat-f4availabl = &3.
    "    wa_alv_field1-scrtext_s = &3 .
    WA_ALV_FIELD1-SELTEXT_M = &3.
    WA_ALV_FIELD1-SELTEXT_L = &4.
    WA_ALV_FIELD1-NO_ZERO = &5.             "为输出隐藏零
    WA_ALV_FIELD1-REF_TABNAME = &6 .
    WA_ALV_FIELD1-REF_FIELDNAME = &7 .
    " wa_alv_field1-double_click = &6.     "Query a double click on a cell of the ALV GRID √
    APPEND WA_ALV_FIELD1 TO  WA_ALV_FIELDCAT1 .
  END-OF-DEFINITION.
  ALV_FIELD '0' 'VSTEL' 'Shipping Point' '' '' '' ''.
  ALV_FIELD '0' 'WERKS' 'Delivery Plant' '' '' '' ''.
  ALV_FIELD '1' 'KUNNR' 'Sold to' '' '' 'VBAK' 'KUNNR' .
  ALV_FIELD '2' 'TXTPA' '' 'Sold description' '' '' ''.
  ALV_FIELD '3' 'ZKUNNR' 'Ship to' ''  '' 'VBAP' 'KUNNR'.
  ALV_FIELD '3' 'ZTXTPA' '' 'Ship description' '' '' ''.
  ALV_FIELD '4' 'BEZEI' 'Ship Mode' ''  '' '' ''.  "modify
  ALV_FIELD '5' 'POSID' '' 'Production Lot Number' '' '' ''.
  ALV_FIELD '6' 'AUART'  '' 'Sales Order Type' '' '' ''.
  ALV_FIELD '7' 'VBELN'  '' 'Sales Order Number' '' 'VBAP' 'VBELN'.
  ALV_FIELD '8' 'POSNR' 'SO Item' ''  '' '' ''.
  ALV_FIELD '9' 'BSTKD'  '' 'Customer PO' '' '' ''.
  ALV_FIELD '10' 'MATNR'  '' 'Material Number' '' 'MARA' 'MATNR'.
  ALV_FIELD '11' 'ARKTX' '' 'Material Description' '' '' ''.
  ALV_FIELD '12' 'BSTDK'  '' 'Customer PO Date' '' '' ''.
  ALV_FIELD '13' 'EIATU'  '' 'Req Delivery Date' '' '' ''.
  ALV_FIELD '14' 'EDATU'  '' 'Confirmed Delivery Date' '' '' ''.
  ALV_FIELD '15' 'ZDATU'  '' 'Days required to Deliver' '' '' ''.
  ALV_FIELD '16' 'KWMENG'  '' 'Order Qty' 'X' '' ''.
  ALV_FIELD '17' 'VRKME' 'UOM' '' '' '' ''.
  ALV_FIELD '18' 'SOQTY' 'SO Qty' '' '' '' ''.
  ALV_FIELD '18' 'BMENG'  '' 'Confirmed Qty' 'X' '' ''.
  ALV_FIELD '20' 'VSMNG'  '' 'Delivered Qty' 'X' '' ''.
  ALV_FIELD '21' 'LFSTA'  '' 'Delivery Status' '' '' ''.
  ALV_FIELD '22' 'ABGRU' '' 'Rejection Status' '' '' ''.
  ALV_FIELD '23' 'KDMAT' '' 'Customer P/N' '' '' ''.
  ALV_FIELD '24' 'VGBEL' '' 'DN Number' '' 'LIPS' 'VBELN'.
  ALV_FIELD '25' 'VGPOS' '' 'DN Item' '' '' ''.
  ALV_FIELD '26' 'LFIMG' '' 'DN Qty' '' '' ''.
  ALV_FIELD '27' 'KOSTA' '' 'Pick Status' '' '' ''.
  ALV_FIELD '28' 'WADAT' '' 'GI date' '' '' ''.
  ALV_FIELD '29' 'VBELV' '' 'Incoice Number' '' 'VBRP' 'VBELN'.
  ALV_FIELD '30' 'POSNV' '' 'Incoice Number' '' '' ''.
  ALV_FIELD '31' 'ERDAT' '' 'Invoice Date' '' '' ''.
  ALV_FIELD '32' 'TEXT1' '' 'First Confirmed Delivery Date' '' '' ''.
  ALV_FIELD '33' 'TEXT2' '' 'PMT Internal Comment' '' '' ''.
  ALV_FIELD '34' 'TEXT3' '' 'PMT External Comment' '' '' ''.
  ALV_FIELD '35' 'TEXT4' '' 'External Shipment Date' '' '' ''.
  ALV_FIELD '36' 'ABLAD' '' 'Uploading Point' '' '' ''.
  ALV_FIELD '37' 'SPNAME' '' 'Approve Status' '' '' ''.

  "alv_field '23' 'DNTXT' '' 'Delivery Order Detail '.
  SORT LT_ITAB BY VSTEL WERKS KUNNR VBELN.
  DATA : LV_SAVE VALUE 'U'.
  IF SY-UNAME = 'OLIVER_LEE'.
    LV_SAVE = 'A'.
  ENDIF.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'
      IS_LAYOUT                = LW_LAYOUT
      IT_FIELDCAT              = WA_ALV_FIELDCAT1
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'F_USER_COMMAND'
      I_SAVE                   = LV_SAVE
      I_DEFAULT                = 'X'
    TABLES
      T_OUTTAB                 = LT_ITAB.

  " alv_field '21' '' '' '' ''.
*  IF wa_custom_container IS INITIAL .
*    CREATE OBJECT wa_custom_container
*      EXPORTING
*        container_name = wa_container.
**    CREATE OBJECT alv_grid
**      EXPORTING
**        i_parent = wa_custom_container.
** create tree control
*    CREATE OBJECT alv_grid
*      EXPORTING
*        parent                      = wa_custom_container
*        node_selection_mode         = cl_gui_column_tree=>node_sel_mode_multiple
*        item_selection              = space
*        no_html_header              = ''
*        no_toolbar                  = ''
*      EXCEPTIONS
*        cntl_error                  = 1
*        cntl_system_error           = 2
*        create_error                = 3
*        lifetime_error              = 4
*        illegal_node_selection_mode = 5
*        failed                      = 6
*        illegal_column_name         = 7.
*    IF sy-subrc <> 0.
*      MESSAGE x208(00) WITH 'ERROR'.                        "#EC NOTEXT
*    ENDIF.
*  ENDIF .
** repid for saving variants
*  DATA: ls_variant TYPE disvariant.
*  ls_variant-report = sy-repid.
*
*  CALL METHOD alv_grid->set_table_for_first_display                         "ALV显示
*        EXPORTING
**         i_structure_name = 'ZSDBILL'
*         i_save                        = 'X'
*         it_list_commentary            = ls_list_comm
*          is_variant                   = is_variant
**          is_layout                     = sla
*       CHANGING
**         it_sort                       = gb_sortfld
*         it_outtab                     =  t_itab[]
*         it_fieldcatalog               = gt_fieldcat
**         it_sort                       =  pt_sort
*       EXCEPTIONS
**    "     invalid_parameter_combination = 1
**         program_error                 = 2
**         too_many_lines                = 3
*         OTHERS                        = 4.

ENDFORM.                    "CALL_ALV
*&---------------------------------------------------------------------*
*&      Form  top-of-page
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM TOP-OF-PAGE.

  DATA: LT_HEADER  TYPE SLIS_T_LISTHEADER,
        LW_HEADER  TYPE SLIS_LISTHEADER.
  READ TABLE P_VSTEL INDEX 1.
  READ TABLE P_WERKS INDEX 1.
  LW_HEADER-TYP  = 'S'.
  LW_HEADER-KEY  = 'DATA: '.
  LW_HEADER-INFO = SY-DATUM.
  APPEND LW_HEADER TO LT_HEADER.

  LW_HEADER-TYP  = 'S'.
  LW_HEADER-KEY  = 'Shipping Point: '.
  LW_HEADER-INFO = P_VSTEL-LOW.
  APPEND LW_HEADER TO LT_HEADER.

  LW_HEADER-TYP  = 'S'.
  LW_HEADER-KEY  = 'Delivery Plant : '.
  LW_HEADER-INFO = P_WERKS-LOW.
  APPEND LW_HEADER TO LT_HEADER.
  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      IT_LIST_COMMENTARY = LT_HEADER
      I_ALV_FORM         = 'X'.

ENDFORM.                    "top-of-page

*&---------------------------------------------------------------------*
*&      Form  f_call_tran
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM F_CALL_TRAN USING P_RS_SELFIELD TYPE SLIS_SELFIELD  .
  SET PARAMETER ID 'AUN' FIELD  LT_ITAB-VBELN.
  CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN."AND SKIP FIRST SCREEN .
ENDFORM.                    " f_call_tran

*&---------------------------------------------------------------------*
*&      Form  f_call_tran1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM F_CALL_TRAN1 USING P_RS_SELFIELD TYPE SLIS_SELFIELD  .
  SET PARAMETER ID 'VL' FIELD LT_ITAB-VGBEL.
  CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN.
ENDFORM.                    " f_call_tran
*&---------------------------------------------------------------------*
*&      Form  f_call_tran1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM F_CALL_TRAN2 USING P_RS_SELFIELD TYPE SLIS_SELFIELD  .
  SET PARAMETER ID 'VF' FIELD LT_ITAB-VBELV .
  CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN.
ENDFORM.                    " f_call_tran
*&---------------------------------------------------------------------*
*&      Form  f_user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_UCOMM        text
*      -->P_RS_SELFIELD  text
*----------------------------------------------------------------------*
FORM F_USER_COMMAND USING P_UCOMM TYPE SY-UCOMM
                         P_RS_SELFIELD TYPE SLIS_SELFIELD .
  CASE P_UCOMM.
    WHEN '&IC1' .   " 判断用户的动作
      " 读取用户点击的当前行的一行内容
      READ TABLE LT_ITAB  INDEX P_RS_SELFIELD-TABINDEX .
      IF P_RS_SELFIELD-FIELDNAME EQ 'VBELN'.   " 判断用户点击的是哪一列
        IF NOT LT_ITAB-VBELN IS INITIAL .
          PERFORM F_CALL_TRAN USING P_RS_SELFIELD .     " 调用其他事务
        ENDIF.
      ELSEIF P_RS_SELFIELD-FIELDNAME EQ 'VGBEL' .
        IF NOT LT_ITAB-VGBEL IS INITIAL .
          PERFORM F_CALL_TRAN1 USING P_RS_SELFIELD .     " 调用其他事务
        ENDIF .
      ELSEIF P_RS_SELFIELD-FIELDNAME EQ 'VBELV' .
        IF NOT LT_ITAB-VBELV IS INITIAL .
          PERFORM F_CALL_TRAN2 USING P_RS_SELFIELD .     " 调用其他事务
        ENDIF.
      ENDIF.
      CLEAR T_ITAB .
  ENDCASE.
  P_RS_SELFIELD-REFRESH = 'X' .   " 当用户在显式界面上对数据进行修改时,同时内表中的数据也随之刷新
ENDFORM.                    " f_user_command
*&---------------------------------------------------------------------*
*&      Form  set_pf_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RT_EXTAB   text
*----------------------------------------------------------------------*
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'ZSD_R_LIST'.                "设置对象栏等
ENDFORM.                    "set_pf_status
*----------------------------------------------------------------------*
*       FORM .......
*----------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWNLOAD_DATA.
  DEFINE FIELD1.
    FLDITAB-FLDNAME = &1.
    APPEND FLDITAB.
  END-OF-DEFINITION.
  FIELD1 'Sold to' .
  FIELD1 'Customer description' .
  FIELD1 'Ship to' .
  FIELD1 'Ship Mode'.
  FIELD1 'Production Lot Number' .
  FIELD1 'Sales Order Type'.
  FIELD1 'Sales Order Number'.
  FIELD1 'SO Item' .
  FIELD1 'Customer PO'.
  FIELD1 'Material Number'.
  FIELD1 'Material Description'.
  FIELD1 'Order Date'.
  FIELD1 'Req Delivery Date'.
  FIELD1 'Confirmed Delivery Date'.
  FIELD1 'Days required to Deliver'.
  FIELD1 'Order Qty'.
  FIELD1 'UOM'.
  FIELD1 'Confirmed Qty'.
  FIELD1 'Delivered Qty'.
  FIELD1 'Delivery Status'.
  FIELD1 'Rejection Status'.
  IF  NOT T_ITAB[] IS INITIAL.
    LOOP AT T_ITAB.
      MOVE-CORRESPONDING T_ITAB TO DOWN_ITAB.
      APPEND DOWN_ITAB.
    ENDLOOP.
    PERFORM DOWNLOAD_DATA_T USING DOWN_ITAB[] FLDITAB[].
  ENDIF.
ENDFORM.                    "DOWNLOAD_DATA

*&---------------------------------------------------------------------*
*&      Form  download_data_T
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->PT_DATA    text
*      -->PT_HEADER  text
*----------------------------------------------------------------------*
FORM DOWNLOAD_DATA_T USING PT_DATA TYPE STANDARD TABLE
                         PT_HEADER TYPE STANDARD TABLE.
  DATA: FULLPATH      TYPE STRING,
        FILENAME      TYPE STRING,
        PATH          TYPE STRING,
        USER_ACTION   TYPE I,
        ENCODING      TYPE ABAP_ENCODING.
* 路径
  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
    EXPORTING
      WINDOW_TITLE         = '导出'
      WITH_ENCODING        = 'X'
      INITIAL_DIRECTORY    = 'C:\'
    CHANGING
      FILENAME             = FILENAME
      PATH                 = PATH
      FULLPATH             = FULLPATH
      USER_ACTION          = USER_ACTION
      FILE_ENCODING        = ENCODING
    EXCEPTIONS
      CNTL_ERROR           = 1
      ERROR_NO_GUI         = 2
      NOT_SUPPORTED_BY_GUI = 3
      OTHERS               = 4.

  IF SY-SUBRC <> 0.
    EXIT.
  ENDIF.

  IF USER_ACTION <> CL_GUI_FRONTEND_SERVICES=>ACTION_OK.
    EXIT.
  ENDIF.

  CALL FUNCTION 'GUI_DOWNLOAD'
   EXPORTING
*       BIN_FILESIZE                  = ' '
*       CODEPAGE                      = ' '
     FILENAME                      = FULLPATH
     FILETYPE                      = 'DAT'"'ASC'
*       MODE                          = ' '
*       WK1_N_FORMAT                  = ' '
*       WK1_N_SIZE                    = ' '
*       WK1_T_FORMAT                  = ' '
*       WK1_T_SIZE                    = ' '
*       COL_SELECT                    = ' '
*       COL_SELECTMASK                = ' '
*       NO_AUTH_CHECK                 = ' '
*     IMPORTING
*       FILELENGTH                    =
    TABLES
      DATA_TAB                      = PT_DATA
      FIELDNAMES                    = PT_HEADER
*     EXCEPTIONS
*       FILE_OPEN_ERROR               = 1
*       FILE_WRITE_ERROR              = 2
*       INVALID_FILESIZE              = 3
*       INVALID_TYPE                  = 4
*       NO_BATCH                      = 5
*       UNKNOWN_ERROR                 = 6
*       INVALID_TABLE_WIDTH           = 7
*       GUI_REFUSE_FILETRANSFER       = 8
*       CUSTOMER_ERROR                = 9
*       NO_AUTHORITY                  = 10
*       OTHERS                        = 11
            .
  IF SY-SUBRC <> 0.
*     Implement suitable error handling here
  ENDIF.
ENDFORM.                    "download_data_T
*&---------------------------------------------------------------------*
*&      Form  GET_STEP_NAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_STEP_NAME  USING    P_VBELN
                             P_ABSTK "reject status
                    CHANGING P_SPNAME.
  DATA :L_INSTID TYPE ZWF005-INSTID,
        L_CURSPID LIKE  ZWF001-SPID,
        L_CURSPTITLE  LIKE  ZWF001-SPNAME,
        L_INITSPID  LIKE  ZWF001-SPID,
        L_NEXTSPUSER  LIKE  WFSYST-AGENT,
        LT_SPJB LIKE TABLE OF ZWF005,
        LS_SPJB LIKE ZWF005,
        LV_USID LIKE SY-UNAME,
        L_NEXTSPID  LIKE  ZWF001-SPID,
        L_NEXTSPTITLE LIKE  ZWF001-SPNAME,
        L_WFSTATE TYPE  CHAR1.

  CHECK P_VBELN IS NOT INITIAL.
  CLEAR P_SPNAME.

  L_INSTID+0(10) = P_VBELN.

  CALL FUNCTION 'ZWF_GET_CURRENTSPSTEPID'
    EXPORTING
      WFID        = 'WFSD0001'
      INSTID      = L_INSTID
    IMPORTING
      NEXTSPID    = L_NEXTSPID
      NEXTSPTITLE = L_NEXTSPTITLE
      NEXTSPUSER  = L_NEXTSPUSER
      CURSPID     = L_CURSPID
      CURSPTITLE  = L_CURSPTITLE
      INITSPID    = L_INITSPID
      WFSTATE     = L_WFSTATE
    TABLES
      SPJB        = LT_SPJB.

  IF P_ABSTK = 'A'." Nothing rejected
    P_SPNAME = 'Approved'.
  ELSEIF  P_ABSTK = 'C'."everything reject
    IF NOT L_NEXTSPUSER IS INITIAL.
      LV_USID = L_NEXTSPUSER+2.
    ELSE.
      CASE L_WFSTATE."1,INIT; 2,PROCESS; 3,FINISH; 4,CANC
        WHEN 1.
          P_SPNAME = 'Not Submit'.
        WHEN 2.
*          P_SPNAME = 'Process'.
        WHEN 3.
*          P_SPNAME = 'Finshed'.
        WHEN 4.
          P_SPNAME = 'Cancelled'.
        WHEN OTHERS.
          ...
      ENDCASE.

    ENDIF.
  ELSE.
    IF NOT L_NEXTSPUSER IS INITIAL.
      LV_USID = L_NEXTSPUSER+2.
    ELSEIF L_NEXTSPUSER IS INITIAL AND LT_SPJB IS NOT INITIAL.
      P_SPNAME = 'Approved'.
    ELSEIF L_NEXTSPUSER IS INITIAL AND LT_SPJB IS INITIAL .
      P_SPNAME = 'Not Submit'.
    ENDIF.
  ENDIF.

  CHECK LV_USID IS NOT INITIAL.
  SELECT SINGLE USERALIAS INTO P_SPNAME
    FROM USREFUS
    WHERE BNAME = LV_USID.
ENDFORM.                    " GET_STEP_NAME

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值