Shipment Detail Wip report - ZRSD0099

*-----------------------------------------------------------------------
*
*  Author: Wei_Zhu
*
*  Date: 05/12/2006
*
*  Description: A shipment wip report to includes combine lot detail.
*
*-----------------------------------------------------------------------
*  Last Modified Data: 2007-02-07
*                      2007-03-13
*  Description: 1)Get Rject Qty Form MES
*               2)Add new column with "mes_rej_qty" for itab.
*               3)Add new column with "sublot_qty" fro itab
*  Task#1098     Request#DEVK922169
*                       #DEVK922186
*                       #DEVK922228
*                       #DEVK922256
*                       #DEVK922266
*                       #DEVK922285
*                       #DEVK922289
*                       #DEVK922308
*                       #DEVK922330
*                       #DEVK922332
*-----------------------------------------------------------------------
REPORT  ZRSD0099                                .

type-pools: slis, kkblo.

* Begin #DEVK922169
*----------------------------------------------------------------------*
*  Declarations                                                        *
*----------------------------------------------------------------------*
constants: c_no_plant    type i              value 3.
constants: c_werks_hk    like t001w-werks    value '3000'.
constants: c_werks_dg    like t001w-werks    value '3100'.
constants: c_werks_dg2    like t001w-werks    value '3200'.

include zi03_mes.
* End #DEVK922169

*----------------------------------------------------------------------*
*  Tables                                                              *
*----------------------------------------------------------------------*
tables: likp, vbfa, lips, vbap, kna1, rmclf, vbrp, t005t, adr6,
        tzw02, usr21, sscrfields,
        vbpa,
        vbrk,
        konv,
        afko,
        resb.                                               "DEVK918089

*----------------------------------------------------------------------*
*  Global Data Declaration                                             *
*----------------------------------------------------------------------*
***Internal table for gethering Data
data: begin of itab occurs 0,
      kunag     like likp-kunag,       "Customer
      name1     like kna1-name1,       "Customer Name
      wadat_ist like likp-wadat_ist,   "Ship Out Date
      kunnr     like likp-kunnr,       "Ship to
      ort01     like kna1-ort01,       "City0.
      land1     like kna1-land1,       "country
      landx     like t005t-landx,      "contry description
      landx50   like t005t-landx50,    "contry description
      dwerk     like afpo-dwerk,       "Production Order Plant
      pwerk     like afpo-dwerk,       "Production Order Plant
      twerk     like afpo-dwerk,       "Production Order Plant
      vbeln     like likp-vbeln,       "Delivery No
      posnr     like lips-posnr,       "del item    "003
      matnr     like lips-matnr,       "Material No
      kdmat     like lips-kdmat,       "Lot No
      kcmeng    like lips-kcmeng,      "Lot Qty in DN
      arktx     like lips-arktx,       "Device Name
      vgbel     like lips-vgbel,       "SO number
      vgpos     like lips-vgpos,       "SO item number
      pdim      like ausp-atwrt,       "Package Dimension
      lead      like ausp-atwrt,       "Lead Count
      class     like rmclf-class,      "Class Type
      mtart     like lips-mtart,       "Material Type
      bvbeln    like vbrp-vbeln,       "Billing #
      fkimg     like vbrp-fkimg,       "SO Qty
      wemng     like afpo-wemng,       "Pro Order GR Qty
      count type c,                    "Combine Lot
      objnr     like aufk-objnr,       "Production objeck key
      ptial type c,                    "Partial DN
       line1  like tline-tdline,
       line2  like tline-tdline,
       line3  like tline-tdline,
       line4  like tline-tdline,
       line5  like tline-tdline,       "Customer PR number "DEVK921621
*     add trace code on 2 Nov 2005, larry
      zztrc_cd  like vbap-zztrc_cd,  "Trace code
**start 003
      werks like lips-werks,
      charg like lips-charg,
      assout type p decimals 2,
      testout type p decimals 2,
      fullreel type p decimals 2,
      partial type p decimals 2,
      rejqty type p decimals 2,
**end 003
**start 004
      zzatoat like vbap-zzatoat,
      zzattoa like vbap-zzattoa,
      process(3),    "A, A&T, T
**end 004
      aufnr     like afpo-aufnr,     "prod. order #
      ttl_wgt   like likp-btgew,     "ttl weight
      ttl_cnt   type i,              "ttl carton
      proforma   type vbeln_co,      "proforma invoice#
      netwr     like vbrp-netwr,     "Unit Price Value    "DEVK918089
      ciwr      like vbrp-netwr,     "CI Net Value        "DEVK921838
      fab_lot(20),                                          "DEVK918277
      bstkd     like vbkd-bstkd,
** start 011
      sort2 like adrc-sort2,
** end 011
*start 012
      idtbel     like lips-vgbel,       "SO number of IDT
      idtpos     like lips-vgpos,       "SO item number of IDT
*end 012

*start 014 "DEVK921503
      fablot1   like vbap-zzfablot1,   "First Fablot number in SO
*end 014 "DEVK921503
*start of "DEVK921665
      wire_no(4)  type n,          "Number of wires
      wire_count(15) type n,       "Wire count
*end of "DEVK921665

* Begin #DEVK922169
      comb_lot_no like gt_sql_query_046-FIELD_005,     "Combine_From_Lot
      comb_lot_qty like gt_sql_query_046-FIELD_006,    "Combine_Lot_Qty
      test_in_qty like gt_sql_query_016-FIELD_009,    "test in qty
      test_start_date like gt_sql_query_016-field_007,  "test start date
      mes_rej_qty type p decimals 2,       "mes reject qty
* Begin #DEVK922330
      sublot_qty type p decimals 2,       "sublot qty
* End #DEVK922330
* End #DEVK922169
     end   of itab.

***Internal table for Download Data
data: begin of dtab occurs 0,
      kunag     like likp-kunag,       "Customer
      name1     like kna1-name1,       "Customer Name
      wadat_ist like likp-wadat_ist,   "Ship Out Date
      kunnr     like likp-kunnr,       "Ship to party
      landx50   like t005t-landx50,      "contry description
      count(1),                        "Combine Lot
      vbeln     like likp-vbeln,       "Delivery No
      posnr     like lips-posnr,       "del item    "003
      matnr     like lips-matnr,       "Device Code
      arktx     like lips-arktx,       "Device Name
*start 012
      idtbel     like lips-vgbel,       "SO number of IDT
      idtpos     like lips-vgpos,       "SO item number of IDT
*end 012
      kdmat     like lips-kdmat,       "Assembly Lot No
*      LDMAT     LIKE LIPS-KDMAT,       "LT No
      kcmeng(16)  type c ,             "Lot Qty in DN
      bvbeln    like vbrp-vbeln,       "Billing #
      fkimg(16)  type c  ,             "SO Qty
      class     like rmclf-class,      "Package Type
      lead      like ausp-atwrt,       "Lead Count
      pdim      like ausp-atwrt,       "Package Dimension
      pwerk     like afpo-dwerk,       "Production Order Plant
      twerk     like afpo-dwerk,       "Production Order Plant
      ptial type c,                    "Partial DN
       line1  like tline-tdline,
       line2  like tline-tdline,
       line3  like tline-tdline,
       line4  like tline-tdline,
       line5  like tline-tdline,       "Customer PR number "DEVK921621
*       add trace code on 2 Nov 2005, larry
      zztrc_cd  like vbap-zztrc_cd,  "Trace code
**003
      assout type p decimals 2,
      testout type p decimals 2,
      fullreel(20),
      partial(20),
      rejqty type p decimals 2,
**003
**007
      zzatoat like vbap-zzatoat,
      zzattoa like vbap-zzattoa,
**007
      process(3),
      aufnr     like afpo-aufnr,          "prod. order #
      ttl_wgt   like likp-btgew,
      ttl_cnt   type i,
      proforma   type vbeln_co,
      netwr     like vbrp-netwr,       "Net value    "DEVK918089
      ciwr      like vbrp-netwr,       "CI Net Value        "DEVK921838
      fab_lot(20),                                          "DEVK918277
      bstkd     like vbkd-bstkd,
** start 011
      sort2 like adrc-sort2,
** end 011

*start 014 "DEVK921503
      fablot1   like vbap-zzfablot1,   "First Fablot number in SO
*end 014 "DEVK921503

*start 015 ""DEVK921524
       charg like lips-charg, "Batch
 lfimg like lips-lfimg, "Delivery Qty/Batch Qty
 sublot(20),   "Sub Lot
*end 015 ""DEVK921524
*start of "DEVK921665
      wire_no(4)  type n,          "Number of wires
      wire_count(13) type n,       "Wire count
*end of "DEVK921665

* Begin #DEVK922169
      comb_lot_no like gt_sql_query_046-FIELD_005,     "Combine_From_Lot
      comb_lot_qty like gt_sql_query_046-FIELD_006,    "Combine_Lot_Qty
      test_in_qty like gt_sql_query_016-FIELD_009,    "test in qty
      test_start_date like gt_sql_query_016-field_007,  "test start date
      mes_rej_qty type p decimals 2,       "mes reject qty
* Begin #DEVK922330
      sublot_qty type p decimals 2,       "sublot qty
* End #DEVK922330
* End #DEVK922169
      end   of dtab.
*start 015 ""DEVK921524
data wa_dtab like dtab occurs 0 with header line.
data L_dtab like dtab occurs 0 with header line.
data L_dtab_1 like dtab occurs 0 with header line.

data: begin of t_po occurs 0,
       aufnr like dtab-aufnr,
      end of t_po.

*end 015 ""DEVK921524

data: fieldcat   type slis_t_fieldcat_alv, "ALV Field Catalog
*      FC_STR     TYPE SLIS_FIELDCAT_ALV,
      layout     type slis_layout_alv,
      title      type lvc_title,
      repid      like sy-repid,
      event      type slis_t_event,
      variant    like disvariant,          "Layout Variant
*      SORT       TYPE SLIS_T_SORTINFO_ALV,
*      SORT_STR   TYPE SLIS_SORTINFO_ALV,
      top_of_page type slis_t_listheader. "ALV Top-of-page
***start 001
data: begin of t_sold occurs 0,
         vbeln like vbak-vbeln,
         kunnr like vbak-kunnr,
         name1 like kna1-name1,
      end of t_sold.
data: begin of t_vbpa occurs 0,
        vbeln like vbpa-vbeln,
        posnr like vbpa-posnr,
        kunnr like vbpa-kunnr,
        name1 like kna1-name1,
      end of t_vbpa.
***end 001
data: g_repid like sy-repid.

data:
      g_exit(1) type c,
      g_save(1) type c value 'A',
      g_variant like disvariant,
      l_date1       like sy-datum,   "DEVK919540, DEVK919559
      l_date2       like sy-datum.


**ALV Display variant
data: g_disp_var like disvariant,
      gx_disp_var like disvariant.
* Internal table to store saved display variant
data gt_fcat_sav    type kkblo_fieldcat occurs 0 with header line.
data gt_sort_sav    type kkblo_sortinfo occurs 0 with header line.
data gt_filter_sav  type kkblo_filter   occurs 0 with header line.
data gs_layout_sav  type kkblo_layout.
data gs_layout_lvc  type lvc_s_layo.

 

****For sending email, 30 Nov 2005, larry
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_fname            type char600, "file name with complete path
      g_path             type char600,
      g_subrc            like sy-subrc,
      g_sfile           type char600, "SOURCE file name
      g_tfile           type char600. "TARGET file name

*start 012
data: begin of l_lines occurs 0,
      tdformat like tline-tdformat,
      tdline like tline-tdline,
      end of l_lines.
*end 012

* #DEVK922257 Begin
data: begin of i_tab3 occurs 0,
      aufnr like dtab-aufnr,
      lot_no like gt_sql_query_046A-FIELD_001,
      lot_qty like gt_sql_query_046A-FIELD_002,
      comb_lot_no like gt_sql_query_046-FIELD_005,     "Combine_From_Lot
      comb_lot_qty like gt_sql_query_046-FIELD_006,    "Combine_Lot_Qty
      end of i_tab3.

* #DEVK922257 End

data c_disp(1) type c value 'X'.
data pa_dest type char0128 value
'//tstapp/SAPFile/SHIPMENT_REPORT/SHIPMENT.XLS'.
*----------------------------------------------------------------------*
*  Constants                                                           *
*----------------------------------------------------------------------*
constants: c_matcltype like klah-klart    value '001'.  "Material Class

constants c_log_name     like  filename-fileintern
                         value 'Z_DEFAULT_APP_FILE'.

*----------------------------------------------------------------------*
*  Selection Screen                                                    *
*----------------------------------------------------------------------*

**subscreen 101
selection-screen begin of screen 101 as subscreen.

selection-screen begin of block a with frame title text-s10.
select-options: s_kunag for likp-kunag,     "Customer
                s_name1 for kna1-name1,     "Customer Name.
                s_kunnr for vbpa-kunnr,     "Ship to party
                s_wadat for likp-wadat_ist , "Ship Date
                s_vbeln for likp-vbeln,     "DN Number
                s_werks for lips-werks,
*                s_BVBELN  FOR VBRP-VBELN,       "Billing #
                s_matnr for lips-matnr,       "Material no
                s_arktx for lips-arktx,       "Device Name
                s_kdmat for lips-kdmat,       "Assembly Lot No
                s_mtart for lips-mtart no-display , "Material type
                s_class for  rmclf-class.
* #DEVK922257 Begin by wei_zhu
*parameters: ch_t  as checkbox default 'X'.
*parameters: ch_at as checkbox default 'X'.
*parameters: ch_a  as checkbox default 'X'.
*parameters: ch_fab  as checkbox.                            "DEVK918277
*start 015 ""DEVK921524
*parameters: ch_slot as checkbox.                 "Dispaly sublot
*end 015 ""DEVK921524
* #DEVK922257 end by wei_zhu
selection-screen end of block a.

**SELECTION-SCREEN BEGIN OF BLOCK B WITH FRAME TITLE TEXT-S20.
***parameters p_send as checkbox.
***selection-screen skip.
**PARAMETER: C_DISP AS CHECKBOX DEFAULT 'X' USER-COMMAND INP .*
**PARAMETERS: PA_DEST TYPE CHAR0128    MODIF ID RG1 no-display
**      DEFAULT '//tstapp/SAPFile/SHIPMENT_REPORT/SHIPMENT.XLS'.
**SELECTION-SCREEN END OF BLOCK B.


*****layout
selection-screen begin of block bk1 with frame title text-s20.
parameters: p_vari like disvariant-variant default '/ALL'.
selection-screen end of block bk1.
**The follow is replaced by email function
selection-screen begin of block bk2 with frame title text-s22.
parameters: p_fn type char600.
selection-screen end of block bk2.


selection-screen end of screen 101.

*  Subscreen for Email selection
selection-screen begin of screen 201 as subscreen.
parameters     p_send_x 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.
selection-screen end   of screen 201.


selection-screen begin of tabbed block b3 for 24 lines.
selection-screen tab (20) text-s11 user-command sel_101
                  default screen 101.
selection-screen tab (20) text-s21 user-command sel_201
                  default screen 201.
*SELECTION-SCREEN TAB (20) TEXT-S22 USER-COMMAND SEL_202
*                  DEFAULT SCREEN 202.
*SELECTION-SCREEN TAB (20) TEXT-S23 USER-COMMAND SEL_203
*                  DEFAULT SCREEN 203.
selection-screen end of block b3.

*----------------------------------------------------------------------*
*  AT selection screen                                                 *
*----------------------------------------------------------------------*


*AT SELECTION-SCREEN OUTPUT.
*  PERFORM pbo_of_selection_screen.

 

****Display variant selection dialog box
at selection-screen on value-request for p_vari.
  perform f4_for_variant.
*Checks whether a display variant exists
*start 013
*AT SELECTION-SCREEN.
*  PERFORM PAI_OF_SELECTION_SCREEN.
start-of-selection.
  perform pai_of_selection_screen.
  perform get_checkbox_value.
*end 013


initialization.
** Get default variant

  g_disp_var-report = sy-repid.
  g_disp_var-username = sy-uname.

 

*----------------------------------------------------------------------*
*  Start of Selection                                                  *
*----------------------------------------------------------------------*
start-of-selection.
*Assign FER1, FER2 or  FER3 to S_MTART
  perform get_checkbox_value.
* Select records from DB
  perform select_records.

end-of-selection.
  break garr_ng.
**get a file path for temp file
  perform file_get_name
                 using
                    c_log_name
                    space
                    space
                 changing
                    g_path.

  perform move_data_to_dtab.
  if c_disp = 'X'.
    perform write_result.
  else.
    perform download_to_server.
  endif.

**30 Nov 2005, larry, add send email
  if p_send_x = 'X'. "send email.
*    g_fname = pa_dest.
    break garr_ng.
    perform get_alv_variant_detail using    g_disp_var
                                            fieldcat[]
                                            layout
                                   changing gt_fcat_sav[]
                                            gt_sort_sav[]
                                            gt_filter_sav[]
                                            gs_layout_sav.
    data: cust(5).
    clear cust.
    write dtab-kunag to cust.
*CONCATENATE G_PATH 'ZRSD0008_' SY-DATUM SY-UZEIT '.txt' INTO G_FNAME .
    concatenate g_path 'ZRSD08_' cust  sy-datum+2(6) sy-uzeit into
    g_fname.
    concatenate g_fname '_XLS' into g_sfile.
    concatenate g_fname '.XLS' into g_tfile.

    perform generate_xls using g_sfile.
    perform z_convert_text_to_excel using g_sfile
                                          g_tfile.
    perform send_mail_via_sap  using      g_tfile
                               changing   g_subrc.
  endif.

**The following is replaced by the email function
  if not p_fn is initial.
    perform get_alv_variant_detail using  g_disp_var
                                          fieldcat[]
                                          layout
                                 changing gt_fcat_sav[]
                                          gt_sort_sav[]
                                          gt_filter_sav[]
                                          gs_layout_sav.

    perform generate_xls using p_fn.

  endif.

*&---------------------------------------------------------------------*
*&      Form  SELECT_RECORDS
*&---------------------------------------------------------------------*
*       Select Records
*----------------------------------------------------------------------*

form select_records .
  perform get_shipping_record.
  perform check_so_matnr_type_flag.
  perform get_classification.
***start 001
***already filter the customer name in PERFORM GET_SHIPPING_RECORD
*  PERFORM GET_CUSTOMER_NAME.
***end 001
  perform get_ship_to_city_country.
  perform get_billed_no.
  perform get_prod_order_plant.
  perform get_so_order_qty.
  perform get_prod_order_status.
  perform check_combine_lot.
  perform get_text.
  perform get_info.
*start 011
*# DEVK922257 Begin WEI_ZHU
**********  perform get_ship_to_address.
*# DEVK922257 End WEI_ZHU
*end 011
***start 003
  perform get_batch_info.
***end 003
* #DEVK922256 Begin
*  perform get_prod_order_sublot.
* #DEVK922256 End

* begin #DEVK922169
  perform get_combine_lot_detail.
* end #DEVK922169
endform.                    " SELECT_RECORDS
*&---------------------------------------------------------------------*
*&      Form  GET_SHIPPING_RECORD
*&---------------------------------------------------------------------*
*      Get LIKP and LIPS Shipping record
*----------------------------------------------------------------------*

form get_shipping_record .
***start 001
  data: l_tabix like sy-tabix.
***end 001
*  TABLES : VBPA.                           "DEVK918089
  data: begin of l_itab occurs 0,
        kunag     like likp-kunag,       "Customer
***start 001
        name1     like kna1-name1,
***end 001
        wadat_ist like likp-wadat_ist,   "Ship Out Date
        kunnr     like likp-kunnr,       "Ship to
        vbeln     like likp-vbeln,       "Delivery No
        matnr     like lips-matnr,       "Material No
        kdmat     like lips-kdmat,       "Lot No
        kcmeng    like lips-kcmeng,      "Lot Qty in DN
        arktx     like lips-arktx,       "Device Name
        posnr     like lips-posnr,       "Item Number
        mtart     like lips-mtart,       "Material Type
        vgbel     like lips-vgbel,       "SO number
        vgpos     like lips-vgpos,       "SO item number
**start 003
        werks     like lips-werks,       "Plant
        charg     like lips-charg,       "batch
**end 003
        end   of l_itab.

  select a~wadat_ist a~kunnr a~vbeln
         b~matnr b~kdmat b~kcmeng b~arktx b~posnr
         b~mtart b~vgbel b~vgpos
         into corresponding fields of table l_itab
  from lips as b inner join likp as a
       on  b~vbeln = a~vbeln
  where a~wadat_ist in s_wadat
*   AND    P~KUNNR IN S_KUNAG
   and a~kunnr in s_kunnr                                   "DEVK918089
   and a~vbeln in s_vbeln
   and b~mtart in s_mtart
   and b~matnr in s_matnr
   and b~arktx in s_arktx
   and b~kdmat in s_kdmat
   and b~werks in s_werks
   and b~uecha = ''
   and b~uepos = 0.

  .
****GET bill-to-party
****Search Header first then item

***Header
***start 0001
**get bill to
  select vbeln posnr vbpa~kunnr name1
                     into corresponding fields of table t_vbpa
                     from vbpa inner join kna1 on
                     vbpa~kunnr = kna1~kunnr
                     for all entries in l_itab
                     where vbeln = l_itab-vgbel
                     and parvw = 'RE'.         "bill to
***get sold-to
  select vbeln vbak~kunnr name1
                     into corresponding fields of table t_sold
                     from vbak inner join kna1 on
                     vbak~kunnr = kna1~kunnr
                     for all entries in l_itab
                     where vbeln = l_itab-vgbel.

  sort t_vbpa by vbeln posnr.
  sort t_sold by vbeln.

  loop at l_itab.
    l_tabix = sy-tabix.
    read table t_sold with key vbeln = l_itab-vgbel binary search.
    if sy-subrc = 0.
      if t_sold-kunnr = '0000010000'.
        read table t_vbpa with key vbeln = l_itab-vgbel
                                   posnr = l_itab-vgpos
                                   binary search.
        if sy-subrc = 0.
**filter customer no.
          if not t_vbpa-kunnr in s_kunag.
            delete l_itab index l_tabix.
            continue.
          else.
            l_itab-kunag = t_vbpa-kunnr.
          endif.
**filter customer name
          if not t_vbpa-name1 in s_name1.
            delete l_itab index l_tabix.
            continue.
          else.
            l_itab-name1 = t_vbpa-name1.
          endif.
          modify l_itab index l_tabix.
        else.
          read table t_vbpa with key vbeln = l_itab-vgbel binary search.
          if sy-subrc = 0.
**filter customer no.
            if not t_vbpa-kunnr in s_kunag.
              delete l_itab index l_tabix.
              continue.
            else.
              l_itab-kunag = t_vbpa-kunnr.
            endif.
**filter customer name
            if not t_vbpa-name1 in s_name1.
              delete l_itab index l_tabix.
              continue.
            else.
              l_itab-name1 = t_vbpa-name1.
            endif.
            modify l_itab index l_tabix.
          endif.
        endif.
      else.
**filter customer no.
        if not t_sold-kunnr in s_kunag.
          delete l_itab index l_tabix.
          continue.
        else.
          l_itab-kunag = t_sold-kunnr.
        endif.
**filter customer name
        if not t_sold-name1 in s_name1.
          delete l_itab index l_tabix.
        else.
          l_itab-name1 = t_sold-name1.
        endif.
        modify l_itab index l_tabix.
      endif.
    endif.
  endloop.
*  LOOP AT L_ITAB.
*
*    SELECT SINGLE * FROM VBPA
*        WHERE    VBELN = L_ITAB-VGBEL
*           AND   POSNR = '000000'
*           AND   PARVW = 'RE'
*           AND   KUNNR IN S_KUNAG.
*
*    IF SY-SUBRC = 0.
*      MOVE VBPA-KUNNR TO  L_ITAB-KUNAG.
*    ELSE.
*      L_ITAB-KUNAG = ''.
*    ENDIF.
***item
*    SELECT SINGLE * FROM VBPA
*        WHERE    VBELN = L_ITAB-VGBEL
*           AND   POSNR = L_ITAB-VGPOS
*           AND   PARVW = 'RE'
*           AND   KUNNR IN S_KUNAG.
*    IF SY-SUBRC = 0.
*      MOVE VBPA-KUNNR TO  L_ITAB-KUNAG.
*    ENDIF.
*
*    MODIFY L_ITAB.
*
*  ENDLOOP.

*** end 0001

  loop at l_itab where kunag in s_kunag.
    move-corresponding l_itab to itab.
    append itab.
  endloop.
endform.                    " GET_SHIPPING_RECORD
*&---------------------------------------------------------------------*
*&      Form  GET_CLASSIFICATION
*&---------------------------------------------------------------------*
*       Get Package Type , Dimension and Lead Count
*----------------------------------------------------------------------*

form get_classification .
  data:   lt_class like sclass occurs 0 with header line,
          lt_clobjdat like clobjdat occurs 0 with header line,
          l_objek like ausp-objek.

  loop at itab.
    l_objek = itab-matnr.
* Get the features of characteristics of the material
    call function 'CLAF_CLASSIFICATION_OF_OBJECTS'
      exporting
        classtext       = ''          "No class text
        classtype       = c_matcltype "Material classification
        object          = l_objek     "Material#
        initial_charact = ''          "No initial characteristic
      tables
        t_class         = lt_class
        t_objectdata    = lt_clobjdat
      exceptions
        others          = 4.

    if sy-subrc = 0 .
*      CHECK LT_CLASS-CLASS IN S_CLASS.

      read table lt_class index 1.
      move lt_class-class to itab-class.

      read table lt_clobjdat with key atnam = 'LEAD'.
      if sy-subrc = 0.
        move lt_clobjdat-ausp1 to itab-lead.
*        MODIFY ITAB.
      endif.
      read table lt_clobjdat with key atnam = 'PACKAGE_DIMENSION'.
      if sy-subrc = 0.
        move lt_clobjdat-ausp1 to itab-pdim.
*        MODIFY ITAB.
      endif.
*start of 017 "DEVK921665
      read table lt_clobjdat with key atnam = 'NUMBER_OF_WIRES'.
      if sy-subrc = 0.
        move lt_clobjdat-atflv to itab-wire_no.
        itab-wire_count = lt_clobjdat-atflv * itab-kcmeng.
      endif.
*end of 017 "DEVK921665

      modify itab transporting class lead pdim
                               wire_no wire_count.          "DEVK921665

    endif.

    if not lt_class-class in s_class.
      delete itab.
    endif.
  endloop.

endform.                    " GET_CLASSIFICATION

*&---------------------------------------------------------------------*
*&      Form  PBO_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*       Control attributes of selection screen fields
*----------------------------------------------------------------------*
form pbo_of_selection_screen.
  if c_disp = ''.
    loop at screen.
      if screen-group1 = 'RG1'.
        screen-input = '1'.
        screen-invisible   = '0'.

        modify screen.
      endif.
    endloop.
  else.
    loop at screen.
      if screen-group1 = 'RG1'.
        screen-input = '0'.
        screen-invisible   = '1'.
        modify screen.
      endif.
    endloop.
  endif.
endform.                    "PBO_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*&      Form  WRITE_RESULT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form write_result .
* Display report
  perform output_to_alv.
*  LOOP AT DTAB.
*    WRITE: /1 DTAB-KUNAG,
*           12 DTAB-WADAT_IST,
*           24 DTAB-KUNNR,
*           38 DTAB-VBELN,
*           52 DTAB-MATNR,
**           52 ITAB-KDMAT,
*           64 DTAB-KCMENG.
**           83 DTAB-POSNR,
**           90 DTAB-MTART.
**           120 ITAB-FKIMG.
*  ENDLOOP.
endform.                    " WRITE_RESULT
*&---------------------------------------------------------------------*
*&      Form  GET_BILLED_QTY
*&---------------------------------------------------------------------*
*       Get Billed No
*----------------------------------------------------------------------*

form get_billed_no .
  loop at itab.

    select vbeln
      from vbfa
      into itab-bvbeln
     where vbelv = itab-vbeln
       and  posnv = itab-posnr
       and  ( vbtyp_n = 'M' or
              vbtyp_n = '5' ).
*      IF SY-SUBRC = 0.
*        MOVE VBFA-RFMNG TO ITAB-FKIMG.
*      ELSE.
*        ITAB-FKIMG = 0.
*      ENDIF.
      modify itab.

    endselect.

  endloop.

endform.                    " GET_BILLED_NO
*&---------------------------------------------------------------------*
*&      Form  CHECK_COMBINE_LOT
*&---------------------------------------------------------------------*
*       Check whether a DN contains more than one lot number (Y/N)
*----------------------------------------------------------------------*

form check_combine_lot .

  data: l_count type i.

  loop at itab.

    clear l_count.
    select count( distinct kdmat ) into l_count
       from lips where vbeln = itab-vbeln.

    if l_count > 1.
      move 'Y' to itab-count.
    else.
      move 'N' to itab-count.
    endif.
**Uncomment this section if number of LOTs is needed to display
*    IF SY-SUBRC = 0.
*      MOVE COUNT TO ITAB-COUNT.
    modify itab transporting count.
*    ENDIF.
  endloop.
endform.                    " CHECK_COMBINE_LOT
*&---------------------------------------------------------------------*
*&      Form  GET_CHECKBOX_VALUE
*&---------------------------------------------------------------------*
*       Assign Material Type according to Checkbox value
*----------------------------------------------------------------------*

form get_checkbox_value .

* #DEVK922257 Begin by wei_zhu
*  if ch_t = 'X'.
    s_mtart-sign   = 'I'.
    s_mtart-option = 'EQ'.
    s_mtart-low    = 'FER3'.
    append s_mtart.
*  endif.

*  if ch_at = 'X' or ch_a = 'X'.
    s_mtart-sign   = 'I'.
    s_mtart-option = 'EQ'.
    s_mtart-low    = 'FER2'.
    append s_mtart.
    s_mtart-sign   = 'I'.
    s_mtart-option = 'EQ'.
    s_mtart-low    = 'FER1'.
    append s_mtart.
*    S_MTART-SIGN   = 'I'.
*    S_MTART-OPTION = 'EQ'.
*    S_MTART-LOW    = 'FER4'.
*    APPEND S_MTART.
*    S_MTART-SIGN   = 'I'.
*    S_MTART-OPTION = 'EQ'.
*    S_MTART-LOW    = 'FER5'.
*    APPEND S_MTART.
*  endif.
* #DEVK922257 End by wei_zhu

  clear s_mtart.
endform.                    " GET_CHECKBOX_VALUE
*&---------------------------------------------------------------------*
*&      Form  CHECK_SO_MATNR_TYPE_Flag
*&---------------------------------------------------------------------*
*      Check if Material Type had changed in SO
*----------------------------------------------------------------------*

form check_so_matnr_type_flag .

***The following process will only affect FER1 and FER2 MType
***Material Type will be changed if the flag is checked
  loop at itab where mtart <>  'FEM3'.
    select single * from vbap where vbeln = itab-vgbel
                                and posnr = itab-vgpos.

    if sy-subrc = 0.

      if vbap-zzatoat = 'X'.
        itab-mtart = 'FER2'.
        modify itab transporting mtart.
      endif.
      if vbap-zzattoa = 'X'.
        itab-mtart = 'FER1'.
        modify itab transporting mtart.
      endif.
    endif.

  endloop.
**Delete 'FER1 if Check Boxs is not selected.
* #DEVK922257 Begin by wei_zhu
*  if ch_a = ''.
*    loop at itab where mtart = 'FER1'.
*      delete itab.
*    endloop.
*  endif.
* #DEVK922257 Begin by wei_zhu
**Delete 'FER2 if Check Boxs is not selected.

* #DEVK922257 Begin by wei_zhu
*  if ch_at = ''.
*    loop at itab where mtart = 'FER2'.
*      delete itab.
*    endloop.
*  endif.
* #DEVK922257 Begin by wei_zhu
endform.                    " CHECK_SO_MATNR_TYPE_Flag
*&---------------------------------------------------------------------*
*&  FORM GET_SHIP_TO_ADDRESS
*&---------------------------------------------------------------------*
*     Get ship to address information
*----------------------------------------------------------------------*
form get_ship_to_address.
  loop at itab.
    select single adrc~sort2
    from kna1
    join adrc on kna1~adrnr = adrc~addrnumber
    into itab-sort2
    where kna1~kunnr = itab-kunnr.

    if sy-subrc = 0.
      modify itab transporting sort2.
    endif.

  endloop.

endform.                    "GET_SHIP_TO_ADDRESS

*&---------------------------------------------------------------------*
*&      Form  MOVE_DATA_TO_DTAB
*&---------------------------------------------------------------------*
*       Move data from itab to dtab for download use
*----------------------------------------------------------------------*

form move_data_to_dtab .

  data l_ship_to type kunnr.

  call function 'CONVERSION_EXIT_ALPHA_INPUT'
    exporting
      input  = '88888'
    importing
      output = l_ship_to.

* #DEVK922257 Begin by wei_zhu
**start 015 "DEVK921524
*  if ch_slot = ''.
**end 015   "DEVK921524
*
*    loop at itab.
*
***  Remove records' whose ship-to = 88888, larry, 26 Oct 2005
*      if itab-kunnr <> l_ship_to.
***start 004
*        case itab-matnr+11(1).
*          when '1'.
*            itab-process = 'A'.
*          when '2'.
*            itab-process = 'A&T'.
*          when '3'.
*            itab-process = 'T'.
*        endcase.
*        if itab-zzatoat = 'X'.
*          itab-process = 'A&T'.
*        endif.
*        if itab-zzattoa = 'X'.
*          itab-process = 'A'.
*        endif.
***end 004
*        move-corresponding itab to dtab.
*
*        append dtab.
*      endif.
*    endloop.
**start 015 "DEVK921524
*  else.
* #DEVK922257 End by wei_zhu

    loop at wa_dtab.
      if wa_dtab-kunnr <> l_ship_to.
        case itab-matnr+11(1).
          when '1'.
            wa_dtab-process = 'A'.
          when '2'.
            wa_dtab-process = 'A&T'.
          when '3'.
            wa_dtab-process = 'T'.
        endcase.
        if wa_dtab-zzatoat = 'X'.
          wa_dtab-process = 'A&T'.
        endif.
        if wa_dtab-zzattoa = 'X'.
          wa_dtab-process = 'A'.
        endif.
        move-corresponding wa_dtab to dtab.
        append dtab.
        clear dtab.
      endif.
    endloop.
* #DEVK922257 Begin by wei_zhu
*  endif.
* #DEVK922257 end by wei_zhu

*END 015 "DEVK921524
******************************
  clear:l_dtab[].
  APPEND LINES OF dtab  to l_dtab.
  clear:dtab[].
  clear:dtab.
  loop at  l_dtab.
      dtab-aufnr   = l_dtab-aufnr.    "Proder no
      dtab-kunag   = l_dtab-kunag.    "Customer
      dtab-name1   = l_dtab-name1.    "Customer Name
      dtab-line5    = l_dtab-line5.
      dtab-REJQTY   = l_dtab-REJQTY.
      dtab-WADAT_IST = l_dtab-WADAT_IST. "Ship Out Date
      dtab-PROFORMA  = l_dtab-PROFORMA.
      dtab-LFIMG     = l_dtab-LFIMG. "Delivery Qty/Batch Qty
      dtab-sublot    = l_dtab-sublot.
      dtab-zztrc_cd  = l_dtab-zztrc_cd.
      collect  dtab.
      t_po-aufnr   = l_dtab-aufnr.    "Proder no
      collect  t_po.
  endloop.

 

******************************


* Begin #DEVK922169
*    loop at gt_sql_query_046
*            where FIELD_011 = itab-kdmat.
*            itab-comb_lot_no = gt_sql_query_046-FIELD_005.
*            itab-comb_lot_qty = gt_sql_query_046-FIELD_006.
*
*    endloop.

* #DEVK922256 Begin
  perform get_prod_order_sublot.
* #DEVK922256 End

loop at gt_sql_query_046A.
     read table gt_sql_query_046
     with key FIELD_011 = gt_sql_query_046A-FIELD_002.
     if sy-subrc = 0.
      i_tab3-aufnr = gt_sql_query_046A-FIELD_001.
      i_tab3-comb_lot_no = gt_sql_query_046-FIELD_005.
      i_tab3-comb_lot_qty = gt_sql_query_046-FIELD_006.
      i_tab3-lot_no = gt_sql_query_046A-FIELD_002.
      i_tab3-lot_qty = gt_sql_query_046A-FIELD_003.
      append i_tab3.
     else.
      i_tab3-aufnr = gt_sql_query_046A-FIELD_001.
      i_tab3-lot_no = gt_sql_query_046A-FIELD_002.
      i_tab3-lot_qty = gt_sql_query_046A-FIELD_003.
      append i_tab3.
     endif.
* #DEVK922285 Begin
     clear i_tab3.
* #DEVK922285 End
 endloop.


***********************

data: l_aufnr like afko-aufnr.
loop  at dtab.
   l_aufnr =  dtab-aufnr.
   SHIFT l_aufnr LEFT DELETING LEADING '0'.
  read table i_tab3 with
    key  aufnr = l_aufnr lot_no = dtab-sublot.
  if sy-subrc = 0.
    loop at i_tab3 where
      aufnr = l_aufnr and  lot_no = dtab-sublot.
      dtab-testout = i_tab3-lot_qty.
      dtab-comb_lot_no = i_tab3-comb_lot_no.
      dtab-comb_lot_qty = i_tab3-comb_lot_qty.
      append dtab to l_dtab_1.
      clear dtab.
    endloop.
  else.
    append dtab to l_dtab_1.
    read table i_tab3 with key  aufnr = l_aufnr.
    if sy-subrc = 0.
       loop at i_tab3 where  aufnr = l_aufnr.
          dtab-sublot   = i_tab3-lot_no.
          dtab-testout  = i_tab3-lot_qty.
          dtab-comb_lot_no = i_tab3-comb_lot_no.
          dtab-comb_lot_qty = i_tab3-comb_lot_qty.
          dtab-lfimg        = 0.
          append dtab to l_dtab_1.
          clear dtab.
       endloop.
    endif.

  endif.
endloop.

delete gt_sql_query_016 where field_009 < '8000'.
data:l_aufnr_1 like l_dtab_1-aufnr.
sort gt_sql_query_016 by
     field_002 field_004 field_005.
loop at l_dtab_1.
     l_aufnr_1 = l_dtab_1-aufnr.
     SHIFT l_aufnr_1 LEFT DELETING LEADING '0'.
     read table gt_sql_query_016
     with key field_002 = l_aufnr_1
          field_004 = l_dtab_1-sublot.
     if sy-subrc = 0.
          l_dtab_1-test_in_qty = gt_sql_query_016-field_009.
          l_dtab_1-test_start_date = gt_sql_query_016-field_007.
          modify l_dtab_1.
     endif.

endloop.

***********************
* #DEVK922289 Begin
loop at l_dtab_1.
    l_aufnr_1 = l_dtab_1-aufnr.
     SHIFT l_aufnr_1 LEFT DELETING LEADING '0'.
     read table gt_sql_query_046B
     with key field_001 = l_aufnr_1
          field_002 = l_dtab_1-sublot.
     if sy-subrc = 0.
          l_dtab_1-mes_rej_qty = gt_sql_query_046B-field_003.
          modify l_dtab_1.
     endif.
* #DEVK922330 Begin
     l_dtab_1-sublot_qty = l_dtab_1-testout - l_dtab_1-comb_lot_qty.
     modify l_dtab_1.
* #DEVK922330 End
endloop.
* #DEVK922289 End

 

clear dtab[].
dtab[] = l_dtab_1[].
* End #DEVK922169
endform.                    " MOVE_DATA_TO_DTAB
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_TO_SERVER
*&---------------------------------------------------------------------*
*       Download data to server
*----------------------------------------------------------------------*

form download_to_server .
*  DATA: FNAME LIKE SY-LISEL .
***for Function Call
*  CALL FUNCTION 'EXCEL_OLE_STANDARD_DAT'
*    EXPORTING
*      FILE_NAME                 = FNAME
*    TABLES
*      DATA_TAB                  = DTAB
**      FIELDNAMES                = FIELDNAME
*    EXCEPTIONS
*      FILE_NOT_EXIST            = 1
*      FILENAME_EXPECTED         = 2
*      COMMUNICATION_ERROR       = 3
*      OLE_OBJECT_METHOD_ERROR   = 4
*      OLE_OBJECT_PROPERTY_ERROR = 5
*      INVALID_FILENAME          = 6
*      INVALID_PIVOT_FIELDS      = 7
*      DOWNLOAD_PROBLEM          = 8
*      OTHERS                    = 9.
  data:l_netwr(16).                                         "DEVK918089
  data: fname like rlgrap-filename.
**open datasets method
*  FNAME = '//tstapp/SAPFile/SHIPMENT_REPORT/SHIPMENT.XLS'.
*  fname = pa_dest.
  concatenate g_path 'shipment.xls' into fname.
***open Datasets

***add trace code , 2 nov 2005 , larry

  data: hextab(1).
  class cl_abap_char_utilities definition load.
  data: record(1000) type c.
  hextab = cl_abap_char_utilities=>horizontal_tab.

*
  open dataset fname for output
                      in text mode encoding default .
  if sy-subrc = 0.
    loop at dtab.
      l_netwr = dtab-netwr.                                 "DEVK918089

**  Build output Header with TAB delimiter
      at first.
        concatenate
            'Customer'    'Customer Name' 'Ship Out Date'
            'Production Plant' 'Test Plant'
            'Ship to ' 'Ship to Location' 'Ship to Adress'
            'Partial Shipment'
            'Combine Lot' 'Delivery No'     'Device Code'
            'Device Name' 'Process'
            'Customer LOT No' 'Release Qty'
            'Lot Qty in DN'   'Invoice#'
            'Package Type' 'Lead Count' 'Package Dimension'
            'MAWB#' 'HAWB#' 'Carrier/Flight' 'Forwarder'
            'Trace Code'
            'Assembly Out Qty' 'Test Out Qty' 'Full Reel Qty' "004
            'Partial Qty' 'Reject Qty'  "004
            'ATOAT' 'ATTOA' "007
            'Net Value'
            'NVIDIA Batch Number/ Fab Lot #'
         into  record separated by hextab.
        transfer: record to fname.
      endat.

       
*Customer        Customer Name       ship Out Date 
*Production Plant Test Plant
*Ship to location Partial Shipment
*Combine Lot         Delivery Note #     Device Code
*Device Name        Customer Lot No     ReleaseQty
*Lot Qty in DN       Invoice # 
*Package Type        Lead Count Package Dimension

** Build output record with TAB delimiter
            data: dtab_assout(20) type c,
                  dtab_testout(20) type c,
                  dtab_rejqty(20) type c.

                  dtab_assout = dtab-assout.
                  dtab_testout = dtab-testout.
                  dtab_rejqty = dtab-rejqty.


            concatenate dtab-kunag   dtab-name1  dtab-wadat_ist
                        dtab-pwerk   dtab-twerk
                        dtab-kunnr   dtab-landx50 dtab-sort2 dtab-ptial
                        dtab-count   dtab-vbeln  dtab-matnr
                        dtab-arktx   dtab-process
                        dtab-kdmat  dtab-fkimg
                       dtab-kcmeng   dtab-bvbeln
                       dtab-class    dtab-lead   dtab-pdim
                       dtab-line1    dtab-line2  dtab-line3  dtab-line4
                       dtab-zztrc_cd
                       dtab_assout dtab_testout dtab-fullreel  "004
                       dtab-partial dtab_rejqty  "004
                       dtab-zzatoat dtab-zzattoa "007
                       l_netwr                              "DEVK918089
                       dtab-fab_lot
                       into record separated by hextab.

      transfer: record to fname.
    endloop.

    close dataset fname.
    write:/ 'Shipment Report is generated to', fname.
  else.
    write:/ 'Error File open error!'.
  endif.

endform.                    " DOWNLOAD_TO_SERVER
*&---------------------------------------------------------------------*
*&      Form  GET_CUSTOMER_NAME
*&---------------------------------------------------------------------*
*       Get Customer Name
*----------------------------------------------------------------------*

form get_customer_name .
  loop at itab.
    select single name1 from kna1 into itab-name1
                   where kunnr = itab-kunag
                    and  name1 in s_name1.
    if sy-subrc = 0.
      modify itab.
    else.
      delete itab.
    endif.
  endloop.
endform.                    " GET_CUSTOMER_NAME
*&---------------------------------------------------------------------*
*&      Form  GET_PROD_ORDER_PLANT
*&---------------------------------------------------------------------*
*       Get Production Order's Plant and GR Qty
*----------------------------------------------------------------------*

form get_prod_order_plant .
***internal TABLE to get sub-delivery Item
  data: begin of l_tab occurs 0,
        vbeln like vbap-vbeln,
        posnr like vbap-posnr,
        dwerk like afpo-dwerk,
        matnr like afpo-matnr,
        wemng like afpo-wemng,
        aufnr like afpo-aufnr,                              "DEVK918277
        end of l_tab.

  loop at itab.
*   "TESTING CASE AT CLIENT 600
*    ITAB-VGBEL = '0005000287' .
*    ITAB-VGPOS = '00010'.
    select single dwerk wemng aufnr
    from afpo into (itab-dwerk, itab-wemng, itab-aufnr )
                           where kdauf = itab-vgbel
                             and kdpos = itab-vgpos.
    if sy-subrc = 0.
* #DEVK922257 Begin by wei_zhu
*      if ch_fab eq 'X'.                                     "DEVK918277
*        perform get_fab_lot.
*      endif.
* #DEVK922257 End by wei_zhu

      case itab-mtart.
        when 'FER3'.
          itab-pwerk = ''.
          itab-twerk = itab-dwerk.
          modify  itab .
        when others.
          itab-pwerk = itab-dwerk.
          itab-twerk = ''.
          modify  itab .
      endcase.

    else.
*    "FOR MATERIAL ITEM IS DUMMY WITH ITEM CAT = 'X'
*    "GO TO ITS SUBITEM TO GET PRODUCTION ORDER PLANT
      refresh l_tab. clear l_tab.
      select vbeln posnr from vbap into table l_tab
                            where uepos = itab-vgpos
                             and  vbeln = itab-vgbel.

      loop at l_tab.

        select  dwerk matnr wemng aufnr
        from afpo into (l_tab-dwerk, l_tab-matnr, l_tab-wemng,
                        l_tab-aufnr )                       "DEVK918277
                        where kdauf = l_tab-vbeln
                          and kdpos = l_tab-posnr.
          modify l_tab.
        endselect .
      endloop.

      loop at l_tab.
        if l_tab-matnr+11(1) = '1'.
          move l_tab-dwerk to itab-pwerk.
          move l_tab-wemng to itab-wemng.
          modify itab.
        elseif l_tab-matnr+11(1) = '3'.
          move l_tab-dwerk to itab-twerk.
          modify itab.
        endif.
* Add begin of   "DEVK918277
        itab-aufnr = l_tab-aufnr.
* #DEVK922257 Begin by wei_zhu
*        if ch_fab eq 'X'.
*          perform get_fab_lot.
*        endif.
* #DEVK922257 End by wei_zhu
        clear itab-aufnr.
* Add end of   "DEVK918277
      endloop.
    endif.
  endloop.
endform.                    " GET_PROD_ORDER_PLANT
*&---------------------------------------------------------------------*
*&      Form  GET_SO_ORDER_QTY
*&---------------------------------------------------------------------*
*       Get SO Order Quantity
*----------------------------------------------------------------------*

form get_so_order_qty .
  loop at itab.
* 2 Nov 2005, add trace code , larry
    select single kwmeng zztrc_cd zzatoat zzattoa zzfablot1
    into (itab-fkimg, itab-zztrc_cd, itab-zzatoat, itab-zzattoa,
*start 014 "DEVK921503
           itab-fablot1)
*end 014  "DEVK921503
    from vbap
    where vbeln = itab-vgbel
    and posnr = itab-vgpos.

    if sy-subrc = 0.
      modify itab transporting fkimg zztrc_cd zzatoat zzattoa
*start 014 "DEVK921503
                               fablot1.
*end 014  "DEVK921503
    endif.
    select single bstkd into itab-bstkd
    from vbkd
    where vbeln = itab-vgbel
      and posnr = itab-vgpos.
    if sy-subrc = 0.
      modify itab transporting bstkd.
    else.
      select single bstkd into itab-bstkd
      from vbkd
      where vbeln = itab-vgbel
        and posnr = '000000'.
      if sy-subrc = 0.
        modify itab transporting bstkd.
      endif.
    endif.
  endloop.
endform.                    " GET_SO_ORDER_QTY
*&---------------------------------------------------------------------*
*&      Form  GET_PROD_ORDER_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

form get_prod_order_status .

***internal TABLE to get sub-delivery Item
  data: begin of l_tab occurs 0,
        vbeln like vbap-vbeln,
        posnr like vbap-posnr,
        objnr like aufk-objnr,
        end of l_tab.

  loop at itab.
*   "TESTING CASE AT CLIENT 600
*    ITAB-VGBEL = '0005000287' .
*    ITAB-VGPOS = '00010'.
    select single objnr
    from aufk into itab-objnr
              where kdauf = itab-vgbel
              and kdpos = itab-vgpos.
    if sy-subrc = 0.
      modify  itab.
    else.
*    "FOR MATERIAL ITEM IS DUMMY WITH ITEM CAT = 'X'
*    "GO TO ITS SUBITEM TO GET PRODUCTION ORDER PLANT
      refresh l_tab. clear l_tab.
      select vbeln posnr from vbap into table l_tab
                            where uepos = itab-vgpos
                             and  vbeln = itab-vgbel.
      sort l_tab by posnr.
      loop at l_tab.

        select  objnr
        from aufk into l_tab-objnr
                        where kdauf = l_tab-vbeln
                          and kdpos = l_tab-posnr.
          modify l_tab.
        endselect .
      endloop.

      loop at l_tab.
        move l_tab-objnr to itab-objnr.
        modify itab.
      endloop.

    endif.
  endloop.

***Get status using objeck key.
  data it_jest like jest occurs 0 with header line.
  tables jest.
***
*  BREAK GARR_NG.
  loop at itab.
    if not itab-objnr is initial.
      select  single * from jest into  it_jest
        where objnr = itab-objnr
*        AND   STAT = 'I0045'.
          and ( stat = 'I0009' or
                stat = 'I0012' or
                stat = 'I0045' )
          and inact ne 'X'.

      if sy-subrc = 4.
        itab-ptial = 'Y'.
        modify itab.
      elseif itab-wemng > itab-kcmeng.
***Compare with prod Order GR Qty with DN qty
*** if GR qty is > DN qty  then it is partial DN
        itab-ptial = 'Y'.
        modify itab.
      else.
        itab-ptial = 'N'.
        modify itab.
      endif.
    endif.
  endloop.
endform.                    " GET_PROD_ORDER_STATUS
*&---------------------------------------------------------------------*
*&      Form  GET_SHIP_TO_CITY_COUNTRY
*&---------------------------------------------------------------------*
*      Get ship to address.
*----------------------------------------------------------------------*

form get_ship_to_city_country .
  loop at itab.
    select single ort01 land1 from kna1 into (itab-ort01, itab-land1)
                   where kunnr = itab-kunnr.

    if sy-subrc = 0.
      select single * from t005t where spras = 'EN'
                                and    land1 = itab-land1.
      if sy-subrc = 0.
        move t005t-landx to itab-landx.
        if itab-ort01 = ''.
          move  itab-landx to itab-landx50.
        else.
          concatenate itab-ort01 ',' itab-landx into itab-landx50
          separated by space.
        endif.
        modify itab.
      endif.
    endif.
  endloop.
endform.                    " GET_SHIP_TO_CITY_COUNTRY
*&---------------------------------------------------------------------*
*&      Form  GET_TEXT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

form get_text .
  data: l_name like thead-tdname,
        l_name2 like thead-tdname,                          "DEVK921621
        l_id   like thead-tdid,
        l_line like tline-tdline,
        l_hdr(6)  type n value 0,
        l_lifnr like lfa1-lifnr .

  loop at itab.
    move itab-vbeln to l_name.
    move itab-vgbel to l_name2.                             "DEVK921621

**get proforma invoice #, by item level then header if not found
    clear vbfa.
    select single  vbfa~vbeln  vbfa~posnn
*      INTO ITAB-PROFORMA
      into (vbfa-vbeln,vbfa-posnn)
      from vbfa
      join vbrk on vbrk~vbeln = vbfa~vbeln " by robbin
     where vbelv = itab-vbeln
     and   posnv = itab-posnr
     and   vbtyp_n = 'U'
     and   vbrk~rfbsk <> 'E'.             " by robbin

 


    if sy-subrc <> 0.
      select single vbfa~vbeln vbfa~posnn
*      INTO ITAB-PROFORMA
       into (vbfa-vbeln,vbfa-posnn)
      from vbfa
      join vbrk on vbrk~vbeln = vbfa~vbeln " by robbin
      where vbelv = itab-vbeln
      and   posnv = l_hdr
      and   vbtyp_n = 'U'
      and   vbrk~rfbsk <> 'E'.             " by robbin

    endif.

    itab-proforma = vbfa-vbeln.
    clear itab-netwr.
*Add begin of DEVK918089
    clear vbrk.
    select single knumv
      into vbrk-knumv
      from vbrk
     where vbeln eq vbfa-vbeln.
    if sy-subrc eq 0.

      clear konv.
      select single kbetr
        into konv-kbetr
        from konv
       where knumv = vbrk-knumv
         and kposn = vbfa-posnn
         and kschl = 'MINA'.
      if sy-subrc eq 0.
        itab-netwr = konv-kbetr.
      else.
        select kwert  "Rate (condition amount or percentage)
          into konv-kwert
          from konv
         where knumv = vbrk-knumv
           and kposn = vbfa-posnn
           and ( kschl = 'TSTA'
           or    kschl = 'ASSM' ).
          itab-netwr = itab-netwr + konv-kwert.
        endselect.
      endif.

    endif.
*    SELECT SINGLE NETWR
*                  INTO VBRP-NETWR
*                  FROM VBRP
*                 WHERE VBELN = VBFA-VBELN
*                   AND POSNR = VBFA-POSNN.
*
*         IF SY-SUBRC EQ 0.
*           ITAB-NETWR = VBRP-NETWR.
*         ENDIF.
*Add end of DEVK918089
*Mawb #,
*start of "DEVK921838
    select single netwr
                  into vbrp-netwr
                 from vbrp
                 where vbeln = vbfa-vbeln
                   and posnr = vbfa-posnn.

    if sy-subrc eq 0.
      itab-ciwr = vbrp-netwr.
    endif.
*end of "DEVK921838

    l_id = 'Z002'.
    perform get_header_text using l_name l_id
                         changing l_line.
    move l_line to itab-line1. clear l_line.

    if itab-line1 is initial.
**  if we don't find MAWB in DN, then we find MAWB in proform invoice
      l_name = itab-proforma.
      perform get_header_text using l_name l_id
                              changing l_line.
      move l_line to itab-line1.
    endif.


*Hawb #
    l_id = 'Z003'.
    perform get_header_text using l_name l_id
                         changing l_line.
    move l_line to itab-line2. clear l_line.
*Carrier /Flight
    l_id = 'Z004'.
    perform get_header_text using l_name l_id
                         changing l_line.
    move l_line to itab-line3. clear l_line.

    if itab-line3 is initial.
**  if we don't find carrier/flight in DN,
**  then we find in proform invoice
      l_name = itab-proforma.
      perform get_header_text using l_name l_id
                              changing l_line.
      move l_line to itab-line3. clear l_line.

    endif.


*Forwarder
    l_id = 'Z007'.
**    006
**    PERFORM GET_HEADER_TEXT USING L_NAME L_ID
**                         CHANGING L_LINE.
**    MOVE L_LINE TO ITAB-LINE4. CLEAR L_LINE.
**    006

*start 012
    data:count type i.
    concatenate itab-vgbel itab-vgpos into l_name.
    condense l_name.

    perform get_item_text tables l_lines
                           using l_name l_id.

    loop at l_lines.
      move l_lines-tdline to l_line.
      search l_line for 'IDT sales order number:'.
      if sy-subrc = 0.
        count = sy-fdpos + 23.
        write l_line+count(50)  to itab-idtbel.
        continue.
      endif.
      search l_line for 'IDT item number:'.
      if sy-subrc = 0.
        count = sy-fdpos + 16.
        write l_line+count(10)  to itab-idtpos.
        continue.
      endif.
      clear l_line.
    endloop.
*end 012

** Add start of "DEVK921621
*Customer PR #
    l_id = 'Z015'.
    perform get_header_text using l_name2 l_id
                         changing l_line.
    move l_line to itab-line5. clear l_line.
** Add end of "DEVK921621

*start 019 "DEVK922054
* If the customer is STM(10232 or 10233), show sales type in SO item
* instead of Device description.
    if itab-kunag = '0000010232' or itab-kunag = '0000010233'.
      l_id = 'Z017'.

      concatenate itab-vgbel itab-vgpos into l_name.
      condense l_name.

      perform get_item_text tables l_lines
                            using l_name l_id.
      read table l_lines index 1.
      if sy-subrc = 0.
        move l_lines-tdline to itab-arktx.
      endif.
      refresh l_lines.
      clear: l_lines, l_id, l_name.
    endif.
*end 019 "DEVK922054

    select single lifnr into l_lifnr
    from vbpa
    where vbeln = itab-proforma
    and   parvw = 'FA'.

    if sy-subrc = 0 .
      select single name1 into itab-line4
      from lfa1
      where lifnr = l_lifnr.
    endif.

    modify itab.
  endloop.
*'Z002'
endform.                    " GET_TEXT
*&---------------------------------------------------------------------*
*&      Form  GET_HEADER_TEXT
*&---------------------------------------------------------------------*
*       GET Header Text
*----------------------------------------------------------------------*
*      -->P_L_NAME  Delivery No
*      -->P_L_ID    ID
*      <--P_L_LINE  Header text
*----------------------------------------------------------------------*
form get_header_text  using    p_l_name   p_l_id
                      changing p_l_line.

  data: l_line like  tline occurs 0 with header line.

  refresh l_line. clear p_l_line. clear p_l_line.

  call function 'READ_TEXT'
    exporting
*       CLIENT                         = SY-MANDT
      id                            =  p_l_id
      language                      = 'E'
      name                          =  p_l_name
      object                        = 'VBBK'
*       ARCHIVE_HANDLE                 = 0
*       LOCAL_CAT                     = ' '
*     IMPORTING
*       HEADER                        =
    tables
      lines                         = l_line
   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.

    read table l_line index 1.

    move  l_line-tdline to p_l_line.

  endif.

endform.                    " GET_HEADER_TEXT
*&---------------------------------------------------------------------*
*&      Form  GET_ITEM_TEXT
*&---------------------------------------------------------------------*
*       GET ITEM Text
*----------------------------------------------------------------------*
*      -->P_L_NAME  SO Number
*      -->P_L_INLINE TEXT line number
*      -->P_L_ID    ID
*      <--P_L_LINE  Header text
*----------------------------------------------------------------------*
form get_item_text   tables p_l_line structure l_lines
                      using p_l_name p_l_id.


  data: l_line like  tline occurs 0 with header line.

  clear p_l_line.

  call function 'READ_TEXT'
    exporting
*       CLIENT                         = SY-MANDT
      id                            =  p_l_id
      language                      = 'E'
      name                          =  p_l_name
      object                        = 'VBBP'
*       ARCHIVE_HANDLE                 = 0
*       LOCAL_CAT                     = ' '
*     IMPORTING
*       HEADER                        =
    tables
      lines                         = p_l_line
   exceptions
*       ID                            = 1
*       LANGUAGE                      = 2
*       NAME                          = 3
     not_found                     = 4
*       OBJECT                        = 5
*       REFERENCE_CHECK               = 6
*       WRONG_ACCESS_TO_ARCHIVE       = 7
*       OTHERS                        = 8
            .

endform.                    " GET_ITEM_TEXT
*&---------------------------------------------------------------------*
*&      Form  OUTPUT_TO_ALV
*&---------------------------------------------------------------------*
*        Output to ALV
*----------------------------------------------------------------------*
form output_to_alv .
  repid = sy-repid.

  layout-colwidth_optimize = 'X'.

  variant-report = repid.
* create field catalog
  perform create_fieldcat.
  perform create_layout.
* display ALV
  call function 'REUSE_ALV_GRID_DISPLAY'
   exporting
*     I_BACKGROUND_ID = 'ALV_BACKGROUND'
     i_grid_title = title
     it_fieldcat  = fieldcat
     is_layout    = layout
     i_save       = 'A'
*     is_variant   = p_vari
     is_variant   = g_disp_var
     it_events    = event
*     IT_SORT        = sort
     i_callback_program      = repid
*     I_CALLBACK_USER_COMMAND = 'OUTPUTALV_DETAILS'
*     I_CALLBACK_TOP_OF_PAGE  = 'TOP_OF_PAGE'   "Top-of-page display
    tables
      t_outtab    = dtab
      exceptions
     program_error = 1
     others        = 2
  .

endform.                    " OUTPUT_TO_ALV
*&---------------------------------------------------------------------*
*&      Form  CREATE_LAYOUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_layout .
  layout-box_fieldname       = 'SELK'.   " Checkbox
endform.                    " CREATE_LAYOUT
*&---------------------------------------------------------------------*
*&      Form  CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_fieldcat .
  data:  "LS_FIELDCAT  TYPE LVC_S_FCAT,        "ALV Data Field Catalog
         ls_fieldcata type slis_fieldcat_alv. "ALV Display Field Catalog

* Macro: _APPEND_FIELDCAT
*          &1 - Field Name
*          &2 - Reference Table
*          &3 - Reference Table Field (when Field Name is different)
*          &4 - Short Field Label
*          &5 - Medium Field Label
*          &6 - Long Field Label
*          &7 - Text Field Name
*          &8 - Reference Field with Quantity Unit
*          &9 - Hotspot
  define _append_fieldcat.
    clear:  ls_fieldcata. " ,LS_FIELDCAT.
*   LS_FIELDCAT-FIELDNAME       = &1.
*   LS_FIELDCAT-REF_TABLE       = &2.
*   LS_FIELDCAT-REF_FIELD       = &3.
    ls_fieldcata-fieldname      = &1.
    ls_fieldcata-ref_tabname    = &2.
    ls_fieldcata-ref_fieldname  = &3.
    ls_fieldcata-seltext_s      = &4.
    ls_fieldcata-seltext_m      = &5.
    ls_fieldcata-seltext_l      = &6.
    ls_fieldcata-reptext_ddic   = &6.
    ls_fieldcata-text_fieldname = &7.
    ls_fieldcata-qfieldname     = &8.
    ls_fieldcata-hotspot        = &9.
*   APPEND LS_FIELDCAT TO FIELDCAT.
    append ls_fieldcata to fieldcat.
  end-of-definition.

* Begin #DEVK922169
  _append_fieldcat 'COMB_LOT_NO' '' '' 'Comibne From Lot# '
  'Comibne From Lot# ' 'Comibne From Lot# ' '' '' ''.
  _append_fieldcat 'COMB_LOT_QTY' '' '' 'Comibne From Lot Qty '
  'Comibne From Lot Qty ' 'Comibne Lot Qty ' '' '' ''.
  _append_fieldcat 'TEST_IN_QTY' '' '' 'Test In Qty '
  'Test In Qty ' 'Test In Qty ' '' '' ''.
  _append_fieldcat 'TEST_START_DATE' '' '' 'Test Start Date '
  'Test Start Date ' 'Test Start Date ' '' '' ''.
* Begin #DEVK922169
* Begin #DEVK922308
  _append_fieldcat 'MES_REJ_QTY' '' '' 'Mes Reject Qty '
  'Mes Reject Qty ' 'Mes Reject Qty ' '' '' ''.
* End #DEVK922308
* Begin #DEVK922330
  _append_fieldcat 'SUBLOT_QTY' '' '' 'SubLot Qty '
  'SubLot Qty ' 'SubLot Qty ' '' '' ''.
* End #DEVK922330
  _append_fieldcat 'KUNAG' '' '' 'Customer ' 'Customer '
 'Customer ' '' '' ''.
  _append_fieldcat 'NAME1' '' '' 'Cust Name ' 'Customer Name '
'Customer Name ' '' '' ''.
*start 012
  _append_fieldcat 'IDTBEL' '' '' 'IDT SO# ' 'IDT SO Number '
'IDT Sale Order Number ' '' '' ''.
  _append_fieldcat 'IDTPOS' '' '' 'IDT SO Item ' 'IDT SO Item Number '
'IDT Sale Order Item Number ' '' '' ''.
*end 012
  _append_fieldcat 'WADAT_IST' '' '' 'Date ' 'Shp Out DT '
'Ship Out Date '  '' '' ''.
  _append_fieldcat 'PWERK' '' '' 'P Plant ' 'Prod Plant '
 'Production Plant '  '' '' ''.
  _append_fieldcat 'TWERK' '' '' 'T Plant ' 'Test Plant '
 'Test Plant '  '' '' ''.
  _append_fieldcat 'KUNNR' '' '' 'Ship to Party' 'Ship to Party'
 'Ship to Party'  '' '' ''.
  _append_fieldcat 'LANDX50' '' '' 'Location ' 'Shp Location '
 'Ship to Location '  '' '' ''.
*start 011
  _append_fieldcat 'SORT2' '' '' 'Address ' 'Shp Address '
  'Ship to Address '  '' '' ''.
*end 011
 _append_fieldcat 'PTIAL' '' '' 'Partial Shipment ' 'Partial Shipment '
'Partial Shipment '  '' '' ''.
  _append_fieldcat 'COUNT' '' '' 'Combine Lot ' 'Combine Lot '
 'Combine Lot '  '' '' ''.
  _append_fieldcat 'VBELN' '' '' 'DN No ' 'Delivery No '
 'Delivery No '  '' '' ''.

*** 006
  _append_fieldcat 'TTL_WGT' '' '' 'TTL WGT ' 'Total Weight '
 'Total Weight '  '' '' ''.
  _append_fieldcat 'TTL_CNT' '' '' 'TTL CNT ' 'Total Carton '
 'Total Carton '  '' '' ''.

*** 006

*  _APPEND_FIELDCAT 'PWERK' '' '' 'X ' 'X ' 'X '  '' '' ''.
  _append_fieldcat 'MATNR' '' '' 'Device ID ' 'Device Code '
 'Device Code '  '' '' ''.
  _append_fieldcat 'ARKTX' '' '' 'Device Name ' 'Device Name '
 'Device Name '  '' '' ''.
**004
  _append_fieldcat 'PROCESS' '' '' 'Process' 'Process' 'Process' '' ''
  ''.
**004
** 006
  _append_fieldcat 'PROFORMA' '' '' 'Pro Inv' 'Proforma Invoice'
  'Proforma Invoice'  '' '' ''.

*start of "DEVK921838
*  _APPEND_FIELDCAT 'NETWR' 'VBRK' 'NETWR'  'Net value' 'Net value'
*                   'Net value' '' '' ''.   "Net value    "DEVK918089
  _append_fieldcat 'NETWR' 'VBRK' 'NETWR'  'Unit P. Val.'
                   'Unit Price Value'  'Unit Price Value' '' '' ''.
  _append_fieldcat 'CIWR' 'VBRK' 'NETWR'  'CI Net Val.'
                   'CI Net Value'  'CI Net Value' '' '' ''.

*end of "DEVK921838
  _append_fieldcat 'AUFNR' '' '' 'Prod Ord' 'Prod Ord'
  'Production Order'  '' '' ''.
** 006

  _append_fieldcat 'KDMAT' '' '' 'LOT No ' 'LOT No '
 'Customer LOT No '  '' '' ''.
  _append_fieldcat 'FKIMG' '' '' 'Rel Qty ' 'Release Qty '
 'Release Qty '  '' '' ''.
  _append_fieldcat 'KCMENG' '' '' 'Lot Qty ' 'Lot Qty '
 'Lot Qty in DN '  '' '' ''.
  _append_fieldcat 'BVBELN' '' '' 'Invoice ' 'Invoice '
 'Invoice '  '' '' ''.
  _append_fieldcat 'CLASS' '' '' 'Pkg Type ' 'Package Type '
 'Package Type '  '' '' ''.
  _append_fieldcat 'LEAD' '' '' 'Lead ' 'Lead Count '
 'Lead Count '  '' '' ''.
  _append_fieldcat 'PDIM' '' '' 'Dim ' 'Dimension '
 'Package Dimension '  '' '' ''.
  _append_fieldcat 'LINE1' '' '' 'MAWB# ' 'MAWB# ' 'MAWB# '  '' '' ''.
  _append_fieldcat 'LINE2' '' '' 'HAWB# ' 'HAWB# ' 'HAWB# '  '' '' ''.
  _append_fieldcat 'LINE3' '' '' 'Carrier/Flight ' 'Carrier/Flight '
 'Carrier/Flight '  '' '' ''.
  _append_fieldcat 'LINE4' '' '' 'Forwarder ' 'Forwarder ' 'Forwarder '
 '' '' ''.

**
  _append_fieldcat 'ZZTRC_CD' '' '' 'Trace CD ' 'Trace CD ' 'Trace CD'
'' '' ''.

**003
  _append_fieldcat 'ASSOUT' '' '' 'Assembly Out Qty' 'Assembly Out Qty'
  'Assembly Out Qty'
'' '' ''.
  _append_fieldcat 'TESTOUT' '' '' 'Test Out Qty' 'Test Out Qty'
  'Test Out Qty'
'' '' ''.
  _append_fieldcat 'FULLREEL' '' '' 'Full Reel Qty' 'Full Reel Qty'
  'Full Reel Qty'
  '' '' ''.
  _append_fieldcat 'PARTIAL' '' '' 'Partial Qty' 'Partial Qty'
  'Partial Qty'
'' '' ''.
 _append_fieldcat 'REJQTY' '' '' 'Reject Qty' 'Reject Qty' 'Reject Qty'
 '' '' ''.
**003
**007
  _append_fieldcat 'ZZATOAT' '' '' 'A TO AT' 'A TO AT' 'A TO AT'
  '' '' ''.
  _append_fieldcat 'ZZATTOA' '' '' 'AT TO A' 'AT TO A' 'AT TO A'
  '' '' ''.
**Add start of DEVK921621
  _append_fieldcat 'LINE5' '' '' 'Customer PR#' 'Customer PR#'
  'Customer PR #' '' '' ''.
**Add end of DEVK921621

  _append_fieldcat 'BSTKD' '' '' 'Customer PO#' 'Customer PO#'
  'Customer PO #' '' '' ''.

*start 014 "DEVK921503
  _append_fieldcat 'FABLOT1' '' '' 'Fablot 1' 'Fablot 1'
  'Fablot 1' '' '' ''.
*end 014  "DEVK921503

* #DEVK922257 Begin by wei_zhu
*  if ch_fab = 'X'.
*    _append_fieldcat 'FAB_LOT' '' '' 'NVIDIA Batch Number/ Fab Lot #'
*                     'NVIDIA Batch Number/ Fab Lot #'
*                     'NVIDIA Batch Number/ Fab Lot #'
*                     '' '' ''.
*  endif.
* #DEVK922257 End by wei_zhu

*start 015 "DEVK921524
* #DEVK922257 Begin by wei_zhu
*  if ch_slot = 'X'.
* #DEVK922257 End by wei_zhu

    _append_fieldcat 'POSNR' '' '' 'DN Item' 'DN Item'
   'Delivery Note Item' '' '' ''.
    _append_fieldcat 'CHARG' '' '' 'Batch' 'Batch'
   'Batch' '' '' ''.
    _append_fieldcat 'LFIMG' '' '' 'Ship Out Qty' 'Ship Out Qty'
   'Ship Out Quantity' '' '' ''.
    _append_fieldcat 'SUBLOT' '' '' 'Sub Lot' 'Sub Lot'
   'Sub Lot' '' '' ''.
* #DEVK922257 Begin by wei_zhu
*  endif.
* #DEVK922257 Begin by wei_zhu
*end 015 "DEVK921524

*start of 017 "DEVK921665
  _append_fieldcat 'WIRE_NO' '' '' 'No. Wires' 'No. Wires'
 'Number of Wires' '' '' ''.
  _append_fieldcat 'WIRE_COUNT' '' '' 'Wire Co.' 'Wires Count'
'Wires Count' '' '' ''.

*end of 017 "DEVK921665

**007

*  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
*    EXPORTING
*      I_PROGRAM_NAME         = REPID
*      I_INTERNAL_TABNAME     = 'DTAB'
*      I_INCLNAME             = REPID
*    CHANGING
*      CT_FIELDCAT            = FIELDCAT
*    EXCEPTIONS
*      INCONSISTENT_INTERFACE = 1
*      PROGRAM_ERROR          = 2
*      OTHERS                 = 3.

endform.                    " CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  send_mail_via_sap
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form send_mail_via_sap using fname type c
                       changing p_subrc like sy-subrc.

  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 p_subrc.
  if p_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 p_subrc.
  endif.


endform.                    " send_mail_via_sap
*&---------------------------------------------------------------------*
*&      Form  send_mail_attachment_sap
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_G_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  transform_file_to_attachment
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      <--P_G_SUBRC  text
*----------------------------------------------------------------------*
form transform_file_to_attachment  changing p_subrc like sy-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_attachment
*&---------------------------------------------------------------------*
*&      Form  F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form f4_for_variant .

**Display variant selection dialog box
  call function 'REUSE_ALV_VARIANT_F4'
         exporting
              is_variant          = g_disp_var
              i_save              = g_save
*           it_default_fieldcat =
         importing
              e_exit              = g_exit
              es_variant          = gx_disp_var
         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.
      p_vari = gx_disp_var-variant.
    endif.
  endif.

endform.                    " F4_FOR_VARIANT
*&---------------------------------------------------------------------*
*&      Form  PAI_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form pai_of_selection_screen .

*Checks whether a display variant exists
  if not p_vari is initial.

    move g_disp_var to gx_disp_var.
    move p_vari to gx_disp_var-variant.

    call function 'REUSE_ALV_VARIANT_EXISTENCE'
      exporting
        i_save     = g_save
      changing
*        cs_variant = gx_variant.
        cs_variant = gx_disp_var.
*    g_variant = gx_variant.
    g_disp_var = gx_disp_var.
  else.
    perform variant_init.
  endif.

*Check if the current date is the first day of the month
*                                             DEVK919540
*                                             DEVK919559
* begin
  if s_wadat is initial.
    call function 'HR_JP_MONTH_BEGIN_END_DATE'
      exporting
        iv_date             = sy-datum
      importing
        ev_month_begin_date = l_date1.

    if sy-datum = l_date1.
      call function 'J_1H_CAL_DATE_IN_INTERVAL'
        exporting
          date      = l_date1
          days      = 0
          months    = 1
          signum    = '-'
          years     = 0
        importing
          calc_date = l_date2.
      move: 'I'      to s_wadat-sign,
            'BT'     to s_wadat-option,
            l_date2  to s_wadat-low,
            l_date1  to s_wadat-high.
      append s_wadat.
    else.                                                   "DEVK919567
      move: 'I'      to s_wadat-sign,
            'BT'     to s_wadat-option,
            l_date1  to s_wadat-low,
            sy-datum to s_wadat-high.
      append s_wadat.
    endif.                  " The current day is the first of the month

  endif.
**** DEVK919560 end
endform.                    " PAI_OF_SELECTION_SCREEN
*&---------------------------------------------------------------------*
*&      Form  variant_init
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form variant_init .

  clear g_variant.
  g_variant-report = g_repid.

  g_disp_var-report = sy-repid.
  g_disp_var-username = sy-uname.

endform.                    " variant_init


*&--------------------------------------------------------------------*
*&      Form  get_alv_variant_detail
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_VARIANT  text
*      -->P_FIELDCAT text
*      -->PS_LAYOUT  text
*      -->PT_FCAT_SAVtext
*      -->PT_SORT_SAVtext
*      -->PT_FILTER_Stext
*      -->PS_LAYOUT_Stext
*---------------------------------------------------------------------*
form get_alv_variant_detail
                    using    p_variant
                             p_fieldcat type  slis_t_fieldcat_alv
                             ps_layout
                    changing pt_fcat_sav   type any table
                             pt_sort_sav   type any table
                             pt_filter_sav type any table
                             ps_layout_sav.

  data: lt_fcat_def    type kkblo_fieldcat occurs 0 with header line.
  data: lt_fcat_sav    type kkblo_fieldcat occurs 0 with header line.
  data: lt_sort        type kkblo_sortinfo occurs 0 with header line.
  data: lt_filter      type kkblo_filter   occurs 0 with header line.

  data: lt_layout      type kkblo_layout.
  data: lt_fieldcat    type slis_fieldcat_alv.

  refresh: pt_fcat_sav, pt_sort_sav, pt_filter_sav.
  clear    ps_layout_sav.

  loop at p_fieldcat into lt_fieldcat.
    move-corresponding lt_fieldcat   to lt_fcat_def.
    append lt_fcat_def.
  endloop.

  move-corresponding ps_layout   to lt_layout.

  call function 'LT_FC_LOAD'
    exporting
*     I_TOOL                    = 'LT'
      is_variant                = p_variant
      i_tabname                 = 'MASTER'
*     I_TABNAME_SLAVE           =
    importing
      et_fieldcat               = lt_fcat_sav[]
      et_sort                   = lt_sort[]
      et_filter                 = lt_filter[]
    changing
      cs_layout                 = lt_layout
      ct_default_fieldcat       = lt_fcat_def[]
    exceptions
      fc_not_complete           = 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.
  else.
    pt_fcat_sav[]   = lt_fcat_sav[].
    pt_sort_sav[]   = lt_sort[].
    pt_filter_sav[] = lt_filter[].
    move-corresponding lt_layout   to ps_layout_sav.
  endif.

endform.                    " GET_ALV_VARIANT_DETAIL
*&---------------------------------------------------------------------*
*&      Form  generate_xls
*&---------------------------------------------------------------------*
*       generate a csv text file
*----------------------------------------------------------------------*
*      -->P_G_FNAME  text
*      -->P_GT_FCAT_SAVE[]  text
*----------------------------------------------------------------------*
form generate_xls using p_fname type c.

  data: hextab(1) type c, len type i,
        l_line(1500) type c.
  class cl_abap_char_utilities definition load.

  data: wa like gt_fcat_sav,
        fc like line of fieldcat,
        fld(40) type c.


  field-symbols: <ff> type any.

  hextab = cl_abap_char_utilities=>horizontal_tab.

  open dataset p_fname for output
                       in text mode encoding default .

  if sy-subrc <> 0.
    write 'Fail to generate data file!'.
    return.
  endif.

  clear l_line.

  sort gt_fcat_sav by col_pos.
  sort fieldcat by col_pos.
*User choose a display variant
  if not g_disp_var-variant is initial.
    loop at gt_fcat_sav into wa where no_out <> 'X'.

      len = strlen( l_line ).
      concatenate '"' wa-seltext_l '"' ',' into l_line+len.

      at last.
*remove extra comma
        len = strlen( l_line ) - 1.
        write space to l_line+len.
      endat.

    endloop.
  else.
**user default fieldcat

    loop at fieldcat into fc.
      len = strlen( l_line ).
      concatenate '"' fc-seltext_m '"' ',' into l_line+len.
      at last.
*remove extra comma
        len = strlen( l_line ) - 1.
        write space to l_line+len.
      endat.
    endloop.
  endif.

*  LEN = LEN - 1.
*  LEN =  STRLEN( L_LINE ) - 1.
*  WRITE SPACE TO L_LINE+LEN.


  transfer l_line to p_fname.

  clear l_line.

*  output all data in itab
  loop at dtab.

** user chooses a display variant
    if not g_disp_var-variant is initial.

      loop at gt_fcat_sav into wa where no_out <> 'X'.

        assign component wa-fieldname of structure dtab to <ff>.
        len = strlen( l_line ).
        fld = <ff>. condense fld.
        if fld cs ','.
          replace all occurrences of ',' in fld with space.
        endif.
        concatenate '"' fld '"' ',' into l_line+len.
        at last.
*remove extra comma
          len = strlen( l_line ) - 1.
          write space to l_line+len.
        endat.


      endloop.
    else.
**    use default fieldcat
      loop at fieldcat into fc.

        assign component fc-fieldname of structure dtab to <ff>.
        len = strlen( l_line ).
        fld = <ff>. condense fld.

        if fld cs ','.
          replace all occurrences of ',' in fld with space.
*          " '","'.
        endif.
        concatenate '"' fld '"' ',' into l_line+len.

        at last.
*remove extra comma
          len = strlen( l_line ) - 1.
          write space to l_line+len.
        endat.

      endloop.

    endif.

    transfer l_line to p_fname.
    clear l_line.
  endloop.


  close dataset p_fname.


endform.                    " generate_xls
*&---------------------------------------------------------------------*
*&      Form  get_batch_info
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_batch_info .
  data:   lt_class like sclass occurs 0 with header line,
          lt_clobjdat like clobjdat occurs 0 with header line,
          l_objek like ausp-objek.
  data: begin of t_lips occurs 0,
           vbeln like lips-vbeln,
           posnr like lips-posnr,
           matnr like lips-matnr,
           werks like lips-werks,
           charg like lips-charg,
           kdmat like lips-kdmat,
           uecha like lips-uecha,
*start 015 ""DEVK921524
           lfimg like lips-lfimg, "Delivery Qty/Batch Qty
*end 015 ""DEVK921524
        end of t_lips.
  data: l_qty type p decimals 2,
        l_tabix like sy-tabix.

  select * into corresponding fields of table t_lips
           from lips
           for all entries in itab
           where vbeln = itab-vbeln
           and uecha <> '000000'.

**get characteristics
  loop at itab.
    l_tabix = sy-tabix.

    loop at t_lips where vbeln = itab-vbeln
                   and   uecha = itab-posnr.
      clear: lt_class, lt_clobjdat.
      refresh: lt_class, lt_clobjdat.
      concatenate t_lips-matnr t_lips-werks t_lips-charg into l_objek.
      call function 'CLAF_CLASSIFICATION_OF_OBJECTS'
        exporting
          classtext       = ''          "No class text
          classtype       = '022'       "Material classification
          object          = l_objek     "Material#
          initial_charact = ''          "No initial characteristic
        tables
          t_class         = lt_class
          t_objectdata    = lt_clobjdat
        exceptions
          others          = 4.
      if sy-subrc = 0.
        read table lt_clobjdat with key atnam = 'TESTOUT'.
        if sy-subrc = 0.
          replace ',' with space into lt_clobjdat-ausp1.
          condense lt_clobjdat-ausp1 no-gaps.
          l_qty = lt_clobjdat-ausp1.
          itab-testout = l_qty + itab-testout.
        endif.
        read table lt_clobjdat with key atnam = 'PACKTYPE'.
        if sy-subrc = 0.
          if lt_clobjdat-ausp1 = 'Reel'.
            itab-fullreel = itab-testout.
          else.
            itab-partial = itab-testout.
          endif.
        endif.
        read table lt_clobjdat with key atnam = 'ASMOUT'.
        if sy-subrc = 0.
          replace ',' with space into lt_clobjdat-ausp1.
          condense lt_clobjdat-ausp1 no-gaps.
          l_qty = lt_clobjdat-ausp1.
          itab-assout = l_qty + itab-assout.
        endif.
*      READ TABLE lt_clobjdat WITH KEY atnam = 'TESTIN'.
*      IF sy-subrc = 0.
*        itab-testin = lt_clobjdat-ausp1.
*      ENDIF.
        read table lt_clobjdat with key atnam = 'REJECTQTY'.
        if sy-subrc = 0.
          replace ',' with space into lt_clobjdat-ausp1.
          condense lt_clobjdat-ausp1 no-gaps.
          l_qty = lt_clobjdat-ausp1.
          itab-rejqty = l_qty + itab-rejqty.
        endif.
*start 015 ""DEVK921524
* #DEVK922257 Begin by wei_zhu
*        if ch_slot = 'X'.
* #DEVK922257 End by wei_zhu
          read table lt_clobjdat with key atnam = 'LOTTRAVELLER'.
          if sy-subrc = 0.
            wa_dtab-sublot = lt_clobjdat-ausp1.
          endif.
          move-corresponding itab to wa_dtab.
          wa_dtab-lfimg = t_lips-lfimg.
          wa_dtab-charg = t_lips-charg.
       wa_dtab-wire_count = wa_dtab-wire_no *  wa_dtab-lfimg."DEVK921665

          append wa_dtab.
          clear wa_dtab.
        endif.
*end 015 ""DEVK921524
* #DEVK922257 Begin by wei_zhu
*      endif.
* #DEVK922257 End by wei_zhu
    endloop.
    modify itab index l_tabix.
  endloop.
endform.                    " get_batch_info

*&---------------------------------------------------------------------*
*&      Form  get_prod_order_sublot
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
* #DEVK922257 Begin
form get_prod_order_sublot .
  data: l_dbconname     like dbcon-con_name.
  data: l_aufnr         like aufk-aufnr.
  data: l_werks         like t001w-werks.
  data: l_subrc         like sy-subrc.
  data: l_dbopen        like sy-subrc.
  data: l_aufnr2        like aufk-aufnr.

  data: begin of gt_werks occurs 0,
        werks like t001w-werks,         "Plant
      end of gt_werks.

  ranges: lt_werks for LIPS-WERKS.        "Plant

  select werks into corresponding fields of table gt_werks
    from t001w
    where werks in s_werks
*begin #DEVK922186
    and ( werks = '3100' or werks = '3200').
*end #DEVK922186

    lt_werks-sign   = 'I'.
    lt_werks-option = 'EQ'.

    loop at gt_werks.
      lt_werks-low = gt_werks-werks.
      append lt_werks.
    endloop.

    refresh: gt_sql_query_046A.

    l_dbopen = 99.
    clear l_dbconname.

  sort t_po by aufnr.
  if l_dbopen ne 0.
   loop at lt_werks.
      perform check_dbcon using    lt_werks-low
                            changing l_dbconname
                                     l_subrc.
      perform connect_dbcon using    l_dbconname
                              changing l_subrc.
      l_dbopen = l_subrc.

      clear l_subrc.

      loop at t_po .
        at new aufnr.
        l_aufnr = t_po-aufnr.
        shift l_aufnr left deleting leading '0'.
        clear l_subrc.
             perform mes_extract_data_046A using l_aufnr
                                   changing l_subrc.

          do.
            clear gt_sql_query_046A.

            mes_fetch_data gt_sql_query_046a l_subrc c46A.

            if l_subrc ne 0.
              exit.
            else.
              append gt_sql_query_046A.
            endif.
          enddo.
          mes_close_cursor c46A l_subrc.

**********************************************************
*         *  Retrieve Out Qty information
**********************************************************
          clear l_subrc.

          perform mes_extract_data_016 using    l_aufnr
                                       changing l_subrc.

          do.
            clear gt_sql_query_016.

            mes_fetch_data gt_sql_query_016 l_subrc c16.

            if l_subrc ne 0.
              exit.
            else.
              append gt_sql_query_016.
            endif.
          enddo.

          mes_close_cursor c16 l_subrc.

**********************************************************
*         *  Retrieve Reject Qty information
**********************************************************
          clear l_subrc.

          perform mes_extract_data_046b using    l_aufnr
                                       changing l_subrc.

          do.
            clear gt_sql_query_046b.

            mes_fetch_data gt_sql_query_046b l_subrc c46b.

            if l_subrc ne 0.
              exit.
            else.
              append gt_sql_query_046b.
            endif.
          enddo.

          mes_close_cursor c46b l_subrc.
*

       endat.
     endloop.
*       mes_close_cursor c46A l_subrc.
     if l_dbopen eq 0.
       perform disconnect_dbcon using    l_dbconname
                               changing l_subrc.
    endif.

  endloop.
  endif.
endform.    "get_prod_order_sublot
* #DEVK922257 End

*&---------------------------------------------------------------------*
*&      Form  get_combine_lot_detail
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
* Begin #DEVK922169
form get_combine_lot_detail.
  data: l_dbconname     like dbcon-con_name.
  data: l_aufnr         like aufk-aufnr.
  data: l_werks         like t001w-werks.
  data: l_subrc         like sy-subrc.
  data: l_dbopen        like sy-subrc.

  data: begin of gt_werks occurs 0,
        werks like t001w-werks,         "Plant
      end of gt_werks.

  ranges: lt_werks for LIPS-WERKS.        "Plant

  select werks into corresponding fields of table gt_werks
    from t001w
    where werks in s_werks
*begin #DEVK922186
    and ( werks = '3100' or werks = '3200').
*end #DEVK922186

    lt_werks-sign   = 'I'.
    lt_werks-option = 'EQ'.

    loop at gt_werks.
      lt_werks-low = gt_werks-werks.
      append lt_werks.
    endloop.

  refresh: gt_sql_query_046.

*
*  do 2 times.
*    case sy-index.
*      when 1.
*        l_werks = c_werks_dg.
*      when 2.
*        l_werks = c_werks_dg2.
*      when others.
*        exit.
*    endcase.

    l_dbopen = 99.
    clear l_dbconname.

  if l_dbopen ne 0.
   loop at lt_werks.
      perform check_dbcon using    lt_werks-low
                            changing l_dbconname
                                     l_subrc.
      perform connect_dbcon using    l_dbconname
                              changing l_subrc.
      l_dbopen = l_subrc.

      clear l_subrc.

   perform mes_extract_data_046
                         changing l_subrc.

          do.
            clear gt_sql_query_046.

            mes_fetch_data gt_sql_query_046 l_subrc c46.

            if l_subrc ne 0.
              exit.
            else.
              append gt_sql_query_046.
            endif.
          enddo.

          mes_close_cursor c46 l_subrc.

    if l_dbopen eq 0.
      perform disconnect_dbcon using    l_dbconname
                               changing l_subrc.
    endif.
  endloop.
  endif.
endform.        "get_combine_lot_detail
* End #DEVK922169

*&--------------------------------------------------------------------*
*&      Form  FILE_GET_NAME
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_LOG_NAME text
*      -->P_DIR_NAME text
*      -->P_PHY_NAME text
*      -->P_PATH_FILEtext
*---------------------------------------------------------------------*
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_info
*&---------------------------------------------------------------------*
*       get ttl carton by each DN,
*           ttl weight by each DN
*
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_info .

  data: pri_wa like itab,       "previous line
        l_lifnr like vbpa-lifnr.

  sort itab by vbeln .

  loop at itab.

**    different DN
    if pri_wa-vbeln <> itab-vbeln.

*total weight and total carton by DN
*exclude carton deleted
      select sum( brgew ) count( * )
      into (itab-ttl_wgt, itab-ttl_cnt)
      from vekp
      where vpobjkey = itab-vbeln
         and status <> '0060'.


    endif.

    modify itab transporting ttl_wgt ttl_cnt .

    pri_wa = itab.
  endloop.

endform.                    " get_info
*&---------------------------------------------------------------------*
*&      Form  GET_FAB_LOT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_fab_lot .
  data l_objectid   like  cdhdr-objectid.
  data:begin of i_class occurs 5.
          include structure sclass.                         "^_n_516772
  data:end of i_class.

  data:begin of i_clobjdat occurs 50.
          include structure clobjdat.
  data:end   of i_clobjdat.

  data:ch_object like ausp-objek,  "Object Key for Classification
       ch_classtype like klah-klart,      "classtype batch
       begin of mcha_object,              "Object Key MCHA
         matnr  like  mcha-matnr,
         werks  like  mcha-werks,
         charg  like  mcha-charg,
       end   of mcha_object,
       begin of mch1_object,              "Object Key MCH1
         matnr  like  mch1-matnr,
         charg  like  mch1-charg,
       end   of mch1_object,

  ch_table like tcla-obtab.          "object table batch

  select single rsnum
           into afko-rsnum
           from afko
          where aufnr = itab-aufnr.

  clear resb.
  select single charg matnr bdmng
    into (resb-charg,resb-matnr,resb-bdmng)
    from resb
   where rsnum = afko-rsnum
     and aufnr = itab-aufnr
     and werks = itab-dwerk
     and matkl = 'WAFER'.

  if sy-subrc eq 0.
    if resb-charg ne space.
*    read classification depending on batch level
      clear ch_object.
*      IF CH_LEVEL EQ SPACE.
      ch_classtype = '022'.
      ch_table     = 'MCHA'.

      mcha_object-matnr = resb-matnr.  "Concatenate Object Key
      mcha_object-werks = itab-dwerk.
      mcha_object-charg = resb-charg.
      move mcha_object to ch_object.

      call function 'CLAF_CLASSIFICATION_OF_OBJECTS'
        exporting
          classtype         = ch_classtype
          features          = 'X'
          object            = ch_object
          objecttable       = ch_table
        tables
          t_class           = i_class
          t_objectdata      = i_clobjdat
        exceptions
          no_classification = 1
          no_classtypes     = 2.
      if sy-subrc = 0.
        sort i_clobjdat by zaehl.
        read table i_clobjdat with key atnam = 'DB_FL'.
        if sy-subrc = 0.
          move i_clobjdat-ausp1 to itab-fab_lot.
        endif.
      endif.
    endif.
  endif.

endform.                    " GET_FAB_LOT
*&---------------------------------------------------------------------*
*&      Form  Z_CONVERT_TEXT_TO_EXCEL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_SFILE  text
*      -->P_G_TFILE  text
*----------------------------------------------------------------------*
form z_convert_text_to_excel  using    p_sfile
                                       p_tfile.
  data: l_parm_01    type zbc_conv_txt2exl.
  data: lt_error_01  like bapireturn occurs 1 with header line.

  l_parm_01-source_file  = p_sfile.
*          '//H00157/TEMP/GARRY/ZRSD0023D.CSV'.
  l_parm_01-target_file  = p_tfile.
*          '//H00157/TEMP/GARRY/ZRSD0023D.XLS'.
  l_parm_01-overwrite    = 'X'.
  l_parm_01-worksheet    = 'Detail'.
  l_parm_01-text_type    = 'C'.
  l_parm_01-header_line  = 0.
  l_parm_01-format_total = ' '.

  call function 'Z_CONVERT_TEXT_TO_EXCEL'
    exporting
      command_parm       = l_parm_01
    tables
      return             = lt_error_01
    exceptions
      no_source_filename = 1
      no_target_filename = 2
      others             = 3.
endform.                    " Z_CONVERT_TEXT_TO_EXCEL 

posted on 2007-04-18 14:43  封起De日子  阅读(260)  评论(0编辑  收藏  举报

导航