ZRPP0001 (多个选项卡,DownLoad, Email,Variant)

来源:互联网 发布:油画 淘宝 编辑:程序博客网 时间:2024/05/23 01:59

*&---------------------------------------------------------------------*
*& Report  ZRPP0001                                                    *
*&

*&---------------------------------------------------------------------*
*& Report       : Outstanding Sales orders Report
*& Requested by : Yih Chin
*& Developed by : Sastry
*& Start date   : 18.11.2003
*& Description  :
*&---------------------------------------------------------------------*
*  Change History
*  Date : 19/04/2005
*  Done by : Sastry
*  Description : 1. get fablot no.s from sales order item
*                2. change logic for outstanding sales order item
*                  If there is any corresponding production order with
*                  status REL / TECO (released and manually closed) and
*                  without DLFL (not deleted), consider the sales order
*                  item as "closed",
*                3. get batches for the materials 1, 2 and 3
*  Date : 17/06/2005
*  Description  : To get full package name
*  Date : 08/07/2005
*  Description : To add material controller, delivery block fields
*  Date : 22/09/2005
*  Description : 1. To ignore complete sales order item
*                2. Move devices with no wafer component to die recv
*  Date : 10/11/2005
*  Description : 1. Add ability to search for fab lot in another plant
*                2. Add ""BOM status"
*                3. Add the sale order ""ordering reason" in the report
*                    for the ANLG ""NP"" lot follow up
*                4. Add the ""wafer storage location"

*  Date : 25/4/2006
*  Description : 1.Add e-mail screen
*
* 007 24/01/2007 watson yuan task#1026:Add die ID by modify structure  *
*                            "ZXSALES_TAB".              "DEVK921870   *
*                                                        "DEVK921945   *
* 008 06/02/2007 watson yuan task#848a:enhanceemnt to show the SO      *
*                            have set rejection 99-hold for prroduction*
*                                                      "DEVK922024     *
* 009 02/14/207  Jaso_Ding   task#1027:Add additional information:     *
*                            unit price (assembly and/or testing) and  *
*                            the net value (sum of the assembly/test   *
*                            charge)                   "DEVK922123     *
* 010 2008-03-05 vista       Fix bug of outstanding sales order repor  *
*                                               "DEVK924134 [S0803001] *
*&---------------------------------------------------------------------*
REPORT  ZRPP0001 MESSAGE-ID CO                             .


*&---------------------------------------------------------------------*
* tables
*&---------------------------------------------------------------------*

TABLES : MARA, MARC, MBEW, MAKT, T001W, S801, KNA1, EKPO, EKBE, EBAN,
T001, VBAK, VBAP, VBEP, KLAH, CABNT, AUSP, MCHB, MARD, TVAUT.
tables :ADR6, tzw02, usr21.

TABLES: TVAGT, TVLST.                                       "DEVK922024


*&---------------------------------------------------------------------*
* type-pools
*&---------------------------------------------------------------------*

type-pools: slis.


*&---------------------------------------------------------------------*
* Constants
*&--------------------------------------------------------------------**

constants c_log_name     like  filename-fileintern
                         value 'Z_DEFAULT_APP_FILE'.

*&---------------------------------------------------------------------*
* Internal tables
*&---------------------------------------------------------------------*

DATA : BEGIN OF XVBAP OCCURS 0.
        INCLUDE STRUCTURE VBAP.
DATA :   KNUMV  LIKE VBAK-KNUMV,                           "DEVK922123
         AUDAT  LIKE VBAK-AUDAT,
         AUART  LIKE VBAK-AUART,
         AUGRU  LIKE VBAK-AUGRU,
         LIFSK  LIKE VBAK-LIFSK,
         VKORG  LIKE VBAK-VKORG,
         VTWEG  LIKE VBAK-VTWEG,
         VKGRP  LIKE VBAK-VKGRP,
         VKBUR  LIKE VBAK-VKBUR,
         BSTNK  LIKE VBAK-BSTNK,
         BSTDK  LIKE VBAK-BSTDK,
         KUNNR  LIKE VBAK-KUNNR,
         BMENG  LIKE VBAP-KWMENG,
         SYSSTAT(50),
         USRSTAT(50),
         PLNUM  LIKE PLAF-PLNUM,
         DIEASSIGN(1),
         ETTYP LIKE VBEP-ETTYP,
         EDATU LIKE VBEP-EDATU.
DATA : END OF XVBAP.

DATA : BEGIN OF XFABLOTS OCCURS 0,
         VBELN LIKE VBAP-VBELN,
         POSNR LIKE AUSP-ATWRT,
         FABLOTNO LIKE AUSP-ATWRT,
         WAFID LIKE VBAP-ZZWAFID1,
         DIEID LIKE VBAP-ZZDIEID1,                          "DEVK921945
         MTART LIKE MARA-MTART.
DATA : END OF XFABLOTS.

DATA : BEGIN OF XVBPA_SP OCCURS 0,
         VBELN LIKE VBPA-VBELN,
         POSNR LIKE VBPA-POSNR,
         KUNNR LIKE VBPA-KUNNR,
       END OF XVBPA_SP.

DATA : BEGIN OF XVBPA_BP OCCURS 0,
         VBELN LIKE VBPA-VBELN,
         POSNR LIKE VBPA-POSNR,
         KUNNR LIKE VBPA-KUNNR,
       END OF XVBPA_BP.

DATA : BEGIN OF XVBPA_SHP OCCURS 0,
         VBELN LIKE VBPA-VBELN,
         POSNR LIKE VBPA-POSNR,
         KUNNR LIKE VBPA-KUNNR,
       END OF XVBPA_SHP.

DATA : BEGIN OF XVBAK OCCURS 0.
        INCLUDE STRUCTURE VBAK.
DATA : END OF XVBAK.
**Add start of DEVK922123
DATA : BEGIN OF XKONV OCCURS 0.
        INCLUDE STRUCTURE KONV.
DATA : END OF XKONV.
**Add end   of DEVK922123
DATA : BEGIN OF XVBAK_AU OCCURS 0.
        INCLUDE STRUCTURE VBAK.
DATA : BEZEI LIKE TVAUT-BEZEI.
DATA : END OF XVBAK_AU.

DATA : BEGIN OF XTVAUT OCCURS 0.
        INCLUDE STRUCTURE TVAUT.
DATA : END OF XTVAUT.

DATA : BEGIN OF XMAST OCCURS 0.
        INCLUDE STRUCTURE MAST.
DATA : END OF XMAST.

DATA : BEGIN OF XSTKO OCCURS 0.
        INCLUDE STRUCTURE STKO.
DATA : END OF XSTKO.

DATA : BEGIN OF XVBPA_PY OCCURS 0,
         VBELN LIKE VBPA-VBELN,
         POSNR LIKE VBPA-POSNR,
         KUNNR LIKE VBPA-KUNNR,
       END OF XVBPA_PY.

DATA : BEGIN OF XMCHA OCCURS 0,
         MATNR LIKE MCHA-MATNR,
         WERKS LIKE MCHA-WERKS,
         CHARG LIKE MCHA-CHARG,
         LWEDT LIKE MCHA-LWEDT,
         CLABS LIKE MCHB-CLABS,
         CINSM LIKE MCHB-CINSM,
         FABLOTNO LIKE AUSP-ATWRT,
         MTART LIKE MARA-MTART,
         DB_CUST LIKE AUSP-ATWRT,
         DB_WQTY LIKE AUSP-ATWRT,
         DB_DQTY LIKE AUSP-ATWRT,
         DB_WID LIKE AUSP-ATWRT,
         DB_WSIZE LIKE AUSP-ATWRT,
         DB_WTHICK LIKE AUSP-ATWRT,
         DB_BGTHK LIKE AUSP-ATWRT,
         DB_RDQ LIKE AUSP-ATWRT,
         DB_RWQ LIKE AUSP-ATWRT,
         ICB_LOT_NO LIKE AUSP-ATWRT,
       END OF XMCHA.

DATA : BEGIN OF XMCHA_PS OCCURS 0,
         MATNR LIKE MCHA-MATNR,
         WERKS LIKE MCHA-WERKS,
         CHARG LIKE MCHA-CHARG,
         LGORT LIKE MCHB-LGORT,
         CLABS LIKE MCHB-CLABS,
         CINSM LIKE MCHB-CINSM,
       END OF XMCHA_PS.

DATA : BEGIN OF XMARC OCCURS 0,
         MATNR LIKE MARC-MATNR,
         WERKS LIKE MARC-WERKS,
         DISPO LIKE MARC-DISPO,
       END OF XMARC.

DATA : BEGIN OF XTEMP1 OCCURS 0.
        INCLUDE STRUCTURE SCLASS.
DATA : END OF XTEMP1.

DATA : BEGIN OF XTEMP2 OCCURS 0.
        INCLUDE STRUCTURE CLOBJEKTE.
DATA : END OF XTEMP2.

DATA : BEGIN OF XOBJECTS OCCURS 0.
        INCLUDE STRUCTURE CLOBJEKTE.
DATA : END OF XOBJECTS.

DATA : BEGIN OF XKLAH OCCURS 0.
        INCLUDE STRUCTURE KLAH.
DATA : END OF XKLAH.

DATA : BEGIN OF XTAB OCCURS 0.
        INCLUDE STRUCTURE ZXSALES_TAB.
DATA : END OF XTAB.
data : begin of w_output ,
       VKORG(30) type c ,"Sales Organization
       VTWEG(30) type c ,"Distribution Channel
       SPART(30) type c ,"Division
       LIFSK(30) type c ,"Delivery block (document header)
       VBELN(30) type c ,"Sales and Distribution Document Number
       POSNR(30) type c ,"Item number of the SD document
       LPRIO(30) type c ,"Delivery Priority
       AUART(30) type c ," Sales Document Type
       AUDAT(30) type c ," Document date (date received/sent)
       VKBUR(30) type c ," Sales office
       VKGRP(30) type c ," Sales group
       BEZEI(40) type c ," Order reason
       DISPO(30) type c ," MRP Controller
       MATNR(30) type c ," Material (Device)
       MAKTX(40) type c ," Mat.Desc ( Device)
      KDMAT(40) type c ," Material belonging to the customer
      WERKS(40) type c ," Plant
      STLST(40) type c ," BOM status
      KUNUM1(40) type c ," Sold to party
      KNAME1(40) type c ," Customer Name
      KUNUM2(40) type c ," Ship to
      KNAME2(40) type c ," Customer Name
      KUNUM3(40) type c ," Bill to
      KNAME3(40) type c ," Customer Name
      KUNUM4(40) type c ," Payer
      KNAME4(40) type c ," Customer Name
      CHARG(40) type c ," Batch Number
      FABNO(40) type c ," Fab Lot no.
      KUNNR(40) type c ," Customer Number 1
      WAFID(40) type c ," Wafer id
      BSTNK(40) type c ," Customer purchase order number
      BSTDK(40) type c ," Customer purchase order date
      KWMENG(40) type c ," Order qty.
      ZPACK(40) type c ," Package
      ZLEAD(40) type c ," Lead
      FOOTPR(40) type c ," Foot Print
      ZDIM(40) type c ," Dimension
      PACKTH(40) type c ," Package thickness
      NUMWIRE(40) type c ," Number of wires
      DB_CUST(40) type c ," Customer ( Batch )
      FABLOTNO(40) type c ,"Fab lot # (Batch)
      DB_WQTY(40) type c ,"Wafer qty
      DB_DQTY(40) type c ,"Label Die Qty
      DB_WID(40) type c ,"Wafer id
      DB_WSIZE(40) type c ,"Wafer Size
      DB_WTHICK(40) type c ,"Wafer Thickness.
      DB_BGTHK(40) type c ,"Backgrind thickness
      DB_RWQ(40) type c ,"Wafer release qty
      DB_RDQ(40) type c ,"Release die qty
      PLNUM(40) type c ,"Planned order number
      AUFNR(40) type c ,"Order Number
      SYSSTAT(80) type c,"Used to display Production  order status
      USRSTAT(80) type c,"Used to display Production  order status
      DIEASSIGN(40) type c ,"Die/IC Assigned
      ZZRES5(40) type c ,"Wafer Map
      LWEDT(40) type c ,"Date of last goods receipt
      ZZDQPL1(40) type c ,"Die Qty Plant / Sloc 1
      ZZDQPL2(40) type c ," Die Qty Plant Sloc 2
      ZZDQPL3(40) type c ," Die Qty Plant Sloc 3
      ZZDQPL4(40) type c ,"Die Qty Plant Sloc 4
      ZZDQPL5(40) type c ," Die Qty Plant Sloc 5
      ZZDQPL6(40) type c ," Die Qty Plant Sloc 2
      ETTYP(40) type c ," Schedule line category
      EDATU(40) type c ," Schedule line date
     end of w_output.

DATA t_output LIKE TABLE OF w_output.


DATA : V_OBJECT LIKE AUSP-OBJEK.

DATA : BEGIN OF XOBJECTDATA OCCURS 0.
        INCLUDE STRUCTURE  CLOBJDAT.
DATA : END OF XOBJECTDATA.

DATA : BEGIN OF XCLASS OCCURS 0.
        INCLUDE STRUCTURE SCLASS.
DATA : END OF XCLASS.

DATA : BEGIN OF XAUFK OCCURS 0,
         KDAUF LIKE AFPO-KDAUF,
         KDPOS LIKE AFPO-KDPOS,
         AUFNR LIKE AFPO-AUFNR,
         OBJNR LIKE AUFK-OBJNR,
         RSNUM LIKE AFKO-RSNUM,
         AEDAT like aufk-AEDAT,
       END OF XAUFK.

DATA : BEGIN OF GT_KNA1 OCCURS 0,
         KUNNR LIKE KNA1-KUNNR,
         NAME1 LIKE KNA1-NAME1,
       END OF GT_KNA1.

DATA : BEGIN OF GT_MAKT OCCURS 0,
         MATNR LIKE MAKT-MATNR,
         SPRAS LIKE MAKT-SPRAS,
         MAKTX LIKE MAKT-MAKTX,
       END OF GT_MAKT.

* Devices without wafer
DATA : BEGIN OF XDEVICE OCCURS 0,
         MATNR   LIKE VBAP-MATNR,
         WERKS   LIKE VBAP-WERKS,
       END OF XDEVICE.

DATA : BEGIN OF GT_CHAR OCCURS 0,
         MATNR   LIKE XTAB-MATNR,
         ZLEAD   LIKE XTAB-ZLEAD,
         FOOTPR  LIKE XTAB-FOOTPR,
         ZDIM    LIKE XTAB-ZDIM,
         PACKTH  LIKE XTAB-PACKTH,
         NUMWIRE LIKE XTAB-NUMWIRE,
         KUNNR   LIKE XTAB-KUNNR,
         ZPACK   LIKE XTAB-ZPACK,
       END OF GT_CHAR.

DATA : V_LINE LIKE BSVX-STTXT,
       V_USER_LINE LIKE BSVX-STTXT.


****for sending email
data gs_docdata          like sodocchgi1.
data gs_subject          type so_obj_des.
data gt_objpack          like sopcklsti1 occurs 1 with header line.
data gt_objtxt           like solisti1   occurs 1 with header line.
data gt_objbin           like solisti1   occurs 1 with header line.
data gt_reclist          like somlreci1  occurs 1 with header line.
data gt_msgreturn        like zmsgreturn occurs 1 with header line.
data gt_contents         like solisti1   occurs 1 with header line.
data gt_files            like zfilespath occurs 1 with header line.
data gt_spool            like zspoolpath occurs 1 with header line.
data g_file_excel    type zbc_conv_txt2exl." For Output sheets in a file


data: g_subrc          like sy-subrc.
data: begin of gt_file_out occurs 1000,
        g_line(2000) type c,
      end of gt_file_out.
data: fname like RLGRAP-FILENAME,"(400) type c,
          fname1  like RLGRAP-FILENAME,"(400) type c,
          fname2  like RLGRAP-FILENAME,"(400) type c,
          l_path(300) type c,
          p_rcode type i.
*get out format ----------------------------------------------------*

 

data: begin of gt_alv_fc occurs 100,
        fld_name(30) type c,
        col_pos type i,
      end of gt_alv_fc.


data: fieldcat   type slis_t_fieldcat_alv, "ALV Field Catalog
      layout     type slis_layout_alv,
      title      type lvc_title,
*      g_repid      like sy-repid,
*      VARIANT    LIKE DISVARIANT,          "Layout Variant
      sort       type slis_t_sortinfo_alv, "for subtotal
      sort_str   type slis_sortinfo_alv,
*      gt_events type slis_t_event,
      gt_top_of_page type slis_t_listheader. "ALV Top-of-page


*KENNTANG20060420-START
data: lt_error_01  like bapireturn occurs 1 with header line.
data: l_parm_01    type zbc_conv_txt2exl.
*KENNTANG20060420-END

*&---------------------------------------------------------------------*
*
* Selection screen
*
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS :  S_VKORG FOR VBAK-VKORG, "Sales org. 1
                  S_VTWEG FOR VBAK-VTWEG, "Dist. Channel 2
                  S_SPART FOR VBAK-SPART.                   "Div. 3

SELECT-OPTIONS : S_VBELN FOR VBAK-VBELN, "Sales Ord # 4
                 S_POSNR FOR VBAP-POSNR,"Sales Ord Item 5   ITEM
                 S_LPRIO FOR VBAP-LPRIO,"Delivery Priority ( in  ITEM
                                        " Shipping tab ) 6
                 S_AUART FOR VBAK-AUART,"Document type 7
                 S_AUDAT FOR VBAK-AUDAT,"Document date 8
                 S_EDATU FOR VBEP-EDATU,"First date ( requested deliv.
                                                            "date ) 9
                 S_VKBUR FOR VBAK-VKBUR,"Sales office 10
                 S_VKGRP FOR VBAK-VKGRP,"Sales group 11
                 S_KDMAT FOR VBAP-KDMAT,
                               "Cust .Mat.No(assembly lot )12

                 S_WERKS FOR T001W-WERKS,                   "Plant 13

*                   s_matnr1 for mara-matnr value '1',
                                        "Die material no. = ‘1’
                                        " time being hardcoded.
                 S_KUNUM1 FOR VBAK-KUNNR MATCHCODE OBJECT DEBI,
                                                            "Sold to 14
                 S_KUNUM2 FOR VBAK-KUNNR MATCHCODE OBJECT DEBI,
                                                            "Ship to 15
                 S_KUNUM3 FOR VBAK-KUNNR MATCHCODE OBJECT DEBI,
                                                            "Bill to 16
                 S_KUNUM4 FOR VBAK-KUNNR MATCHCODE OBJECT DEBI,
                                                            "Payer 17
                 S_SFABLT FOR AUSP-ATWRT,
                 S_LIFSK  FOR VBAK-LIFSK.
SELECTION-SCREEN END OF BLOCK B1.

SELECTION-SCREEN END   OF SCREEN 100.


SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
*SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS : S_DEVICE FOR MARA-MATNR, "18
                 S_DISPO FOR MARC-DISPO,
                 S_MTART  FOR MARA-MTART, "19
                 S_MATKL  FOR MARA-MATKL, "20
                 S_CLASS  FOR KLAH-CLASS MATCHCODE OBJECT CLAS.
" class number 21
*                    s_atbez  for cabnt-atbez no intervals. "22
" cabnt -> get atinn - int. char
*SELECTION-SCREEN END OF BLOCK B2.
SELECTION-SCREEN END   OF SCREEN 200.

SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.

*selection-screen begin of block b4 with frame title text-005.

*parameters : p_r1 as checkbox default 'X',
*             p_r2 as checkbox,
*             p_r3 as checkbox.

SELECT-OPTIONS : S_WERKS1 FOR MARC-WERKS,
                 S_LGORT1 FOR MARD-LGORT.

SELECT-OPTIONS : S_WERKS2 FOR MARC-WERKS,
                 S_LGORT2 FOR MARD-LGORT.

SELECT-OPTIONS : S_WERKS3 FOR MARC-WERKS,
                 S_LGORT3 FOR MARD-LGORT.
SELECT-OPTIONS : S_WERKS4 FOR MARC-WERKS,
                 S_LGORT4 FOR MARD-LGORT.

SELECT-OPTIONS : S_WERKS5 FOR MARC-WERKS,
                 S_LGORT5 FOR MARD-LGORT.
SELECT-OPTIONS : S_WERKS6 FOR MARC-WERKS,
                 S_LGORT6 FOR MARD-LGORT.

SELECTION-SCREEN END   OF SCREEN 300.

*selection-screen end of block b4.
SELECTION-SCREEN BEGIN OF SCREEN 400 AS SUBSCREEN.
*SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-003.
SELECT-OPTIONS : P_ATWRT1 FOR AUSP-ATWRT MATCHCODE OBJECT DEBI.
" Customer No. 23
*                 P_ATWRT2 FOR AUSP-ATWRT. " Fab lot # 24
*SELECTION-SCREEN END OF BLOCK B3.
SELECTION-SCREEN END   OF SCREEN 400.

SELECTION-SCREEN BEGIN OF SCREEN 500 AS SUBSCREEN.
*SELECTION-SCREEN BEGIN OF BLOCK B5 WITH FRAME TITLE TEXT-006.
PARAMETERS : P_DR RADIOBUTTON GROUP R2 DEFAULT 'X', "Die recv
             P_DNOTR RADIOBUTTON GROUP R2,          "Die not recv
             P_BOTH  RADIOBUTTON GROUP R2,          "Both
             P_RNOTC RADIOBUTTON GROUP R2.          "Rel w/o ZZCL
*SELECTION-SCREEN END OF BLOCK B5.
SELECTION-SCREEN END   OF SCREEN 500.

SELECTION-SCREEN BEGIN OF SCREEN 600 AS SUBSCREEN.
*SELECTION-SCREEN BEGIN OF BLOCK BLOCK4 WITH FRAME TITLE TEXT-004.
PARAMETERS P_VARI LIKE DISVARIANT-VARIANT.
*SELECTION-SCREEN END OF BLOCK BLOCK4.
SELECTION-SCREEN END   OF SCREEN 600.

 

*  Subscreen for Email selection
selection-screen begin of screen  700 as subscreen.

*parameters:    p_send as checkbox no-display.

*parameters     p_send_x radiobutton group radi .
*KENNTANG20060419-START
parameters     p_send_e as checkbox.
*KENNTANG20060419-END

*PARAMETERS     p_indiv  AS CHECKBOX.
selection-screen skip 1.
selection-screen begin of block c1 with frame title text-011.
select-options p_mail01 for adr6-smtp_addr no intervals.
select-options p_dli01  for tzw02-dlinam no intervals no-display.
select-options p_usr01  for usr21-bname no intervals no-display.
parameters     p_sub01  type so_obj_des.
parameters     p_body11 like solisti1-line.
parameters     p_body12 like solisti1-line.
parameters     p_body13 like solisti1-line.
parameters     p_body14 like solisti1-line.
parameters     p_body15 like solisti1-line.
selection-screen end   of block c1.
selection-screen begin of block c2 with frame title text-014.
select-options p_mail02 for adr6-smtp_addr no intervals no-display.
select-options p_dli02  for tzw02-dlinam no intervals no-display.
select-options p_usr02  for usr21-bname no intervals no-display.
parameters     p_sub02  type so_obj_des no-display.
parameters     p_body21 like solisti1-line no-display.
parameters     p_body22 like solisti1-line no-display.
parameters     p_body23 like solisti1-line no-display.
parameters     p_body24 like solisti1-line no-display.
parameters     p_body25 like solisti1-line no-display.
selection-screen end   of block c2.


parameters     p_tose as checkbox.
selection-screen begin of block c3 with frame title text-s40.
parameters:     p_svpath like rlgrap-filename.
parameters:     p_svfile like rlgrap-filename.
selection-screen end of block c3.

selection-screen end   of screen 700.

 


SELECTION-SCREEN BEGIN OF TABBED BLOCK B2 FOR 22 LINES.

SELECTION-SCREEN TAB (20) TEXT-001 USER-COMMAND SEL_01
                  DEFAULT SCREEN 100.
SELECTION-SCREEN TAB (20) TEXT-002 USER-COMMAND SEL_02
                  DEFAULT SCREEN 200.
SELECTION-SCREEN TAB (20) TEXT-003 USER-COMMAND SEL_03
                  DEFAULT SCREEN 300.
SELECTION-SCREEN TAB (20) TEXT-004 USER-COMMAND SEL_04
                  DEFAULT SCREEN 400.
SELECTION-SCREEN TAB (20) TEXT-006 USER-COMMAND SEL_05
                  DEFAULT SCREEN 500.
SELECTION-SCREEN TAB (20) TEXT-007 USER-COMMAND SEL_06
                  DEFAULT SCREEN 600.
SELECTION-SCREEN TAB (20) TEXT-008 USER-COMMAND SEL_07
                  DEFAULT SCREEN 700.

SELECTION-SCREEN END OF BLOCK B2.

SELECT-OPTIONS : S_WERTOT FOR MARC-WERKS NO-DISPLAY,
                 S_LGOTOT FOR MARD-LGORT NO-DISPLAY.

CONSTANTS :
     P_STLAN LIKE MAST-STLAN VALUE '1',     "Bom Usage
     P_STLAL LIKE MAST-STLAL VALUE '01'.    "Alternative Bom

*&---------------------------------------------------------------------*
* ALV list varaibles
*&---------------------------------------------------------------------*
TYPE-POOLS: SLIS.
CONSTANTS:
  GC_FORMNAME_TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      GS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
      GS_KEYINFO  TYPE SLIS_KEYINFO_ALV,
      GT_SORT     TYPE SLIS_T_SORTINFO_ALV,
      GT_SP_GROUP TYPE SLIS_T_SP_GROUP_ALV,
      G_TABNAME_HEADER TYPE SLIS_TABNAME,
      G_TABNAME_ITEM   TYPE SLIS_TABNAME,
      G_VARIANT LIKE DISVARIANT,
      G_EXIT(1) TYPE C,
      G_SAVE(1) TYPE C.

DATA : VARIANTE   LIKE DISVARIANT,
       GX_VARIANT LIKE DISVARIANT.
DATA : G_USER_COMMAND TYPE SLIS_FORMNAME VALUE 'USER_COMMAND',
       GC_FORM_BEFORE_LINE_OUTPUT  TYPE SLIS_FORMNAME
                                   VALUE 'FORM_BEFORE_LINE_OUPUT'.

DATA : GT_EVENTS   TYPE SLIS_T_EVENT.

DATA : P_OPT1, P_OPT2, P_OPT3, P_OPT4, P_OPT5, P_OPT6.


DATA: G_REPID LIKE SY-REPID.
DATA: GT_LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.


INITIALIZATION.
  G_REPID = SY-REPID.
* define keyinfo
*  CLEAR GS_KEYINFO.
*  GS_KEYINFO-HEADER02 = 'FABNO'.
*  GS_KEYINFO-ITEM02   = 'FABNO'.
*  GS_KEYINFO-HEADER01 = 'VBELN'.
*  GS_KEYINFO-ITEM01   = 'VBELN'.
*
  PERFORM E01_FIELDCAT_INIT  USING GT_FIELDCAT[].
  PERFORM E03_EVENTTAB_BUILD USING GT_EVENTS[].
  PERFORM E04_COMMENT_BUILD  USING GT_LIST_TOP_OF_PAGE[].
*  PERFORM E06_T_SORT_BUILD   USING GT_SORT[].

  G_SAVE = 'A'.
  PERFORM VARIANT_INIT.
* Get default variant
  GX_VARIANT = G_VARIANT.
  CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
    EXPORTING
      I_SAVE     = G_SAVE
    CHANGING
      CS_VARIANT = GX_VARIANT
    EXCEPTIONS
      NOT_FOUND  = 2.
  IF SY-SUBRC = 0.
    P_VARI = GX_VARIANT-VARIANT.
  ENDIF.
* IF NOT P_VARI IS INITIAL.
*    PERFORM CHECK_VARIANT.
*  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VARI.
  PERFORM F4_FOR_VARIANT.


* PAI
AT SELECTION-SCREEN.
  PERFORM VALIDATE_PLANT_SLOC.

  PERFORM PAI_OF_SELECTION_SCREEN.

  PERFORM CHECK_RELEASE_OPTIONS.

START-OF-SELECTION.

  PERFORM GET_SEL_OPT.

* get device materials based on selection
  PERFORM GET_DEVICE_MAT.

* get sales order item
  PERFORM GET_SO_ITEMS.

* check production order status for SO item
  PERFORM CHECK_PROD_ORDER_STATUS.

* get planned order
  PERFORM GET_PLANNED_ORDER.

* get item texts for all items
  PERFORM GET_TEXTS.

* get batches for material no. 1
  PERFORM GET_BATCH.

* get batch qty.
*  perform get_batch_qty.

* get customer name
  PERFORM GET_CUSTOMER_NAME.

* get device description
  PERFORM GET_DEVICE_DESC.

* get char values of device
  PERFORM GET_CHAR_VALS.

* generate report
  PERFORM GENERATE_REPORT.


END-OF-SELECTION.

  perForm  send_email.
  Perform  send_to_server.
  PERFORM OUTPUT_LIST.
*&---------------------------------------------------------------------*
*&      Form  send_email
*&---------------------------------------------------------------------*
Form  send_email.


*start add send email screen--------------------------------------*

  perform build_fieldcat using 'ZXSALES_TAB'
                        changing fieldcat.

  perform update_fieldcat.

  perform comment_build using    ''
                          changing gt_top_of_page.

  perform eventtab_build changing gt_events[].

*
  perform file_get_name
              using
                 c_log_name
                 space
                 space
*                   p_dir_name
*                   p_phy_name
              changing
                 l_path.
*
  concatenate l_path 'zrpp001' '_' sy-datum sy-uzeit+0(4) '.XLS' into
 fname.
  perform get_alv_var_fieldcat.


  IF p_send_e = 'X'.
    perform export_file_to_server    using   fname.
    fname1 = fname.
    perform send_mail_via_sap2.


  endif.

endform.                    "send_email

*&---------------------------------------------------------------------*
*&      Form  send_to_server
*&---------------------------------------------------------------------*
Form send_to_server.
  if p_tose = 'X'.
    concatenate p_svpath p_svfile '.XLS' into
    fname2.
*refresh t_output.
*    if sy-batch <> ''.
    perform export_file_to_server using fname2.
*    else.
*      perform download_to_excel       using    fname2
*                            changing p_rcode.
*  endif.
  endif.
endform.                    "send_to_server
* end of add send_to_server

*&---------------------------------------------------------------------*
*&      Form  EXPORT_FILE_TO_SERVER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_L_SUBRC  text
*----------------------------------------------------------------------*
form export_file_to_server  using g_svfile.
  data:l_string(3000) type c,
       name(30)       type c.
  data: wa  type slis_fieldcat_alv, "ALV Display Field Catalog
        wa1 like gt_alv_fc.         "Display variant field
  field-symbols <fs> type any.

  try.
      open dataset g_svfile for output in text mode encoding default.
      if sy-subrc = 0.
        if p_vari is initial.

*get header
          loop at fieldcat into wa.
            assign component wa-fieldname of structure w_output to <fs>.
            <fs> = wa-seltext_l.
*          unassign <fs>.
            concatenate l_string <fs> into l_string
            separated by cl_abap_char_utilities=>horizontal_tab.
          endloop.
          transfer l_string to g_svfile.
          clear l_string.
*get data
          loop at xtab.
            loop at fieldcat into wa.
              assign component wa-fieldname of structure xtab to <fs>.
              name = <fs>.
              concatenate l_string name into l_string
              separated by cl_abap_char_utilities=>horizontal_tab.
            endloop.
            transfer l_string to g_svfile.
            clear l_string.
          endloop.
        else.
*output use display variant

*get header
          loop at gt_alv_fc into wa1.
         read table fieldcat with key  fieldname = wa1-fld_name into wa.
            assign component wa-fieldname of structure w_output to <fs>.
            <fs> = wa-seltext_l.
*          unassign <fs>.
            concatenate l_string <fs> into l_string
            separated by cl_abap_char_utilities=>horizontal_tab.
          endloop.
          transfer l_string to g_svfile.
          clear l_string.
*get data
          loop at xtab.
            loop at gt_alv_fc into wa1.
              assign component wa1-fld_name of structure xtab to <fs>.
              name = <fs>.
              concatenate l_string name into l_string
              separated by cl_abap_char_utilities=>horizontal_tab.
            endloop.
            transfer l_string to g_svfile.
            clear l_string.
          endloop.

        endif.   " end of p_vari is initial
        close dataset g_svfile.
        write:/ 'Export is successful.'.
        write:/ 'Temporary file created on server:', g_svfile.
      else.
        write:/ 'Export is failed.'.
      endif.
    catch cx_root.
      write:/ 'Temporary file writing error on server.'.
  endtry.
endform.                    " EXPORT_FILE_TO_SERVER

*&---------------------------------------------------------------------*
*&      Form  E01_FIELDCAT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_FIELDCAT[]  text
*----------------------------------------------------------------------*
FORM E01_FIELDCAT_INIT  USING E01_LT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
  DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
       EXPORTING
*           I_PROGRAM_NAME         =
            I_INTERNAL_TABNAME     = G_TABNAME_HEADER
            I_STRUCTURE_NAME       = 'ZXSALES_TAB'
*           I_CLIENT_NEVER_DISPLAY = 'X'
       CHANGING
            CT_FIELDCAT            = E01_LT_FIELDCAT[].

*  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
*       EXPORTING
**           I_PROGRAM_NAME         =
*            I_INTERNAL_TABNAME     = G_TABNAME_ITEM
*            I_STRUCTURE_NAME       = 'ZXFAB_TAB'
**           I_CLIENT_NEVER_DISPLAY = 'X'
*       CHANGING
*            CT_FIELDCAT            = E01_LT_FIELDCAT[].


ENDFORM.                    " E01_FIELDCAT_INIT

*&---------------------------------------------------------------------*
*&      Form  E03_EVENTTAB_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_EVENTS[]  text
*----------------------------------------------------------------------*
FORM E03_EVENTTAB_BUILD  USING E03_LT_EVENTS TYPE SLIS_T_EVENT.
  DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
*
  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      I_LIST_TYPE = 1
    IMPORTING
      ET_EVENTS   = E03_LT_EVENTS.
  READ TABLE E03_LT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
                           INTO LS_EVENT.
  IF SY-SUBRC = 0.
    MOVE GC_FORMNAME_TOP_OF_PAGE TO LS_EVENT-FORM.
    APPEND LS_EVENT TO E03_LT_EVENTS.
  ENDIF.

ENDFORM.                    " E03_EVENTTAB_BUILD

*&---------------------------------------------------------------------*
*&      Form  E04_COMMENT_BUILD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_LIST_TOP_OF_PAGE[]  text
*----------------------------------------------------------------------*
FORM E04_COMMENT_BUILD  USING E04_LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
  DATA: LS_LINE TYPE SLIS_LISTHEADER.
*
* Listenüberschrift: Typ H
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'H'.
* LS_LINE-KEY:  not used for this type
  LS_LINE-INFO = TEXT-001.
  APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
* Kopfinfo: Typ S
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'S'.
  LS_LINE-KEY  = TEXT-050.
  LS_LINE-INFO = TEXT-010.
  APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
  LS_LINE-KEY  = TEXT-051.
  APPEND LS_LINE TO E04_LT_TOP_OF_PAGE.
* Aktionsinfo: Typ A
  CLEAR LS_LINE.
  LS_LINE-TYP  = 'A'.
* LS_LINE-KEY:  not used for this type
  LS_LINE-INFO = TEXT-002.
  APPEND LS_LINE TO  E04_LT_TOP_OF_PAGE.

ENDFORM.                    " E04_COMMENT_BUILD

*&---------------------------------------------------------------------*
*&      Form  F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F4_FOR_VARIANT .
  CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
       EXPORTING
            IS_VARIANT          = G_VARIANT
            I_SAVE              = G_SAVE
            I_TABNAME_HEADER    = G_TABNAME_HEADER
            I_TABNAME_ITEM      = G_TABNAME_ITEM
*           it_default_fieldcat =
       IMPORTING
            E_EXIT              = G_EXIT
            ES_VARIANT          = GX_VARIANT
       EXCEPTIONS
            NOT_FOUND = 2.
  IF SY-SUBRC = 2.
    MESSAGE ID SY-MSGID TYPE 'S'      NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    IF G_EXIT = SPACE.
      P_VARI = GX_VARIANT-VARIANT.
    ENDIF.
  ENDIF.

ENDFORM.                    " F4_FOR_VARIANT

*&---------------------------------------------------------------------*
*&      Form  PAI_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM PAI_OF_SELECTION_SCREEN .
  IF NOT P_VARI IS INITIAL.
    MOVE G_VARIANT TO GX_VARIANT.
    MOVE P_VARI TO GX_VARIANT-VARIANT.
    CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
      EXPORTING
        I_SAVE     = G_SAVE
      CHANGING
        CS_VARIANT = GX_VARIANT.
    G_VARIANT = GX_VARIANT.
  ELSE.
    PERFORM VARIANT_INIT.
  ENDIF.

ENDFORM.                    " PAI_OF_SELECTION_SCREEN

*&---------------------------------------------------------------------*
*&      Form  VARIANT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM VARIANT_INIT .
  CLEAR G_VARIANT.
  G_VARIANT-REPORT = G_REPID.

ENDFORM.                    " VARIANT_INIT

*&---------------------------------------------------------------------*
*&      Form  get_device_mat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DEVICE_MAT.

  SELECT C~MATNR C~WERKS C~DISPO
    INTO CORRESPONDING FIELDS OF TABLE XMARC
    FROM MARA AS A
    INNER JOIN MARC AS C ON A~MATNR = C~MATNR
    WHERE A~MATNR IN S_DEVICE
      AND A~MTART IN S_MTART
      AND A~MATKL IN S_MATKL
      AND A~LVORM EQ SPACE
      AND C~WERKS IN S_WERKS
      AND C~DISPO IN S_DISPO
      AND C~LVORM EQ SPACE
    ORDER BY C~MATNR C~WERKS.

  IF S_CLASS[] IS NOT INITIAL.

    SELECT *
    FROM   KLAH
    INTO   TABLE XKLAH
    WHERE  CLASS IN S_CLASS.

    LOOP AT XKLAH.

      CALL FUNCTION 'CLAF_OBJECTS_OF_CLASS'
        EXPORTING
          CLASS                      = XKLAH-CLASS
*          CLASSES                    = ' '
          CLASSTEXT                  = 'N'
          CLASSTYPE                  = '001'
*          FEATURES                   = 'X'
*          LANGUAGE                   = SY-LANGU
*          OBJECT_HIGH                = ' '
*          OBJECT_LOW                 = ' '
*          UPDATE_MODE                = ' '
*          KEY_DATE                   = SY-DATUM
*          INITIAL_CHARACT            = 'X'
*          NO_VALUE_DESCRIPT          =
*          CHANGE_SERVICE_CLF         = 'X'
*          INHERITED_CHAR             = ' '
*          OBJECTTABLE                = ' '
*          CHANGE_NUMBER              = ' '
        TABLES
          T_CLASS                    = XTEMP1
*          T_OBJECTDATA               =
          T_OBJECTS                  = XTEMP2
*          I_SEL_CHARACTERISTIC       =
*          T_NO_AUTH_CHARACT          =
       EXCEPTIONS
         NO_CLASSIFICATION          = 1
         INVALID_CLASS_TYPE         = 2
         OTHERS                     = 3
                .
      IF SY-SUBRC <> 0.
      ENDIF.

*      loop at xtemp2.
*        xobjects = xtemp2.
*        append xobjects.
*      endloop.
      APPEND LINES OF XTEMP2 TO XOBJECTS.

    ENDLOOP.

    SORT XOBJECTS BY OBJEKT.
*   Delete materials that do not belong to class
    LOOP AT XMARC.
      READ TABLE XOBJECTS WITH KEY OBJEKT = XMARC-MATNR BINARY SEARCH.
      IF SY-SUBRC NE 0.
        DELETE XMARC.
      ENDIF.
    ENDLOOP.

  ENDIF.

ENDFORM.                    " get_device_mat

*&---------------------------------------------------------------------*
*&      Form  get_so_items
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_SO_ITEMS.

  RANGES: LR_MATNR FOR MARA-MATNR.

  DATA: L_TABIX     LIKE SY-TABIX,
        L_DELETE(1) TYPE C.

  LR_MATNR-SIGN   = 'I'.
  LR_MATNR-OPTION = 'EQ'.
  LOOP AT XMARC.
    AT END OF MATNR.
      LR_MATNR-LOW = XMARC-MATNR.
      APPEND LR_MATNR.
    ENDAT.
  ENDLOOP.

  SELECT *
    INTO CORRESPONDING FIELDS OF TABLE XVBAP
    FROM VBUP AS A
      INNER JOIN VBAP AS B ON B~VBELN = A~VBELN
                          AND B~POSNR = A~POSNR
      INNER JOIN VBAK AS C ON C~VBELN = B~VBELN
*    FOR ALL ENTRIES IN XMARC
    WHERE A~VBELN IN S_VBELN
      AND A~POSNR IN S_POSNR
*start 008 DEVK922024
*      AND A~GBSTA NE 'C'
      AND ( A~GBSTA NE 'C' or B~ABGRU = '99' )
*end 008 DEVK922024
      AND B~MATNR IN S_DEVICE
      AND B~MATKL IN S_MATKL
      AND B~KDMAT IN S_KDMAT
      AND B~LPRIO IN S_LPRIO
      AND B~WERKS IN S_WERKS
      AND C~VKORG IN S_VKORG    "1
      AND C~VTWEG IN S_VTWEG    "2
      AND C~SPART IN S_SPART    "3
      AND C~AUART IN S_AUART    "7
      AND C~AUDAT IN S_AUDAT    "8
      AND C~VKBUR IN S_VKBUR    "10
      AND C~VKGRP IN S_VKGRP    "11
      AND C~LIFSK IN S_LIFSK
*Start vista "DEVK924134 [S0803001]
      and ( c~AUART <> 'RWRK' or
     ( c~AUART = 'RWRK'  and ( b~PSTYV = 'RWRK' or b~PSTYV = 'RWF' ) ) )
*End   vista "DEVK924134 [S0803001]
    ORDER BY A~VBELN A~POSNR.

* To get order reason from sales order header
  SORT XVBAK BY VBELN.

  IF NOT XVBAP[] IS INITIAL.
    SELECT *
    FROM   VBAK
    INTO   TABLE XVBAK
    FOR    ALL ENTRIES IN XVBAP
    WHERE  VBELN = XVBAP-VBELN.
  ENDIF.

**Add start of DEVK922123
  IF NOT XVBAP[] IS INITIAL.
    SELECT *
    FROM   KONV
    INTO   TABLE XKONV
    FOR    ALL ENTRIES IN XVBAP
    WHERE  KNUMV = XVBAP-KNUMV
      AND  KPOSN = XVBAP-POSNR
      AND  KSTAT = SPACE
      AND  ( KSCHL = 'ASSM' OR KSCHL = 'TSTA' ).

    SORT XKONV BY KNUMV KPOSN.

  ENDIF.
**Add end of DEVK922123

* To get Schedule line category from sales order item

  IF NOT XVBAP[] IS INITIAL.
    LOOP AT XVBAP.
      SELECT SINGLE *
      FROM   VBEP
      WHERE  VBELN = XVBAP-VBELN
      AND    POSNR = XVBAP-POSNR
      AND    ETENR = '0001'.
*         AND ETTYP <> ''.
      IF SY-SUBRC = 0.
        MOVE VBEP-EDATU TO XVBAP-EDATU. "First Date
        IF VBEP-ETTYP = 'CN'.
          MOVE VBEP-ETTYP TO XVBAP-ETTYP. "Sc Line Cat
        ENDIF.
        MODIFY XVBAP.
      ENDIF.
      CLEAR VBEP.
    ENDLOOP.
  ENDIF.

* Filter device
  SORT XVBAP BY MATNR.
  LOOP AT XVBAP.
    L_TABIX = SY-TABIX.
    ON CHANGE OF XVBAP-MATNR.
      READ TABLE XMARC WITH KEY MATNR = XVBAP-MATNR BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        CLEAR L_DELETE.
      ELSE.
        L_DELETE = 'X'.
      ENDIF.
    ENDON.
    IF L_DELETE = 'X'.
      DELETE XVBAP INDEX L_TABIX.
    ENDIF.
  ENDLOOP.

*  partner filter
*   if not s_kunum1-low is initial.
  IF NOT XVBAP[] IS INITIAL.
    SELECT VBELN POSNR KUNNR
      INTO CORRESPONDING FIELDS OF TABLE XVBPA_SP
      FROM VBPA
      FOR ALL ENTRIES IN XVBAP
      WHERE VBELN = XVBAP-VBELN
        AND ( POSNR = XVBAP-POSNR OR
              POSNR = '000000' )
        AND KUNNR IN S_KUNUM1
        AND PARVW = 'AG'.
  ENDIF.
*   endif.

*   if not s_kunum2-low is initial.
  IF NOT XVBAP[] IS INITIAL.
    SELECT VBELN POSNR KUNNR
      INTO CORRESPONDING FIELDS OF TABLE XVBPA_SHP
      FROM VBPA
      FOR ALL ENTRIES IN XVBAP
      WHERE VBELN = XVBAP-VBELN
        AND ( POSNR = XVBAP-POSNR OR
              POSNR = '000000' )
        AND KUNNR IN S_KUNUM2
        AND PARVW = 'WE'.
  ENDIF.
*   endif.

*   if not s_kunum3-low is initial.
  IF NOT XVBAP[] IS INITIAL.
    SELECT VBELN POSNR KUNNR
      INTO CORRESPONDING FIELDS OF TABLE XVBPA_BP
      FROM VBPA
      FOR ALL ENTRIES IN XVBAP
      WHERE VBELN = XVBAP-VBELN
        AND ( POSNR = XVBAP-POSNR OR
              POSNR = '000000' )
        AND KUNNR IN S_KUNUM3
        AND PARVW = 'RE'.
  ENDIF.
*   endif.

*   if not s_kunum4-low is initial.
  IF NOT XVBAP[] IS INITIAL.
    SELECT VBELN POSNR KUNNR
      INTO CORRESPONDING FIELDS OF TABLE XVBPA_PY
      FROM VBPA
      FOR ALL ENTRIES IN XVBAP
      WHERE VBELN = XVBAP-VBELN
        AND ( POSNR = XVBAP-POSNR OR
              POSNR = '000000' )
        AND KUNNR IN S_KUNUM4
        AND PARVW = 'RG'.
  ENDIF.
*     endif.

  SORT XVBAP BY VBELN POSNR.
  SORT XVBPA_SP BY VBELN POSNR.
  SORT XVBPA_SHP BY VBELN POSNR.
  SORT XVBPA_BP BY VBELN POSNR.
  SORT XVBPA_PY BY VBELN POSNR.

  LOOP AT XVBAP.

    IF NOT S_KUNUM1[] IS INITIAL.
      READ TABLE XVBPA_SP WITH KEY VBELN = XVBAP-VBELN
                                   POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC NE 0.
        READ TABLE XVBPA_SP WITH KEY VBELN = XVBAP-VBELN
                                     POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC NE 0.
          DELETE XVBAP.
        ENDIF.
      ENDIF.
    ENDIF.

    IF NOT S_KUNUM2[] IS INITIAL.
      READ TABLE XVBPA_SHP WITH KEY VBELN = XVBAP-VBELN
                                    POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC NE 0.
        READ TABLE XVBPA_SHP WITH KEY VBELN = XVBAP-VBELN
                                      POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC NE 0.
          DELETE XVBAP.
        ENDIF.
      ENDIF.
    ENDIF.

    IF NOT S_KUNUM3[] IS INITIAL.
      READ TABLE XVBPA_BP WITH KEY VBELN = XVBAP-VBELN
                                   POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC NE 0.
        READ TABLE XVBPA_BP WITH KEY VBELN = XVBAP-VBELN
                                     POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC NE 0.
          DELETE XVBAP.
        ENDIF.
      ENDIF.
    ENDIF.

    IF NOT S_KUNUM4[] IS INITIAL.
      READ TABLE XVBPA_PY WITH KEY VBELN = XVBAP-VBELN
                                   POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC NE 0.
        READ TABLE XVBPA_PY WITH KEY VBELN = XVBAP-VBELN
                                     POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC NE 0.
          DELETE XVBAP.
        ENDIF.
      ENDIF.
    ENDIF.

  ENDLOOP.

ENDFORM.                    " get_so_items

*&---------------------------------------------------------------------*
*&      Form  check_prod_order_status
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM CHECK_PROD_ORDER_STATUS.

  DATA : V_CLOSED,
         V_NOTZZCL,
         L_TABIX LIKE SY-TABIX,
         L_START LIKE SY-TABIX,
         L_RSPOS LIKE RESB-RSPOS.

  IF NOT XVBAP[] IS INITIAL.
    SELECT A~KDAUF A~KDPOS A~AUFNR B~OBJNR C~RSNUM b~AEDAT
      INTO CORRESPONDING FIELDS OF TABLE XAUFK
      FROM AFPO AS A
        INNER JOIN AUFK AS B ON B~AUFNR = A~AUFNR
        INNER JOIN AFKO AS C ON C~AUFNR = B~AUFNR
      FOR ALL ENTRIES IN XVBAP
      WHERE A~KDAUF = XVBAP-VBELN
        AND A~KDPOS = XVBAP-POSNR.
    SORT XAUFK BY KDAUF KDPOS AUFNR.
  ENDIF.

  LOOP AT XVBAP.

    L_TABIX = SY-TABIX.
    CLEAR: V_CLOSED, V_NOTZZCL.

    READ TABLE XAUFK WITH KEY KDAUF = XVBAP-VBELN
                              KDPOS = XVBAP-POSNR BINARY SEARCH.
    IF SY-SUBRC = 0.
      L_START = SY-TABIX.

      LOOP AT XAUFK FROM L_START WHERE KDAUF = XVBAP-VBELN
                                   AND KDPOS = XVBAP-POSNR.
        CLEAR : V_LINE, V_USER_LINE.
        CALL FUNCTION 'STATUS_TEXT_EDIT'
          EXPORTING
            CLIENT                  = SY-MANDT
            FLG_USER_STAT           = 'X'
            OBJNR                   = XAUFK-OBJNR
            ONLY_ACTIVE             = 'X'
            SPRAS                   = SY-LANGU
            BYPASS_BUFFER           = 'X'
          IMPORTING
*            ANW_STAT_EXISTING       =
*            E_STSMA                 =
            LINE                    = V_LINE      " TECO CLSD etc.
            USER_LINE               = V_USER_LINE " ZZCL etc.
*            STONR                   =
          EXCEPTIONS
            OBJECT_NOT_FOUND        = 1
            OTHERS                  = 2.
        IF SY-SUBRC = 0.
* status set
          IF V_LINE CS 'DLFL'.
*              v_closed = 'X'.
          ELSE.
            IF V_LINE CS 'TECO' OR V_LINE CS 'CLSD' OR
              ( V_LINE CS 'REL' AND V_LINE NS 'RELR' ).
              V_CLOSED = 'X'.
              IF V_LINE CS 'REL' AND V_USER_LINE NS 'ZZCL'.
                V_NOTZZCL = 'X'.
                XVBAP-AUFNR   = XAUFK-AUFNR.
                XVBAP-SYSSTAT = V_LINE.
                XVBAP-USRSTAT = V_USER_LINE.
                XVBAP-DIEASSIGN = 'X'.
                MODIFY XVBAP INDEX L_TABIX.
              ENDIF.
            ELSE.
              XVBAP-AUFNR   = XAUFK-AUFNR.
              XVBAP-SYSSTAT = V_LINE.
              XVBAP-USRSTAT = V_USER_LINE.
* check if all batch# assigned for die/IC components
              SELECT SINGLE RSPOS INTO L_RSPOS
                FROM RESB
                WHERE RSNUM EQ XAUFK-RSNUM
                  AND XLOEK EQ SPACE
                  AND MATNR IN ('000000000000000001',
                                '000000000000000002',
                                '000000000000000003',
                                '000000000000001000' )
                  AND CHARG EQ SPACE.
              IF SY-SUBRC NE 0.
                XVBAP-DIEASSIGN = 'X'.
              ENDIF.
              MODIFY XVBAP INDEX L_TABIX.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDIF.

    IF P_RNOTC IS INITIAL.
      IF V_CLOSED = 'X'.
        DELETE XVBAP INDEX L_TABIX.
      ENDIF.
    ELSE.
      IF V_NOTZZCL IS INITIAL.
        DELETE XVBAP INDEX L_TABIX.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " check_prod_order_status

*&---------------------------------------------------------------------*
*&      Form  GET_PLANNED_ORDER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_PLANNED_ORDER.

  LOOP AT XVBAP WHERE AUFNR EQ SPACE.
    SELECT SINGLE PLNUM
      INTO XVBAP-PLNUM
      FROM PLAF
      WHERE MATNR = XVBAP-MATNR
        AND PLWRK = XVBAP-WERKS
        AND PAART = 'KD'          "Customer order
        AND KDAUF = XVBAP-VBELN
        AND KDPOS = XVBAP-POSNR
        AND OBART = '1'.          "Planned order
    IF SY-SUBRC = 0.
      MODIFY XVBAP.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " GET_PLANNED_ORDER

*&---------------------------------------------------------------------*
*&      Form  get_texts
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_TEXTS .

  DATA : L_FABLOT LIKE XVBAP-ZZFABLOT1,
         L_WAFID  LIKE XVBAP-ZZWAFID1,
         l_DIEID LIKE VBAP-ZZDIEID1.                        "DEVK921945

  DATA : BEGIN OF XTDLINES OCCURS 0,
           FABLOT LIKE AUSP-ATWRT,
           WAFID  LIKE VBAP-ZZWAFID1,
           DIEID LIKE VBAP-ZZDIEID1,                        "DEVK921945
         END OF XTDLINES.

  LOOP AT XVBAP.

*  clear v_tdname.
*  concatenate xvbap-vbeln xvbap-posnr into v_tdname.
    CLEAR MARA.
    SELECT SINGLE *
    FROM MARA WHERE MATNR = XVBAP-MATNR.

    CLEAR XTDLINES. REFRESH XTDLINES.
*          <<<<<<<<<<<<<<< start comment 19/04/2005 Sastry
*  CALL FUNCTION 'READ_TEXT'
*    EXPORTING
**     CLIENT                        = SY-MANDT
*      ID                            = v_tdtid
*      LANGUAGE                      = sy-langu
*      NAME                          = v_tdname
*      OBJECT                        = v_tdobject
**     ARCHIVE_HANDLE                = 0
**     LOCAL_CAT                     = ' '
**   IMPORTING
**     HEADER                        =
*    TABLES
*      LINES                         = xtdlines
*   EXCEPTIONS
*     ID                            = 1
*     LANGUAGE                      = 2
*     NAME                          = 3
*     NOT_FOUND                     = 4
*     OBJECT                        = 5
*     REFERENCE_CHECK               = 6
*     WRONG_ACCESS_TO_ARCHIVE       = 7
*     OTHERS                        = 8
*            .
*  IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*  ENDIF.
*    <<<<<<<<<comment end 19/04/2005
    DO 10 TIMES VARYING L_FABLOT FROM XVBAP-ZZFABLOT1
                                 NEXT XVBAP-ZZFABLOT2
                VARYING L_WAFID  FROM XVBAP-ZZWAFID1
                                 NEXT XVBAP-ZZWAFID2
*start 00 "DEVK921945
                VARYING L_DIEID  FROM XVBAP-ZZDIEID1
                                 NEXT XVBAP-ZZDIEID2.
*end 00 "DEVK921945
      IF L_FABLOT IS NOT INITIAL.
        CLEAR XTDLINES.
        XTDLINES-FABLOT = L_FABLOT.
        XTDLINES-WAFID  = L_WAFID.
        XTDLINES-DIEID  = L_DIEID.                          "DEVK921945
        APPEND XTDLINES.
      ENDIF.
    ENDDO.

    IF XTDLINES[] IS INITIAL.
      CLEAR XTDLINES.
      APPEND XTDLINES.
    ENDIF.

    LOOP AT XTDLINES.
      CLEAR XFABLOTS.
      XFABLOTS-VBELN = XVBAP-VBELN.
      XFABLOTS-POSNR = XVBAP-POSNR.
      XFABLOTS-FABLOTNO = XTDLINES-FABLOT.
      XFABLOTS-WAFID = XTDLINES-WAFID.
      XFABLOTS-DIEID = XTDLINES-DIEID.                      "DEVK921945
      XFABLOTS-MTART = MARA-MTART.
      IF NOT S_SFABLT[] IS INITIAL.
        CONDENSE XFABLOTS-FABLOTNO.
        IF XFABLOTS-FABLOTNO IN S_SFABLT.
          APPEND XFABLOTS.
        ENDIF.
      ELSE.
        APPEND XFABLOTS.
      ENDIF.
    ENDLOOP.

  ENDLOOP.

ENDFORM.                    " get_texts

*&---------------------------------------------------------------------*
*&      Form  get_batch
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_BATCH.

*  select *
*  from    mcha
*  into    table xmcha
*  where   ( matnr = '000000000000000001'
*            or matnr = '000000000000000002'  " insert 19/04/2005
*            or matnr = '000000000000000003'  "insert 19/04/2005
*            or matnr = '000000000000001000' )
*  and     werks in s_werks.

  SELECT A~MATNR A~WERKS A~CHARG A~LWEDT
         SUM( B~CLABS ) AS CLABS
         SUM( B~CINSM ) AS CINSM
         INTO CORRESPONDING FIELDS OF TABLE XMCHA
    FROM MCHA AS A
      INNER JOIN MCHB AS B ON B~MATNR = A~MATNR
                          AND B~WERKS = A~WERKS
                          AND B~CHARG = A~CHARG
    WHERE ( A~MATNR = '000000000000000001'
            OR A~MATNR = '000000000000000002'
            OR A~MATNR = '000000000000000003'
            OR A~MATNR = '000000000000001000' )
*      AND  B~WERKS IN S_WERTOT
*      AND  B~LGORT IN S_LGOTOT
      AND A~LVORM EQ SPACE
      AND B~LVORM EQ SPACE
      AND ( B~CLABS > 0 OR B~CINSM > 0 )
    GROUP BY A~MATNR A~WERKS A~CHARG A~LWEDT.

  SELECT A~MATNR A~WERKS B~LGORT A~CHARG A~LWEDT
         B~CLABS
         B~CINSM
         INTO CORRESPONDING FIELDS OF TABLE XMCHA_PS
    FROM MCHA AS A
      INNER JOIN MCHB AS B ON B~MATNR = A~MATNR
                          AND B~WERKS = A~WERKS
                          AND B~CHARG = A~CHARG
    WHERE ( A~MATNR = '000000000000000001'
            OR A~MATNR = '000000000000000002'
            OR A~MATNR = '000000000000000003'
            OR A~MATNR = '000000000000001000' )
*      AND  B~WERKS IN S_WERTOT
*      AND  B~LGORT IN S_LGOTOT
      AND A~LVORM EQ SPACE
      AND B~LVORM EQ SPACE
      AND ( B~CLABS > 0 OR B~CINSM > 0 ).
*     GROUP BY A~MATNR A~WERKS A~CHARG A~LWEDT.

  LOOP AT XMCHA.

*    clear mara.
*    select single *
*    from mara where matnr = xmcha-matnr.

    CLEAR V_OBJECT.
    CONCATENATE XMCHA-MATNR XMCHA-WERKS XMCHA-CHARG INTO V_OBJECT.

    CLEAR XCLASS.
    REFRESH XCLASS.
    CLEAR XOBJECTDATA.
    REFRESH XOBJECTDATA.

* get classification values
    CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
      EXPORTING
*        CLASS                      = ' '
*        CLASSTEXT                  = 'X'
        CLASSTYPE                  = '022'
*        CLINT                      = 0
*        FEATURES                   = 'X'
*        LANGUAGE                   = SY-LANGU
        OBJECT                     = V_OBJECT
*        OBJECTTABLE                = ' '
*        KEY_DATE                   = SY-DATUM
        INITIAL_CHARACT            = ''
*        NO_VALUE_DESCRIPT          =
*        CHANGE_SERVICE_CLF         = 'X'
*        INHERITED_CHAR             = ' '
*        CHANGE_NUMBER              = ' '
      TABLES
        T_CLASS                    = XCLASS
        T_OBJECTDATA               = XOBJECTDATA
*        I_SEL_CHARACTERISTIC       =
*        T_NO_AUTH_CHARACT          =
      EXCEPTIONS
        NO_CLASSIFICATION          = 1
        NO_CLASSTYPES              = 2
        INVALID_CLASS_TYPE         = 3
        OTHERS                     = 4.
    IF SY-SUBRC <> 0.
    ENDIF.

    SORT XOBJECTDATA BY ATNAM.

    IF XMCHA-MATNR = '000000000000001000'.
      READ TABLE XOBJECTDATA WITH KEY ATNAM = 'ICB_CUSTOMER'
                             BINARY SEARCH.
    ELSE.
      READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_CUSTOMER'
                             BINARY SEARCH.
    ENDIF.

    IF SY-SUBRC EQ 0.
      XMCHA-DB_CUST = XOBJECTDATA-AUSP1.
    ENDIF.
    IF NOT P_ATWRT1[] IS INITIAL.
      IF NOT XMCHA-DB_CUST IN P_ATWRT1.
        DELETE XMCHA.
        CONTINUE.
      ENDIF.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_FL' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-FABLOTNO = XOBJECTDATA-AUSP1.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'ICB_LOT_NO' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-ICB_LOT_NO = XOBJECTDATA-AUSP1.
    ENDIF.

*    IF NOT P_ATWRT2[] IS INITIAL.
*      IF NOT ( XMCHA-FABLOTNO IN P_ATWRT2 OR
*               XMCHA-ICB_LOT_NO IN P_ATWRT2 ).
    IF NOT S_SFABLT[] IS INITIAL.
      IF NOT ( XMCHA-FABLOTNO IN S_SFABLT OR
               XMCHA-ICB_LOT_NO IN S_SFABLT ).
        DELETE XMCHA.
        CONTINUE.
      ENDIF.
    ENDIF.
    IF XMCHA-FABLOTNO IS INITIAL AND XMCHA-ICB_LOT_NO IS INITIAL.
      DELETE XMCHA.
      CONTINUE.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_WQTY' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_WQTY = XOBJECTDATA-AUSP1.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_DQTY' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_DQTY = XOBJECTDATA-AUSP1.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_WID' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_WID = XOBJECTDATA-AUSP1.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_WSIZE' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_WSIZE = XOBJECTDATA-AUSP1.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_WTHICK' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_WTHICK = XOBJECTDATA-AUSP1.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_BGTHK' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_BGTHK = XOBJECTDATA-AUSP1.
    ENDIF.


    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_RDQ' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_RDQ = XOBJECTDATA-AUSP1.
    ENDIF.

    READ TABLE XOBJECTDATA WITH KEY ATNAM = 'DB_RWQ' BINARY SEARCH.
    IF SY-SUBRC EQ 0.
      XMCHA-DB_RWQ = XOBJECTDATA-AUSP1.
    ENDIF.

*      if xmcha-DB_CUST in p_atwrt1 and xmcha-fablotno in p_atwrt2.
    MODIFY XMCHA.

*      endif.
  ENDLOOP.

ENDFORM.                    " get_batch

*&---------------------------------------------------------------------*
*&      Form  GET_DEVICE_DESC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_DEVICE_DESC.

  IF XVBAP[] IS NOT INITIAL.
    SELECT MATNR SPRAS MAKTX
      INTO CORRESPONDING FIELDS OF TABLE GT_MAKT
      FROM MAKT
      FOR ALL ENTRIES IN XVBAP
      WHERE MATNR = XVBAP-MATNR.
    SORT GT_MAKT BY MATNR SPRAS.
  ENDIF.

* To get BOM status
  IF NOT XVBAP[] IS INITIAL.
    SELECT *
    INTO TABLE XMAST
    FROM MAST
    FOR ALL ENTRIES IN XVBAP
    WHERE MATNR = XVBAP-MATNR
    AND   WERKS = XVBAP-WERKS
    AND   STLAN = P_STLAN
    AND   STLAL = P_STLAL.
  ENDIF.

  IF NOT XMAST[] IS INITIAL.
    SELECT *
    INTO   TABLE XSTKO
    FROM   STKO
    FOR    ALL ENTRIES IN XMAST
    WHERE  STLNR = XMAST-STLNR
    AND    DATUV <= SY-DATUM
    AND    LOEKZ = SPACE.
  ENDIF.

  SORT XSTKO BY STLNR DATUV DESCENDING.


ENDFORM.                    " GET_DEVICE_DESC

*&---------------------------------------------------------------------*
*&      Form  get_char_vals
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_CHAR_VALS.

  DATA: LT_STB    LIKE STPOX OCCURS 0 WITH HEADER LINE.

  SORT XVBAP BY MATNR WERKS.

  LOOP AT XVBAP.

    ON CHANGE OF XVBAP-MATNR.
      CLEAR V_OBJECT.
      V_OBJECT = XVBAP-MATNR.

      CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'
        EXPORTING
*          CLASS                      = ' '
*          CLASSTEXT                  = 'X'
          CLASSTYPE                  = '001'
*          CLINT                      = 0
*          FEATURES                   = 'X'
*          LANGUAGE                   = SY-LANGU
          OBJECT                     = V_OBJECT
*          OBJECTTABLE                = ' '
*          KEY_DATE                   = SY-DATUM
*          INITIAL_CHARACT            = 'X'
*          NO_VALUE_DESCRIPT          =
*          CHANGE_SERVICE_CLF         = 'X'
*          INHERITED_CHAR             = ' '
*          CHANGE_NUMBER              = ' '
        TABLES
          T_CLASS                    = XCLASS
          T_OBJECTDATA               = XOBJECTDATA
*          I_SEL_CHARACTERISTIC       =
*          T_NO_AUTH_CHARACT          =
        EXCEPTIONS
          NO_CLASSIFICATION          = 1
          NO_CLASSTYPES              = 2
          INVALID_CLASS_TYPE         = 3
          OTHERS                     = 4.

      IF SY-SUBRC = 0.
        CLEAR: GT_CHAR.
        GT_CHAR-MATNR = XVBAP-MATNR.

        SORT XOBJECTDATA BY ATNAM.
        READ TABLE XOBJECTDATA WITH KEY ATNAM = 'LEAD' BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_CHAR-ZLEAD = XOBJECTDATA-AUSP1.
        ENDIF.
        READ TABLE XOBJECTDATA WITH KEY ATNAM = 'FOOTPRINT'
                               BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_CHAR-FOOTPR = XOBJECTDATA-AUSP1.
        ENDIF.
        READ TABLE XOBJECTDATA WITH KEY ATNAM = 'PACKAGE_DIMENSION'
                               BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_CHAR-ZDIM  = XOBJECTDATA-AUSP1.
        ENDIF.
        READ TABLE XOBJECTDATA WITH KEY ATNAM = 'PACKAGE_THICKNESS'
                               BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_CHAR-PACKTH = XOBJECTDATA-AUSP1.
        ENDIF.
        READ TABLE XOBJECTDATA WITH KEY ATNAM = 'NUMBER_OF_WIRES'
                               BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_CHAR-NUMWIRE = XOBJECTDATA-AUSP1.
        ENDIF.
        READ TABLE XOBJECTDATA WITH KEY ATNAM = 'CUSTOMER'
                               BINARY SEARCH.
        IF SY-SUBRC EQ 0.
          GT_CHAR-KUNNR = XOBJECTDATA-AUSP1.
        ENDIF.
        CALL FUNCTION 'Z_GET_PACKAGE_NAME'
          EXPORTING
            MATERIAL_NO  = XVBAP-MATNR
          IMPORTING
            PACKAGE_NAME = GT_CHAR-ZPACK.

        APPEND GT_CHAR.

      ENDIF.

    ENDON.

    ON CHANGE OF XVBAP-MATNR OR XVBAP-WERKS.
* Get BOM information
      CLEAR LT_STB. REFRESH LT_STB.
      CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
        EXPORTING
          CAPID                       = SPACE
          DATUV                       = SY-DATUM
*        MKTLS                       = 'X'
          MTNRV                       = XVBAP-MATNR
          STLAL                       = '01'
          STLAN                       = '1'
          WERKS                       = XVBAP-WERKS
        TABLES
          STB                         = LT_STB
        EXCEPTIONS
          OTHERS                      = 9.
      IF SY-SUBRC = 0.
        READ TABLE LT_STB WITH KEY MATKL = 'WAFER'.
        IF SY-SUBRC NE 0.
          XDEVICE-MATNR = XVBAP-MATNR.
          XDEVICE-WERKS = XVBAP-WERKS.
          APPEND XDEVICE.
        ENDIF.
      ENDIF.
    ENDON.

  ENDLOOP.

ENDFORM.                    " get_char_vals

*&---------------------------------------------------------------------*
*&      Form  generate_report
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GENERATE_REPORT.

*data : v_tot_clabs like mchb-clabs.
  DATA: L_FIRST(1) TYPE C,
        L_TABIX LIKE SY-TABIX.

  DATA: LT_MCHA_IC LIKE XMCHA OCCURS 0 WITH HEADER LINE.

  DATA: L_MCHA LIKE XMCHA.

  LT_MCHA_IC[] = XMCHA[].
  DELETE LT_MCHA_IC WHERE MATNR NE '000000000000001000'.
  SORT LT_MCHA_IC BY ICB_LOT_NO.

  DELETE XMCHA WHERE MATNR EQ '000000000000001000'.
  SORT XMCHA BY FABLOTNO.
  SORT XMCHA_PS BY WERKS LGORT CHARG.

  SORT XFABLOTS BY VBELN POSNR.
  SORT XVBAP BY VBELN POSNR.
  SORT XDEVICE BY MATNR WERKS.
  SORT XVBAK BY VBELN.

  IF NOT XVBAK[] IS INITIAL.

    XVBAK_AU[] = XVBAK[].

    LOOP AT XVBAK_AU WHERE AUGRU = SPACE.
      DELETE XVBAK_AU.
    ENDLOOP.

    SORT XVBAK BY AUGRU.
    SELECT *
    FROM TVAUT
    INTO TABLE XTVAUT
    FOR  ALL ENTRIES IN  XVBAK_AU
    WHERE AUGRU = XVBAK_AU-AUGRU.


    LOOP AT XVBAK_AU.
      LOOP AT XTVAUT WHERE AUGRU = XVBAK_AU-AUGRU.
        EXIT.
      ENDLOOP.
      XVBAK_AU-BEZEI = XTVAUT-BEZEI.
      MODIFY XVBAK_AU.
    ENDLOOP.
  ENDIF.


  LOOP AT XFABLOTS.

    CLEAR L_FIRST.
    L_TABIX = SY-TABIX.

    AT NEW POSNR.
      L_FIRST = 'X'.
    ENDAT.

* get die/IC batch
    CLEAR: L_MCHA.
    IF XFABLOTS-MTART  = 'FER3'.
      READ TABLE LT_MCHA_IC WITH KEY ICB_LOT_NO = XFABLOTS-FABLOTNO
                            BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        L_MCHA = LT_MCHA_IC.
        L_MCHA-FABLOTNO = LT_MCHA_IC-ICB_LOT_NO.
      ENDIF.
    ELSE.
      READ TABLE XMCHA WITH KEY FABLOTNO = XFABLOTS-FABLOTNO
                       BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        L_MCHA = XMCHA.
      ENDIF.
    ENDIF.

* get sales order info
    READ TABLE XVBAP WITH KEY VBELN = XFABLOTS-VBELN
                              POSNR = XFABLOTS-POSNR BINARY SEARCH.

    IF SY-SUBRC = 0.

* filter die received / die not received
      IF P_DR EQ 'X'.         " die received
        IF L_MCHA IS INITIAL.
* If device has no wafer in BOM, shown in die received
          READ TABLE XDEVICE WITH KEY MATNR = XVBAP-MATNR
                                      WERKS = XVBAP-WERKS BINARY SEARCH.
          IF SY-SUBRC NE 0.
            DELETE XFABLOTS INDEX L_TABIX.
            CONTINUE.
          ENDIF.
        ENDIF.
      ELSEIF P_DNOTR EQ 'X'.  " die not received.
        IF L_MCHA IS NOT INITIAL.
          DELETE XFABLOTS INDEX L_TABIX.
          CONTINUE.
        ELSE.
* If device has no wafer in BOM, not shown in die not received
          READ TABLE XDEVICE WITH KEY MATNR = XVBAP-MATNR
                                      WERKS = XVBAP-WERKS BINARY SEARCH.
          IF SY-SUBRC = 0.
            DELETE XFABLOTS INDEX L_TABIX.
            CONTINUE.
          ENDIF.
        ENDIF.
      ENDIF.

* get BOM status
      CLEAR XMAST.
      READ TABLE XMAST WITH KEY MATNR = XVBAP-MATNR
                                WERKS = XVBAP-WERKS.
      IF SY-SUBRC EQ 0.
        CLEAR XSTKO.
        READ TABLE XSTKO WITH KEY STLNR = XMAST-STLNR.
      ENDIF.
* get sales order order reason
      CLEAR XVBAK.
      READ TABLE XVBAK WITH KEY VBELN = XVBAP-VBELN.

      CLEAR XTAB.
      MOVE-CORRESPONDING XVBAP TO XTAB.

*start 008 "DEVK922024
      CLEAR XTAB-LIFSK.
      IF XVBAP-LIFSK IS NOT INITIAL.
        SELECT SINGLE * FROM TVLST
                        WHERE LIFSP = XVBAP-LIFSK
                        AND   SPRAS = 'EN'.
        IF SY-SUBRC = 0.
          XTAB-LIFSK = TVLST-VTEXT.
        ENDIF.
      ELSEIF XVBAP-ABGRU IS NOT INITIAL.
        SELECT SINGLE * FROM TVAGT
                        WHERE ABGRU = XVBAP-ABGRU
                        AND   SPRAS = 'EN'.
        IF SY-SUBRC = 0.
          XTAB-LIFSK = TVAGT-BEZEI.
        ENDIF.
      ENDIF.
*end 008 "DEVK922024

** Add start of DEVK922123
* ASSM Unit price
      READ TABLE XKONV WITH KEY KNUMV = XVBAP-KNUMV
                                KPOSN = XVBAP-POSNR
                                KSCHL = 'ASSM'
                                BINARY SEARCH.
      IF SY-SUBRC = 0.
       IF XKONV-KPEIN <> 0.
        XTAB-ASSM = XKONV-KBETR / XKONV-KPEIN.
       ELSE.
        XTAB-ASSM = 0.
       ENDIF.
      ENDIF.
*TSTA Unit price
      READ TABLE XKONV WITH KEY KNUMV = XVBAP-KNUMV
                                KPOSN = XVBAP-POSNR
                                KSCHL = 'TSTA'
                                BINARY SEARCH.
      IF SY-SUBRC = 0.
       IF XKONV-KPEIN <> 0.
        XTAB-TSTA = XKONV-KBETR / XKONV-KPEIN.
       ELSE.
        XTAB-TSTA = 0.
       ENDIF.
      ENDIF.
*ASSM and TSTA total value
      LOOP AT XKONV WHERE KNUMV = XVBAP-KNUMV
                      AND KPOSN = XVBAP-POSNR
                      AND ( KSCHL = 'ASSM' OR KSCHL = 'TSTA' ).

        XTAB-TTLVAL = XTAB-TTLVAL + XKONV-KWERT.

      ENDLOOP.
** Add end of DEVK922123
      XTAB-FABNO = XFABLOTS-FABLOTNO.
      XTAB-WAFID = XFABLOTS-WAFID.
      XTAB-DIEID = XFABLOTS-DIEID.                          "DEVK921945

      CLEAR XVBAK_AU.
      READ TABLE XVBAK_AU WITH KEY VBELN = XVBAK-VBELN.
      XTAB-BEZEI = XVBAK_AU-BEZEI.


      XTAB-STLST = XSTKO-STLST.
* material (device)
      READ TABLE GT_MAKT WITH KEY MATNR = XVBAP-MATNR
                                  SPRAS = SY-LANGU BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-MAKTX = GT_MAKT-MAKTX.
      ELSE.
        READ TABLE GT_MAKT WITH KEY MATNR = XVBAP-MATNR BINARY SEARCH.
        IF SY-SUBRC = 0.
          XTAB-MAKTX = GT_MAKT-MAKTX.
        ENDIF.
      ENDIF.

* to get material controller  <<<<< insert 08/07/2005
      READ TABLE XMARC WITH KEY MATNR = XVBAP-MATNR
                                WERKS = XVBAP-WERKS BINARY SEARCH.
      IF SY-SUBRC EQ 0.
        XTAB-DISPO = XMARC-DISPO.
      ENDIF.                      "<<<<< insert 08/07/05

* get char values of material
      READ TABLE GT_CHAR WITH KEY MATNR = XVBAP-MATNR BINARY SEARCH.
      IF SY-SUBRC = 0.
        MOVE-CORRESPONDING GT_CHAR TO XTAB.
      ENDIF.

* ship to , sold to , bill to, payer
      CLEAR : XVBPA_SP, XVBPA_BP, XVBPA_SHP, XVBPA_PY.
* sold to
      READ TABLE XVBPA_SP WITH KEY VBELN = XVBAP-VBELN
                                   POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KUNUM1 = XVBPA_SP-KUNNR.
      ELSE.
        READ TABLE XVBPA_SP WITH KEY VBELN = XVBAP-VBELN
                                     POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC = 0.
          XTAB-KUNUM1 = XVBPA_SP-KUNNR.
        ENDIF.
      ENDIF.
* shp to
      READ TABLE XVBPA_SHP WITH KEY VBELN = XVBAP-VBELN
                                    POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KUNUM2 = XVBPA_SHP-KUNNR.
      ELSE.
        READ TABLE XVBPA_SHP WITH KEY VBELN = XVBAP-VBELN
                                     POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC = 0.
          XTAB-KUNUM2 = XVBPA_SHP-KUNNR.
        ENDIF.
      ENDIF.
* bp
      READ TABLE XVBPA_BP WITH KEY VBELN = XVBAP-VBELN
                                   POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KUNUM3 = XVBPA_BP-KUNNR.
      ELSE.
        READ TABLE XVBPA_BP WITH KEY VBELN = XVBAP-VBELN
                                     POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC = 0.
          XTAB-KUNUM3 = XVBPA_BP-KUNNR.
        ENDIF.
      ENDIF.
* payer
      READ TABLE XVBPA_PY WITH KEY VBELN = XVBAP-VBELN
                                   POSNR = XVBAP-POSNR BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KUNUM4 = XVBPA_PY-KUNNR.
      ELSE.
        READ TABLE XVBPA_PY WITH KEY VBELN = XVBAP-VBELN
                                     POSNR = '000000' BINARY SEARCH.
        IF SY-SUBRC = 0.
          XTAB-KUNUM4 = XVBPA_PY-KUNNR.
        ENDIF.
      ENDIF.
* get customer name
      READ TABLE GT_KNA1 WITH KEY KUNNR = XTAB-KUNUM1 BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KNAME1 = GT_KNA1-NAME1.
      ENDIF.
      READ TABLE GT_KNA1 WITH KEY KUNNR = XTAB-KUNUM2 BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KNAME2 = GT_KNA1-NAME1.
      ENDIF.
      READ TABLE GT_KNA1 WITH KEY KUNNR = XTAB-KUNUM3 BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KNAME3 = GT_KNA1-NAME1.
      ENDIF.
      READ TABLE GT_KNA1 WITH KEY KUNNR = XTAB-KUNUM4 BINARY SEARCH.
      IF SY-SUBRC = 0.
        XTAB-KNAME4 = GT_KNA1-NAME1.
      ENDIF.

* fablot no
      XTAB-FABLOTNO  = L_MCHA-FABLOTNO.
      XTAB-CHARG     = L_MCHA-CHARG.
      XTAB-LWEDT     = L_MCHA-LWEDT.
      XTAB-DB_CUST   = L_MCHA-DB_CUST.
      XTAB-DB_WQTY   = L_MCHA-DB_WQTY.
      XTAB-DB_DQTY   = L_MCHA-DB_DQTY.
      XTAB-DB_WID    = L_MCHA-DB_WID.
      XTAB-DB_WSIZE  = L_MCHA-DB_WSIZE.
      XTAB-DB_WTHICK = L_MCHA-DB_WTHICK.
      XTAB-DB_BGTHK  = L_MCHA-DB_BGTHK.
      XTAB-DB_RWQ   = L_MCHA-DB_RWQ.
      XTAB-DB_RDQ   = L_MCHA-DB_RDQ.

*      XTAB-AUFNR     = XVBAP-AUFNR.
*      XTAB-STATUS    = XVBAP-STATUS.

      IF L_FIRST IS INITIAL.
        CLEAR XTAB-KWMENG.
      ENDIF.


*     to get batch stock for plant sloc. selections
*      if not S_WERKS1-low is initial.
      IF P_OPT1 = 'X'.
        LOOP AT XMCHA_PS WHERE WERKS IN S_WERKS1
                            AND LGORT IN S_LGORT1
                            AND  CHARG = L_MCHA-CHARG.
          XTAB-ZZDQPL1 = XTAB-ZZDQPL1 + XMCHA_PS-CLABS.
        ENDLOOP.
      ENDIF.
*      if not S_WERKS2-low is initial.
      IF P_OPT2 = 'X'.

        LOOP AT XMCHA_PS WHERE WERKS IN S_WERKS2
                            AND LGORT IN S_LGORT2
                            AND  CHARG = L_MCHA-CHARG.
          XTAB-ZZDQPL2 = XTAB-ZZDQPL2 + XMCHA_PS-CLABS.
        ENDLOOP.
      ENDIF.
*      if not S_WERKS3-low is initial.
      IF P_OPT3 = 'X'.

        LOOP AT XMCHA_PS WHERE WERKS IN S_WERKS3
                            AND LGORT IN S_LGORT3
                            AND  CHARG = L_MCHA-CHARG.

          XTAB-ZZDQPL3 = XTAB-ZZDQPL3 + XMCHA_PS-CLABS.
        ENDLOOP.
      ENDIF.
*      if not S_WERKS4-low is initial.
      IF P_OPT4 = 'X'.

        LOOP AT XMCHA_PS WHERE WERKS IN S_WERKS4
                            AND LGORT IN S_LGORT4
                            AND  CHARG = L_MCHA-CHARG.

          XTAB-ZZDQPL4 = XTAB-ZZDQPL4 + XMCHA_PS-CLABS.
        ENDLOOP.
      ENDIF.
*      if not S_WERKS5-low is initial.
      IF P_OPT5 = 'X'.

        LOOP AT XMCHA_PS WHERE WERKS IN S_WERKS5
                            AND LGORT IN S_LGORT5
                            AND  CHARG = L_MCHA-CHARG.

          XTAB-ZZDQPL5 = XTAB-ZZDQPL5 + XMCHA_PS-CLABS.
        ENDLOOP.
      ENDIF.
*      if not S_WERKS6-low is initial.
      IF P_OPT6 = 'X'.

        LOOP AT XMCHA_PS WHERE WERKS IN S_WERKS6
                            AND LGORT IN S_LGORT6
                           AND  CHARG = L_MCHA-CHARG.
          XTAB-ZZDQPL6 = XTAB-ZZDQPL6 + XMCHA_PS-CLABS.
        ENDLOOP.
      ENDIF.
*      endif.
      APPEND XTAB.

    ENDIF.

  ENDLOOP.

ENDFORM.                    " generate_report

*&---------------------------------------------------------------------*
*&      Form  output_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM OUTPUT_LIST .
  DATA : PROGNAME LIKE SY-REPID,
        TITLE    TYPE LVC_TITLE.

*  sort xtab by werks vbeln posnr.
  MOVE SY-REPID TO PROGNAME.
  TITLE = SY-TITLE.

  GS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.

* display ALV
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
   EXPORTING
     I_GRID_TITLE = TITLE
     IT_FIELDCAT  = GT_FIELDCAT[]           "REPLACED fieldcat
     IS_LAYOUT    = GS_LAYOUT
     I_SAVE       = G_SAVE            "'A'
     IS_VARIANT   = G_VARIANT         "variant
     IT_SORT        = GT_SORT
*     I_CALLBACK_PROGRAM      = repid
*     I_CALLBACK_USER_COMMAND = 'OUTPUTALV_DETAILS'
   TABLES
     T_OUTTAB    = XTAB              "REPLACED itab
   EXCEPTIONS
     PROGRAM_ERROR = 1
     OTHERS        = 2.

*  CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
*       EXPORTING
*            I_CALLBACK_PROGRAM       = PROGNAME
*            I_CALLBACK_PF_STATUS_SET = 'STANDARD'

*
*            IS_LAYOUT                = gs_LAYOUT
*            IT_FIELDCAT              =  GT_FIELDCAT[]
*            IT_EVENTS                = GT_EVENTS[]
*            I_DEFAULT                = 'X'
*            I_SAVE                   = 'A'
*            IS_VARIANT               = VARIANTE
*       TABLES
*            T_OUTTAB                 = Xtab
*       EXCEPTIONS
*            PROGRAM_ERROR            = 1
*            OTHERS                   = 2.

ENDFORM.                    " output_list

*&---------------------------------------------------------------------*
*&      Form  check_release_options
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_RELEASE_OPTIONS .
*  if p_r1 eq space and p_r2 eq space.
*    message e889 with
*     'Please enter either Production ord.'
*     'Not Released or Partially released'.
*  endif.

ENDFORM.                    " check_release_options

*&---------------------------------------------------------------------*
*&      Form  GET_CUSTOMER_NAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM GET_CUSTOMER_NAME .

  DATA: BEGIN OF LT_KUNNR OCCURS 0,
          KUNNR LIKE KNA1-KUNNR,
        END OF LT_KUNNR.

  LOOP AT XVBPA_SP.
    LT_KUNNR-KUNNR = XVBPA_SP-KUNNR.
    COLLECT LT_KUNNR INTO LT_KUNNR.
  ENDLOOP.
  LOOP AT XVBPA_SHP.
    LT_KUNNR-KUNNR = XVBPA_SHP-KUNNR.
    COLLECT LT_KUNNR INTO LT_KUNNR.
  ENDLOOP.
  LOOP AT XVBPA_BP.
    LT_KUNNR-KUNNR = XVBPA_BP-KUNNR.
    COLLECT LT_KUNNR INTO LT_KUNNR.
  ENDLOOP.
  LOOP AT XVBPA_PY.
    LT_KUNNR-KUNNR = XVBPA_PY-KUNNR.
    COLLECT LT_KUNNR INTO LT_KUNNR.
  ENDLOOP.

  IF LT_KUNNR[] IS NOT INITIAL.
    SELECT KUNNR NAME1
      INTO CORRESPONDING FIELDS OF TABLE GT_KNA1
      FROM KNA1
      FOR ALL ENTRIES IN LT_KUNNR
      WHERE KUNNR = LT_KUNNR-KUNNR.
    SORT GT_KNA1 BY KUNNR.
  ENDIF.

ENDFORM.                    " GET_CUSTOMER_NAME
*&---------------------------------------------------------------------*
*&      Form  GET_SEL_OPT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_SEL_OPT .
  CLEAR : P_OPT1, P_OPT2, P_OPT3, P_OPT4, P_OPT5, P_OPT6.

  LOOP AT S_WERKS1 WHERE NOT LOW IS INITIAL.
    LOOP AT S_LGORT1 WHERE NOT LOW IS INITIAL.
      P_OPT1 = 'X'.
    ENDLOOP.
  ENDLOOP.

  LOOP AT S_WERKS2 WHERE NOT LOW IS INITIAL.
    LOOP AT S_LGORT2 WHERE NOT LOW IS INITIAL.
      P_OPT2 = 'X'.
    ENDLOOP.
  ENDLOOP.

  LOOP AT S_WERKS3 WHERE NOT LOW IS INITIAL.
    LOOP AT S_LGORT3 WHERE NOT LOW IS INITIAL.
      P_OPT3 = 'X'.
    ENDLOOP.
  ENDLOOP.

  LOOP AT S_WERKS4 WHERE NOT LOW IS INITIAL.
    LOOP AT S_LGORT4 WHERE NOT LOW IS INITIAL.
      P_OPT4 = 'X'.
    ENDLOOP.
  ENDLOOP.

  LOOP AT S_WERKS5 WHERE NOT LOW IS INITIAL.
    LOOP AT S_LGORT5 WHERE NOT LOW IS INITIAL.
      P_OPT5 = 'X'.
    ENDLOOP.
  ENDLOOP.

  LOOP AT S_WERKS6 WHERE NOT LOW IS INITIAL.
    LOOP AT S_LGORT6 WHERE NOT LOW IS INITIAL.
      P_OPT6 = 'X'.
    ENDLOOP.
  ENDLOOP.

ENDFORM.                    " GET_SEL_OPT
*&---------------------------------------------------------------------*
*&      Form  VALIDATE_PLANT_SLOC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM VALIDATE_PLANT_SLOC .
  IF NOT S_LGORT1-LOW IS INITIAL.
    IF S_WERKS1-LOW IS INITIAL.
      MESSAGE E889 WITH 'Please enter plant and storage location'.
    ENDIF.
  ENDIF.
  IF NOT S_LGORT2-LOW IS INITIAL.
    IF S_WERKS2-LOW IS INITIAL.
      MESSAGE E889 WITH 'Please enter plant and storage location'.
    ENDIF.
  ENDIF.
  IF NOT S_LGORT3-LOW IS INITIAL.
    IF S_WERKS3-LOW IS INITIAL.
      MESSAGE E889 WITH 'Please enter plant and storage location'.
    ENDIF.
  ENDIF.
  IF NOT S_LGORT4-LOW IS INITIAL.
    IF S_WERKS4-LOW IS INITIAL.
      MESSAGE E889 WITH 'Please enter plant and storage location'.
    ENDIF.
  ENDIF.
  IF NOT S_LGORT5-LOW IS INITIAL.
    IF S_WERKS5-LOW IS INITIAL.
      MESSAGE E889 WITH 'Please enter plant and storage location'.
    ENDIF.
  ENDIF.
  IF NOT S_LGORT6-LOW IS INITIAL.
    IF S_WERKS6-LOW IS INITIAL.
      MESSAGE E889 WITH 'Please enter plant and storage location'.
    ENDIF.
  ENDIF.


ENDFORM.                    " VALIDATE_PLANT_SLOC

 

*&---------------------------------------------------------------------*
*&      Form  build_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form build_fieldcat using structure_name type c
                    changing fieldcategory.

  call function 'REUSE_ALV_FIELDCATALOG_MERGE'
 exporting
*   I_PROGRAM_NAME               =
*   I_INTERNAL_TABNAME           =
   i_structure_name             = structure_name
*   I_CLIENT_NEVER_DISPLAY       = 'X'
*   I_INCLNAME                   =
*   I_BYPASSING_BUFFER           =
*   I_BUFFER_ACTIVE              =
    changing
      ct_fieldcat                  = fieldcategory
 exceptions
   inconsistent_interface       = 1
   program_error                = 2
   others                       = 3.
  if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.

endform.                    " build_fieldcat


*&---------------------------------------------------------------------*
*&      Form  update_fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form update_fieldcat.
  data: wa type slis_fieldcat_alv,
        idx type i.

  field-symbols: <fs> type slis_fieldcat_alv.


  read table fieldcat with key  fieldname = 'VKORG' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Sales Org'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'VTWEG' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Distr.Channel'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'SPART' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Division'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'LIFSK' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Delivery block'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'VBELN' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Sales Document'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'POSNR' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Item'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'LPRIO' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Dlv.Prior.'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'AUART' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Sales Doc.Type'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'AUDAT' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Doc. date'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'VKBUR' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Sales office'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'VKGRP' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Sales group'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'BEZEI' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Order reason'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DISPO' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'MRP Ctrl'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'MATNR' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'material'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'MAKTX' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Device name'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KDMAT' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Material customer'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'WERKS' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Plant'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'STLST' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'BOM status'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KUNUM1' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Sold-to pty'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KNAME1' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Customer Name'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KUNUM2' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Ship-to Pty'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KNAME2' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Customer Name'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KUNUM3' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Bill-to Pty'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KNAME3' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Customer Name'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KUNUM4' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Payer'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KNAME4' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Customer Name'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'CHARG' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Batch Number'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'FABNO' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Fab Lot no.'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KUNNR' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Customer Number 1'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'WAFID' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Wafer id'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'BSTNK' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'purchase order no.'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KWMENG' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'purchase order date'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'KWMENG' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Order qty.'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'ZPACK' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Package'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'ZLEAD' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Lead'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'FOOTPR' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Foot Print'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'ZDIM' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Dimension'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'PACKTH' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Package thickness'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'NUMWIRE' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Number of wires'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'DB_CUST' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Customer (Batch)'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'FABLOTNO' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Fab lot#'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_WQTY' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Wafer qty'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_DQTY' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Label Die Qty'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_WID' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Wafer id'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_WSIZE' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Wafer Size'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_WTHICK' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Wafer Thickness'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_BGTHK' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Backgrind thickness'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_RWQ' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Wafer release qty'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DB_RDQ' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Release die qty'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'PLNUM' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Plnd order'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'AUFNR' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Order Number'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'SYSSTAT' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'System status'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'USRSTAT' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'User status'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'DIEASSIGN' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Die/IC Assigned'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'ZZRES5' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Wafer Map'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'LWEDT' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Goods receipt Date'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'ZZDQPL1' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Die Qty Plant Sloc 1'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'ZZDQPL2' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Die Qty Plant Sloc 2'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'ZZDQPL3' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Die Qty Plant Sloc 3'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'ZZDQPL4' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Die Qty Plant Sloc 4'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'ZZDQPL5' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Die Qty Plant Sloc 5'.

    modify fieldcat from wa index idx.
  endif.

  read table fieldcat with key  fieldname = 'ZZDQPL6' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Die Qty Plant Sloc 6'.
    modify fieldcat from wa index idx.
  endif.


  read table fieldcat with key  fieldname = 'ETTYP' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
   wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Shedule line category'.

    modify fieldcat from wa index idx.

  endif.


  read table fieldcat with key  fieldname = 'EDATU' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Schedule line date'.

    modify fieldcat from wa index idx.

  endif.

**Add start of DEVK922123
  read table fieldcat with key  fieldname = 'ASSM' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'ASSM(Unit Price)'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'TSTA' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'TSTA(Unit Price)'.

    modify fieldcat from wa index idx.

  endif.

  read table fieldcat with key  fieldname = 'TTLVAL' into wa.
  if sy-subrc = 0.
    idx = sy-tabix.
    wa-seltext_s = wa-seltext_m = wa-seltext_l = 'Net Value(assm&tsta)'.

    modify fieldcat from wa index idx.

  endif.
**Add end of DEVK922123

**clear the primary key attribute
* and set field names which have no description to use its field name
*  as description
  loop at fieldcat assigning <fs>.
    if not <fs>-key is initial.
      clear <fs>-key.
    endif.

    if <fs>-seltext_l is initial.
      <fs>-seltext_s = <fs>-seltext_m = <fs>-seltext_l = <fs>-fieldname.
    endif.

*    clear the description from DDIC
    clear: <fs>-reptext_ddic , <fs>-ref_tabname.
  endloop.

 

endform.                    " update_fieldcat

*&--------------------------------------------------------------------*
*&      Form  comment_build
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_TITLE    text
*      -->LT_TOP_OF_Ptext
*---------------------------------------------------------------------*
form comment_build using    p_title
                   changing lt_top_of_page type slis_t_listheader.
  data: ls_line type slis_listheader.
  data: ls_rm61r type rm61r,
        ls_tmp1(15) type c, ls_tmp2(15) type c.
*
* Initialisieren
  clear lt_top_of_page[].

* Zeitstempel ermitteln
*  PERFORM get_timestamp CHANGING ls_rm61r-memda
*                                 ls_rm61r-memtm.

* Listenüberschrift: Typ H
  clear ls_line.
  ls_line-typ  = 'H'.
* LS_LINE-KEY:  not used for this type
  if p_title is initial.
    ls_line-info = sy-title.
  else.
    ls_line-info = p_title.
  endif.
  append ls_line to lt_top_of_page.

* Kopfinfo: Typ S
  clear ls_line.
  ls_line-typ  = 'S'.
  ls_line-key  = text-h01.
  ls_line-info = sy-repid.
  append ls_line to lt_top_of_page.

  clear ls_line.
  ls_line-typ  = 'S'.
  ls_line-key  = text-h02.
  ls_line-info = sy-uname.
  append ls_line to lt_top_of_page.

  clear ls_line.
  write sy-datum to ls_tmp1.
  write sy-uzeit to ls_tmp2.
  ls_line-typ       = 'S'.
  ls_line-key       = text-h03.
*  ls_line-info      = sy-datum.
*  ls_line-info+10   = sy-uzeit.
  concatenate ls_tmp1 ls_tmp2 into ls_line-info separated by space.

  append ls_line to lt_top_of_page.


* Aktionsinfo: Typ A
  clear ls_line.
  ls_line-typ  = 'A'.
* LS_LINE-KEY:  not used for this type
  ls_line-info = text-h04.
  write ls_rm61r-memda to ls_line-info+20(10).
  ls_line-info+32(3)  = text-h05.
  ls_line-info+35(5)  = ls_rm61r-memtm.
  ls_line-info+41(4)  = text-h06.
*  APPEND ls_line TO  lt_top_of_page.

endform.                    "COMMENT_BUILD


*&--------------------------------------------------------------------*
*&      Form  eventtab_build
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_ST_EVENTStext
*---------------------------------------------------------------------*
form eventtab_build changing p_st_events  type slis_t_event.

*
  call function 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = p_st_events.

endform.                               " EVENTTAB_BUILD

 

 

*&--------------------------------------------------------------------*
*&      Form  file_get_name
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_LOG_NAME text
*      -->P_DIR_NAME text
*      -->P_PHY_NAME text
*      -->P_PATH_FILEtextE
*---------------------------------------------------------------------*
form file_get_name using    p_log_name p_dir_name p_phy_name
                   changing p_path_file_name.

  clear p_path_file_name.

  call function 'FILE_GET_NAME'
    exporting
*     CLIENT                        = SY-MANDT
      logical_filename              = p_log_name
      operating_system              = 'WN'
      parameter_1                   = p_dir_name
      parameter_2                   = p_phy_name
*     PARAMETER_3                   = ' '
*     USE_PRESENTATION_SERVER       = ' '
*     WITH_FILE_EXTENSION           = ' '
*     USE_BUFFER                    = ' '
*     ELEMINATE_BLANKS              = 'X'
    importing
*     EMERGENCY_FLAG                =
*     FILE_FORMAT                   =
      file_name                     = p_path_file_name
    exceptions
      file_not_found                = 1
      others                        = 2
            .
  if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.

endform.                    " file_get_name


*&---------------------------------------------------------------------*
*&      Form  get_alv_var_fieldcat
*&---------------------------------------------------------------------*
*       get a list of columns which are selected in ALV variant
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_alv_var_fieldcat .

  data: l_ltdxkey type ltdxkey,
        l_ltdxdata type table of ltdxdata with header line,
        lt_discard type table of ltdxdata with header line.


  if p_vari is initial.
    return.
  endif.

  select single report variant from ltdx into
     (l_ltdxkey-report,l_ltdxkey-variant)
           where relid = 'LT' and report = g_repid and variant = p_vari.

  l_ltdxkey-type = 'F'.

 

  call function 'LT_DBDATA_READ_FROM_LTDX'
    exporting
      i_tool             = 'LT'
      is_varkey          = l_ltdxkey
    tables
      t_dbfieldcat       = l_ltdxdata
*   T_DBSORTINFO       =
*   T_DBFILTER         =
*   T_DBLAYOUT         =
    exceptions
      not_found          = 1
      wrong_relid        = 2
      others             = 3
            .
  if sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.


  loop at l_ltdxdata where param = 'NO_OUT' and
                     value = 'X'.

    append l_ltdxdata to lt_discard.

  endloop.

  loop at lt_discard.
    delete l_ltdxdata where key1 = lt_discard-key1.
  endloop.

  loop at l_ltdxdata where param = 'COL_POS'.
    clear gt_alv_fc.
    gt_alv_fc-fld_name = l_ltdxdata-key1.
    gt_alv_fc-col_pos = l_ltdxdata-value.
    append gt_alv_fc.
  endloop.

  sort gt_alv_fc by col_pos.
*  DELETE ADJACENT DUPLICATES FROM GT_ALV_FC COMPARING FLD_NAME.

endform.                    " get_alv_var_fieldcat


*&--------------------------------------------------------------------*
*&      Form  DOWNLOAD_FILE
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_FNAME    text
*      -->P_TABLE    text
*      -->P_RCODE    text
*---------------------------------------------------------------------*
form download_file       using    p_fname
                                  p_table type any table
                         changing p_rcode.
  data: begin of lt_string occurs 0,
          line(2000).
  data: end of lt_string.

  data: l_fname     type string.

  field-symbols: <l_struct>.

  open dataset p_fname for output
               in text mode encoding default.


  if sy-subrc <> 0.
    message e001(00) with 'Error File open error!'.
    p_rcode = '1'.
  else.
    p_rcode = '0'.
  endif.

  loop at p_table assigning <l_struct>.
*    APPEND <l_struct>   TO lt_string.
    transfer <l_struct> to p_fname.
  endloop.

 

*  LOOP AT lt_string.
*    TRANSFER lt_string-line TO p_fname.
*  ENDLOOP.

  close dataset p_fname.

endform.                    "DOWNLOAD_FILE

 

*&---------------------------------------------------------------------*
*&      Form  set_fld_name
*&---------------------------------------------------------------------*
*       FOR field name ending with
*             1)     *PP change it to *P%
*----------------------------------------------------------------------*
*      -->P_L_TAB_NAME  text
*      <--P_O_NAME  text
*----------------------------------------------------------------------*
form set_fld_name  using    p_i_name type c
                   changing p_o_name type c.


  data: len type i,
        len1 type i,
        t_len type i,
        tmp_len type i.

  t_len = strlen( p_i_name ).

  len =  t_len - 2.
  len1 = t_len - 1.


*change field ending with PP to P%

  if  p_i_name+len(2) = 'PP'.
    p_o_name = p_i_name.
    tmp_len = t_len - 1.
    write '%' to p_o_name+tmp_len.

*change field ending with 1 to ' '
  elseif  p_i_name+len1(1) = '1' and p_i_name+0(1) <> 'B'.
    p_o_name = p_i_name.
    tmp_len = t_len - 1.
    write ' ' to p_o_name+len1.

  elseif p_i_name = 'VKORG'.
    p_o_name = 'Sales Org.'.
  elseif p_i_name = 'VTWEG'.
    p_o_name = 'Distri. Channel'.
  elseif p_i_name = 'SPART'.
    p_o_name = 'Division'.
  elseif p_i_name = 'LIFSK'.
    p_o_name = 'Delivery block'.
  elseif p_i_name = 'VBELN'.
    p_o_name = 'Sales Document Number'.
  elseif p_i_name = 'POSNR'.
    p_o_name = 'Item'.
  elseif p_i_name = 'TXNDATE'.
    p_o_name = 'PROC DATE'.
  elseif p_i_name = 'LPRIO'.
    p_o_name = 'Delivery Priority'.
  elseif p_i_name = 'AUART'.
    p_o_name = 'Sales Document Type'.
  elseif p_i_name = 'AUDAT'.
    p_o_name = 'Document date'.
  elseif p_i_name = 'VKBUR'.
    p_o_name = 'Sales office'.
  elseif p_i_name = 'VKGRP'.
    p_o_name = 'Sales group'.
  elseif p_i_name = 'BEZEI'.
    p_o_name = 'Order reason'.
  elseif p_i_name = 'DISPO'.
    p_o_name = 'MRP Controller'.
  elseif p_i_name = 'MATNR'.
    p_o_name = 'Material'.
  elseif p_i_name = 'MAKTX'.
    p_o_name = 'Device'.
  elseif p_i_name = 'KDMAT'.
    p_o_name = 'Material belonging to the customer'.
  elseif p_i_name = 'WERKS'.
    p_o_name = 'Plant'.
  elseif p_i_name = 'STLST'.
    p_o_name = 'BOM status'.
  elseif p_i_name = 'KUNUM1'.
    p_o_name = 'Sold-to pty'.
  elseif p_i_name = 'KNAME1'.
    p_o_name = 'Customer Name'.
  elseif p_i_name = 'KUNUM2'.
    p_o_name = 'Ship-to Pty'.
  elseif p_i_name = 'KNAME2'.
    p_o_name = 'Customer Name'.
  elseif p_i_name = 'KUNUM3'.
    p_o_name = 'Bill-to Pty'.
  elseif p_i_name = 'KNAME3'.
    p_o_name = 'Customer Name'.
  elseif p_i_name = 'KUNUM4'.
    p_o_name = 'Payer'.
  elseif p_i_name = 'KNAME4'.
    p_o_name = 'Customer Name'.
  elseif p_i_name = 'CHARG'.
    p_o_name = 'Batch No.'.
  elseif p_i_name = 'FABNO'.
    p_o_name = 'Fab Lot no.'.
  elseif p_i_name = 'KUNNR'.
    p_o_name = 'Customer Number 1'.
  elseif p_i_name = 'WAFID'.
    p_o_name = 'Wafer id'.
  elseif p_i_name = 'BSTNK'.
    p_o_name = 'Customer purchase order no.'.
  elseif p_i_name = 'BSTDK'.
    p_o_name = 'Customer purchase order date'.
  elseif p_i_name = 'KWMENG'.
    p_o_name = 'Order qty.'.
  elseif p_i_name = 'ZPACK'.
    p_o_name = 'Package'.
  elseif p_i_name = 'ZLEAD'.
    p_o_name = 'Lead'.
  elseif p_i_name = 'FOOTPR'.
    p_o_name = 'Foot Print'.
  elseif p_i_name = 'ZDIM'.
    p_o_name = 'Dimension'.
  elseif p_i_name = 'PACKTH'.
    p_o_name = 'Package thickness'.

  elseif p_i_name = 'NUMWIRE'.
    p_o_name = 'Number of wires'.

  elseif p_i_name = 'DB_CUST'.
    p_o_name = 'Customer(Batch)'.

  elseif p_i_name = 'FABLOTNO'.
    p_o_name = 'Fab lot# (Batch)'.

  elseif p_i_name = 'DB_WQTY'.
    p_o_name = 'Wafer qty'.

  elseif p_i_name = 'DB_DQTY'.
    p_o_name = 'Label Die Qty'.

  elseif p_i_name = 'DB_WID'.
    p_o_name = 'Wafer id'.

  elseif p_i_name = 'DB_WSIZE'.
    p_o_name = 'Wafer Size'.

  elseif p_i_name = 'DB_WTHICK'.
    p_o_name = 'Wafer Thickness'.

  elseif p_i_name = 'DB_BGTHK'.
    p_o_name = 'Backgrind thickness'.
  elseif p_i_name = 'DB_RWQ'.
    p_o_name = 'Wafer release qty'.

  elseif p_i_name = 'DB_RDQ'.
    p_o_name = 'Release die qty'.

  elseif p_i_name = 'PLNUM'.
    p_o_name = 'Planned order'.

  elseif p_i_name = 'AUFNR'.
    p_o_name = 'PO number'.

  elseif p_i_name = 'SYSSTAT'.
    p_o_name = 'System status'.

  elseif p_i_name = 'USRSTAT'.
    p_o_name = 'User status'.

  elseif p_i_name = 'DIEASSIGN'.
    p_o_name = 'Die/IC Assigned'.

  elseif p_i_name = 'ZZRES5'.
    p_o_name = 'Wafer Map'.


  elseif p_i_name = 'LWEDT'.
    p_o_name = 'Date of last goods receipt'.


  elseif p_i_name = 'ZZDQPL1'.
    p_o_name = 'Die Qty Plant Sloc 1'.

  elseif p_i_name = 'ZZDQPL2'.
    p_o_name = 'Die Qty Plant Sloc 2'.


  elseif p_i_name = 'ZZDQPL3'.
    p_o_name = 'Die Qty Plant Sloc 3'.


  elseif p_i_name = 'ZZDQPL4'.
    p_o_name = 'Die Qty Plant Sloc 4'.


  elseif p_i_name = 'ZZDQPL5'.
    p_o_name = 'Die Qty Plant Sloc 5'.


  elseif p_i_name = 'ZZDQPL6'.
    p_o_name = 'Die Qty Plant Sloc 6'.


  elseif p_i_name = 'ETTYP'.
    p_o_name = 'Schedule line category'.


  elseif p_i_name = 'EDATU'.
    p_o_name = 'Schedule line date'.

**Add start of DEVK922123
  elseif p_i_name = 'ASSM'.
    p_o_name = 'ASSM(Unit Price)'.

  elseif p_i_name = 'TSTA'.
    p_o_name = 'TSTA(Unit Price)'.

  elseif p_i_name = 'TTLVAL'.
    p_o_name = 'Net Value(assm&tsta)'.
**Add end of DEVK922123
  else.
    p_o_name = p_i_name.
  endif.

endform.                    " set_fld_name
*************************************************
form download_to_excel       using    p_fname
                         changing p_rcode.
  DATA: wa  TYPE slis_fieldcat_alv. "ALV Display Field Catalog
  FIELD-SYMBOLS <FS> TYPE ANY.
  FIELD-SYMBOLS <FS1> TYPE ANY.
  clear w_output.
  refresh t_output.
  loop at fieldcat into wa.
    ASSIGN COMPONENT wa-fieldname OF STRUCTURE w_output TO <FS>.
    <fs> = wa-seltext_l.
    unassign <fs>.
  endloop.
  append w_output to t_output.
  clear w_output.
  loop at XTAB.
    loop at fieldcat into wa.
      ASSIGN COMPONENT wa-fieldname OF STRUCTURE w_output TO <FS>.
      ASSIGN COMPONENT wa-fieldname OF STRUCTURE XTAB TO <FS1>.
      <fs> = <FS1>.
      unassign <fs>.
      unassign <fs1>.
    endloop.
    append w_output to t_output.
    clear: XTAB,w_output.
  endloop.
*  CALL FUNCTION 'WS_DOWNLOAD'
*    EXPORTING
*      FILENAME = p_fname
*      FILETYPE = 'DAT'
*    TABLES
*      DATA_TAB = t_output.


endform.                    "DOWNLOAD_FILE

*&--------------------------------------------------------------------*
*&      Form  format_file
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_PO_YIELD text
*      -->P_TABNAME  text
*      -->P_FILE_OUT text
*---------------------------------------------------------------------*
form format_file  using    p_po_yield type any table
                           p_tabname type c
                  changing p_file_out type any table.

  field-symbols: <ft> type any table,
                 <fs> type any,
                 <ff> type any.
  data qtytostr(16) type c.
  data wa type slis_fieldcat_alv.

  data: descr_struc_ref type ref to cl_abap_structdescr.

  data: begin of l_tab occurs 100, "hold structure of p_po_yield
          name(20) type c,
        end of l_tab,
        i_name(30) type c, "input field name
        o_name(30) type c. "output field name

  data: begin of l_out occurs 1000,
          l_line(4000) type c,
        end of l_out,
        len type i.
  data:con(60) type c.

** no display variant is choosen
  if gt_alv_fc is initial.

    loop at fieldcat into wa.

      perform set_fld_name using wa-fieldname
                           changing o_name.
      len = strlen( l_out-l_line ).
      concatenate '"' o_name '"' ',' into l_out-l_line+len.
*        concatenate  o_name  ',' into l_out-l_line+len.
      at last.
        "remove extra comma
        len = strlen( l_out-l_line ) - 1.
        write space to l_out-l_line+len.
      endat.

    endloop.

    append l_out.

 

*convert content of ITAB to comma delimited format

    loop at p_po_yield assigning <ft>.

      clear l_out.

      loop at fieldcat into wa.

*      ASSIGN COMPONENT l_tab-name OF STRUCTURE <ft> TO <ff>.
        assign component wa-fieldname  of structure <ft> to <ff>.
        con = <ff>.
        len = strlen( l_out-l_line ).
        concatenate '"' con '"' ',' into l_out-l_line+len.
*         concatenate  con  ',' into l_out-l_line+len.
        at last.
          "remove extra comma
          len = strlen( l_out-l_line ) - 1.
          write space to l_out-l_line+len.
        endat.

      endloop.

      append l_out.

    endloop.


  else.
**    output fields according to display variant
    loop at gt_alv_fc.

      perform set_fld_name using gt_alv_fc-fld_name
                           changing o_name.

      len = strlen( l_out-l_line ).
      concatenate '"' o_name '"' ',' into l_out-l_line+len.
*      concatenate  o_name  ',' into l_out-l_line+len.
      at last.
        "remove extra comma
        len = strlen( l_out-l_line ) - 1.
        write space to l_out-l_line+len.
      endat.

    endloop.

    append l_out.

*convert content of ITAB to comma delimited format
    loop at p_po_yield assigning <ft>.

      clear l_out.

      loop at gt_alv_fc.
*      ASSIGN COMPONENT l_tab-name OF STRUCTURE <ft> TO <ff>.
        assign component gt_alv_fc-fld_name  of structure <ft> to <ff>.

        len = strlen( l_out-l_line ).
        clear qtytostr.
        qtytostr = <ff>.
        concatenate '"' qtytostr '"' ',' into l_out-l_line+len.
*          concatenate '"' <ff> '"' ',' into l_out-l_line+len.
*          concatenate  qtytostr  ',' into l_out-l_line+len.

        unassign <ff>.
        at last.
          "remove extra comma
          len = strlen( l_out-l_line ) - 1.
          write space to l_out-l_line+len.
        endat.

      endloop.

      append l_out.

    endloop.


  endif.

  p_file_out[] = l_out[].
endform.                    " format_file

 

*&--------------------------------------------------------------------*
*&      Form  transform_file_to_attachment
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_SUBRC    text
*---------------------------------------------------------------------*
form transform_file_to_attachment changing p_subrc.

  clear p_subrc.

  call function 'ZBC_PREPARE_MAIL_ATT_DATA'
    EXPORTING
      subject            = gs_subject
    IMPORTING
      document_data      = gs_docdata
    TABLES
      i_contents         = gt_contents
      i_file_path        = gt_files
      i_spool_path       = gt_spool
      o_packing_list     = gt_objpack
      o_contents_bin     = gt_objbin
      o_contents_txt     = gt_objtxt
      o_msgreturn        = gt_msgreturn
    EXCEPTIONS
      file_open_error    = 1
      spool_attach_error = 2
      file_write_error   = 3
      others             = 4.
  if sy-subrc <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.

  p_subrc = sy-subrc.

endform.                    " transform_file_to_attachmen


*&--------------------------------------------------------------------*
*&      Form  send_mail_attachment_sap
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_SUBRC    text
*---------------------------------------------------------------------*
form send_mail_attachment_sap changing p_subrc.

  clear p_subrc.

  call function 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    exporting
      document_data                    = gs_docdata
      put_in_outbox                    = 'X'
      commit_work                      = 'X'
*   IMPORTING
*     SENT_TO_ALL                      =
*     NEW_OBJECT_ID                    =
    tables
      packing_list                     = gt_objpack
*     OBJECT_HEADER                    =
      contents_bin                     = gt_objbin
      contents_txt                     = gt_objtxt
*     CONTENTS_HEX                     =
*     OBJECT_PARA                      =
*     OBJECT_PARB                      =
      receivers                        = gt_reclist
    exceptions
      too_many_receivers               = 1
      document_not_sent                = 2
      document_type_not_exist          = 3
      operation_no_authorization       = 4
      parameter_error                  = 5
      x_error                          = 6
      enqueue_error                    = 7
      others                           = 8
            .
  if sy-subrc <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*     WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.

  p_subrc = sy-subrc.

endform.                    " send_mail_attachment_sap

 


*&--------------------------------------------------------------------*
*&      Form  send_mail_via_sap
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*form send_mail_via_sap.
*
*  data: lt_return    like bapiret2 occurs 0 with header line.
*  data: lt_addsmtp   like bapiadsmtp occurs 0 with header line.
*
*  gs_subject = p_sub01.
*
*  clear  gt_contents.
*  gt_contents-line = p_body11.
*  append gt_contents.
*
*  clear  gt_contents.
*  gt_contents-line = p_body12.
*  append gt_contents.
*
*  clear  gt_contents.
*  gt_contents-line = p_body13.
*  append gt_contents.
*
*  clear  gt_contents.
*  gt_contents-line = p_body14.
*  append gt_contents.
*
*  clear  gt_contents.
*  gt_contents-line = p_body15.
*  append gt_contents.
*
**  Attachment
**  gt_files-pathname    = g_file_excel-target_file.
*  gt_files-pathname    = fname.
*
**  gt_files-doc_type    = 'XLS'.
*  gt_files-doc_type    = 'CSV'.
*
*  gt_files-transf_txt  = space.
*  append gt_files.
*  clear  gt_files.
*
*  perform transform_file_to_attachment changing g_subrc.
*  if g_subrc <> 0.
**MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
**       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
*  else.
*    call function 'BAPI_USER_GET_DETAIL'
*      exporting
*        username             = sy-uname
**     IMPORTING
**       LOGONDATA            =
**       DEFAULTS             =
**       ADDRESS              =
**       COMPANY              =
**       SNC                  =
**       REF_USER             =
**       ALIAS                =
*      tables
**       PARAMETER            =
**       PROFILES             =
**       ACTIVITYGROUPS       =
*        return               = lt_return
**       ADDTEL               =
**       ADDFAX               =
**       ADDTTX               =
**       ADDTLX               =
*        addsmtp              = lt_addsmtp
**       ADDRML               =
**       ADDX400              =
**       ADDRFC               =
**       ADDPRT               =
**       ADDSSF               =
**       ADDURI               =
**       ADDPAG               =
**       ADDCOMREM            =
**       PARAMETER1           =
**       GROUPS               =
*              .
*
*    loop at lt_addsmtp where e_mail ne space.
*      exit.
*    endloop.
*    if sy-subrc eq 0.
*      p_mail01-sign   = 'I'.
*      p_mail01-option = 'EQ'.
*      p_mail01-low    = lt_addsmtp-e_mail.
*      insert p_mail01 index 1.
*    endif.
*
*    sort p_mail01.
*    delete adjacent duplicates from p_mail01.
*
*    loop at p_mail01.
*      gt_reclist-receiver = p_mail01-low.
*      gt_reclist-rec_type = 'U'.
*
*      append gt_reclist.
*      clear  gt_reclist.
*    endloop.
*    if sy-subrc ne 0.
*      gt_reclist-receiver = sy-uname.
*      gt_reclist-rec_type = 'B'.
*
*      append gt_reclist.
*      clear  gt_reclist.
*    endif.
*
*    perform send_mail_attachment_sap changing g_subrc.
*  endif.
*
*endform.                    " send_mail_via_sap

 


*&---------------------------------------------------------------------*
*&      Form  SEND_MAIL_VIA_SAP2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form send_mail_via_sap2 .
  data: lt_return    like bapiret2 occurs 0 with header line.
  data: lt_addsmtp   like bapiadsmtp occurs 0 with header line.

  gs_subject = p_sub01.

  clear  gt_contents.
  gt_contents-line = p_body11.
  append gt_contents.

  clear  gt_contents.
  gt_contents-line = p_body12.
  append gt_contents.

  clear  gt_contents.
  gt_contents-line = p_body13.
  append gt_contents.

  clear  gt_contents.
  gt_contents-line = p_body14.
  append gt_contents.

  clear  gt_contents.
  gt_contents-line = p_body15.
  append gt_contents.

*  Attachment
*  gt_files-pathname    = g_file_excel-target_file.
  gt_files-pathname    = fname1.

  gt_files-doc_type    = 'XLS'.

  gt_files-transf_txt  = space.
  append gt_files.
  clear  gt_files.

  perform transform_file_to_attachment changing g_subrc.
  if g_subrc <> 0.
*MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*       WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  else.
    call function 'BAPI_USER_GET_DETAIL'
      exporting
        username             = sy-uname
*     IMPORTING
*       LOGONDATA            =
*       DEFAULTS             =
*       ADDRESS              =
*       COMPANY              =
*       SNC                  =
*       REF_USER             =
*       ALIAS                =
      tables
*       PARAMETER            =
*       PROFILES             =
*       ACTIVITYGROUPS       =
        return               = lt_return
*       ADDTEL               =
*       ADDFAX               =
*       ADDTTX               =
*       ADDTLX               =
        addsmtp              = lt_addsmtp
*       ADDRML               =
*       ADDX400              =
*       ADDRFC               =
*       ADDPRT               =
*       ADDSSF               =
*       ADDURI               =
*       ADDPAG               =
*       ADDCOMREM            =
*       PARAMETER1           =
*       GROUPS               =
              .

    loop at lt_addsmtp where e_mail ne space.
      exit.
    endloop.
    if sy-subrc eq 0.
      p_mail01-sign   = 'I'.
      p_mail01-option = 'EQ'.
      p_mail01-low    = lt_addsmtp-e_mail.
      insert p_mail01 index 1.
    endif.

    sort p_mail01.
    delete adjacent duplicates from p_mail01.

    loop at p_mail01.
      gt_reclist-receiver = p_mail01-low.
      gt_reclist-rec_type = 'U'.

      append gt_reclist.
      clear  gt_reclist.
    endloop.
    if sy-subrc ne 0.
      gt_reclist-receiver = sy-uname.
      gt_reclist-rec_type = 'B'.

      append gt_reclist.
      clear  gt_reclist.
    endif.

    perform send_mail_attachment_sap changing g_subrc.
  endif.

endform.                    " SEND_MAIL_VIA_SAP2

 

 

原创粉丝点击