SAP: Update Forecast Bom explosion number

47 篇文章 0 订阅
*&---------------------------------------------------------------------*
*& Progarm      :  ZSD_UPDATE_FORECAST_BOM        Author : Jimmy Wong
*& Created      :  10 Jan 2013                    App    : SD
*& Title        :  Update Forecast Bom explosion number
*& Description  :  Update Forecast Bom explosion number
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       10 Jan 2013 the first version
*                Lisa Wong    add no withdraw to BAPI
*&  the last update time  2013.03.11 18:00
*&---------------------------------------------------------------------*

report  zsd_update_forecast_bom no standard page heading.

tables:pbed,pbim.
data:begin of itab occurs 0,
    pbdnr  like pbim-pbdnr,
    matnr  like pbim-matnr,
    werks  like pbim-werks,
    bedae  like pbim-bedae,
    versb  like pbim-versb,
    vervs  like pbim-vervs,
    entlu  like pbed-entlu,
    prgbz  like tprg-prgbz,
    pdatu  like pbed-pdatu,
    meins  like pbed-meins,
    plnmg  like pbed-plnmg,
    pspel  like pbim-pspel,
    posid  like prps-posid,
    message(700type c,
    end of itab.
data: begin of itab_change occurs 0,
    pbdnr  like pbim-pbdnr,
    matnr  like pbim-matnr,
    werks  like pbim-werks,
    bedae  like pbim-bedae,
    versb  like pbim-versb,
    vervs  like pbim-vervs,
    pspel  like pbim-pspel,
    message(700type c,
    end of itab_change.
data:it_change like itab_change occurs with header line.
data: req_item like bapisitemr.
data: req_data like bapisshdin occurs with header line.
data: it_return like bapireturn1 occurs with header line.
data:begin of it_tprg occurs 20,
    prgbz  like tprg-prgbz,
    prgrs  like tprg-prgrs,
    end of it_tprg.
data:lv_tabix like sy-tabix.
data:lv_year type i,
     wa_year(4type c.
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 with frame title text-010.
select-options: s_werks for pbim-werks.
select-options: s_pbdnr for pbim-pbdnr.
select-options: s_matnr for pbim-matnr.
select-options: s_versb for pbim-versb.
select-options: s_pdatu for pbed-pdatu .
parameters : p_sernr like snum-sernr default 'C2' obligatory.
parameters: p_test as checkbox default 'X'.
parameters: p_wbs as checkbox .
selection-screen end of block 1.


*initialization.
*  s_pdatu-sign = 'I'.
*  s_pdatu-option = 'BT'.
*  s_pdatu-low = sy-datum.
*  lv_year = sy-datum+0(4) + 1.
*  wa_year = lv_year .
*  concatenate wa_year '12' '31' into s_pdatu-high.
*  append  s_pdatu.

*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  perform get_data.
  if itab_change[] is initial.
    message i003(zmm).
    exit.
  endif.
  if p_test is initial.
    perform process_data.
  endif.
  perform display_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  if p_wbs 'X'.
    select a~pbdnr a~werks a~versb a~matnr a~bedae a~vervs
         b~entlu b~pdatu b~plnmg b~meins a~pspel
         into corresponding fields of table itab
      from pbim as a
        inner join pbed as on a~bdzei b~bdzei
      where a~matnr in  s_matnr
        and a~werks in s_werks
        and a~bedae 'VSFB'
        and a~versb in s_versb
        and a~pbdnr in s_pbdnr
        and b~pdatu in s_pdatu .
  else.
    select a~pbdnr a~werks a~versb a~matnr a~bedae a~vervs
         b~entlu b~pdatu b~plnmg b~meins a~pspel
         into corresponding fields of table itab
      from pbim as a
        inner join pbed as on a~bdzei b~bdzei
      where a~matnr in  s_matnr
        and a~werks in s_werks
        and a~bedae 'VSFB'
        and a~versb in s_versb
        and a~pbdnr in s_pbdnr
        and b~pdatu in s_pdatu
        and b~sernr ne p_sernr  .
  endif.

  select prgbz prgrs
    into corresponding fields of table it_tprg
      from tprg
      where  spras sy-langu.
  sort it_tprg by prgrs  prgbz .


  loop at itab.
    lv_tabix sy-tabix.
    move-corresponding itab to itab_change .
    collect itab_change.
    read table it_tprg with key prgrs itab-entlu binary search.
    if sy-subrc eq 0.
      itab-prgbz =  it_tprg-prgbz.
    endif.
    if itab-pspel is not initial.
      call function 'CONVERSION_EXIT_ABPSP_OUTPUT'
        exporting
          input  itab-pspel
        importing
          output itab-posid.
    endif.
    modify itab index lv_tabix transporting prgbz posid.
    clear: itab_change,itab-posid,itab-prgbz.
  endloop.
endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .
  data:lv_total_line type i,
       lv_line type decimals 3,
       lv_pspnr like prps-pspnr,
       lv_pbdnr like pbim-pbdnr,
       lv_versb like pbim-versb.

  sort itab by  pbdnr werks bedae versb matnr.
  sort itab_change by pbdnr werks bedae versb matnr .
  describe table itab_change lines lv_total_line.
  loop at itab_change.
    lv_line =  sy-tabix  / lv_total_line * 100.
    call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
        percentage lv_line
        text       'Updatting Data........'.
    lv_tabix sy-tabix.
    loop at itab where    pbdnr itab_change-pbdnr
                          and werks itab_change-werks
                          and bedae itab_change-bedae
                          and versb itab_change-versb
                          and matnr itab_change-matnr .
      req_data-date_type itab-entlu.
      req_data-req_date itab-pdatu.
      req_data-req_qty itab-plnmg.
      req_data-unit itab-meins.
      req_data-bomexpl p_sernr.
      append req_data.
    endloop.

    call function 'BAPI_REQUIREMENTS_CHANGE'
      exporting
        material                 itab_change-matnr
        plant                    itab_change-werks
        requirementstype         itab_change-bedae
        version                  itab_change-versb
        vers_activ               itab_change-vervs
        reqmtsplannumber         itab_change-pbdnr
        no_withdr                'X'                  "Add by Lisa Wong 03/11/2013
      importing
        requirement_item_out     req_item
      tables
        requirements_schedule_in req_data
        return                   it_return.
    read table it_return with key type 'E'.
    if sy-subrc eq 0.
      loop at it_return where type 'E'.
        concatenate itab_change-message ' E: ' it_return-message into itab_change-message.
      endloop.
      modify itab_change index lv_tabix transporting message .
    else.
      call function 'BAPI_TRANSACTION_COMMIT'
        exporting
          wait 'X'.
      itab_change-message 'Success.'.
      modify itab_change index lv_tabix transporting message.
    endif.
    clear:req_data,it_return,it_return[],req_data[],req_item,itab_change-message.
  endloop.

  " update wbs
  sort itab_change by  pbdnr versb werks bedae  matnr.
  it_change[] itab_change[].
  loop at itab_change.   "remarked by Oliver Lee 02/02/2013
    if itab_change-message 'Success.'.
*      if lv_pbdnr ne itab_change-pbdnr or lv_versb ne itab_change-versb.
*        clear:lv_pspnr.
*        loop at it_change where     pbdnr = itab_change-pbdnr
*                                and versb = itab_change-versb
*                                and werks = itab_change-werks
*                                and bedae = itab_change-bedae
*                                and pspel ne space.
*          lv_pspnr = it_change-pspel.
*          if lv_pspnr is not initial.
*            exit.
*          endif.
*        endloop.
*      endif.
*      if lv_pspnr is not initial.
      if itab_change-pspel is not initial.    " Add by Oliver Lee 02/02/2013
        update pbim set knttp 'Q'
                        sobkz 'Q'
                        kzvbr 'P'
                        pspel  itab_change-pspel
                        kzbws 'M'
                           where matnr itab_change-matnr
                             and werks itab_change-werks
                             and bedae itab_change-bedae
                             and versb itab_change-versb
                             and pbdnr itab_change-pbdnr.
        commit work and wait.            "Add by Lisa Wong 03/11/2013
      endif.
    endif.
    lv_pbdnr itab_change-pbdnr.
    lv_versb itab_change-versb.
  endloop.



  sort itab_change by  pbdnr werks bedae versb matnr  .
  loop at itab.
    lv_tabix sy-tabix.
    read table itab_change with key pbdnr itab-pbdnr
                                    werks itab-werks
                                    bedae itab-bedae
                                    versb itab-versb
                                    matnr itab-matnr binary search.
    if sy-subrc eq 0.
      itab-message itab_change-message .
      modify itab index  lv_tabix transporting message .
    endif.
  endloop.
endform.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      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  'PBDNR' '' 'Requirement Plan' '12' '' '' ''  ''.
  alv_field  'WERKS' 'Plant' '' ''  '' '' '' ''.
  alv_field  'VERSB' 'Version' '' '6'  '' '' ''  ''.
  alv_field  'MATNR' '' 'Material Number' '20'  '' '' 'MARA'  'MATNR'.
  alv_field  'VERVS' '' 'Active' ''  '' '' ''  ''.
  alv_field  'PRGBZ' 'Period' '' ''  '' '' ''  ''.
  alv_field  'PDATU' 'Deliv. Finish date' '' '10'  '' '' ''  ''.
  alv_field  'PLNMG' 'Quantity' '' ''  '' '' ''  ''.
  alv_field  'MEINS' 'Unit' '' ''  '' '' ''  ''.
  alv_field  'POSID' '' 'WBS element' ''  '' '' ''  ''.
  alv_field  'MESSAGE' 'Message' '' '30'  '' '' '' ''.


  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat   fc_hier[]
    tables
      t_outtab      itab[]
    exceptions
      program_error 1
      others        2.
  if sy-subrc ne 0.
    "     message i004(zmm)
  endif.
endform.                    " DISPLAY_DATA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值