ZPPR036 :Update Production Order Delivered Qty CO11N

*&---------------------------------------------------------------------*
*& Progarm      :  ZPPR036                        Author : Jimmy Wong
*& Created      :  08 Jan 2012                    App    : PP
*& Title        :  Update Production Order Delivered Qty CO11N
*& Description  :  Update Production Order Delivered Qty CO11N
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       08 Jan 2012 the first version
*&  the last update time  2013.01.08  12:00
*&---------------------------------------------------------------------*
report  zppr036 no standard page heading.


tables: aufk,mara.

data:begin of it_prod occurs 0,
     aufnr like afko-aufnr,
     matnr like afpo-matnr,
     werks like aufk-werks,
     rsnum like afko-rsnum,
     aufpl like afko-aufpl,
     psmng like afpo-psmng,
     wemng like afpo-wemng,
     posnr like afpo-posnr,
     lead_aufnr like afko-lead_aufnr,
     end of it_prod.
data:it_prod1 like it_prod occurs 0 with header line.
data:begin of it_aufnr occurs 0,
     aufnr like afko-aufnr,
     matnr like afpo-matnr,
     werks like aufk-werks,
     rsnum like afko-rsnum,
     aufpl like afko-aufpl,
     posnr like afpo-posnr,
     psmng like afpo-psmng,
     wemng like afpo-wemng,
     lmnga like afvv-lmnga,
     diffqty like afpo-wemng,
     vornr like afvc-vornr,
     lead_aufnr like afko-lead_aufnr,
     message type c length 700,
     end of it_aufnr.
data:itab like it_aufnr occurs 0 with header line.
data:begin of it_afvv occurs 0,
     aufpl like afko-aufpl,
     aplzl like afvv-aplzl,
     lmnga like afvv-lmnga,
     vornr like afvc-vornr,
     end of it_afvv.
data:lv_aufnr like afko-aufnr.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
      wa_hier type slis_fieldcat_alv .
data: it_bdcmsg like bdcmsgcoll occurs 0 with header line,
      bdcdata like bdcdata occurs 0 with header line,
      it_return like  bapiret2 occurs 0 with header line.
data:lv_total_line type i,
     lv_line type p decimals 3,
     lv_tabix like sy-tabix.
*&---------------------------------------------------------------------*
* selection
*&---------------------------------------------------------------------*
selection-screen begin of block 1 with frame title text-001.
select-options : s_werks for aufk-werks  default '8101'.
select-options : s_laufnr for aufk-aufnr .
select-options : s_aufnr for aufk-aufnr .
select-options : s_matnr for mara-matnr .
select-options : s_mtart for mara-mtart.
parameters: p_mode  type ctu_mode default 'N' obligatory.
parameters : p_test as checkbox default 'X'.
selection-screen end of block 1.

*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.

  perform get_data.
  if p_test is initial.
    " perform process_data.
    perform process_data_bapi.
  endif.
  perform display_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  call function 'SAPGUI_PROGRESS_INDICATOR'
    exporting
      text = 'Getting Data........'.

  select distinct a~aufnr  e~matnr b~werks a~rsnum a~aufpl e~psmng e~wemng e~posnr a~lead_aufnr
      into corresponding fields of table it_prod
      from afko as a
      join afpo as e on a~aufnr = e~aufnr
      join aufk as b on a~aufnr = b~aufnr
      join jest as d on d~objnr = b~objnr
      join tj02t as c on c~istat = d~stat and c~spras = sy-langu
      join mara as f on  e~matnr = f~matnr
    where b~werks in s_werks
      and   c~txt04 = 'REL'
      and   d~inact = ''
      and   a~aufnr in s_aufnr
      and   e~matnr in s_matnr
      and   f~mtart in s_mtart
      and   e~psmng > 0
      and b~loekz = space
      and a~lead_aufnr in s_laufnr.

  if it_prod[] is not initial.
    sort it_prod by aufnr posnr.
    it_prod1[] = it_prod[].
    sort it_prod1 by lead_aufnr.
    loop at it_prod.
      if lv_aufnr ne it_prod-aufnr.
        move-corresponding it_prod to it_aufnr.
        read table it_prod1 with  key lead_aufnr = it_aufnr-lead_aufnr BINARY SEARCH.  " 计算子工单的delivered qty 根据主工单计算
        if sy-subrc eq 0.
          it_aufnr-wemng = it_prod1-psmng / it_aufnr-psmng * it_prod1-wemng .
        endif.
        append it_aufnr.
        clear it_aufnr.
      endif.
      lv_aufnr = it_prod-aufnr.
    endloop.
  endif.
  if it_aufnr[] is not initial.
    sort it_aufnr by aufpl werks.
    select b~aufpl b~aplzl b~lmnga a~vornr
      into corresponding fields of table it_afvv
      from afvc as a inner join afvv as b on a~aufpl = b~aufpl and a~aplzl = b~aplzl
      for all entries in it_aufnr
      where a~aufpl = it_aufnr-aufpl
        and a~werks = it_aufnr-werks.
  endif.
  loop at it_aufnr.
    read table it_afvv with key aufpl = it_aufnr-aufpl.
    if sy-subrc eq 0.
      it_aufnr-vornr = it_afvv-vornr.
      it_aufnr-lmnga = it_afvv-lmnga.
      it_aufnr-diffqty = it_aufnr-wemng - it_aufnr-lmnga.
      if it_aufnr-diffqty > 0.
        move-corresponding it_aufnr to itab.
        append itab.
        clear :itab.
      endif.
    endif.
  endloop.
endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .
  data:lv_menge type c length 15.
  sort itab by aufnr  werks matnr.
  describe table itab lines lv_total_line.
  loop at itab.
    lv_line =  sy-tabix  / lv_total_line * 100.
    call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
        percentage = lv_line
        text       = 'Processing Data........'.
    lv_tabix = sy-tabix.
    perform bdc_dynpro      using 'SAPLCORU_S' '0100'.
    perform bdc_field       using 'BDC_OKCODE'  '=BU'.
    perform bdc_field       using 'AFRUD-AUFNR' itab-aufnr.
    perform bdc_field       using 'AFRUD-VORNR' itab-vornr.
    perform bdc_field       using 'BDC_CURSOR'  'AFRUD-LMNGA'.
    lv_menge = itab-diffqty.
    perform bdc_field       using 'AFRUD-LMNGA' lv_menge .


    call transaction 'CO11N'
             using bdcdata
             mode p_mode "Background performance
             update 'S' "local updata
             messages into it_bdcmsg. "all message table

    commit work and wait.
    call function 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
      tables
        imt_bdcmsgcoll = it_bdcmsg
        ext_return     = it_return.

    read table it_return with key type = 'E'.
    if sy-subrc eq 0.
      itab-message = it_return-message.
    else.
      read table it_return with key type = 'S' id = 'RU' number = '100'.
      if sy-subrc eq 0.
        itab-message = 'Update successed.'.
      else.
        read table it_return with key type = 'S' id = 'RU' number = '110'.
        if sy-subrc eq 0.
          itab-message = 'Update successed.'.
        else.
          loop at it_return.
            concatenate itab-message  it_return-message into itab-message.
          endloop.
        endif.
      endif.
    endif.
    modify itab index lv_tabix transporting message.
    clear: it_return,it_bdcmsg,it_bdcmsg[], bdcdata, bdcdata[],it_return[],itab-message..
  endloop.
endform.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA_BAPI
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data_bapi .
  data: it_time    like  bapi_pp_timeticket occurs 0 with header line,
        lt_return        type bapiret1,
        lt_return_detail  like  bapi_coru_return occurs 0 with header line.

  loop at itab.
    lv_tabix = sy-tabix.
    it_time-orderid     = itab-aufnr.
    it_time-operation   = itab-vornr.
    it_time-yield = itab-diffqty.
    append it_time.

    call function 'ZBAPI_PRODORDCONF_CREATE_TT'
      importing
        return        = lt_return
      tables
        timetickets   = it_time
        detail_return = lt_return_detail.
    read table lt_return_detail with key type = 'E'.
    if sy-subrc eq 0.
      call function 'BAPI_TRANSACTION_ROLLBACK'.
      itab-message = lt_return_detail-message.
    else.
      read table lt_return_detail with key type = 'I' id = 'RU' number = '100'.
      if sy-subrc eq 0.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait = 'X'.
        itab-message = 'Update successed.'.
      else.
        read table lt_return_detail with key type = 'I' id = 'RU' number = '110'.
        if sy-subrc eq 0.
          call function 'BAPI_TRANSACTION_COMMIT'
            exporting
              wait = 'X'.
          itab-message = 'Update successed.'.
        else.
          call function 'BAPI_TRANSACTION_ROLLBACK'.
          loop at lt_return_detail.
            concatenate itab-message  lt_return_detail-message into itab-message.
          endloop.
        endif.
      endif.
    endif.
    modify itab index lv_tabix transporting message.
    clear:it_time,it_time[],lt_return,lt_return_detail,lt_return_detail[],itab-message.
  endloop.
endform.                    "process_data_bapi
*&---------------------------------------------------------------------*
*&      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  'AUFNR' '' '' '' 'L' '' 'AFKO' 'AUFNR'.
  alv_field  'LEAD_AUFNR' '' 'Lead order' '' 'L' '' 'AFKO' 'AUFNR'.
  alv_field  'VORNR' 'Operation' '' '' 'L' '' '' ''.
  alv_field  'MATNR' '' 'Material' '18' 'L' '' 'MARA' 'MATNR'.
  alv_field  'WERKS' 'Plant' '' '5' 'L' '' '' ''.
  alv_field  'WEMNG' '' 'Delivered Qty' '12' 'R' '' '' ''.
  alv_field  'LMNGA' '' 'Confirmed Qty' '12' 'R' '' '' ''.
  alv_field  'DIFFQTY' '' 'Diff Qty' '12' 'R' '' '' ''.
  alv_field  'MESSAGE' '' 'Message' '30' 'L' '' '' ''.


  free:it_afvv,it_aufnr,it_prod,it_prod1.

  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
*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
form bdc_dynpro using program dynpro.
  clear bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  append bdcdata.
endform.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
form bdc_field using fnam fval.
  clear bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  append bdcdata.
endform.                    "BDC_FIELD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值