SAP: ZMMR007 Update Project Price (QBEW)

44 篇文章 0 订阅
*&---------------------------------------------------------------------*
*& Progarm      :  ZMMR007                        Author : Jimmy Wong
*& Created      :  07 Jan 2012                    App    : MM
*& Title        :  Update Project Price (QBEW)
*& Description  :  Update Project Price (QBEW)
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       07 Jan 2012 the first version
*&  the last update time  2013.01.07 14:00
*&---------------------------------------------------------------------*


report  zmmr007 no standard page heading.

tables:marc.
data:begin of it_record occurs 0,
      order_t type length 30,
      matnr like qbew-matnr,
      bwkey like qbew-bwkey,
      sobkz like qbew-sobkz,
      pspnr like qbew-pspnr,
      vprsv like qbew-vprsv,
      verpr like qbew-verpr,
      stprs like qbew-stprs,
      peinh like qbew-peinh,
      vprsv_n like mbew-vprsv,
      verpr_n like mbew-verpr,
      stprs_n like mbew-stprs,
      peinh_n like mbew-peinh,
      posid like prps-posid,
      tab   type length 10,
      message type length 700,
    end of it_record.
data: it_err4 like it_record occurs with header line.
data: itab like it_record occurs with header line.
data:begin of it_matnr occurs 0,
      matnr like qbew-matnr,
      bwkey like qbew-bwkey,
    end of it_matnr.
data:begin of it_mbew occurs 0,
      matnr like qbew-matnr,
      bwkey like qbew-bwkey,
      vprsv like mbew-vprsv,
      verpr like mbew-verpr,
      stprs like mbew-stprs,
      peinh like mbew-peinh,
    end of it_mbew.
data:  it_mbewh like   it_mbew occurs with header line.
data:begin of it_prps occurs 0,
      pspnr like qbew-pspnr,
      posid like prps-posid,
    end of it_prps.

data: it_bdcmsg like bdcmsgcoll occurs with header line,
      bdcdata like bdcdata occurs with header line,
      it_return like  bapiret2 occurs with header line.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
      wa_hier type slis_fieldcat_alv .
data:lv_total_line type i,
     lv_line type decimals 3,
     lv_tabix like sy-tabix,
     lv_data  like sy-datum,
     lv_lfgja like mbewh-lfgja,
     lv_lfmon like mbewh-lfmon  .
*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block with frame title text-001.
parameters:p_budat like sy-datum default sy-datum obligatory,
           p_bukrs type bukrs default '8000' obligatory,
           s_bwkey like  marc-werks default '8101' obligatory.
select-options:s_matnr for marc-matnr.
parameters: p_100 type default 10 obligatory.
parameters: p_mode  type ctu_mode default 'N' obligatory.
parameters: p_test as checkbox default 'X'.

selection-screen skip 1.
parameters: p_pre as checkbox .
parameters: p_date type pam_month  .
selection-screen end of block 1.

initialization.

  call function 'SEPA_MANDATE_ADD_MONTH_TO_DATE'
    exporting
      months  '-4'
      olddate sy-datum
    importing
      newdate lv_data.
  concatenate lv_data+0(4lv_data+4(2into p_date.

*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  lv_lfgja p_date+0(4).
  lv_lfmon p_date+4(2).
  perform get_data.
  if it_record[] is initial.
    message i003(zmm).
    exit.
  endif.
  perform check_data.
  perform process_data.
  perform display_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  select matnr bwkey sobkz pspnr vprsv verpr stprs peinh
      into corresponding fields of table it_record
    from qbew
    where matnr in s_matnr
      and bwkey s_bwkey.

  select distinct matnr bwkey
      into corresponding fields of table it_matnr
    from qbew
    where matnr in s_matnr
      and bwkey s_bwkey.
  if it_matnr[] is not initial.

    select pspnr posid
      into corresponding fields of table it_prps
      from prps
      for all entries in it_record
      where pspnr it_record-pspnr.
    sort it_prps by pspnr.

    if p_pre 'X'.
      select matnr bwkey vprsv verpr stprs peinh
        into corresponding fields of table it_mbewh
        from mbewh
        for all entries in it_matnr
        where matnr it_matnr-matnr
          and bwkey it_matnr-bwkey
          and lfgja lv_lfgja
          and lfmon lv_lfmon.
      sort it_mbewh by matnr bwkey.

      select matnr bwkey vprsv verpr stprs peinh
        into corresponding fields of table it_mbew
        from mbew
        for all entries in it_matnr
        where matnr it_matnr-matnr
          and bwkey it_matnr-bwkey.

    else.
      select matnr bwkey vprsv verpr stprs peinh
        into corresponding fields of table it_mbew
        from mbew
        for all entries in it_matnr
        where matnr it_matnr-matnr
          and bwkey it_matnr-bwkey.
    endif.

    sort it_mbew by matnr bwkey.
  endif.
endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .
  data:lv_cur type value 0,
        lv_mod type i,
        lv_fname(30type c,
        lv_temp(2type c,
        lv_len type i,
        lv_dat(10type c,
        lv_inex type value 0,
        lv_price type length 15,
        lv_flag type c,
        lv_total type i,
        lv_record type i.
  lv_mod linesit_record ) .
  describe table it_record lines lv_total_line.

  loop at it_err4.
    lv_tabix sy-tabix.
    loop at it_record where order_t it_err4-order_t.
      lv_line =  sy-tabix  / lv_total_line * 100.
      lv_record lv_record + 1.
      call function 'SAPGUI_PROGRESS_INDICATOR'
        exporting
          percentage lv_line
          text       'Processing Data........'.
      move-corresponding it_record to itab.
      if p_pre 'X'.
        read table it_mbewh with key matnr itab-matnr bwkey itab-bwkey.
        if sy-subrc eq 0.
          itab-vprsv_n it_mbewh-vprsv.
          itab-verpr_n it_mbewh-verpr.
          itab-stprs_n it_mbewh-stprs.
          itab-peinh_n it_mbewh-peinh.
          itab-tab 'MBEWH'.
        else.
          read table it_mbew with key matnr itab-matnr bwkey itab-bwkey.
          if sy-subrc eq 0.
            itab-vprsv_n it_mbew-vprsv.
            itab-verpr_n it_mbew-verpr.
            itab-stprs_n it_mbew-stprs.
            itab-peinh_n it_mbew-peinh.
            itab-tab 'MBEW'.
          else.
            itab-message 'MBEW Price NO Exists'.
            lv_flag 'X'.
          endif.
        endif.
      else.
        read table it_mbew with key matnr itab-matnr bwkey itab-bwkey.
        if sy-subrc eq 0.
          itab-vprsv_n it_mbew-vprsv.
          itab-verpr_n it_mbew-verpr.
          itab-stprs_n it_mbew-stprs.
          itab-peinh_n it_mbew-peinh.
          itab-tab 'MBEW'.
        else.
          itab-message 'MBEW Price NO Exists'.
          lv_flag 'X'.
        endif.
      endif.
      read table  it_prps with key  pspnr itab-pspnr binary search.
      if sy-subrc eq 0.
        itab-posid it_prps-posid.
      else.
        concatenate itab-message  'PRPS WBS NO Exists' into itab-message.
        lv_flag 'X'.
      endif.

      if  p_test  is initial.
        if lv_flag is initial.
          lv_cur lv_cur + 1.
          lv_inex lv_inex + 1.
          lv_total =  lv_total + 1.
          if lv_inex 1.
            perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
            perform bdc_field       using 'BDC_CURSOR'  'MR21HEAD-WERKS'.
            perform change_date_format using p_budat changing lv_dat.
            perform bdc_field       using 'MR21HEAD-BUDAT'   lv_dat.
            perform bdc_field       using 'MR21HEAD-BUKRS' p_bukrs.
            perform bdc_field       using 'MR21HEAD-WERKS' s_bwkey.

            perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
            perform bdc_field       using 'BDC_OKCODE'  '=VAR'.
            perform bdc_field       using 'BDC_CURSOR' 'MR21HEAD-SCREEN_VARIANT'.
            perform bdc_field       using 'MR21HEAD-SCREEN_VARIANT' 'MR21_PSP_ELEMENT_BWKEY_0250'.
          endif.
          move lv_cur to lv_temp.
          lv_len strlenlv_temp  ).
          if lv_len 1.
            concatenate '0' lv_temp into lv_temp.
          endif.
          perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
          perform bdc_field       using 'BDC_OKCODE' '=ENTR'.
          perform bdc_field using 'MR21HEAD-SCREEN_VARIANT' 'MR21_LAGERMATERIAL_0250'.
          concatenate 'CKI_MR21_0250-MATNR(' lv_temp ')' into lv_fname.
          perform bdc_field       using lv_fname it_record-matnr.
          concatenate 'CKI_MR21_0250-NEWVALPR(' lv_temp ')' into lv_fname.
          if itab-vprsv 'V'.
            lv_price itab-verpr_n.
          else.
            lv_price itab-stprs_n.
          endif.
          perform bdc_field       using lv_fname lv_price .

          concatenate 'CKI_MR21_0250-PSPNR(' lv_temp ')' into lv_fname.
          perform bdc_field       using lv_fname itab-posid .

          lv_mod lv_cur mod 9.
          if lv_mod 0.
            clear:lv_cur.
*        lv_cur = 1.
            perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
            perform bdc_field using 'BDC_OKCODE' '=DOWN'.
          endif.
        endif.

        if lv_total p_100 or lv_record lv_total_line and lv_total < p_100 ).
          perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
          perform bdc_field using 'BDC_OKCODE' '=SAVE'.
          call transaction 'MR21'
                   using bdcdata
                   mode p_mode "Background performance
                   update 'S' "local updata
                   messages into it_bdcmsg. "all message table
          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.
            it_err4-message it_return-message.
          else.
            read table it_return with key type 'S' id 'CKPRCH' number '019'.
            if sy-subrc eq 0.
              itab-message it_return-message_v1.
              it_err4-message it_return-message_v1.
            else.
              loop at it_return.
                concatenate itab-message  it_return-message into itab-message.
                concatenate it_err4-message  it_return-message into it_err4-message.
              endloop.
            endif.
          endif.
          modify it_err4 index lv_tabix transporting message.
          clear: it_return,it_bdcmsg,it_bdcmsg[], bdcdata, bdcdata[],it_return[],lv_total,
            lv_cur ,lv_mod  ,lv_len,lv_inex.
        endif.
      endif.
      append itab.
      clear:itab,lv_flag,lv_price.
    endloop.
    clear:it_err4-message.
  endloop.
  loop at itab where message space.
    lv_tabix sy-tabix.
    read table it_err4 with key order_t itab-order_t .
    if sy-subrc eq 0.
      itab-message it_err4-message.
      modify itab index lv_tabix transporting message.
    endif.
  endloop.
  free: it_record,it_err4,it_matnr,it_mbew,it_prps,it_bdcmsg,bdcdata,it_return,it_mbewh.
endform.                    " PROCESS_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
*&---------------------------------------------------------------------*
*&      Form  CHANGE_DATE_FORMAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_<GT_OUT>_DATUV  text
*      <--P_LV_DAT  text
*      <--P_PERFORM  text
*      <--P_BDC_FIELD  text
*      -->P_0208   text
*      -->P_<GT_OUT>_DATUV  text
*----------------------------------------------------------------------*
form change_date_format  using pi_date changing pt_date.
  call function 'CONVERT_DATE_TO_EXTERNAL'
    exporting
      date_internal            pi_date
    importing
      date_external            pt_date
    exceptions
      date_internal_is_invalid 1
      others                   2.
  if sy-subrc <> 0.
    message 'Date Format Error' type 'E'.
  endif.
endform.                    " CHANGE_DATE_FORMAT
*&---------------------------------------------------------------------*
*&      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  'MATNR' 'Material' '' '18' 'L' ''  'MARA' 'MATNR'.
  alv_field  'BWKEY' 'Plant' '' '5' 'L' '' '' ''.
  alv_field  'POSID' 'WBS' '' '12' 'L' '' '' ''.
  alv_field  'VPRSV' '' 'Price Control Indicator' '5' 'L' ''  '' ''.
  alv_field  'VERPR' '' 'Moving price' '10' 'R' ''  '' ''.
  alv_field  'STPRS' '' 'Standard price' '10' 'R' ''  '' ''.
  alv_field  'PEINH' '' 'Price Unit' '10' 'R' ''  '' ''.
  alv_field  'VPRSV_N' '' 'New Price Control Indicator' '5' 'L' ''  '' ''.
  alv_field  'VERPR_N' '' 'New Moving price' '10' 'R' ''  '' ''.
  alv_field  'STPRS_N' '' 'New Standard price' '10' 'R' ''  '' ''.
  alv_field  'PEINH_N' '' 'New Price Unit' '10' 'R' ''  '' ''.
  alv_field  'TAB' '' 'Ref table' '6' 'L' ''  '' ''.
  alv_field  'MESSAGE' '' 'Message' '20' 'L' ''  '' ''.


  sort itab by matnr bwkey.

  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.
  if sy-subrc ne 0.
    write: sy-msgv1,sy-msgv2, sy-msgv3, sy-msgv4.
  endif.
endform.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form check_data .
  data:lv_total type i,
        lv_i type i,
        lv_j type i,
        lv_c type length 20.
  lv_i 1.
  lv_j 1.
  loop at it_record.
    lv_tabix sy-tabix.
    lv_c lv_j.
    concatenate 'A' lv_c into it_record-order_t.
    condense it_record-order_t no-gaps.
    if lv_i p_100 .
      lv_i 0.
      lv_j lv_j + 1.
    endif.
    lv_i lv_i + 1.

    it_err4-order_t it_record-order_t.
    collect it_err4.
    clear it_err4.
    modify it_record index lv_tabix transporting order_t.
  endloop.
endform.                    " CHECK_DATA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值