ZPPR020 :Consignment Report

38 篇文章 2 订阅

*&---------------------------------------------------------------------*
*& Progarm      :  ZPPR020                        Author : Jimmy Wong
*& Created      :  31 Oct 2012                    App    : PP
*& Title        :  Consignment Report
*& Description  :  Consignment Report
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       31 Oct 2012 the first version
*&  M1            Jimmy       29 Nov 2012 Add WA00 and WA01 Qty
*&  M2            Jimmy       25 Dec 2012 Enhance
*&  the last update time  2012.12.25  15:00
*&---------------------------------------------------------------------*

report  zppr020 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : mara,marc,mard,ausp.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data: begin of wa_itab occurs 0,
    matnr   like mara-matnr,
    maktx   like makt-maktx,
    werks   like mchb-werks,
    charg   like mcha-charg,
    binno   type c length 30,
    cinsm   like mchb-cinsm,
    clabs   like mchb-clabs,
    tlqty   like mchb-clabs,
    waqty   like mchb-clabs,
    mark    like sy-datum,
    kdmat   like knmt-kdmat,
    lwedt   like mch1-lwedt,
    bdmng   like resb-bdmng,
    end of wa_itab.
data:it_itab like  wa_itab occurs 0 with header line.
data:wa_itab1 like  wa_itab occurs 0 with header line.
data:begin of it_makt occurs 0,
     matnr  like makt-matnr,
     maktx  like makt-maktx,
    end of it_makt.
data:begin of it_knmt occurs 0,
     matnr  like knmt-matnr,
     vkorg  like knmt-vkorg,
     kdmat  like knmt-kdmat,
    end of it_knmt.
data: begin of it_mchb occurs 0,
    matnr   like mara-matnr,
    charg   like mcha-charg,
    werks   like mchb-werks,
    lgort   like mchb-lgort,
    waqty   like mchb-clabs,
    end of it_mchb.
data: begin of it_resb occurs 0,
    matnr   like mara-matnr,
    werks   like mchb-werks,
    charg   like mcha-charg,
    bdmng   like resb-bdmng,
    enmng   like resb-enmng,
    clabm   like ztcpc01-clabm,
    rsnum   like resb-rsnum,
    rspos   like resb-rspos,
    aufnr   like resb-aufnr,
    txt04   like tj02t-txt04,
    end of it_resb.
data: begin of it_matnr occurs 0,
    matnr   like mara-matnr,
    werks   like mchb-werks,
    binno   type c length 30,
    fieldname(12) type c,
    fielddesc(40) type c,
    bdmng   like resb-bdmng,
    clabm   like ztcpc01-clabm,
      end of it_matnr.
data: it_field like it_matnr occurs 0 with header line.
data :it_ztcpc01 like ztcpc01 occurs 0 with header line.
data: lv_tabix like sy-tabix. .
data:lv_total_line type i,
      lv_line type p decimals 3.
field-symbols: <itab> type standard table,
               <w_itab>,
               <wa_field>.
data: it_structure type lvc_t_fcat,
      wa_structure type lvc_s_fcat,
      itab type ref to data.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
      wa_hier type slis_fieldcat_alv .
*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
select-options : s_werks for marc-werks .
select-options : s_matnr for mara-matnr.
select-options : s_mtart for mara-mtart.
select-options : s_binno for ausp-atwrt lower case.
selection-screen end of block 1.

*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  if s_binno[] is not initial.
    loop at s_binno.
      translate s_binno-low to upper case.
      translate s_binno-high to upper case.
      modify s_binno.
    endloop.
  endif.
  perform get_data.
  if wa_itab[] is initial  .
    message 'No Record Found' type 'I'.
    exit.
  endif.
  perform process_data.
  perform create_structure.
  perform create_dynamic_table.
  perform process_data_table.
  perform display_data.


end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  select  a~matnr a~werks a~charg  a~clabs  a~cinsm d~atwrt as binno c~lwedt
    from mchb as a
    inner join mara as b on a~matnr = b~matnr
    inner join mch1 as c  on a~matnr = c~matnr and a~charg = c~charg
    inner join ausp as d  on d~objek = c~cuobj_bm
    inner join cabn as e on d~atinn = e~atinn
    into corresponding fields of table wa_itab1
    where a~matnr in s_matnr
      and a~werks in s_werks
      and b~mtart in s_mtart
      and d~atwrt in s_binno
      and e~atnam = 'ZREMARK_01'.

  loop at wa_itab1.
    move-corresponding wa_itab1 to wa_itab.
    collect wa_itab.
    clear:wa_itab.
  endloop.

endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .

  sort wa_itab by matnr werks charg.
  " WA00 WA01 Qty
  select matnr werks charg  lgort clabs as waqty
      into corresponding fields of table it_mchb
      from mchb
      for all entries in wa_itab
    where matnr = wa_itab-matnr
      and werks = wa_itab-werks
      and charg = wa_itab-charg
      and lgort in ('WA01', 'WA00').
  " production order qty  released
  select a~matnr  a~werks a~charg a~bdmng  a~enmng a~rsnum a~rspos  b~aufnr e~txt04
      into corresponding fields of table it_resb
      from resb as a inner join afko as b on  a~rsnum = b~rsnum
      inner join aufk as c on c~aufnr = b~aufnr
      inner join jest as d on d~objnr = c~objnr
      inner  join tj02t as e on e~istat = d~stat and e~spras = sy-langu
      for all entries in wa_itab
    where a~matnr = wa_itab-matnr
      and a~werks = wa_itab-werks
      and a~charg = wa_itab-charg
      and a~xloek = space
      and a~bdmng > 0
      and e~txt04 in ('REL' , 'CRTD' )
      and d~inact = ''.

  if it_resb[] is not initial.
    "staged production order qty
    select *
      into corresponding fields of table it_ztcpc01
      from ztcpc01
      for all entries in it_resb
      where  aufnr = it_resb-aufnr
         and matnr = it_resb-matnr
         and werks = it_resb-werks
         and charg = it_resb-charg.
    sort it_ztcpc01 by aufnr matnr werks charg.

    loop at it_resb   .
      read table it_ztcpc01 with  key aufnr = it_resb-aufnr
                              matnr = it_resb-matnr
                              werks = it_resb-werks
                              charg = it_resb-charg.
      if sy-subrc eq 0.
        loop at it_ztcpc01 where aufnr = it_resb-aufnr and matnr = it_resb-matnr and werks = it_resb-werks  and charg = it_resb-charg.
          it_resb-clabm = it_resb-clabm + it_ztcpc01-clabm.
        endloop.
      endif.
      if it_resb-txt04 = 'REL'.
        move-corresponding it_resb to it_matnr.
        it_matnr-fieldname = it_resb-aufnr.
        it_matnr-fielddesc = it_resb-aufnr.
        if it_matnr-bdmng > it_matnr-clabm .      " release production order qty > staged qty
          read table wa_itab with key  matnr = it_resb-matnr
                                     werks = it_resb-werks
                                     charg = it_resb-charg.
          if sy-subrc eq 0.
            it_matnr-binno = wa_itab-binno.
            it_field-fieldname = it_matnr-fieldname.
            it_field-fielddesc = it_matnr-fielddesc.
            collect it_matnr.
            collect it_field.
          endif.
        endif.
        clear:it_matnr,it_field.
      endif.
      modify it_resb transporting clabm.
    endloop.
  endif.

  sort it_mchb by matnr werks charg.
  sort it_resb by matnr werks charg.

  describe table wa_itab lines lv_total_line.
  loop at wa_itab.
    lv_line =  sy-tabix  / lv_total_line * 100.
    call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
        percentage = lv_line
        text       = 'Processing Data........'.
    move-corresponding wa_itab to it_itab.
*M1 add
    read table it_mchb with  key matnr = it_itab-matnr
                                 werks = it_itab-werks
                                 charg = it_itab-charg.
    if sy-subrc eq 0.
      loop at it_mchb where matnr = it_itab-matnr
                        and werks = it_itab-werks
                        and charg = it_itab-charg.

        it_itab-waqty = it_itab-waqty + it_mchb-waqty.
      endloop.
    endif.
*M1 End

    read table it_resb with  key matnr = it_itab-matnr
                                 werks = it_itab-werks
                                 charg = it_itab-charg.
    if sy-subrc eq 0.
      loop at it_resb where matnr = it_itab-matnr and werks = it_itab-werks  and charg = it_itab-charg.
        it_itab-bdmng = it_itab-bdmng + it_resb-bdmng - it_resb-clabm .
      endloop.
    endif.


    it_itab-clabs = it_itab-clabs - it_itab-waqty .         "M1 Add
    it_itab-tlqty = it_itab-clabs + it_itab-cinsm.
    clear it_itab-charg .
    collect it_itab.
    clear:it_itab.
  endloop.
endform.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  CREATE_STRUCTURE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_structure .
  data:lv_i type i.
  define create_stru.
    wa_structure-fieldname = &1.
    wa_structure-inttype = &2.
    wa_structure-intlen = &3.
    wa_structure-datatype =  &4.
    wa_structure-decimals = &5.
    append wa_structure to it_structure.
  end-of-definition.

  create_stru 'WERKS'  'C' '4' '' '' .
  create_stru 'MATNR'  'C' '20' '' '' .
  create_stru 'MAKTX'  'C' '40' '' '' .
  create_stru 'BINNO'  'C' '30' '' '' .
  create_stru 'CINSM'  'P' '20' 'DEC' '3' .
  create_stru 'CLABS'  'P' '20' 'DEC' '3' .
  create_stru 'WAQTY' 'P' '20' 'DEC' '3' .
  create_stru 'TLQTY' 'P' '20' 'DEC' '3' .
  create_stru 'KDMAT'  'C' '20' '' '' .
  create_stru 'LWEDT'  'D' '8' '' '' .
  create_stru 'BDMNG' 'P' '20' 'DEC' '3' .

  loop at it_field.
    create_stru  it_field-fieldname 'P' '20' 'DEC' '3' .
  endloop.
endform.                    " CREATE_STRUCTURE
*&---------------------------------------------------------------------*
*&      Form  CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_dynamic_table .
  call method cl_alv_table_create=>create_dynamic_table
    exporting
      it_fieldcatalog = it_structure
    importing
      ep_table        = itab.

  assign itab->* to <itab>.
endform.                    " CREATE_DYNAMIC_TABLE
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data_table .
  data:wa_new_line type ref to data.
  create data wa_new_line like line of <itab>.
  assign wa_new_line->* to <w_itab>.

  select matnr maktx
    into corresponding fields of table it_makt
    from makt
    for all entries in it_itab
    where matnr in s_matnr
      and matnr = it_itab-matnr.

  select matnr  vkorg  kdmat
    into corresponding fields of table it_knmt
    from knmt
    for all entries in it_itab
    where matnr in s_matnr
    and matnr = it_itab-matnr.

  sort it_makt by matnr.
  sort it_knmt by matnr vkorg.
  sort it_itab by werks matnr binno .
  sort it_matnr by werks matnr binno fieldname.
  loop at it_itab.

    loop at it_structure into wa_structure.
      assign component wa_structure-fieldname of structure <w_itab> to <wa_field>.
      if wa_structure-fieldname ='WERKS' .
        <wa_field>  =  it_itab-werks.
      elseif wa_structure-fieldname ='MATNR'  .
        <wa_field> = it_itab-matnr.
      elseif wa_structure-fieldname ='KDMAT'  .
        read table it_knmt with key matnr = it_itab-matnr vkorg = it_itab-werks  binary search.
        if sy-subrc eq 0.
          <wa_field> = it_knmt-kdmat.
        endif.
      elseif wa_structure-fieldname ='MAKTX'.
        read table it_makt with key matnr = it_itab-matnr binary search.
        if sy-subrc eq 0.
          <wa_field>  =  it_makt-maktx.
        endif.
      elseif wa_structure-fieldname ='BINNO'.
        <wa_field>  = it_itab-binno.
      elseif wa_structure-fieldname ='CINSM'.
        <wa_field>  = it_itab-cinsm.
      elseif wa_structure-fieldname ='CLABS'  .
        <wa_field>  = it_itab-clabs.
      elseif wa_structure-fieldname ='WAQTY'  .
        <wa_field>  = it_itab-waqty.
      elseif wa_structure-fieldname ='TLQTY'  .
        <wa_field>  = it_itab-tlqty.
      elseif wa_structure-fieldname ='LWEDT'  .
        <wa_field> = it_itab-lwedt.
      elseif wa_structure-fieldname ='BDMNG'  .
        <wa_field>  = it_itab-bdmng.
      else.
        read table it_matnr with  key  werks = it_itab-werks matnr = it_itab-matnr
                                       binno = it_itab-binno fieldname = wa_structure-fieldname.
        if sy-subrc eq 0.
          <wa_field>  = it_matnr-bdmng - it_matnr-clabm.
        endif.
      endif.
    endloop.
    append <w_itab> to <itab>.
    clear:<wa_field>,<w_itab>.
  endloop.

endform.                    " PROCESS_DATA_TABLE
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form display_data.
  define alv_field.
    clear:wa_hier.
    wa_hier-fieldname = &1.
    wa_hier-seltext_m = &2.
    wa_hier-seltext_l = &3.
    wa_hier-outputlen = &4.
    wa_hier-just = &5.
    wa_hier-do_sum = &6.
    wa_hier-ref_tabname = &7 .
    wa_hier-ref_fieldname = &8 .
    append wa_hier to fc_hier.
  end-of-definition.
  refresh: fc_hier.
  alv_field  'WERKS' 'Plant' '' '5' 'L' '' '' ''.
  alv_field  'MATNR' 'Material' '' '20' 'L' '' 'MARA' 'MATNR'.
  alv_field  'MAKTX' '' 'Material Desc' '30' 'L' ''  '' ''.
  alv_field  'BINNO' 'Bin#' '' '10' 'L' '' '' ''.
  alv_field  'CINSM' '' 'Qual. inspection' '15' 'R' 'X' '' ''.
  alv_field  'CLABS' '' 'Unrestricted QTY' '15' 'R' 'X' '' ''.
  alv_field  'WAQTY' '' 'WA01/WA00 QTY' '15' 'R' 'X' '' ''. "M1 Add
  alv_field  'TLQTY' '' 'Total Qty' '15' 'R' 'X' '' ''.
  alv_field  'KDMAT' 'Customer Material' '' '15' 'L' '' '' ''.
  alv_field  'LWEDT' '' 'Receive date of first batch' '10' 'L' '' '' ''.
  alv_field  'BDMNG' '' 'Total allocated QTY' '15' 'R' 'X' '' ''.

  loop at it_field.
    alv_field  it_field-fieldname '' it_field-fielddesc '14' 'R' 'X'  '' ''.
  endloop.

  free:wa_itab,it_itab,it_makt,it_knmt,it_mchb,it_resb,
       it_matnr,it_ztcpc01,it_structure,wa_itab1,it_field.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat        = fc_hier[]
      i_save             = 'A'
      i_callback_program = sy-repid
    tables
      t_outtab           = <itab>
    exceptions
      program_error      = 1
      others             = 2.
endform.                    " DISPLAY_DATA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值