EIL MU Analysis Report (ZRPP143)

************************************************************************
* Program     : ZRPP143         REL : 4.6c    Author : Dainel Jiang   *
* Created     : 03-11-2011      APP : All     Type   : REPORT         *
* Title       : EIL MU Analysis Report                                *
* Reference   : ZRPP143                                               *
*----------------------------------------------------------------------*
*------Update list-----------------------------------------------------*
*     03 Nov 2011     Daniel       the first version
** M1   Daniel  2012.03.02  Add One Column of Currency
*  M2   Daniel  2012.03.29  fix bug for  complete date
*  M3   Daniel  2012.05.07  display the material main information from
*                           Material Master for M to M material without PO.
*   the latest update: 2012-05-11 16:30
*--------------------------------------------------------------------- *

REPORT  ZRPP143.

*----------------------------------------------------------------------*
* Table structure                                                      *
*----------------------------------------------------------------------*
tables: vbak, vbap,vbrp,konv ,jest, jcds, t005t, ztfty, kna1, makt, tvm1t,
        mbew,mara, mseg, ekko,ekpo,mchb.

databegin of gt_so occurs 0,
  vbeln like vbak-vbeln,
  udate like jcds-udate,
  end of gt_so.

databegin of it_vbak occurs 0,
        vbeln  like vbak-vbeln,
        vkgrp  like vbak-vkgrp,
        kunnr  like vbak-kunnr,
        zzco   like vbak-zzco,
        bname  like vbak-bname,  "style no
        mvgr1  like vbap-mvgr1, "product division
        bezei  like tvm1t-bezei, "product type  tvm2t-bezei
        aedat  like ekko-aedat,   "Complete Date
        zzfty  like vbak-zzfty,
        netwr  like vbak-netwr,
        zzcom  like vbak-zzcom,
        waers  like vbak-waerk,
        bukrs  like vbak-bukrs_vf,
        werks  like vbap-werks,
        vrkme  like vbap-vrkme,
        uom(3type c,
        matnr  like vbap-matnr,
        maktx  like makt-maktx,  "material description
        name1  like kna1-name1,  "customer name
        landx  like t005t-landx,   "Country Name
        zzftyd like t001w-name1, ""Description - Factory Name
        kwmeng like vbap-kwmeng,
        kbetr  like konv-kbetr,
        fkdat  like vbrk-fkdat,  "Billing date for billing index and printout
        udate  like jcds-udate,    "SO Close Date
        aprice like  konv-kwert,

        mteam  like vbpa-kunnr,    "Merchanising team
        zzprogram like vbak-zzprogram,    "Program name
        zzseason  like vbak-zzseason,
      end of it_vbak.

databegin of it_vbrp occurs 0,
        vbeln  like vbrp-vgbel,
        j_4kscat  like ekpo-j_4kscat,
        fkdat  like vbrk-fkdat,
        invno  like vbrk-vbeln,
        fkart  like vbrk-fkart,
        sfakn  like vbrk-sfakn,
        posnr  like vbrp-posnr,
      end of it_vbrp.

**For BOM
databegin of ta_stpo occurs 0,
        stlnr  like stpo-stlnr,
        stlkn  like stpo-stlkn,
        stpoz  like stpo-stpoz,
        hindex(20type c,
        idnrk  like stpo-idnrk,
        maktx  like makt-maktx,
        menge  like stpo-menge,
        meins  like stpo-meins,
        bom    type c,
*        status(4) type c,
*        lifnr  like lfa1-lifnr,
        ausch  like stpo-ausch,        "scrap %
        bmeng  like stko-bmeng,        "base qty
        hmat   like mara-matnr,
        mtart  like mara-mtart,
        sortf  like stpo-sortf,
        ERSKZ  LIKE STPO-erskz,
        twist  type c,
*        ref    type c,
        buom   like mara-meins,
        req    like ZMMFGSKU-menge,
        oreq   like ZMMFGSKU-menge,
        matnr  like mast-matnr,
        werks  like vbap-werks,
        vbeln  like vbak-vbeln,
        avgmng like stpo-menge,        "average the cons from sku
      end of ta_stpo.
data: ta_stpo2  like ta_stpo occurs 0 with header line.

data: it_vbep  like vbep occurs 0 with header line.
data: it_abdsi like j_3abdsi occurs 0 with header line.
databegin of it_abomd occurs 0,
        stlnr       like j_3abomd-stlnr,
        stlkn       like j_3abomd-stlkn,
        j_3akordx   like j_3abomd-j_3akordx,
        j_3akordxl  like j_3abomd-j_3akordxl,
        menge       like j_3abomd-menge,
      end of it_abomd.
databegin of it_mast occurs 0,
        stlnr like mast-stlnr,
      end of it_mast.
typesbegin of tt_zmmfgsku.
types:   stlnr      like stpo-stlnr,
         hindex(20)  type c,       "flag for mark column
         idnrk      like mara-matnr,
         vbeln      like vbap-vbeln.
         include structure zmmfgsku.
types:   sortseq    type zsortseq,
         oreq       like zmmfgsku-menge,
         mtart      like mara-mtart,
         werks      like vbap-werks, "M3 add
       end of tt_zmmfgsku.
DATA: ta_sku type tt_zmmfgsku occurs 0 with header line.
DATA: ta_zcpsku type tt_zmmfgsku occurs 0 with header line.
data: tp_zcpsku like ta_zcpsku occurs 0 with header line.
data: p_num1(20type n.
**

data: wa_umrez like marm-umrez,
      wa_umren like marm-umren,
      tmp_um   like marm-umrez.
data: wa_input type p,
      wa_output type p.
data: wa_meins like mara-meins.

databegin of it_matnr occurs 0,
        werks like vbap-werks, " add on 2012.02.20
        j_4kscat  like ekpo-j_4kscat,
        matnr  like mara-matnr,
        mtart  like mara-mtart,
        yield(30)  type c,
        width(30)  type c,  "Order fabric width
        ftype(30)  type c,  "Fabric Type

        ycout(30)  type c,
        vshag(30)  type c,
        hshag(30)  type c,

        fcont(30)  type c,  "Fibre Content
        flag   type c,
        bklas  type  mbew-bklas,
      end of it_matnr.

  data i type i.

data lv_tabix type i.

databegin of it_po occurs 0,
        ebeln    like ekko-ebeln,
        ebelp    like ekpo-ebelp,
        etenr    like eket-etenr,
        matnr    like ekpo-matnr,
        j_3asize like ta_sku-j_3asize,
        poqty    like ekpo-menge,
        pouom    like ekpo-meins,
        j_4kscat like eket-j_4kscat,
        konnr    like ekpo-konnr,
        lifnr    like ekko-lifnr,
        name1    like lfa1-name1,
        waers    like ekko-waers,
        netwr    like ekpo-netwr,
        bedat    like ekko-bedat,
        bukrs    like ekko-bukrs,
        adrnr    like ekko-adrnr,
        zzwash   like ekko-zzwash,
        autlf    like ekko-autlf,        "Complete Delivery
        netwr_us like ekpo-netwr,
        menge    like ekpo-menge,
        meins    like ekpo-meins,
        yield(30)  type c,
        width(30)  type c,
        ftype(30)  type c,

*" add yarn count shrinkage v/h
        ycout(30)  type c,
        vshag(30)  type c,
        hshag(30)  type c,

        fcont(30)  type c,
        wtext    like zmm_wash-wtext,
        zztest   like ekpo-zztest,    "M1
        zzsample like ekpo-zzsample,  "M1
      end of it_po.

*data: begin of it_rpo occurs 0,
*        j_4kscat  like  it_gr-j_4ksca,
*        matnr  like  it_gr-matnr,
*        menge  like  it_gr-menge,
*        meins  like  it_gr-meins,
*      end of it_rpo.

databegin of it_po_mat occurs 0,
  vbeln like vbak-vbeln,
  matnr like ekpo-matnr,
  j_3asize like ta_sku-j_3asize,
  poqty    like ekpo-menge,
  pouom    like ekpo-meins,
  lifnr like ekko-lifnr,
  name1 like lfa1-name1,
  zzwash like ekko-zzwash,
  wtext    like zmm_wash-wtext,
  left_qty like mchb-clabs,
  maktx2 like makt-maktx,

  j_3aentx8 type J_3AENTX8,
  j_3aentx type J_3AENTX,
  J_3ANOTE TYPE J_3ANOTE,

        yield(30)  type c,
        width(30)  type c,
        ftype(30)  type c,

*" add yarn count shrinkage v/h
        ycout(30)  type c,
        vshag(30)  type c,
        hshag(30)  type c,

        fcont(30)  type c,

  end of it_po_mat.

data: it_gr  like mseg occurs 0 with header line.
*  Add Qty Received and Foc Qty Received Detail
databegin of it_gr_detail occurs 0,
        matnr like mseg-matnr,
        j_4ksca like mseg-j_4ksca,
        j_3asiz like mseg-j_3asiz,
        lgort like mseg-lgort,
        bwart like mseg-bwart,
        gr_menge like mseg-menge,
        foc_menge like mseg-menge,
        sample_qty like mseg-menge,
        lifnr like mseg-lifnr,

      end of it_gr_detail.


data: *it_gr_detail like it_gr_detail occurs 0 with header line.

*  YD & LB conversion factor
data:  begin of it_conv occurs 0,
         matnr  like  mara-matnr,
         maktx  like  makt-maktx,
         type(20type c,
         scale  type  i,
         bweig  type  i,  "weight(BW)
         gwdth  type  i,  "gross width
         factor type  p decimals 14,
       end of it_conv.

databegin of it_ship occurs 0,
        vbeln  like vbrp-vgbel,
*        aubel like vbrp-aubel,
        j_4kscat  like ekpo-j_4kscat,
        fkdat  like vbrk-fkdat,
        invno  like vbrk-vbeln,
        fkart  like vbrk-fkart,
        sfakn  like vbrk-sfakn,
        fkimg  like vbrp-fkimg,
        vrkme  like vbrp-vrkme,
        kidno  like vbrk-kidno,
        posnr  like vbrp-posnr,
*       15/11/06  : for cancelled billing doc
      end of it_ship.



databegin of it_out_mf occurs 0,
        vbeln  like vbak-vbeln,
        vkgrp  like vbak-vkgrp,  "sales group
        kunnr  like vbak-kunnr,
        zzco   like vbak-zzco,   "Country of Origin / Production Line / Base
        bname  like vbak-bname,  "style no
        mvgr1  like vbap-mvgr1, "product division
        bezei  like tvm1t-bezei, "product type
        aedat  like ekko-aedat,   "Complete Date
        zzfty  like vbak-zzfty,  "Factory / Factory Group
        netwr  like vbak-netwr,
        zzcom  like vbak-zzcom,
        waers  like vbak-waerk,
        bukrs  like vbak-bukrs_vf,
        werks  like vbap-werks,
        vrkme  like vbap-vrkme,
        uom(3type c,
        matnr  like vbap-matnr,
        maktx  like makt-maktx,  "material description
        name1  like kna1-name1,  "customer name
        landx  like t005t-landx,   "Country Name
        zzftyd like t001w-name1, ""Description - Factory Group
        kwmeng like vbap-kwmeng,
        kbetr  like konv-kbetr,
        fkdat  like vbrk-fkdat,  "Billing date for billing index and printout
        udate  like jcds-udate,    "SO Close Date
        aprice like  konv-kwert,
        mteam  like vbpa-kunnr,    "Merchanising team
        zzprogram like vbak-zzprogram,    "Program name
        zzseason  like vbak-zzseason,  "season
  "po info
        j_3asize like ta_sku-j_3asize, "grid
        color(12type c ,   "color
        color_remark(40type c"conversion remark
        poqty    like ekpo-menge,  " Fabric Qty Purchased
        pouom    like ekpo-meins,  "unit
        lifnr like ekko-lifnr,  "vendor code
        name like lfa1-name1,   "vendor name
        maktx2 like makt-maktx, "material description
*        zzwash   like ekko-zzwash, "washing method
  " gr info
        gr_qty like mseg-menge,
        foc_qty like mseg-menge,
        sample_qty like mseg-menge,
  " mm info
        width(30)  type c,  "washing method
        wtext(50type c,
        ycout(30)  type c,
        vshag(30)  type c,
        hshag(30)  type c,
        ftype(30)  type c,
        fcont(30)  type c,  "Fibre Content

        ttlshipqty like vbrp-FKIMG,
        left_qty like mchb-clabs,

        waerk like vbak-waerk, "M1 add
      end of it_out_mf.

databegin of  it_out_ms occurs 0,
  matnr like mara-matnr,
  posnr like vbep-posnr,
  etenr like vbep-etenr,
  kunnr  like vbak-kunnr,
  name1  like kna1-name1,  "customer name
  j_3asize like vbep-j_3asize,
*  grid type CHAR20,
  grid type j_3aentx8,
  remark(40type c,
  size type J_3ASIZE,
  ordqty like vbep-wmeng,
  delqty like vbep-lmeng,
  end of it_out_ms.

databegin of itab1 occurs 0,
        text(1000),
      end of itab1.
data itab2 like itab1 occurs 0 with header line.
data itab3 like itab1 occurs 0 with header line.
data itab4 like itab1 occurs 0 with header line.


 databegin of it_fab_mtm occurs 0,
    matnr like mseg-matnr,
    j_4ksca like mseg-j_4ksca,
    j_3asiz like mseg-j_3asiz,
    bwart like mseg-bwart,
    menge like mseg-menge,
    meins like mseg-meins,
    j_4kumsc like mseg-j_4kumsc,
    shkzg like mseg-shkzg,
    status type c,
    j_3aentx8 type J_3AENTX8,
    j_3aentx type J_3AENTX,
    J_3ANOTE TYPE J_3ANOTE,
 end of it_fab_mtm.



 databegin of it_fg_mtm occurs 0.
   include structure it_fab_mtm.
 data:  grid type j_3aentx8,
    remark(40type c,
    size type J_3ASIZE,
   end of it_fg_mtm.


*----------------------------------------------------------------------*
*  Parameter & Select-Options
*----------------------------------------------------------------------*

select-options: s_vbeln  for vbak-vbeln.  " obligatory.
select-options: s_zzfty  for vbak-zzfty obligatory.
select-options: s_werks  for vbrp-werks.
select-options: s_udate  for jcds-udate obligatory. "so close date


*select-options: s_udate  for vbak-erdat no-display.
*select-options: s_mdate  for vbak-erdat no-display.
*select-options: mm_matnr for mara-matnr no-display.

selection-screen skip.
parameter: gvfield1 like rlgrap-filename.

selection-screen begin of block 2.
parameter: zfgd radiobutton group job default 'X'.
parameter: zbgd radiobutton group job.
selection-screen end of block 2.


data:gvfielda like rlgrap-filename.
data:gvfieldb like rlgrap-filename.
data:gvfieldc like rlgrap-filename.
data:gvfieldd like rlgrap-filename.

*----------------------------------------------------------------------*
*                INITIALIZATION                                        *
*----------------------------------------------------------------------*
initialization.
s_udate-sign  = 'I'.
s_udate-option = 'EQ'.
s_udate-low = sy-datum - 1.
clear s_udate-high.
append s_udate. clear s_udate.
*----------------------------------------------------------------------*
*                AT SELECTION-SCREEN                                   *
*----------------------------------------------------------------------*
at selection-screen on value-request for gvfield1.
  call function 'WS_FILENAME_GET'
       exporting
            def_path = 'C:\'
            mask     = ',*.*,*.*.'
            mode     = 'O'
       importing
            filename = gvfield1
       exceptions
            selection_cancel = 1
            selection_error = 2
            others = 3.
at selection-screen.
    if gvfield1 is initial.
      message i058(zpp01) with 'You must enter a download path!'.
      stop.
    endif.
*----------------------------------------------------------------------*
*                Start of Processing                                   *
*----------------------------------------------------------------------*
start-of-selection.
perform get_so.
perform get_so_detail.
perform get_bom_from_so.
perform get_po.
perform get_gr.
perform get_shipped.
perform join_data_mf.
perform get_garment_ship.
perform get_gr_mtm.
perform down_file.
end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  GET_SO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_SO .
data lt_jcds  like jcds occurs 0 with header line.
data l_objnr like jcds-objnr.
data l_vbeln like vbak-vbeln.
data  wa_stat   like jest-stat.
l_objnr(3) = 'VB%' .
select * into table lt_jcds from jcds
  where objnr like l_objnr
    and stat = 'E0004'
    and udate in s_udate
    and inact = space.

loop at lt_jcds.
  clear l_vbeln.
  l_vbeln = lt_jcds-objnr+2(10).
  check l_vbeln in s_vbeln.
  clear wa_stat.
  select single stat into wa_stat from jest
                  where objnr = lt_jcds-objnr
                    and inact = space.
  if wa_stat ne 'E0004'.
    continue.
  endif.
  select single * from vbak
    where vbeln eq l_vbeln
    and zzfty in s_zzfty
    and vkorg in s_werks.
  if sy-subrc = 0.
    gt_so-vbeln = l_vbeln.
    gt_so-udate = lt_jcds-udate.
    collect gt_so.
  endif.
endloop.
if gt_so[] is initial.
  message i058(zpp01) with 'No record!'.
  stop.
endif.



ENDFORM.                    " GET_SO
*&---------------------------------------------------------------------*
*&      Form  GET_SO_DETAIL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_SO_DETAIL .
data lv_tabix type i.
check gt_so[] is not initial.
data: *vbrp  like it_vbrp occurs 0 with header line.
data l_mvgr1 like vbap-mvgr1.

select distinct b~aubel as vbeln  b~matnr as j_4kscat a~fkdat a~vbeln as invno a~fkart a~sfakn
      into corresponding fields of table it_vbrp
      from  vbrk as a
      inner join vbrp as b on a~vbeln = b~vbeln
      inner join vbak as c on b~aubel = c~vbeln
      for all entries in gt_so
      where b~aubel eq gt_so-vbeln
        and c~zzfty in s_zzfty
        and a~fkart in ('F2''S1')
        and b~werks in s_werks.
  *vbrp[] = it_vbrp[].
  loop at it_vbrp where fkart = 'F2'.
    lv_tabix = sy-tabix.
    read table *vbrp with key sfakn = it_vbrp-invno.
    if sy-subrc = 0.
      delete it_vbrp index lv_tabix.
    endif.
  endloop.

  delete it_vbrp where fkart = 'S1'.


select vbeln vkgrp kunnr zzco zzfty netwr zzcom waerk as waers
      bukrs_vf as bukrs
      zzprogram zzseason zzcom bname
      into corresponding fields of table it_vbak
      from vbak
      for all entries in gt_so
      where vbeln = gt_so-vbeln.

*sort it_vbak by bukrs.
*loop at it_vbak.
*  at new bukrs.
*    AUTHORITY-CHECK OBJECT 'Z_CO_PLANT'
*             ID 'ACTVT' FIELD '01'
*             ID 'BUKRS' FIELD it_vbak-bukrs
*             ID 'WERKS' DUMMY.
*    if sy-subrc ne 0.
*      message e001(zzco) with
*          'You don''t have the authorization for company code'(005) it_vbak-bukrs.
*      exit.
*    endif.
*  endat.
*endloop.
  sort gt_so by vbeln udate descending.
  loop at it_vbak.
    lv_tabix = sy-tabix.
    read table gt_So with key vbeln = it_vbak-vbeln.
    if sy-subrc = 0.
      it_vbak-udate = gt_so-udate.
    endif.

    clear: l_mvgr1 .

    select single matnr werks vrkme mvgr2
          into (it_vbak-matnr, it_vbak-werks, it_vbak-vrkme, l_mvgr1)
          from vbap
          where vbeln = it_vbak-vbeln
            and abgru = space.
    if sy-subrc = 0.
      select single maktx into it_vbak-maktx from makt  "material description
                          where matnr = it_vbak-matnr.
*      select single bezei into it_vbak-bezei  "get product type
*        from tvm2t
*        where mvgr2 = l_mvgr1.
        it_vbak-bezei = l_mvgr1. " add by daniel on 2012.02.20
    endif.

    perform get_last_FG_div_date.
    perform get_last_invoice_date.

      it_vbak-uom = 'PC'.

    if it_vbak-zzcom > 0.
      it_vbak-kwmeng = it_vbak-kwmeng * it_vbak-zzcom.
    endif.

    select single landx into it_vbak-landx from t005t  "Country Name
      where spras = sy-langu
        and land1 = it_vbak-zzco.

    select single description into it_vbak-zzftyd from ztfty  "Description - Factory Group
                                            where zzfty = it_vbak-zzfty.

    select single name1 into it_vbak-name1 from kna1   "customer name
                                           where kunnr = it_vbak-kunnr.

    select sum( kwmeng )  into it_vbak-kwmeng from vbap  "order qty
                                           where vbeln = it_vbak-vbeln
                                             and abgru = space.

    clear it_vbak-aprice.
    perform get_average_price.
*   18/04/06 : SET/PACK
    if it_vbak-kwmeng ne 0.
      it_vbak-kbetr = it_vbak-aprice / it_vbak-kwmeng.
    else.
      it_vbak-kbetr = '0'.
    endif.

*   18/04/06 : get mechanising team
    select single kunnr into it_vbak-mteam from
           vbpa where vbeln = it_vbak-vbeln and
                      posnr = '000000' and
                      parvw = 'Z2'.

    modify it_vbak index lv_tabix.
  endloop.

ENDFORM.                    " GET_SO_DETAIL
*&---------------------------------------------------------------------*
*&      Form  GET_AVERAGE_PRICE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_AVERAGE_PRICE .
    data : r_knumv like vbrk-knumv.
    data : begin of t_bill occurs 0,
             kwert  like  konv-kwert,
           end of t_bill.

    select single knumv into r_knumv from vbak
           where vbeln = it_vbak-vbeln.

    select * from vbap where vbeln = it_vbak-vbeln
                       and   abgru = space.
      select * from konv where knumv = r_knumv and
                               kschl in ('ZCKB''ZCKP'and
                               kinak = space and
                               kposn = vbap-posnr.
          move-corresponding konv to t_bill.
          collect t_bill.
      endselect.
    endselect.

    read table t_bill index 1.
    if sy-subrc = 0.
      it_vbak-aprice = t_bill-kwert.
    else.
      it_vbak-aprice = '0'.
    endif.
ENDFORM.                    " GET_AVERAGE_PRICE
*&---------------------------------------------------------------------*
*&      Form  GET_LAST_FG_DIV_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_LAST_FG_DIV_DATE .
*M2 remark
*  select single a~aedat into it_vbak-aedat
*        from ekko as a inner join ekpo as b on a~ebeln = b~ebeln
*        where b~j_4kscat = it_vbak-vbeln
*          and b~loekz = space
*          and a~autlf = 'X'
*          and a~bsart in ('ZPF', 'ZPM').
*M2 end

*M2 add

*"  get Ex-fty Date
select max( a~j_3aasdt ) into it_vbak-aedat from vbrp as a
  inner join vbap as b
  on a~aubel = b~vbeln and a~aupos = b~posnr
  inner join vbrk as c
  on a~vbeln = c~vbeln
  where a~aubel = it_vbak-vbeln
    and b~abgru eq space
    and c~sfakn eq space.
*M2 end
ENDFORM.                    " GET_LAST_FG_DIV_DATE
*&---------------------------------------------------------------------*
*&      Form  GET_LAST_INVOICE_DATE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_LAST_INVOICE_DATE .
 data: r_fkdat  like  vbrk-fkdat.
  clear r_fkdat.
  loop at it_vbrp where vbeln = it_vbak-vbeln.
      if it_vbrp-fkdat > r_fkdat.
        r_fkdat = it_vbrp-fkdat.
      endif.
  endloop.
  if r_fkdat ne '00000000'.
     it_vbak-fkdat = r_fkdat.
  endif.
ENDFORM.                    " GET_LAST_INVOICE_DATE
*&---------------------------------------------------------------------*
*&      Form  GET_BOM_FROM_SO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_BOM_FROM_SO .

  data: lv_downfile(1type c.
  clear: ta_stpo[], ta_sku[], it_matnr[].
  loop at it_vbak.
    clear ta_stpo2[].
    p_num1 = 0.
    perform get_bom using it_vbak-vbeln p_num1.
    describe table ta_stpo2 lines i.
    if i > 0.
      perform get_component_requirement.
    endif.

    loop at ta_stpo2.
      clear ta_stpo.
      move ta_stpo2 to ta_stpo.
      append ta_stpo.
    endloop.
  endloop.

  sort ta_stpo by hindex stlnr stlkn.
  delete ta_stpo where mtart ne 'ZFAB'.
  delete it_matnr where mtart ne 'ZFAB'.

  data: *matnr  like it_matnr occurs 0 with header line.
  data: it_mbew like mbew occurs 0 with header line.

*  check fabric type
  loop at it_matnr.
    clear it_mbew[].
     select * into table it_mbew from mbew where matnr = it_matnr-matnr
                                     and bwtar = 'NORMAL'
                                     and bklas = '3000'
                                     and bwkey = it_matnr-werks. "add on 2012.02.20


        read table it_mbew index 1.
        if sy-subrc = 0.
           move it_matnr to *matnr.
           *matnr-bklas = it_mbew-bklas.
           append *matnr.
        endif.
  endloop.

  it_matnr[] = *matnr[].
  clear it_conv[].
  loop at it_matnr.
    it_conv-matnr = it_matnr-matnr.
    case it_matnr-bklas.
    when '3000'.
        it_conv-type = 'Main Fabric'.
    endcase.
    select single maktx into it_conv-maktx from makt
                        where matnr = it_conv-matnr.
    it_conv-scale = '1'.
    append it_conv.
  endloop.
  describe table it_conv lines i.
  if i <= 0.
     message i058(zpp01) with 'No record found '.
     stop.
  endif.

ENDFORM.                    " GET_BOM_FROM_SO
*&---------------------------------------------------------------------*
*&      Form  GET_BOM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_VBAK_VBELN  text
*      -->P_P_NUM1  text
*----------------------------------------------------------------------*
FORM GET_BOM  USING   p_matnr p_num.
  data: wa_stpo like ta_stpo.
  data: wa_return like BAPIRET2 occurs 0 with header line.
  data: t_num like p_num1.
  data: wa_mtart  like mara-mtart.

  clear: wa_stpo.  ", ta_bom.

  select d~bmeng a~stlnr a~stlkn a~stpoz a~idnrk c~maktx a~menge
         a~meins mtart sortf erskz ausch e~meins as buom b~werks " add werks by daniel
*         RFPNT as status
        into corresponding fields of wa_stpo
        from stpo as a inner join mast as b on a~stlnr = b~stlnr
                       inner join makt as c on a~idnrk = c~matnr
                       inner join stko as d on d~stlnr = a~stlnr
                       inner join mara as e on e~matnr = a~idnrk
        where b~matnr = p_matnr
          and b~werks = it_vbak-werks
          and d~stlty = 'M'.

    move wa_stpo to ta_stpo2.
*    if ta_stpo2-status = space.
*      ta_stpo2-status = 'BFC'.
*    endif.
    ta_stpo2-hmat = p_matnr.
    ta_stpo2-werks = it_vbak-werks.
    ta_stpo2-vbeln = it_vbak-vbeln.

    select single mtart into wa_mtart from mara where matnr = p_matnr.
    if wa_mtart = 'ZYRN'.
      ta_stpo2-twist = 'X'.
    else.
      clear ta_stpo2-twist.
    endif.

    refresh wa_return.
    CALL FUNCTION 'BAPI_MAT_BOM_EXISTENCE_CHECK'
       EXPORTING
         MATERIAL              = wa_stpo-idnrk
         PLANT                 = it_vbak-werks
         BOMUSAGE              = '1'
       TABLES
         RETURN                = wa_return.

    p_num = p_num + 1.
    ta_stpo2-hindex = p_num.
    read table wa_return index 1.
    if sy-subrc ne 0.
      ta_stpo2-bom = 'X'.
      t_num = p_num * 100.
      append ta_stpo2.
      perform get_bom using wa_stpo-idnrk t_num.
    else.
      append ta_stpo2.
    endif.
    clear wa_stpo.
  endselect.
ENDFORM.                    " GET_BOM
*&---------------------------------------------------------------------*
*&      Form  GET_COMPONENT_REQUIREMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_COMPONENT_REQUIREMENT .
  databegin of it_j_3abomd occurs 0,
          vbeln       like vbap-vbeln,
          j_3akordx   like j_3abomd-j_3akordx,
          j_3akordxl  like j_3abomd-j_3akordxl,
          menge       like j_3abomd-menge,
        end of it_j_3abomd.
  data: wa_comqty   like stpo-menge.
  data: wa_hindex   like ta_stpo-hindex,
        cal_menge   like ta_zcpsku-menge.
  data: wa_char3(8type c,
        wa_len3     type i.
  data: wa_col1     like it_j_3abomd-j_3akordxl.
  data: tp_hindex   like wa_hindex.
  data: wa_matnr    like mara-matnr.
  data: lv_menge    like stpo-menge.
  data: no_sku      type i.

  concatenate it_vbak-vbeln '%' into wa_matnr.

  clear: it_mast[], it_abomd[], it_vbep[], it_abdsi[].

*  select stlnr into table it_mast from mast
*                                  where matnr like wa_matnr.
  loop at ta_stpo2.
    it_mast-stlnr = ta_stpo2-stlnr.
    collect it_mast.
  endloop.

  select stlnr stlkn j_3akordx j_3akordxl menge
        into table it_abomd
        from j_3abomd
        for all entries in it_mast
        where stlnr = it_mast-stlnr.

  select * into table it_vbep from vbep
                              where vbeln = it_vbak-vbeln
                                and wmeng > 0
                                and J_3AABGRU = space.

  select * into table it_abdsi from j_3abdsi
                               where j_4krcat = it_vbak-vbeln.

  sort ta_stpo2 by hindex stlnr stlkn ERSKZ.

  clear ta_zcpsku[].
  loop at ta_stpo2 where vbeln = it_vbak-vbeln.
    lv_tabix = sy-tabix.

    tp_zcpsku[] = ta_zcpsku[].

    clear wa_comqty.

    refresh it_j_3abomd.

    clear: lv_menge, no_sku.
    loop at it_abomd where stlnr = ta_stpo2-stlnr
                       and stlkn = ta_stpo2-stlkn.
*      if it_abomd-J_3AKORDX ne 'ZZZ'.
*        add it_j_3abomd-menge to lv_menge.
*        add 1 to no_sku.
*      endif.

      if ta_stpo2-twist = 'X'.
        wa_col1 = it_abomd-j_3akordxl.

        tp_hindex = ta_stpo2-hindex(18).
        shift tp_hindex right deleting trailing space.
        overlay tp_hindex with '00000000000000000000' only space.

        read table ta_zcpsku with key hindex = tp_hindex
                                      j_3asize = wa_col1.
        if sy-subrc eq 0.
          move-corresponding it_abomd to it_j_3abomd.
          append it_j_3abomd.
        endif.
      else.
        tp_hindex = ta_stpo2-hindex(18).
        shift tp_hindex right deleting trailing space.
        overlay tp_hindex with '00000000000000000000' only space.

        read table it_vbep with key vbeln = it_vbak-vbeln
                                    j_3asize = it_abomd-j_3akordxl.
        if sy-subrc eq 0.
          move-corresponding it_abomd to it_j_3abomd.
          append it_j_3abomd.
        endif.
      endif.
    endloop.

    read table it_j_3abomd index 1.
    if sy-subrc ne 0.
      continue.
    endif.

    clear ta_zcpsku.

    sort it_j_3abomd by j_3akordx.
    clear: lv_menge, no_sku.
    loop at it_j_3abomd.
      add it_j_3abomd-menge to lv_menge.
      add 1 to no_sku.

      clear wa_hindex.

      ta_zcpsku-idnrk = ta_stpo2-idnrk.
      ta_zcpsku-hindex = ta_stpo2-hindex.
      ta_zcpsku-stlnr = ta_stpo2-stlnr.
      ta_zcpsku-vbeln = it_vbak-vbeln.
      ta_zcpsku-j_3asize = it_j_3abomd-j_3akordx.
      ta_zcpsku-mtart = ta_stpo2-mtart.
      ta_zcpsku-werks = ta_stpo2-werks. "m3 add

      if ta_stpo2-meins ne ta_stpo2-buom.
        CALL FUNCTION 'MATERIAL_UNIT_CONVERSION'
          EXPORTING
            INPUT                        = wa_input
            MATNR                        = ta_stpo2-idnrk
            MEINH                        = ta_stpo2-meins
          IMPORTING
            OUTPUT                       = wa_output
            UMREN                        = WA_UMREN
            UMREZ                        = WA_UMREZ.
     else.
        wa_umren = 1.
        wa_umrez = 1.
      endif.

      if ta_stpo2-hindex < 100.
        loop at it_vbep where vbeln = it_vbak-vbeln
                          and j_3asize = it_j_3abomd-j_3akordxl.
          cal_menge = it_j_3abomd-menge * it_vbep-wmeng
                      / ta_stpo2-bmeng * ( 1 + ta_stpo2-ausch / 100 )
                      * wa_umrez / wa_umren.

          ta_zcpsku-menge = ta_zcpsku-menge + cal_menge.
          ta_zcpsku-oreq  = it_j_3abomd-menge.
        endloop.
      else.
        wa_len3 = strlen( it_j_3abomd-j_3akordxl ).
        wa_char3 = it_j_3abomd-j_3akordxl.

        loop at tp_zcpsku where hindex = tp_hindex
                            and j_3asize = it_j_3abomd-j_3akordxl.
          cal_menge = it_j_3abomd-menge * tp_zcpsku-menge
                      / ta_stpo2-bmeng * ( 1 + ta_stpo2-ausch / 100 )
                      * wa_umrez / wa_umren.
          ta_zcpsku-menge = ta_zcpsku-menge + cal_menge.
          ta_zcpsku-oreq  = it_j_3abomd-menge.
        endloop.
      endif.

*      at end of j_3akordx.
        CALL FUNCTION 'Z_CONVERSION_VALUE'
               EXPORTING
                 MATNR             = ta_stpo2-idnrk
                 J_3ASIZE          = ta_zcpsku-j_3ASIZE
               IMPORTING
                 CONV_LENTRY       = ta_zcpsku-lentry
                 CONV_GENTRY       = ta_zcpsku-gentry
                 SORTSEQ           = ta_zcpsku-sortseq.

*        wa_comqty = wa_comqty + ta_zcpsku-menge.

        append ta_zcpsku.
        clear ta_zcpsku.
*      endat.
    endloop.

    ta_stpo2-oreq = ta_stpo2-menge.
*    ta_stpo2-req  = wa_comqty.

    if no_sku <> 0.
      ta_stpo2-avgmng = lv_menge / no_sku.
    endif.
    modify ta_stpo2 index lv_tabix.
  endloop.

  loop at ta_zcpsku.
    clear ta_sku.
    move ta_zcpsku to ta_sku.
    collect ta_sku.

    clear it_matnr.
    it_matnr-j_4kscat = it_vbak-vbeln.
    it_matnr-matnr = ta_sku-idnrk.
    it_matnr-mtart = ta_sku-mtart.
    it_matnr-werks = it_vbak-werks. "add by daniel on 2012.02.20
    collect it_matnr.
  endloop.
ENDFORM.                    " GET_COMPONENT_REQUIREMENT
*&---------------------------------------------------------------------*
*&      Form  GET_PO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_PO .
  data: wa_banfn like eban-banfn.
  data: l_waers  like ekko-waers  value 'USD'.

  clear it_po[].
*  clear it_rpo[].

  check not it_matnr[] is initial.

*"Get Material, Color and PO qty
  select c~ebeln c~ebelp c~etenr b~matnr c~j_3asize c~menge
         b~meins as meins
         b~j_4kscat b~konnr a~lifnr d~name1 a~waers b~netwr a~bedat
         a~bukrs a~adrnr a~zzwash "b~zztest b~zzsample
        into table it_po
        from ekko as a inner join ekpo as b on a~ebeln = b~ebeln
                       inner join eket as c on b~ebeln = c~ebeln and
                                               b~ebelp = c~ebelp
                       inner join lfa1 as d on a~lifnr = d~lifnr
        for all entries in it_matnr
        where b~matnr = it_matnr-matnr
          and b~j_4kscat = it_matnr-j_4kscat
          and b~j_4kscat in s_vbeln
          and b~loekz = space
          and b~zzsample = space
          and b~zztest = space
          and a~bstyp = 'F'
          and a~bsart in ('ZER''ZAR').

*M3 add
 perform get_mat_without_po.
 sort it_po by j_4kscat matnr j_3asize.
*M3 end
 loop at it_po.
   lv_tabix = sy-tabix.
   perform get_material_attribute using it_po-matnr.
    read table it_matnr with key matnr = it_po-matnr flag = 'X'.
    if sy-subrc = 0.
      it_po-yield = it_matnr-yield.
      it_po-width = it_matnr-width.
*     18/04/06 : fabric type for CAL
      if it_matnr-j_4kscat(1) = '5'.
*"Add yarn count shrinkage v/h
         concatenate it_matnr-ycout it_matnr-ftype into it_matnr-ftype
            separated by space.
         it_po-ftype = it_matnr-ftype.
      else.
         select * from ekpo where ebeln = it_po-ebeln and
                                loekz = space and
                                zzfabtyp <> space
                                order by zzfabtyp descending.
          it_po-ftype = ekpo-zzfabtyp.
        endselect.
      endif.
      it_po-fcont = it_matnr-fcont.

*"Add yarn count shrinkage v/h
      if it_matnr-j_4kscat(1) = '5' or it_matnr-j_4kscat(1) = '6'.
          it_po-vshag = it_matnr-vshag.
          it_po-hshag = it_matnr-hshag.
      endif.
    endif.

    select single wtext into it_po-wtext from zmm_wash
                        where bukrs = it_po-bukrs
                          and zzwash = it_po-zzwash.
    if sy-subrc ne 0.
      it_po-wtext = it_po-zzwash.
    endif.

    modify it_po index lv_tabix.
 endloop.

  loop at it_po.
   it_po_mat-vbeln = it_po-j_4kscat.
   it_po_mat-matnr = it_po-matnr.
   it_po_mat-j_3asize = it_po-j_3asize.
   it_po_mat-poqty = it_po-poqty.
   it_po_mat-pouom = it_po-pouom.
   it_po_mat-lifnr = it_po-lifnr.
   it_po_mat-name1 = it_po-name1.
   it_po_mat-zzwash = it_po-zzwash.
   it_po_mat-wtext = it_po-wtext.
   collect it_po_mat.
 endloop.
 loop at it_po_mat.
   lv_tabix = sy-tabix.
   select sum( clabs ) into it_po_mat-left_qty from mchb
     where matnr = it_po_mat-matnr
       and J_4KSCAT = it_po_mat-vbeln
       and j_3asize = it_po_mat-j_3asize
       and lgort like '5%7'.

   select single maktx into it_po_mat-maktx2 from makt  "material description
                          where matnr = it_po_mat-matnr.

   CALL FUNCTION 'Z_CONVERSION_VALUE'
         EXPORTING
           MATNR             = it_po_mat-MATNR
           J_3ASIZE          = it_po_mat-j_3ASIZE
         IMPORTING
           J_3AENTX8      = it_po_mat-J_3AENTX8
           J_3AENTX       = it_po_mat-J_3AENTX
           J_3ANOTE       = it_po_mat-J_3ANOTE.

   modify it_po_mat index lv_tabix.
 endloop.


ENDFORM.                    " GET_PO
*&---------------------------------------------------------------------*
*&      Form  GET_GR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_GR .
  clear: it_gr[],it_gr_detail[].

  check not it_matnr[] is initial.

*"Get GR
  select * into corresponding fields of table it_gr
           from mseg as b inner join mkpf as a on a~mblnr = b~mblnr
           for all entries in it_matnr
           where b~matnr = it_matnr-matnr and
                 b~j_4ksca = it_matnr-j_4kscat and
                 b~j_4ksca in s_vbeln and
                 b~bwart in ('101''102''511''512''309''310',
                             '122''123''922''923''933','934') .

  loop at it_gr.
    lv_tabix = sy-tabix.
    if it_gr-bwart = '102' or it_gr-bwart = '512' or
       it_gr-bwart = '122' or it_gr-bwart = '922' or it_gr-bwart = '934'.
      it_gr-menge = 0 - it_gr-menge.
      it_gr-erfmg = 0 - it_gr-erfmg.
    endif.
    if it_gr-bwart = '102'.
      it_gr-bwart = '101'.
    endif.
    if it_gr-bwart = '122'.
      it_gr-bwart = '123'.
    endif.
    if it_gr-bwart = '922'.
      it_gr-bwart = '923'.
    endif.
    if it_gr-bwart = '512'.
      it_gr-bwart = '511'.
    endif.
    if it_gr-bwart = '934'.
      it_gr-bwart = '933'.
    endif.
    modify it_gr index lv_tabix.
  endloop.
  sort it_gr by j_4ksca matnr j_3asiz bwart lifnr.
  loop at it_gr.
    clear it_gr_detail.
    it_gr_detail-matnr = it_gr-matnr.
    it_gr_detail-j_4ksca = it_gr-j_4ksca.
    it_gr_detail-j_3asiz = it_gr-j_3asiz.
    if ( it_gr-bwart = '101' or it_gr-bwart = '123' or it_gr-bwart = '923' )
       and it_gr-lgort <> '1062' and it_gr-lgort <> '1052' .
      it_gr_detail-gr_menge = it_gr-menge.
    endif.
    if it_gr-bwart = '511' and it_gr-lgort <> '1062' and it_gr-lgort <> '1052'.
      it_gr_detail-foc_menge = it_gr-menge.
    endif.
    if  it_gr-lgort = '1052' " or it_gr-lgort = '1062' )
       and  it_gr-bwart = '933'.
      it_gr_detail-sample_qty = it_gr-menge.
    endif.
*    it_Gr_detail-lifnr = it_Gr-lifnr.
    collect it_gr_detail.
  endloop.

ENDFORM.                    " GET_GR
*&---------------------------------------------------------------------*
*&      Form  GET_MATERIAL_ATTRIBUTE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_PO_MAT_MATNR  text
*----------------------------------------------------------------------*
FORM GET_MATERIAL_ATTRIBUTE  USING    P_MATNR.
  data: lv_tabix like sy-tabix.
* CLASS and allocated Characteristic DATA
  DATA: L_CLASS TYPE KLASSE_D,
        L_CLASSTYPE TYPE KLASSENART VALUE '001'.
* API DATA
  DATA: LT_CLA_CH_AT type standard table of CLA_CH_AT initial size 20,
        LF_CLA_CH_AT like line of lt_CLA_CH_AT,
        LT_CHA_VALDSC type standard table of cha_valdsc initial size 20.
  data: t_atwrt(14type c value 'it_matnr-'.
  field-symbols: <f_atwrt>.

*"Get Material Classification
  clear lv_tabix.
  read table it_matnr with key matnr = p_matnr
                               flag = 'X'.
  if sy-subrc ne 0.
    read table it_matnr with key matnr = p_matnr.
    if sy-subrc = 0.
      lv_tabix = sy-tabix.
    endif.
  endif.

  if lv_tabix ne 0.
    l_class = it_matnr-mtart.

*"Get Attribute Name
    CALL FUNCTION 'CARD_CLASS_READ_CHARACTS'
       EXPORTING
            class                  = L_CLASS
            class_type             = L_CLASSTYPE
       tables
            characteristics        = LT_CLA_CH_AT
            characteristics_values = LT_CHA_VALDSC
       EXCEPTIONS
             ERROR_MESSAGE = 1
             OTHERS = 2.
    if sy-subrc = 0.
      loop at lt_cla_ch_at into lf_cla_ch_at.
        t_atwrt+9(5) = ''.
        case lf_cla_ch_at-charact+5(25).
          when 'GROUP'.
            t_atwrt+9(5) = 'FTYPE'.
            assign (t_atwrt) to <f_atwrt>.
          when 'FIBRE_CONTENT'.
            t_atwrt+9(5) = 'FCONT'.
            assign (t_atwrt) to <f_atwrt>.
          when 'GROSS_WIDTH'.
            t_atwrt+9(5) = 'WIDTH'.
            assign (t_atwrt) to <f_atwrt>.
*         M1
*          when 'WEIGHT_AW'.
          when 'WEIGTH_BW'.
            t_atwrt+9(5) = 'YIELD'.
            assign (t_atwrt) to <f_atwrt>.

*"Add yarn count shrinkage v/h
          when 'YARN_COUNT'.
            t_atwrt+9(5) = 'YCOUT'.
            assign (t_atwrt) to <f_atwrt>.
          when 'SHRINKAGE_VERTICAL'.
            t_atwrt+9(5) = 'VSHAG'.
            assign (t_atwrt) to <f_atwrt>.
          when 'SHRINKAGE_HORIZONTAL'.
            t_atwrt+9(5) = 'HSHAG'.
            assign (t_atwrt) to <f_atwrt>.
*"End modification
        endcase.

*       get classification value
        if t_atwrt+9(5ne ''.
          select single a~atwrt into <f_atwrt>
                from ausp as a inner join cabn as b on a~atinn = b~atinn
                where a~objek = p_matnr
                  and atnam = lf_cla_ch_at-charact.
        endif.
      endloop.

*    set the BW & Width for LB to YD conversion
      perform set_conv_factor using it_matnr-matnr
                                    it_matnr-yield it_matnr-width.

    endif.

    it_matnr-flag = 'X'.
    modify it_matnr index lv_tabix.
  endif.
ENDFORM.                    " GET_MATERIAL_ATTRIBUTE
*&---------------------------------------------------------------------*
*&      Form  SET_CONV_FACTOR
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_MATNR_MATNR  text
*      -->P_IT_MATNR_YIELD  text
*      -->P_IT_MATNR_WIDTH  text
*----------------------------------------------------------------------*
FORM SET_CONV_FACTOR  USING   i_matnr i_yield i_width.
data: wa_width type p,
      wa_yield type p,
      wa_div   type p decimals 8,
      p_yield(30type c,
      p_width(30type c.

    p_yield = i_yield.
    p_width = i_width.
    loop at it_conv where matnr = i_matnr.
*      BM weight
       shift p_yield up to 'GMS' circular.
       if sy-subrc = 0.
          condense p_yield.
          wa_yield = p_yield+4(10).
       else.
         shift p_yield up to 'gms' circular.
         if sy-subrc = 0.
            condense p_yield.
            wa_yield = p_yield+4(10).
         else.
           shift p_yield up to 'GSM' circular.
           if sy-subrc = 0.
              condense p_yield.
              wa_yield = p_yield+4(10).
           else.
             shift p_yield up to 'gsm' circular.
             if sy-subrc = 0.
                condense p_yield.
                wa_yield = p_yield+4(10).
             else.
                wa_yield = 0.
             endif.
           endif.
         endif.
       endif.

*      Gross width
       shift p_width up to '"' circular.
       if sy-subrc = 0.
         condense p_width.
         wa_width = p_width+1(10).
       else.
         wa_width = 0.
       endif.

       wa_div = '0.00082' * wa_yield * wa_width * it_conv-scale.
       if wa_div > 0.
          it_conv-factor = wa_div / 16.
       else.
          it_conv-factor = 0.
       endif.

       it_conv-bweig  = wa_yield.
       it_conv-gwdth  = wa_width.
       modify it_conv.
    endloop.
ENDFORM.                    " SET_CONV_FACTOR
*&---------------------------------------------------------------------*
*&      Form  GET_SHIPPED
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_SHIPPED .
  data: *ship  like it_ship occurs 0 with header line.
  data: l_fkdat like vbrk-fkdat.

  clear it_ship[].

  check not it_vbak[] is initial.


    loop at it_vbak.
    select aubel aubel fkdat a~vbeln fkart sfakn fkimg vrkme kidno
          into it_ship
          from vbrk as a inner join vbrp as b on a~vbeln = b~vbeln
          where b~aubel = it_vbak-vbeln
            and a~fkart in ('F2''S1').
       collect it_ship.
    endselect.
    endloop.



  *ship[] = it_ship[].
  loop at it_ship where fkart = 'F2'.
    lv_tabix = sy-tabix.
    read table *ship with key sfakn = it_ship-invno
                              fkart = 'S1'.
    if sy-subrc = 0.
      delete it_ship index lv_tabix.
    else.
*    : fix user invoice cancellation error.
      read table *ship with key kidno = it_ship-invno
                                fkart = 'S1'.
      if sy-subrc = 0.
        delete it_ship index lv_tabix.
      endif.
    endif.
  endloop.

  delete it_ship where fkart = 'S1'.
ENDFORM.                    " GET_SHIPPED
*&---------------------------------------------------------------------*
*&      Form  JOIN_DATA_MF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM JOIN_DATA_MF .
sort it_gr_detail by  matnr j_4ksca j_3asiz.
sort it_po by matnr j_4kscat.
sort it_ship by vbeln.

loop at it_po_mat.
  clear it_gr_detail.
  read table it_gr_detail with key matnr = it_po_mat-matnr
                                   j_4ksca = it_po_mat-vbeln
                                   j_3asiz = it_po_mat-j_3asize.
*                                   lifnr = it_po_mat-lifnr.
  if sy-subrc = 0.
    it_out_mf-gr_qty = it_gr_detail-gr_menge.
    it_out_mf-foc_qty = it_gr_detail-foc_menge.
    it_out_mf-sample_qty = it_gr_detail-sample_qty.
  endif.
  clear it_po.
  read table it_po with key matnr = it_po_mat-matnr
                            j_4kscat = it_po_mat-vbeln.
  if sy-subrc = 0.
    it_out_mf-width = it_po-width.
    it_out_mf-vshag = it_po-vshag.
    it_out_mf-hshag = it_po-hshag.
    it_out_mf-ftype = it_po-ftype.
    it_out_mf-fcont = it_po-fcont.  "Fibre Content
  endif.
      clear it_vbak.
  read table it_vbak with key  vbeln = it_po_mat-vbeln.
  if sy-subrc = 0.
    move-corresponding it_vbak to it_out_mf.
  endif.
  loop at it_ship where vbeln = it_po_mat-vbeln.
    add it_ship-fkimg to it_out_mf-ttlshipqty.
  endloop.

  it_out_mf-vbeln = it_po_mat-vbeln.
  it_out_mf-matnr = it_po_mat-matnr.
  it_out_mf-j_3asize = it_po_mat-j_3asize.
  it_out_mf-poqty  = it_po_mat-poqty.
  it_out_mf-pouom  = it_po_mat-pouom.
  select single meins into it_out_mf-uom from mara where matnr = it_out_mf-matnr.
  it_out_mf-lifnr = it_po_mat-lifnr.
  it_out_mf-name = it_po_mat-name1.
  it_out_mf-wtext = it_po_mat-wtext.
  it_out_mf-left_qty = it_po_mat-left_qty.
  it_out_mf-maktx2 = it_po_mat-maktx2.
  it_out_mf-j_3asize = it_po_mat-j_3aentx8.
  it_out_mf-color = it_po_mat-j_3aentx.
  it_out_mf-color_remark = it_po_mat-j_3anote.
*M1 add
  select single waerk into it_out_mf-waerk from vbak where vbeln = it_out_mf-vbeln.
*M1 end

  append it_out_mf.
  clear it_out_mf.
endloop.
*M3 add
data tmp_mf like it_out_mf occurs 0 with header line.
data tmp_mf2 like it_out_mf occurs 0 with header line.
tmp_mf2[] = it_out_mf[].
loop at it_out_mf.
  lv_tabix = sy-tabix.

  if lv_tabix > 1.
    read table tmp_mf with key matnr = it_out_mf-matnr
                               vbeln = it_out_mf-vbeln
                               j_3asize = it_out_mf-j_3asize.
    if sy-subrc = 0.
      delete it_out_mf index lv_Tabix.
    else.
      append it_out_mf to tmp_mf.
    endif.
  else.
    append it_out_mf to tmp_mf.
  endif.
endloop.
loop at it_out_mf.
  lv_tabix = sy-tabix.
  clear it_out_mf-poqty.
  loop at tmp_mf2 where matnr = it_out_mf-matnr
                    and vbeln = it_out_mf-vbeln
                    and j_3asize = it_out_mf-j_3asize.

    it_out_mf-poqty = it_out_mf-poqty + tmp_mf2-poqty.
  endloop.
  modify it_out_mf  index lv_Tabix transporting poqty.
endloop.
*M3 end
ENDFORM.                    " JOIN_DATA_MF

*&---------------------------------------------------------------------*
*&      Form  DOWN_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWN_FILE .
  perform write_itab1.
  perform write_itab2.
  perform write_itab3.
  perform write_itab4.
 if itab1[] is not initial.
   perform create_fname using gvfield1 'M' sy-datum sy-uzeit
                        changing gvfielda .
 endif.
 if itab2[] is not initial.
   perform create_fname using gvfield1 'S' sy-datum sy-uzeit
                         changing gvfieldb.
 endif.
 if itab3[] is not initial.
   perform create_fname using gvfield1 'F' sy-datum sy-uzeit
                        changing gvfieldc.
 endif.
 if itab4[] is not initial.
   perform create_fname using gvfield1 'G' sy-datum sy-uzeit
                        changing gvfieldd.
 endif.
 IF zbgd eq 'X'.
   PERFORM batch_dl_mf.
   PERFORM batch_dl_fg_ship.
   PERFORM batch_dl_fab_io.
   perform batch_dl_fg_io.
 ELSE.
   PERFORM DOWN_FILE_mf.
   PERFORM DOWN_FILE_FG_ship.
   PERFORM DOWN_FILE_FAB_io.
   PERFORM DOWN_FILE_FG_io.
 ENDIF.

ENDFORM.                    " DOWN_FILE
*&---------------------------------------------------------------------*
*&      Form  WRITE_ITAB1
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_ITAB1 .
data: lv_texts(1000).
  data: l_qty     type i.
  data: wa_fabio like mseg-menge.
  data: r_fkdat  like  vbrk-fkdat.
  data: r_form   like  vbrk-fkdat,
        r_to     like  vbrk-fkdat.
  ranges: r_data for vbrk-fkdat.
  data: lv_fkimg2 like vbrp-fkimg.
  data: lv_fkimg3 like vbrp-fkimg.
  data: lv_fkart  like vbrk-fkart.
  data: lv_mvgr1  like vbap-mvgr1.
  data: lv_bezei2 like tvm1t-bezei.

  data: lv_landx(15type c,
        lv_zzftyd(30)  type c,
        lv_maktx(40)  type c,
        lv_bname(35)  type c,
        lv_vbeln(10)  type c,
        lv_name1(35)  type c,
        lv_vkgrp(3)   type c,
        lv_zzprogram(12)  type c,
        lv_bezei(50type c"product type
        lv_zzseason(4type c,
        lv_kwmeng(20type c,
        lv_kbetr(15)  type c,   "selling price
        lv_aedat(10)  type c,   " complete date
        lv_fkdat(10)  type c,   " invoice date
        lv_matnr(18)  type c,
        lv_maktx2(40type c,  "Fabric Description

        lv_lifnr(16)  type c,  "Vendor code
        lv_name2(35)  type c,  "Fabric Vendor

        lv_grid(8type c,
        lv_color(16type c,
        lv_remark(40type c,

        lv_poqty(16)  type c,
        lv_grqty(16)  type c,
        lv_focqty(16type c,
        lv_simpleqty(16type c,
        lv_buom(8type c,

        lv_width(30)  type c,
        lv_wtext(50)  type c"washing method
        lv_hshag(30type c,
        lv_vshag(30type c,
        lv_left(16type c,

        lv_ftype(30)  type c,
        lv_fcont(30)  type c,

        lv_fkimg(16)  type c,
        lv_udate(10type c.

 data lv_waerk(5type c"m1 add


check it_out_mf[] is not initial.
  clear:lv_texts.
  concatenate 'Prod. Site ' '|'
              'Factory' '|'
              'Description' '|'
              'Style' '|'
              'SO Number' '|'
              'Customer' '|'
              'Sales Group' '|'
              'Program Name' '|'
              'Product Type' '|'
              'Season' '|'
              'Order Quantity' '|'
              'Selling Price' '|'
              'Complete Date' '|'
              'Invoice Date' '|'
              'Fabric Material code' '|'
              'Fabric Description' '|'
              'Vendor Code' '|'
              'Fabric Vendor' '|'

              'Grid' '|'
              'Color' '|'
              'Conversion Remark' '|'

              'Fabric Qty Purchased' '|'
              'Fabric Qty Received' '|'
              'Fabric Free of Charge' '|'
              'Sample Qty Purchased' '|'
              'BUOM' '|'
              'Order fabric width' '|'
              'Washing Method' '|'

              'Shrinkage Horizontal' '|'
              'Shrinkage Vertical' '|'
              'Leftover Fabric' '|'

              'Fabric Type' '|'
              'Fibre Content' '|'

              'Shipped Qty' '|'
              'SO Closed Date' '|'
              'Currency' "M1 add
             into lv_texts.
  move lv_texts to itab1-text.
  APPEND itab1.
  clear:lv_texts.

   loop at it_out_mf.
      lv_landx = it_out_mf-landx.
      lv_zzftyd = it_out_mf-zzftyd.
      lv_maktx = it_out_mf-maktx.
      lv_bname  = it_out_mf-bname.
      lv_vbeln  = it_out_mf-vbeln.
      lv_name1  = it_out_mf-name1.
      lv_vkgrp  = it_out_mf-vkgrp.
      lv_zzprogram  = it_out_mf-zzprogram.
      lv_bezei = it_out_mf-bezei.
      lv_zzseason = it_out_mf-zzseason.

      l_qty = it_out_mf-kwmeng.
      lv_kwmeng = l_qty.
      lv_kbetr  = it_out_mf-kbetr.
*      lv_aedat  = it_out_mf-aedat.
      clear lv_aedat. "m2 add
      if it_out_mf-aedat ne '00000000'.
        concatenate it_out_mf-aedat+6(2'.' it_out_mf-aedat+4(2'.'
                    it_out_mf-aedat(4into lv_aedat.
      endif.

      if it_out_mf-fkdat ne '00000000'.
        concatenate it_out_mf-fkdat+6(2'.' it_out_mf-fkdat+4(2'.'
                    it_out_mf-fkdat(4into lv_fkdat.
      endif.
      if it_out_mf-udate ne '00000000'.
        concatenate it_out_mf-udate+6(2'.' it_out_mf-udate+4(2'.'
                    it_out_mf-udate(4into lv_udate.
      endif.

      lv_matnr  = it_out_mf-matnr.
      lv_maktx2 = it_out_mf-maktx2.
      lv_lifnr = it_out_mf-lifnr.
      lv_name2  = it_out_mf-name.
      lv_grid = it_out_mf-j_3asize.
      lv_color = it_out_mf-color.
      lv_remark = it_out_mf-color_remark.


      lv_poqty  = it_out_mf-poqty.
      lv_grqty  = it_out_mf-gr_qty.
      lv_focqty = it_out_mf-foc_qty.
      lv_simpleqty = it_out_mf-sample_qty.

      lv_width = it_out_mf-width.
      lv_wtext = it_out_mf-wtext.
      lv_hshag = it_out_mf-hshag.
      lv_vshag = it_out_mf-vshag.
      lv_left = it_out_mf-left_qty.
      lv_ftype = it_out_mf-ftype.
      lv_fcont = it_out_mf-fcont.
      lv_fkimg = it_out_mf-ttlshipqty.

      lv_buom = it_out_mf-uom.
      lv_waerk = it_out_mf-waerk. "M1 add
      concatenate
        lv_landx '|'
        lv_zzftyd '|'
        lv_maktx '|'
        lv_bname '|'
        lv_vbeln '|'
        lv_name1 '|'
        lv_vkgrp '|'
        lv_zzprogram '|'
        lv_bezei '|'
        lv_zzseason '|'
        lv_kwmeng '|'
        lv_kbetr '|'  "selling price
        lv_aedat '|'  " complete date
        lv_fkdat '|'  " invoice date
        lv_matnr '|'
        lv_maktx2 '|'  "Fabric Description

        lv_lifnr '|'  "Vendor code
        lv_name2 '|' "Fabric Vendor

        lv_grid '|'
        lv_color '|'
        lv_remark '|'

        lv_poqty '|'
        lv_grqty '|'
        lv_focqty '|'
        lv_simpleqty '|'
        lv_buom '|'

        lv_width '|'
        lv_wtext '|' "washing method
        lv_hshag '|'
        lv_vshag '|'
        lv_left '|'

        lv_ftype '|'
        lv_fcont '|'

        lv_fkimg '|'
        lv_udate '|'
        lv_waerk '|' "m1 add
        into lv_texts.

      condense lv_texts.
      move lv_texts to itab1-text.
      append itab1.

  endloop.
ENDFORM.                    " WRITE_ITAB1
*&---------------------------------------------------------------------*
*&      Form  BATCH_DL_MF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BATCH_DL_MF .
  data: lv_strlen type i.
  data: gvfield1 like rlgrap-filename.
*  data: lv_message(300).
  data: fflag type c.
  check itab1[] is not initial.
  open dataset gvfielda for output in text mode encoding UTF-8 WITH BYTE-ORDER MARK
      WITH SMART LINEFEED."in text mode encoding default.

  if sy-subrc = 0.
*//download data to file
    loop at itab1.
      transfer itab1 to gvfielda.
    endloop.

    close dataset gvfielda.

    lv_strlen = strlen( gvfielda ).
    write:/ 'File saved to ', gvfielda(lv_strlen).

  else.
    raise file_open_error.
  endif.
ENDFORM.                    " BATCH_DL_MF
*&---------------------------------------------------------------------*
*&      Form  DOWN_FILE_MF
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWN_FILE_MF .
data: gvfield1 like rlgrap-filename.
data: lv_file_name type string.
  data: lv_strlen type i.
  data: fflag type c.
  check itab1[] is not initial.
  lv_file_name = gvfielda.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = lv_file_name
          filetype = 'ASC'
          codepage = '4110'  "'4103'
*          replacement = '#'
*          write_field_separator = 'X'
          write_bom = 'X'
        TABLES
          data_tab = itab1.
*  call function 'WS_DOWNLOAD'
*       exporting
*            filename                = gvfielda
*            filetype                = 'ASC'
*       tables
*            data_tab                = itab1
*       exceptions
*            file_open_error         = 1
*            file_write_error        = 2
*            invalid_filesize        = 3
*            invalid_type            = 4
*            no_batch                = 5
*            unknown_error           = 6
*            invalid_table_width     = 7
*            gui_refuse_filetransfer = 8
*            customer_error          = 9
*            others                  = 10.
  if sy-subrc = 0.
   lv_strlen = strlen( gvfielda ).
   write:/ 'File saved to ', gvfielda(lv_strlen).
  endif.
ENDFORM.                    " DOWN_FILE_MF
*&---------------------------------------------------------------------*
*&      Form  CREATE_FNAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GVFIELD1  text
*      -->P_3970   text
*      -->P_SY_DATUM  text
*      -->P_SY_UZEIT  text
*----------------------------------------------------------------------*
FORM CREATE_FNAME  USING    p_fname p_type p_rundate p_time
                   changing   p_name.
data: lv_fname(100type c.
data: lv_i type i.
data: lv_c(1type c.

  write p_rundate to lv_fname yymmdd.
  concatenate 'MU' p_type s_zzfty-low lv_fname p_time into lv_fname.
  concatenate lv_fname '.txt' into lv_fname.
  lv_i = strlen( p_fname ).
  lv_i = lv_i - 1 .
  if lv_i > 1.
      lv_c = p_fname+lv_i(1).
  endif.
  if lv_c eq '\'.
      concatenate p_fname lv_fname into p_name.
  else.
      concatenate p_fname '\' lv_fname into p_name.
  endif.
ENDFORM.                    " CREATE_FNAME
*&---------------------------------------------------------------------*
*&      Form  WRITE_ITAB2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_ITAB2 .
data: lv_texts(1000).
data: lv_vbeln(18type c,
      lv_kunnr(10type c,
      lv_name1(40type c,
      lv_grid(8type c,
      lv_remark(40type c,
      lv_size(8type c,
      lv_ordqty(16type c,
      lv_delqty(16type c.


check it_out_ms[] is not initial.
clear:lv_texts.
concatenate 'SO' '|'
            'Customer Code' '|'
            'Customer' '|'
            'Grid Value' '|'
            'Conversion remark' '|'
            'Size' '|'
            'Order Qty' '|'
            'Delivery Qty' '|'
            into lv_texts.

  move lv_texts to itab2-text.
  APPEND itab2.
  clear:lv_texts.

  loop at it_out_ms.
      lv_vbeln = it_out_ms-matnr.
      lv_kunnr = it_out_ms-kunnr.
      lv_name1 = it_out_ms-name1.
      lv_grid = it_out_ms-grid.
      lv_remark = it_out_ms-remark.
      lv_size = it_out_ms-size.
      lv_ordqty = it_out_ms-ordqty.
      lv_delqty = it_out_ms-delqty.

      concatenate lv_vbeln '|'
                  lv_kunnr '|'
                  lv_name1 '|'
                  lv_grid '|'
                  lv_remark '|'
                  lv_size '|'
                  lv_ordqty '|'
                  lv_delqty
                  into lv_texts.
      condense lv_texts.
      move lv_texts to itab2-text.
      append itab2.

  endloop.


ENDFORM.                    " WRITE_ITAB2
*&---------------------------------------------------------------------*
*&      Form  BATCH_DL_FG_SHIP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BATCH_DL_FG_SHIP .
  data: lv_strlen type i.

  data: fflag type c.
  check itab2[] is not initial.
*** U1
*  open dataset gvfieldb for output in text mode encoding default.
    open dataset gvfieldb for output in text mode encoding UTF-8 WITH BYTE-ORDER MARK
      WITH SMART LINEFEED.

  if sy-subrc = 0.
*//download data to file
    loop at itab2.
      transfer itab2 to gvfieldb.
    endloop.

    close dataset gvfieldb.

    lv_strlen = strlen( gvfieldb ).
    write:/ 'File saved to ', gvfieldb(lv_strlen).

  else.
    raise file_open_error.
  endif.
ENDFORM.                    " BATCH_DL_FG_SHIP
*&---------------------------------------------------------------------*
*&      Form  DOWN_FILE_FG_SHIP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWN_FILE_FG_SHIP .
data: gvfield1 like rlgrap-filename.
data: lv_file_name type string.
  data: lv_strlen type i.
  data: fflag type c.
  check itab2[] is not initial.
  lv_file_name = gvfieldb.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = lv_file_name
          filetype = 'ASC'
          codepage = '4110'
*          replacement = '#'
*          write_field_separator = 'X'
          write_bom = 'X'
        TABLES
          data_tab = itab2.

*  call function 'WS_DOWNLOAD'
*       exporting
*            filename                = gvfieldb
*            filetype                = 'ASC'
*       tables
*            data_tab                = itab2
*       exceptions
*            file_open_error         = 1
*            file_write_error        = 2
*            invalid_filesize        = 3
*            invalid_type            = 4
*            no_batch                = 5
*            unknown_error           = 6
*            invalid_table_width     = 7
*            gui_refuse_filetransfer = 8
*            customer_error          = 9
*            others                  = 10.
  if sy-subrc = 0.
   lv_strlen = strlen( gvfieldb ).
   write:/ 'File saved to ', gvfieldb(lv_strlen).
  endif.
ENDFORM.                    " DOWN_FILE_FG_SHIP
*&---------------------------------------------------------------------*
*&      Form  GET_GARMENT_SHIP
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_GARMENT_SHIP .
  data: wa_lfimg like lips-lfimg.
  data: wa_lfimg2 like lips-lfimg.
clear it_vbep[].
data tmp_ms like it_out_ms occurs 0 with header line.
  select vbeln as matnr posnr ETENR j_3asize wmeng as ordqty "lmeng as delqty
    into corresponding fields of table it_out_ms from vbep
    for all entries in it_vbak
    where vbeln = it_vbak-vbeln
      and wmeng > 0
      and J_3AABGRU = space.

  loop at it_out_ms.
    lv_tabix = sy-tabix.
    clear: it_out_ms-posnr, it_out_ms-etenr.
    move it_out_ms to tmp_ms.
    collect tmp_ms.
    modify it_out_ms index lv_tabix.
  endloop.
  it_out_ms[] = tmp_ms[].
  clear: tmp_ms[].


  loop at it_out_ms.
    lv_tabix = sy-tabix.
    clear it_vbak.
    clear: it_out_ms-posnr, it_out_ms-etenr.
    read table it_vbak with key vbeln = it_out_ms-matnr.
    if sy-subrc = 0.
      it_out_ms-kunnr = it_vbak-kunnr.
      it_out_ms-name1 = it_vbak-name1.
    endif.

    CALL FUNCTION 'Z_CONVERSION_VALUE'
         EXPORTING
           MATNR             = it_out_ms-matnr
           J_3ASIZE          = it_out_ms-j_3ASIZE
         IMPORTING
*           CONV_LENTRY     = it_out_ms-grid
           J_3AENTX8 = it_out_ms-grid
           J_SIZE      = it_out_ms-size
           J_3ANOTE       = it_out_ms-remark.

      clear: wa_lfimg, wa_lfimg2.
      select sum( lfimg ) into wa_lfimg from lips where vgbel = it_out_ms-matnr
                         and j_3asize = it_out_ms-j_3asize
                         and bwart = '601'.

      select sum( lfimg ) into wa_lfimg2 from lips where vgbel = it_out_ms-matnr
                   and j_3asize = it_out_ms-j_3asize
                   and bwart = '602'.

      it_out_ms-delqty = wa_lfimg - wa_lfimg2.

    modify it_out_ms index lv_tabix.
  endloop.
  loop at it_out_ms.
    move it_out_ms to tmp_ms.
    collect tmp_ms.
  endloop.
  clear it_out_ms[].
  it_out_ms[] = tmp_ms[].


ENDFORM.                    " GET_GARMENT_SHIP
*&---------------------------------------------------------------------*
*&      Form  GET_GR_MTM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_GR_MTM .
databegin of  it_gr_mtm occurs 0,
  mblnr like mseg-mblnr,
  mjahr like mseg-mjahr,
  zeile like mseg-zeile,
  matnr like mseg-matnr,
  j_4ksca like mseg-j_4ksca,
  j_3asiz like mseg-j_3asiz,
  bwart like mseg-bwart,
  menge like mseg-menge,
  meins like mseg-meins,
  j_4kumsc like mseg-j_4kumsc,
  shkzg like mseg-shkzg,
  status type c,
 end of it_gr_mtm.

data tmp_mtm like it_fab_mtm occurs 0 with header line.

data lv_mtart like mara-mtart.
data: it_mbew like mbew occurs 0 with header line.



select mblnr mjahr zeile matnr j_4ksca  j_3asiz menge meins j_4kumsc shkzg bwart
  into corresponding fields of table it_gr_mtm
         from mseg
         for all entries in it_matnr
         where j_4ksca = it_matnr-J_4KSCAT
           and bwart in ('309''310').
loop at it_gr_mtm.
  lv_tabix = sy-tabix.
*modify on 2011.12.13
*  if it_gr_mtm-shkzg = 'H'.
*    it_gr_mtm-status = 'O'.
*    it_gr_mtm-menge = 0 - it_gr_mtm-menge.
*  else.
*    it_gr_mtm-status = 'I'.
*  endif.
  if it_gr_mtm-shkzg = 'H'.
    if it_gr_mtm-bwart = '309'.
      it_gr_mtm-status = 'O'.
    else.
      it_gr_mtm-status = 'I'.
      it_gr_mtm-menge = 0 - it_gr_mtm-menge.
    endif.
  else.
    if it_gr_mtm-bwart = '309'.
      it_gr_mtm-status = 'I'.
    else.
      it_gr_mtm-status = 'O'.
      it_gr_mtm-menge = 0 - it_gr_mtm-menge.
    endif.
  endif.
*end
  clear: it_gr_mtm-mblnr, it_gr_mtm-mjahr, it_gr_mtm-zeile,
         it_gr_mtm-shkzg,  it_gr_mtm-bwart.
  modify it_Gr_mtm index lv_tabix.
endloop.

sort it_gr_mtm by j_4ksca matnr j_3asiz status.
loop at it_gr_mtm.
  clear tmp_mtm.
  move-corresponding it_gr_mtm to tmp_mtm.
  collect tmp_mtm.
endloop.
delete tmp_mtm where menge = 0.

"remark on 2011.12.13
*loop at tmp_mtm.
*  lv_tabix = sy-tabix.
*  if tmp_mtm-menge > 0.
*    tmp_mtm-status = 'I'.
*  else.
*    tmp_mtm-status = 'O'.
*    tmp_mtm-menge = 0 - tmp_mtm-menge.
*  endif.
*  modify tmp_mtm index lv_tabix.
*endloop.
*end

loop at tmp_mtm.
  clear: lv_mtart , it_mbew[].
  lv_tabix = sy-tabix.
  clear lv_mtart.
  select single mtart into lv_mtart from mara
    where matnr = tmp_mtm-matnr.
  if lv_mtart eq 'ZFAB'.
    clear it_mbew[].
    select * into table it_mbew from mbew where matnr = tmp_mtm-matnr.
    read table it_mbew with key bklas = '3000'.
    if sy-subrc = 0.
      move tmp_mtm to it_fab_mtm.
      collect it_fab_mtm.
    endif.
  elseif lv_mtart eq 'ZCFG'.
      move tmp_mtm to it_fg_mtm.
      collect it_fg_mtm.
  endif.
endloop.


sort it_fab_mtm by j_4ksca matnr j_3asiz status.
sort it_fg_mtm by j_4ksca matnr j_3asiz status.

loop at it_fab_mtm.
  lv_tabix = sy-tabix.
  CALL FUNCTION 'Z_CONVERSION_VALUE'
      EXPORTING
        MATNR             = it_fab_mtm-matnr
        J_3ASIZE          = it_fab_mtm-j_3ASIZ
      IMPORTING
        J_3AENTX8      = it_fab_mtm-J_3AENTX8
        J_3AENTX       = it_fab_mtm-J_3AENTX
        J_3ANOTE       = it_fab_mtm-J_3ANOTE.
  modify it_Fab_mtm index lv_tabix.
endloop.

loop at it_fg_mtm.
  lv_tabix = sy-tabix.
  CALL FUNCTION 'Z_CONVERSION_VALUE'
       EXPORTING
         MATNR             = it_fg_mtm-matnr
         J_3ASIZE          = it_fg_mtm-j_3ASIZ
       IMPORTING
*         CONV_LENTRY     = it_fg_mtm-grid
         J_3AENTX8      = it_fg_mtm-grid
         J_SIZE      = it_fg_mtm-size
         J_3ANOTE       = it_fg_mtm-remark.
  modify it_fg_mtm index lv_tabix.
endloop.
ENDFORM.                    " GET_GR_MTM
*&---------------------------------------------------------------------*
*&      Form  WRITE_ITAB3
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_ITAB3 .
data: lv_texts(1000).
data: lv_vbeln(18type c,
      lv_matnr(20type c,
      lv_grid(8type c,
      lv_color(20type c,
      lv_remark(40type c,
      lv_qty(16type c,
      lv_uom(5type c,
      lv_status(2type c,
      lv_so(18type c.


check it_fab_mtm[] is not initial.
clear:lv_texts.
concatenate 'SO #' '|'
            'Material Code' '|'
            'Grid' '|'
            'Color' '|'
            'Conversion remark' '|'
            'Fabric Quantity' '|'
            'UOM' '|'
            'Status' '|'
            'From SO# / To SO#'
            into lv_texts.

  move lv_texts to itab3-text.
  APPEND itab3.
  clear:lv_texts.

  loop at it_fab_mtm.

      lv_vbeln = it_fab_mtm-j_4ksca.
      lv_matnr = it_fab_mtm-matnr.
      lv_grid = it_fab_mtm-j_3aentx8.
      lv_color = it_fab_mtm-j_3aentx.
      lv_remark = it_fab_mtm-j_3anote.
      lv_qty = it_fab_mtm-menge.
      lv_uom = it_fab_mtm-meins.
      lv_status = it_fab_mtm-status.
      lv_so = it_fab_mtm-j_4kumsc.


      concatenate lv_vbeln '|'
                  lv_matnr '|'
                  lv_grid '|'
                  lv_color '|'
                  lv_remark '|'
                  lv_qty '|'
                  lv_uom '|'
                  lv_status '|'
                  lv_so
                  into lv_texts.
      condense lv_texts.
      move lv_texts to itab3-text.
      append itab3.

  endloop.
ENDFORM.                    " WRITE_ITAB3
*&---------------------------------------------------------------------*
*&      Form  WRITE_ITAB4
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM WRITE_ITAB4 .
data: lv_texts(1000).
data: lv_vbeln(18type c,
      lv_matnr(20type c,
      lv_grid(8type c,
      lv_remark(40type c,
      lv_size(8type c,
      lv_qty(16type c,
      lv_uom(5type c,
      lv_status(2type c,
      lv_so(18type c.


check it_fg_mtm[] is not initial.
clear:lv_texts.
concatenate 'SO #' '|'
            'Material Code' '|'
            'Grid' '|'
*            'Color' '|'
            'Conversion remark' '|'
            'Size' '|'
            'Garment Quantity' '|'
            'UOM' '|'
            'Status' '|'
            'From SO# / To SO#'
            into lv_texts.

  move lv_texts to itab4-text.
  APPEND itab4.
  clear:lv_texts.

  loop at it_fg_mtm.

      lv_vbeln = it_fg_mtm-j_4ksca.
      lv_matnr = it_fg_mtm-matnr.
      lv_grid = it_fg_mtm-grid.
      lv_remark = it_fg_mtm-remark.
      lv_size = it_fg_mtm-size.
      lv_qty = it_fg_mtm-menge.
      lv_uom = it_fg_mtm-meins.
      lv_status = it_fg_mtm-status.
      lv_so = it_fg_mtm-j_4kumsc.


      concatenate lv_vbeln '|'
                  lv_matnr '|'
                  lv_grid '|'
                  lv_remark '|'
                  lv_size '|'
                  lv_qty '|'
                  lv_uom '|'
                  lv_status '|'
                  lv_so
                  into lv_texts.
      condense lv_texts.
      move lv_texts to itab4-text.
      append itab4.

  endloop.
ENDFORM.                    " WRITE_ITAB4
*&---------------------------------------------------------------------*
*&      Form  BATCH_DL_FAB_IO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BATCH_DL_FAB_IO .
  data: lv_strlen type i.

  data: fflag type c.
  check itab3[] is not initial.
*** U1
*  open dataset gvfieldc for output in text mode encoding default.
     open dataset gvfieldc for output in text mode encoding UTF-8 WITH BYTE-ORDER MARK
      WITH SMART LINEFEED.

  if sy-subrc = 0.
*//download data to file
    loop at itab3.
      transfer itab3 to gvfieldc.
    endloop.

    close dataset gvfieldc.

    lv_strlen = strlen( gvfieldc ).
    write:/ 'File saved to ', gvfieldc(lv_strlen).

  else.
    raise file_open_error.
  endif.
ENDFORM.                    " BATCH_DL_FAB_IO
*&---------------------------------------------------------------------*
*&      Form  BATCH_DL_FG_IO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM BATCH_DL_FG_IO .
  data: lv_strlen type i.

  data: fflag type c.
  check itab4[] is not initial.
*** U1
*  open dataset gvfieldd for output in text mode encoding default.
    open dataset gvfieldd for output in text mode encoding UTF-8 WITH BYTE-ORDER MARK
      WITH SMART LINEFEED.
  if sy-subrc = 0.
*//download data to file
    loop at itab4.
      transfer itab4 to gvfieldd.
    endloop.

    close dataset gvfieldd.

    lv_strlen = strlen( gvfieldd ).
    write:/ 'File saved to ', gvfieldd(lv_strlen).

  else.
    raise file_open_error.
  endif.
ENDFORM.                    " BATCH_DL_FG_IO
*&---------------------------------------------------------------------*
*&      Form  DOWN_FILE_FAB_IO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWN_FILE_FAB_IO .
data: gvfield1 like rlgrap-filename.
data: lv_file_name type string.
  data: lv_strlen type i.
  data: fflag type c.
  check itab3[] is not initial.
     lv_file_name = gvfieldc.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = lv_file_name
          filetype = 'ASC'
          codepage = '4110'
*          replacement = '#'
*          write_field_separator = 'X'
          write_bom = 'X'
        TABLES
          data_tab = itab3.

*  call function 'WS_DOWNLOAD'
*       exporting
*            filename                = gvfieldc
*            filetype                = 'ASC'
*       tables
*            data_tab                = itab3
*       exceptions
*            file_open_error         = 1
*            file_write_error        = 2
*            invalid_filesize        = 3
*            invalid_type            = 4
*            no_batch                = 5
*            unknown_error           = 6
*            invalid_table_width     = 7
*            gui_refuse_filetransfer = 8
*            customer_error          = 9
*            others                  = 10.
  if sy-subrc = 0.
   lv_strlen = strlen( gvfieldc ).
   write:/ 'File saved to ', gvfieldc(lv_strlen).
  endif.
ENDFORM.                    " DOWN_FILE_FAB_IO
*&---------------------------------------------------------------------*
*&      Form  DOWN_FILE_FG_IO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DOWN_FILE_FG_IO .
data: gvfield1 like rlgrap-filename.
data: lv_file_name type string.
  data: lv_strlen type i.
  data: fflag type c.
  lv_file_name = gvfieldd.
  check itab4[] is not initial.
      CALL FUNCTION 'GUI_DOWNLOAD'
        EXPORTING
          filename = lv_file_name
          filetype = 'ASC'
          codepage = '4110'
*          replacement = '#'
*          write_field_separator = 'X'
          write_bom = 'X'
        TABLES
          data_tab = itab4.

*  call function 'WS_DOWNLOAD'
*       exporting
*            filename                = gvfieldd
*            filetype                = 'ASC'
*       tables
*            data_tab                = itab4
*       exceptions
*            file_open_error         = 1
*            file_write_error        = 2
*            invalid_filesize        = 3
*            invalid_type            = 4
*            no_batch                = 5
*            unknown_error           = 6
*            invalid_table_width     = 7
*            gui_refuse_filetransfer = 8
*            customer_error          = 9
*            others                  = 10.
  if sy-subrc = 0.
   lv_strlen = strlen( gvfieldd ).
   write:/ 'File saved to ', gvfieldd(lv_strlen).
  endif.
ENDFORM.                    " DOWN_FILE_FG_IO
*&---------------------------------------------------------------------*
*&      Form  GET_MAT_WITHOUT_PO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*M3 add
FORM GET_MAT_WITHOUT_PO .
data: it_mbew like mbew occurs 0 with header line.
clear it_po.
delete ta_sku where mtart ne 'ZFAB'.
loop at ta_sku.
   read table it_po with key j_4kscat = ta_sku-vbeln
                             matnr = ta_sku-idnrk
                             j_3asize = ta_sku-j_3asize.
   if sy-subrc <> 0.
     clear it_po.
     it_po-j_4kscat = ta_sku-vbeln.
     it_po-matnr = ta_sku-idnrk.
     it_po-j_3asize = ta_sku-j_3asize.
     clear it_mbew[].
     select * into table it_mbew from mbew where matnr = ta_sku-idnrk
                                     and bwtar = 'NORMAL'
                                     and bklas = '3000'
                                     and bwkey = ta_sku-werks.
      read table it_mbew index 1.
      if sy-subrc = 0.
        append it_po.
      endif.

   endif.
endloop.
ENDFORM.                    " GET_MAT_WITHOUT_PO
*M3 end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值