MD63 Create Forecast

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

  loop at it_record.
    if not it_record-message ' OK.'.
      move-corresponding it_record to it_err2.
      append it_err2.
      clear it_err2.
    else.
      if it_record-iscreate 'X'.
        move-corresponding it_record to it_create.
        append  it_create.
        itab_create-pbdnr it_record-pbdnr.
        itab_create-werks it_record-werks.
        itab_create-versb it_record-versb.
        itab_create-matnr it_record-matnr.
        collect itab_create.
        clear:  it_create,itab_create.
      else.
        move-corresponding it_record to it_change.
        append  it_change.
        itab_change-pbdnr it_record-pbdnr.
        itab_change-werks it_record-werks.
        itab_change-versb it_record-versb.
        itab_change-matnr it_record-matnr.
        collect itab_change.
        clear:  it_change,itab_change.
      endif.
    endif.
  endloop.

  "Create Requirement Plan
  if not itab_create[] is initial.
    describe table itab_create lines lv_total_line.
    sort itab_create by pbdnr werks versb matnr.
    loop at itab_create.
      lv_line =  sy-tabix  / lv_total_line * 100.
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          percentage lv_line
          text       'Processing Create Data........'.
      lv_tabix sy-tabix.
      req_item-material itab_create-matnr.
      req_item-plant itab_create-werks.
      req_item-requ_type 'VSFB'.
      req_item-version itab_create-versb.
      if itab_create-versb '00'.
        req_item-vers_activ 'X'.
      else.
        req_item-vers_activ ''.
      endif.
      req_item-req_number itab_create-pbdnr .
      loop at it_create where pbdnr =   itab_create-pbdnr
                            and werks itab_create-werks
                            and versb itab_create-versb
                            and matnr itab_create-matnr.
        req_data-date_type it_create-prgrs.
        req_data-req_date it_create-pdatu.
        req_data-req_qty it_create-plnmg.
        lv_pspnr  it_create-pspnr.
        append req_data.
      endloop.
      call function 'BAPI_REQUIREMENTS_CREATE'
        exporting
          requirements_item        req_item
        importing
          material                 matemp
        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_create-message  ' E: ' it_return-message into itab_create-message.
        endloop.
        "concatenate 'E:' itab_create-message into itab_create-message.
        modify itab_create index lv_tabix transporting message .
      else.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait 'X'.
*
*        if lv_pspnr is not initial.
*          select * from pbim where matnr = itab_create-matnr
*                               and werks = itab_create-werks
*                               and bedae = 'VSFB'
*                               and versb = itab_create-versb
*                               and pbdnr = itab_create-pbdnr.
*          endselect.
*          if sy-subrc eq 0.
*            update pbim set knttp = 'Q'
*                            sobkz = 'Q'
*                            kzvbr = 'P'
*                            pspel  = lv_pspnr
*                            kzbws = 'M'
*                               where matnr = itab_create-matnr
*                                 and werks = itab_create-werks
*                                 and bedae = 'VSFB'
*                                 and versb = itab_create-versb
*                                 and pbdnr = itab_create-pbdnr.
*            if sy-subrc eq 0.
*              itab_create-message = 'Success.'.
*              modify itab_create index lv_tabix transporting message .
*            endif.
*          else.
*            itab_create-message = 'Update wbs failing'.
*            modify itab_create index lv_tabix transporting message .
*          endif.
*        else.
        itab_create-message 'Success.'.
        modify itab_create index lv_tabix transporting message .
*        endif.
      endif.
      clear:req_item,req_data,it_return,it_return[],req_data[],lv_pspnr,itab_create-message.
    endloop.
    " update wbs
    wait up to seconds.
    loop at itab_create.
      check itab_create-message 'Success.'.
      read table it_create  with  key pbdnr itab_create-pbdnr
                                      werks itab_create-werks
                                      versb itab_create-versb
                                      matnr itab_create-matnr.
      if sy-subrc eq  0.
        lv_pspnr  it_create-pspnr.
        if lv_pspnr is  not initial.
          update pbim set knttp 'Q'
                          sobkz 'Q'
                          kzvbr 'P'
                          pspel  lv_pspnr
                          kzbws 'M'
                             where matnr itab_create-matnr
                               and werks itab_create-werks
                               and bedae 'VSFB'
                               and versb itab_create-versb
                               and pbdnr itab_create-pbdnr.
          commit work and wait.
        endif.
      endif.
    endloop.

    sort itab_create by pbdnr werks versb  matnr.
    loop at it_create.
      lv_tabix sy-tabix.
      read table itab_create with key pbdnr it_create-pbdnr
                                      werks it_create-werks
                                      versb it_create-versb
                                      matnr it_create-matnr binary search.
      if sy-subrc eq 0.
        it_create-message itab_create-message .
        modify it_create index  lv_tabix transporting message.
      endif.
    endloop.
  endif.

  "Change Requirement Plan
  if not  itab_change[] is initial.
    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       'Processing Change Data........'.
      lv_tabix sy-tabix.
      loop at it_change where pbdnr =   itab_change-pbdnr
                            and werks itab_change-werks
                            and versb itab_change-versb
                            and matnr itab_change-matnr.
        req_data-date_type it_change-prgrs.
        req_data-req_date it_change-pdatu.
        req_data-req_qty it_change-plnmg.
        lv_pspnr  it_change-pspnr.
        append req_data.
      endloop.
      if itab_change-versb '00'.
        lv_vervs 'X'.
      else.
        lv_vervs ''.
      endif.
      call function 'BAPI_REQUIREMENTS_CHANGE'
        exporting
          material                 itab_change-matnr
          plant                    itab_change-werks
          requirementstype         'VSFB'
          version                  itab_change-versb
          vers_activ               lv_vervs
          reqmtsplannumber         itab_change-pbdnr
          NO_WITHDR                'X'
        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'.
*        wait up to 1 seconds.
*
*        if lv_pspnr is not initial.
*          select * from pbim  where matnr = itab_change-matnr
*                               and werks = itab_change-werks
*                               and bedae = 'VSFB'
*                               and versb = itab_change-versb
*                               and pbdnr = itab_change-pbdnr.
*          endselect.
*          if sy-subrc eq 0.
*            update pbim set knttp = 'Q'
*                            sobkz = 'Q'
*                            kzvbr = 'P'
*                            pspel  = lv_pspnr
*                            kzbws = 'M'
*                               where matnr = itab_change-matnr
*                                 and werks = itab_change-werks
*                                 and bedae = 'VSFB'
*                                 and versb = itab_change-versb
*                                 and pbdnr = itab_change-pbdnr.
*            if sy-subrc eq 0.
*              itab_change-message = 'Success.'.
*              modify itab_change index lv_tabix transporting message.
*            endif.
*          else.
*            itab_change-message = 'Update wbs failing'.
*            modify itab_change index lv_tabix transporting message.
*          endif.
*        else.
        itab_change-message 'Success.'.
        modify itab_change index lv_tabix transporting message.
*        endif.
      endif.
      clear:req_data,it_return,it_return[],req_data[],req_item,lv_pspnr,itab_change-message.
    endloop.
    " update wbs
    wait up to seconds.
    loop at itab_change.
      check itab_change-message 'Success.'.
      read table it_change  with  key pbdnr itab_change-pbdnr
                                      werks itab_change-werks
                                      versb itab_change-versb
                                      matnr itab_change-matnr.
      if sy-subrc eq  0.
        lv_pspnr  it_change-pspnr.
        if lv_pspnr is  not initial .
          update pbim set knttp 'Q'
                          sobkz 'Q'
                          kzvbr 'P'
                          pspel  lv_pspnr
                          kzbws 'M'
                             where matnr itab_change-matnr
                               and werks itab_change-werks
                               and bedae 'VSFB'
                               and versb itab_change-versb
                               and pbdnr itab_change-pbdnr.
          commit work and wait.
        endif.
      endif.
    endloop.

    sort itab_change by pbdnr werks versb  matnr.
    loop at it_change.
      lv_tabix sy-tabix.
      read table itab_change with key pbdnr it_change-pbdnr
                                      werks it_change-werks
                                      versb it_change-versb
                                      matnr it_change-matnr binary search.
      if sy-subrc eq 0.
        it_change-message itab_change-message .
        modify it_change index  lv_tabix transporting message .
      endif.
    endloop.
  endif.

  clear it_err3.
  refresh it_err3.
  append lines of it_create to it_err3.
  append lines of it_change to it_err3.
  append lines of it_err2 to it_err3.
  sort it_err3 by order ascending.


endform.                    " PROCESS_DATA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值