SAP:ZSDR007 Change SO Material Desc

47 篇文章 0 订阅
22 篇文章 0 订阅
*&---------------------------------------------------------------------*
*& Progarm      :  ZSDR007                        Author : Jimmy Wong
*& Created      :  17 OCT 2012                    App    : SD
*& Title        :  Change SO Material
*& Description  :  Change SO Material
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       17 Sep 2012 the first version
*&  the last update time  2012.11.22 17:00
*&---------------------------------------------------------------------*
report  zsdr007 no standard page heading.
tables:vbak.
data:begin of itab occurs 0,
     vbeln    like vbap-vbeln,
     posnr    like vbap-posnr,
     matnr    like vbap-matnr,
     arktx    like vbap-arktx,
     maktx    like makt-maktx,
     vkorg    like vbak-vkorg,
     vtweg    like vbak-vtweg,
     kunnr    like vbak-kunnr,
     kdmat    like vbap-kdmat,
     kdmat_n  like vbap-kdmat,
     message  type length 700,
    end of itab.
data:it_change like itab occurs with header line.
data:lv_tabix like sy-tabix.
data: i_header like    bapisdh1,
      i_headerx like   bapisdh1x ,
      i_item like bapisditm  occurs with header line,
      i_itemx like bapisditmx occurs with header line,
      it_return  like  bapiret2 occurs with header line.
data:begin of it_knmt occurs 0,
     vkorg    like vbak-vkorg,
     vtweg    like vbak-vtweg,
     kunnr    like vbak-kunnr,
     matnr    like vbap-matnr,
     kdmat    like vbap-kdmat,
    end of it_knmt.
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_vbeln for vbak-vbeln. "default '01*'.  "custmer p/n"
parameters: p_test as checkbox default 'X'.

selection-screen begin of line.
parameters: p_so radiobutton group g1 user-command u1 default 'X'.
selection-screen position 1.
selection-screen comment 3(5com1.
selection-screen position 8.
parameters:  p_desc radiobutton group g2 default 'X'.
selection-screen comment 10(20com2.
parameters:  p_cust radiobutton group g2 .
selection-screen comment 34(20com3.
parameters:  p_all radiobutton group g2 .
selection-screen comment 58(20com4.
selection-screen end of line.
parameters: p_dn radiobutton group g1 .
selection-screen end of block 1.

initialization.
  s_vbeln-sign 'I'.
  s_vbeln-option 'CP'.
  s_vbeln-low '01*'.
  append s_vbeln.

at selection-screen output.
  com1 'SO'.
  com2 'Change Material Desc'.
  com3 'Change Cust Material'.
  com4 'Change All'.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  perform get_data.
  if itab[] is initial.
    message 'No Data Found' type 'I'.
    exit.
  endif.
  if p_test ne 'X'.
    if p_so 'X'.
      perform process_data.
    else.
      perform process_dn_data.
    endif.
  endif.
  sort itab by vbeln posnr.
  perform dispaly_data.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_data .
  if p_so 'X'.
    select  a~vbeln a~posnr a~matnr a~arktx  b~maktx
          c~vkorg c~vtweg c~kunnr a~kdmat
        into corresponding fields of table itab
        from vbap as a
        left join makt as on a~matnr b~matnr
        inner join vbak as on a~vbeln c~vbeln
        where a~vbeln in s_vbeln.
    if itab[] is not initial.
      select vkorg vtweg kunnr matnr kdmat
        into corresponding fields of table it_knmt
        from knmt
        for all entries in itab
        where vkorg itab-vkorg
          and vtweg itab-vtweg
          and matnr itab-matnr
          and kunnr itab-kunnr
          and kdmat ne ''.
      sort it_knmt by vkorg vtweg kunnr matnr.
    endif.
    loop at itab.
      lv_tabix sy-tabix.
      if p_all 'X'.
        if itab-arktx ne itab-maktx and itab-maktx is not initial ).
          read table it_knmt with key vkorg itab-vkorg
                                      vtweg itab-vtweg
                                      kunnr itab-kunnr
                                      matnr itab-matnr.
          if sy-subrc eq 0.
            itab-kdmat_n it_knmt-kdmat.
          endif.
          modify itab index lv_tabix.
          move-corresponding itab to it_change.
          append it_change.
          clear: it_change.
        else.
          read table it_knmt with key vkorg itab-vkorg
                                    vtweg itab-vtweg
                                    kunnr itab-kunnr
                                    matnr itab-matnr.
          if sy-subrc eq 0.

            itab-kdmat_n it_knmt-kdmat.
            if itab-kdmat_n ne itab-kdmat.
              modify itab index lv_tabix.
              move-corresponding itab to it_change.
              append it_change.
              clear: it_change.
            else.
              delete itab index lv_tabix.
            endif.
          else.
            if itab-maktx is initial.
              itab-message 'MM03 Material Desc No exists.'.
              modify itab index lv_tabix.
            else.
              delete itab index lv_tabix.
            endif.
          endif.
        endif.
      elseif p_desc 'X'.
        if itab-arktx ne itab-maktx and itab-maktx is not initial ).
          move-corresponding itab to it_change.
          append it_change.
          clear: it_change.
        else.
          if itab-maktx is initial.
            itab-message 'MM03 Material Desc No exists.'.
            modify itab index lv_tabix.
          else.
            delete itab index lv_tabix.
          endif.
        endif.
      else.
        read table it_knmt with key vkorg itab-vkorg
                                      vtweg itab-vtweg
                                      kunnr itab-kunnr
                                      matnr itab-matnr.
        if sy-subrc eq 0.
          itab-kdmat_n it_knmt-kdmat.
          if itab-kdmat_n ne itab-kdmat.
            modify itab index lv_tabix.
            move-corresponding itab to it_change.
            append it_change.
            clear: it_change.
          else.
            delete itab index lv_tabix.
          endif.
        else.
          delete itab index lv_tabix.
        endif.
      endif.
    endloop.
  else.
    select  a~vbeln a~posnr a~matnr a~arktx  b~maktx
      into corresponding fields of table itab
      from lips as a
      left join makt as on a~matnr b~matnr
      where a~vbeln in s_vbeln.

    loop at itab.
      lv_tabix sy-tabix.
      if itab-arktx ne itab-maktx and itab-maktx is not initial.
        move-corresponding itab to it_change.
        append it_change.
        clear: it_change.
      else.
        if itab-maktx is initial.
          itab-message 'MM03 Material Desc No exists.'.
          modify itab index lv_tabix.
        else.
          delete itab index lv_tabix.
        endif.
      endif.
    endloop.
  endif.


endform.                     " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .
  data:lv_message type length 700.
  sort it_change by vbeln posnr .
  loop at it_change.
    i_itemx-updateflag 'U'.
    i_item-itm_number it_change-posnr.      "item no
    i_itemx-itm_number it_change-posnr.      "item no
    if p_all 'X' or p_desc 'X'.
      i_item-short_text it_change-maktx.      "material desc
      i_itemx-short_text =  'X'.
    endif.
    if p_all 'X' or p_cust 'X'.
      if it_change-kdmat ne it_change-kdmat_n and it_change-kdmat_n is not initial.
        i_item-cust_mat35 it_change-kdmat_n.      "Customer material
        i_itemx-cust_mat35 =  'X'.
      endif.
    endif.
    append i_itemx.
    append i_item.

    at end of vbeln .
      i_headerx-updateflag 'U'.   "Update flag
      call function 'BAPI_SALESORDER_CHANGE'
        exporting
          salesdocument    it_change-vbeln
*         ORDER_HEADER_IN  =
          order_header_inx i_headerx
        tables
          return           it_return
          order_item_in    i_item
          order_item_inx   i_itemx.


      read table it_return with key type 'E'.
      if sy-subrc eq 0.
        loop at it_return where type 'E'.
          shift it_return-message right deleting trailing space.
          shift it_return-message left deleting leading space.
          concatenate lv_message ' E: ' it_return-message into lv_message.
        endloop.
      else.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait 'X'.
        lv_message 'Change Success.'.
      endif.

      loop at itab where vbeln it_change-vbeln.
        lv_tabix sy-tabix.
        itab-message lv_message.
        modify itab index lv_tabix.
      endloop.

      clear: lv_message,i_headerx ,it_return ,it_return[],i_item[],i_item ,i_itemx,i_itemx[].
    endat.
  endloop.
endform.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  DISPALY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form dispaly_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.
    wa_hier-ref_tabname &6 .
    wa_hier-ref_fieldname &7 .
    append wa_hier to fc_hier.
  end-of-definition.
  if p_so 'X'.
    alv_field '1' 'VBELN' '' 'SO No.' '12' 'VBAP' 'VBELN'.
    alv_field '2' 'POSNR' '' 'SO No Item' '' '' ''.
    alv_field '3' 'MATNR' '' 'Material' '18'  'MARA' 'MATNR'.
    if p_cust 'X'.
      alv_field '4' 'KDMAT' '' 'VA03 Cust Material' '20'  '' ''.
      alv_field '5' 'KDMAT_N' '' 'New Cust Materialc' '20'  '' ''.
      alv_field '6' 'MESSAGE' 'Message' '' '30'  '' ''.
    elseif  p_desc 'X'.
      alv_field '4' 'ARKTX' '' 'VA03 Material Desc' '20'  '' ''.
      alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20'  '' ''.
      alv_field '6' 'MESSAGE' 'Message' '' '30'  '' ''.
    else.
      alv_field '4' 'ARKTX' '' 'VA03 Material Desc' '20'  '' ''.
      alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20'  '' ''.
      alv_field '6' 'KDMAT' '' 'VA03 Cust Material' '20'  '' ''.
      alv_field '7' 'KDMAT_N' '' 'New Cust Materialc' '20'  '' ''.
      alv_field '8' 'MESSAGE' 'Message' '' '30'  '' ''.
    endif.

  else.
    alv_field '1' 'VBELN' '' 'DN No.' '12' 'VBAP' 'VBELN'..
    alv_field '2' 'POSNR' '' 'SDN No Item' '' '' ''.
    alv_field '3' 'MATNR' '' 'Material' '18' 'MARA' 'MATNR'.
    alv_field '4' 'ARKTX' '' 'VL03N Material Desc' '20' '' ''.
    alv_field '5' 'MAKTX' '' 'MM03 Material Desc' '20' '' ''.
    alv_field '6' 'MESSAGE' 'Message' '' '30'  '' ''.
  endif.
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat   fc_hier[]
      i_save        'A'
    tables
      t_outtab      itab
    exceptions
      program_error 1
      others        2.
  if sy-subrc ne 0.
    "     message i004(zmm)
  endif.

endform.                    " DISPALY_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DN_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_dn_data .
  loop at itab.
    lv_tabix sy-tabix.
    check itab-message is initial.
    update lips set arktx itab-maktx
              where vbeln itab-vbeln
                  and posnr itab-posnr.
    itab-message 'Change Success.'.
    modify itab index lv_tabix.
  endloop.
endform.                    " PROCESS_DN_DATA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值