SAP: ZMMR004 Change Material Price MR21

44 篇文章 0 订阅

 

10/08/2012 8000 8101 10000071000R002 21.77
10/08/2012 8000 8101 10000322000R000 22.77

*&---------------------------------------------------------------------*
*& Progarm      :  ZMMR004                        Author : Jimmy Wong
*& Created      :  08 Oct 2012                    App    : MM
*& Title        :  Change Material
*& Description  :  Change Material
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       08 Oct 2012 the first version
*&  the last update time  2012.10.08 14:00
*&---------------------------------------------------------------------*

report  zmmr004 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap."T148,t001w,t001l,mara,t006.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
      order type i,
      order_t type length 30,
      budat like mlhd-bldat,
      budat_001(010),
      bukrs like mlit-bukrs,
      bwkey like mlit-bwkey,
      matnr like mlit-matnr,
      matnr_c type length 20,
      newvalpr type valpr,
      newvalpr_01_007(015),
      message type length 700,
     end of it_record.
types:lv_type type length 50.
data:begin of itab occurs 0,
      budat_001 type lv_type,
      bukrs type lv_type,
      bwkey type lv_type,
      matnr_c type lv_type,
      newvalpr_01_007 type lv_type,
    end of itab.
data:begin of it_tab occurs 0.
        include structure itab.
data: message(700type c,
    end of it_tab.

data: it_err like it_record occurs with header line.
data: it_err2 like it_record occurs with header line.
data: it_err3 like it_record occurs with header line.
data: it_err4 like it_record occurs with header line.
data: it_err5 like it_record occurs with header line.

data: it_bdcmsg like bdcmsgcoll occurs with header line,
      bdcdata like bdcdata occurs with header line,
      lv_mode type ctu_mode value 'N'.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
data: msg   type string.
data: lv_tabix like sy-tabix,
      lv_flag  type c.
data: fc_hier type slis_t_fieldcat_alv,
      wa_hier type slis_fieldcat_alv .
data: begin of it_down occurs 0,
          line(1000type c,
end of it_down .
data: begin of i_file occurs 0,
        line(1000type c,
      end of i_file.
data: gv_file like rlgrap-filename.
*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters: pr_error like rlgrap-filename obligatory default '/usr/sap/tmp'.
PARAMETERS: p_100 type DEFAULT 100.
selection-screen end of block 1.
*----------------------------------------------------------------------*
*  Initialize                                                          *
*----------------------------------------------------------------------*
initialization.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
  perform f4_filename using filename.

at selection-screen on value-request for  pr_error.
  perform f4_filename using pr_error.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  perform up_select.

end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  UP_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form up_select .
  data:lv_total type i,
        lv_i type i,
        lv_j type i,
        lv_c type length 20.
  refresh: it_record ,it_err2,it_err,it_err4.
  clear:it_record,it_err2,it_err,it_err4.
  perform get_data.
  perform get_it_record2.
  perform check_it_record.
  lv_i 1.
  lv_j 1.
  loop at it_record.
    if not it_record-message ' OK.'.
      move-corresponding it_record to it_err2.
      append it_err2.
      clear it_err2.
    else.
      move-corresponding it_record to it_err.
      lv_c lv_j.
      concatenate 'A' lv_c into it_err-order_t.
      condense it_err-order_t no-gaps.
      if lv_i p_100 .
        lv_i 0.
        lv_j lv_j + 1.
      endif.
      lv_i lv_i + 1.

      append it_err.
      it_err4-budat it_record-budat.
      it_err4-bukrs it_record-bukrs.
      it_err4-bwkey it_record-bwkey.
      it_err4-order_t it_err-order_t.
      collect it_err4.
      clear it_err4.
      clear it_err.
    endif.
  endloop.


  loop at it_err4.
    clear:it_err5 ,it_err5[],it_bdcmsg,it_bdcmsg[], bdcdata, bdcdata[],it_err4-message.
    lv_tabix sy-tabix.
    loop at it_err  into it_err5
        where budat it_err4-budat
          and  bukrs it_err4-bukrs
          and  bwkey it_err4-bwkey
          and  order_t it_err4-order_t.
      append it_err5.
    endloop.

    check not it_err5[] is initial.
    perform process_data.
    read table it_bdcmsg with key msgtyp 'S'.
    if sy-subrc eq 0.
      concatenate it_err4-message  it_bdcmsg-msgv1 ' is Posted' into it_err4-message.
    else.
      read table it_bdcmsg with key msgtyp 'I'.
      if sy-subrc eq 0.
        it_err4-message 'No Price Data Change'.
      else.
        it_err4-message it_bdcmsg-msgv1.
      endif.
    endif.
    modify it_err4 index lv_tabix.
  endloop.

  clear it_err3.
  refresh it_err3.
  loop at it_err4.
    loop at it_err where budat it_err4-budat
                    and  bukrs it_err4-bukrs
                    and  bwkey it_err4-bwkey
                    and  order_t it_err4-order_t.
      move-corresponding it_err to it_err3.
      it_err3-message it_err4-message.
      append it_err3.
      clear it_err3.
    endloop.
  endloop.
  append lines of it_err2 to it_err3.
  sort it_err3 by matnr ascending.

  check not it_err3[] is initial.
  perform down_file .

  perform download_server.

*    perform write_data.

endform.                    " UP_SELECT
*&---------------------------------------------------------------------*
*&      Form  GET_IT_RECORD2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_it_record2 .
  data:lv_order type i.
  check not itab[] is initial.
  lv_order 1.
  loop at itab.
    move-corresponding itab to it_record.

    perform change_char_to_data using it_record-budat_001
                     changing it_record-budat.
    it_record-matnr it_record-matnr_c.
    replace  '-' with '' into it_record-matnr.
    replace  '-' with '' into it_record-matnr.
    replace  '-' with '' into it_record-matnr.
    condense  it_record-matnr no-gaps.
*
*        perform process_num using it_record-newvalpr_01_007
*                  changing it_record-newvalpr  .
    it_record-newvalpr it_record-newvalpr_01_007.

    it_record-order lv_order.
    append it_record.
    lv_order lv_order + 1.
    clear : it_record.
  endloop.
endform.                    " GET_IT_RECORD2

*&---------------------------------------------------------------------*
*&      Form  CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_DATE  text
*      <--P_IT_RECORD_VDATU  text
*----------------------------------------------------------------------*
form change_char_to_data  using    p_char
                          changing p_date.

  check p_char is not initial.
  if p_char cn c_chk_date.
    p_date '00000000'.
  else.
    call function 'OIU_ME_CHAR_TO_DATE'
      exporting
        i_char      p_char
      importing
        e_date      p_date
      exceptions
        error_found 4.
    if sy-subrc ne 0.
      p_date '00000000'.
      "p_date = sy-datum.
    endif.
  endif.
  "p_date = '20121031' .
endform.                    "CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_NUM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_GT_DATA_VALUE  text
*      <--P_IT_RECORD_KPEIN  text
*----------------------------------------------------------------------*
form process_num  using    p_value
                  changing p_change.
  data :lv_value type length 30 .
  if p_value cn c_chk_num.
    p_change -1.
  else.
    lv_value  p_value.
    call function 'C14DG_CHAR_NUMBER_CONVERSION'
      exporting
        i_string lv_value
      importing
        e_dec    p_change.
  endif.
endform.                    " PROCESS_NUM
*&---------------------------------------------------------------------*
*&      Form  CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form check_it_record .
  data: lv_flag2 like lv_flag,
        lv_bukrs like t001-bukrs,
        lv_werks like t001w-werks,
        lv_matnr like mara-matnr.
  clear: lv_flag,lv_flag2 .
  loop at it_record.
    lv_tabix sy-tabix.
    clear:lv_flag2,it_record-message.
    " Posting date
    if it_record-budat '00000000'.
      lv_flag 'X'.
      lv_flag2 'X'.
      concatenate it_record-message  ' Posting Date Format MM/dd/yyyy.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    " Company Code
    select single bukrs into lv_bukrs
        from t001
        where bukrs it_record-bukrs.
    if sy-subrc <> 0.
      lv_flag 'X'.
      lv_flag2 'X'.
      concatenate it_record-message  ' Company Code Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "plant
    select single werks into  lv_werks
       from t001w
       where werks it_record-bwkey.
    if sy-subrc <> 0.
      lv_flag 'X'.
      lv_flag2 'X'.
      concatenate it_record-message  ' Plant Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Material Number
    select single matnr into lv_matnr
        from mara
        where matnr it_record-matnr.
    if sy-subrc <> 0.
      lv_flag 'X'.
      lv_flag2 'X'.
      concatenate it_record-message  ' Material Number Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "Price
*    if it_record-newvalpr = 0.     "
*      lv_flag = 'X'.
*      lv_flag2 = 'X'.
*      concatenate it_record-message
*        ' New Price = 0 is error.' into it_record-message.
*      modify it_record index lv_tabix.
*    elseif it_record-newvalpr < 0.
*      lv_flag = 'X'.
*      lv_flag2 = 'X'.
*      concatenate it_record-message
*        ' New Price is negative or New Price not is number.'
*        into it_record-message.
*      modify it_record index lv_tabix.
*    endif.
    " Plant && Material
    select single matnr into lv_matnr
        from mbew
        where matnr it_record-matnr
           and bwkey it_record-bwkey.
    if sy-subrc <> 0.
      lv_flag 'X'.
      lv_flag2 'X'.
      concatenate it_record-message ' ' it_record-bwkey ' not Maintained for material ' it_record-matnr
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    if lv_flag2 <> 'X'.
      it_record-message ' OK.'.
      modify it_record index lv_tabix.
    endif.
  endloop.
endform.                    " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*&      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_inex type value 0.
  lv_mod linesit_err5 ) .
  loop at it_err5.
    lv_cur lv_cur + 1.
    lv_inex lv_inex + 1.
    if lv_inex 1.
      perform bdc_dynpro      using 'SAPRCKM_MR21' '0201'.
      perform bdc_field       using 'BDC_CURSOR'  'MR21HEAD-WERKS'.
      perform bdc_field       using 'MR21HEAD-BUDAT' it_err5-budat_001.
      perform bdc_field       using 'MR21HEAD-BUKRS' it_err5-bukrs.
      perform bdc_field       using 'MR21HEAD-WERKS' it_err5-bwkey.
    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_err5-matnr.
    concatenate 'CKI_MR21_0250-NEWVALPR(' lv_temp ')' into lv_fname.
    perform bdc_field       using lv_fname it_err5-newvalpr_01_007.
    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.
  endloop.
  perform bdc_dynpro using 'SAPRCKM_MR21' '0201'.
  perform bdc_field using 'BDC_OKCODE' '=SAVE'.
  call transaction 'MR21'
           using bdcdata
           mode lv_mode "Background performance
           update 'S' "local updata
           messages into it_bdcmsg. "all message table


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  WRITE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form write_data .
  refresh fc_hier.
  define alv_field.
    clear:wa_hier.
    wa_hier-col_pos &1.
    wa_hier-fieldname &2.
    wa_hier-seltext_m &3.
    wa_hier-seltext_l &4.
    wa_hier-outputlen &5.
    append wa_hier to fc_hier.
  end-of-definition.
  alv_field '1' 'BUDAT' '' 'Posting Date' '15'.
  alv_field '2' 'BUKRS' 'Company Code' '' '15'.
  alv_field '3' 'BWKEY' 'Plant' '' '10'.
  alv_field '4' 'MATNR_C' '' 'Material Number' '20'.
  alv_field '5' 'NEWVALPR' 'New Price' '' '12'.
  alv_field '6' 'MESSAGE' 'Message' '' '50'.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat   fc_hier[]
    tables
      t_outtab      it_err3[]
    exceptions
      program_error 1
      others        2.
  if sy-subrc ne 0.
    "     message i004(zmm)
  endif.
endform.                    " WRITE_DATA
*&---------------------------------------------------------------------*
*&      Form  F4_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_FILENAME  text
*----------------------------------------------------------------------*
form f4_filename  using    p_filename.
  call function 'F4_FILENAME'
*    EXPORTING
*     PROGRAM_NAME        = SYST-CPROG
*     DYNPRO_NUMBER       = SYST-DYNNR
*     FIELD_NAME          =
    importing
      file_name           p_filename.
endform.                    " F4_FILENAME
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  clear:i_file,i_file[].
  open dataset filename for input in text mode encoding default.
  if sy-subrc 0.
    do.
      read dataset filename into i_file.
      if sy-subrc ne 0.
        exit.
      endif.
      append i_file.
    enddo.
    close dataset filename.
  else.
    clear : msg.
    concatenate 'Upload Filename ' filename  ' Is Error!' into msg.
    message msg type 'I'.
    exit.
  endif.
  if not i_file[] is initial.
    loop at i_file.
      split i_file-line at cl_abap_char_utilities=>horizontal_tab
                               into itab-budat_001  itab-bukrs
                                    itab-bwkey  itab-matnr_c  itab-newvalpr_01_007.
      append itab.
      clear:itab.
    endloop.
  endif.
endform.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  DOWN_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form down_file .
  clear:it_down,it_down[].
  concatenate
          'Posting Date'
          'Company Code'
          'Plant'
          'Material Number'
          'New Price'
          'Message'
            into it_down separated by  cl_abap_char_utilities=>horizontal_tab.
  append it_down.
  loop at it_err3.
    move-corresponding it_err3 to it_tab.
    concatenate it_tab-budat_001  it_tab-bukrs
                it_tab-bwkey  it_tab-matnr_c  it_tab-newvalpr_01_007
                it_tab-message
                into it_down separated by cl_abap_char_utilities=>horizontal_tab.
    condense it_down .
    append it_down .
  endloop.
endform.                    " DOWN_FILE
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_SERVER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form download_server .
  perform get_file.
  open dataset gv_file for output in text mode encoding default.
  loop at it_down.
    transfer it_down-line to gv_file.
  endloop.
  close dataset gv_file.
endform.                    " DOWNLOAD_SERVER
*&---------------------------------------------------------------------*
*&      Form  GET_FILE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_file .
  data: wa_key(30type c.
  data: lv_i type i.
  data: lv_c(1type c.
  data: wa_date(8type c.
  data: wa_time like sy-uzeit.
  data: lv_char type c.
  wa_date sy-datum.
  wa_time =  sy-uzeit.
  concatenate 'MR21' wa_date wa_time  into wa_key.
  concatenate wa_key '.txt' into wa_key.

  lv_i strlenpr_error ).
  lv_i lv_i 1 .
  if lv_i > 1.
    lv_c pr_error+lv_i(1).
  endif.
*    if p_test = 'X'.
*      lv_char = '\' .
*    else.
  lv_char '/' .
*    endif.
  if lv_c eq lv_char.
    concatenate pr_error wa_key into gv_file.
  else.
    concatenate pr_error lv_char wa_key into gv_file.
  endif.
endform.                    " GET_FILE

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值