ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 删除同一工厂的重复BOM.

删除同一工厂的重复BOM.

Linux操作系统 作者:lz163160 时间:2015-01-20 10:11:57 0 删除 编辑

*&---------------------------------------------------------------------*
*& Report  ZBOM_DEL
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

report  zbom_del.
type-pools : slis.
types: slis_t_fieldcat_alv type slis_fieldcat_alv occurs 1.
data : g_events_t type slis_t_event,
g_fieldcat_t type slis_t_fieldcat_alv.
data : g_layout_s type slis_layout_alv.
data: l_msg type string.

data: l_fieldcat_s type slis_fieldcat_alv.
define __field_tab.
  l_fieldcat_s-seltext_l = &1.
  l_fieldcat_s-seltext_m = &1.
  l_fieldcat_s-seltext_s = &1.
  l_fieldcat_s-ddictxt = ' '.
end-of-definition.


tables:mast.
data: i_mast like table of mast with header line,

i_mast_show like table of mast with header line,
i_mast_del like table of mast with header line.
parameters: p_tag1 type c  radiobutton group gr1,
            p_tag type c radiobutton group gr1  default 'X'.

start-of-selection.


  select matnr werks stlan
*STLAN STLNR STLAL
  into corresponding fields of table i_mast
  from mast
  group by matnr werks stlan
  having count( * ) > 1.

  if i_mast[] is not initial.
    select *
    into corresponding fields of table i_mast_show
    from mast
    for all entries in  i_mast
    where matnr = i_mast-matnr and  werks = i_mast-werks and stlan = i_mast-stlan.

 


  else.
    message '没有发现重复BOM' type 'E'.
    return.

  endif.
  sort i_mast_show by matnr werks stlan stlal.

*  LOOP AT i_mast_show.
*
*  ENDLOOP.
  if p_tag1 eq 'X'.
    i_mast_del[] = i_mast_show[].
    sort i_mast_del by matnr werks stlan  ascending stlal descending.
    delete adjacent duplicates from i_mast_del comparing matnr werks stlan.
    loop at i_mast_del.

      call function 'CSAP_MAT_BOM_DELETE'
        exporting
          material                 = i_mast_del-matnr
         plant                    = i_mast_del-werks
          bom_usage                = i_mast_del-stlan
         alternative              = i_mast_del-stlal
*       VALID_FROM               = VALID_FROM
*       CHANGE_NO                = CHANGE_NO
*       REVISION_LEVEL           = REVISION_LEVEL
*       FL_NO_CHANGE_DOC         = ' '
*       FL_COMMIT_AND_WAIT       = ' '
*     IMPORTING
*       FL_WARNING               = FL_WARNING
*     EXCEPTIONS
*       ERROR                    = 1
                .
      if sy-subrc ne 0.
        call function 'BAPI_TRANSACTION_ROLLBACK'.

        concatenate '物料:' i_mast_del-matnr '工厂:' i_mast_del-werks '用途:'  i_mast_del-stlan '可选BOM:' i_mast_del-stlal
        '失败!' into l_msg.
        write:/ l_msg color col_negative .
        skip.
      else.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait = 'X'.
        concatenate '物料:' i_mast_del-matnr '工厂:' i_mast_del-werks '用途:'  i_mast_del-stlan '可选BOM:' i_mast_del-stlal
         '成功!' into l_msg.
        write:/ l_msg color col_positive.
        skip.
      endif.
    endloop.
  endif.


  perform. displaycatalog_merge using g_fieldcat_t[] 'I_MAST_SHOW'.
  perform. alv_display tables i_mast_show[].

 


*--------------------------------------------------------------------
* FORM. ALV_DISPLAY
*--------------------------------------------------------------------
form. alv_display tables p_int_t.
  call function 'REUSE_ALV_GRID_DISPLAY'
  exporting
* I_BACKGROUND_ID = 'ALV_BACKGROUND'
  i_callback_program = 'ZRFIAR0013' "G_REPID
* I_CALLBACK_PF_STATUS_SET = 'PF_STATUS_SET'
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
  is_layout = g_layout_s
  it_fieldcat = g_fieldcat_t[]
  i_save = 'A'
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER = G_EXIT_CAUSED_BY_CALLER
* ES_EXIT_CAUSED_BY_USER = G_EXIT_CAUSED_BY_USER_S
  tables
  t_outtab = p_int_t
  exceptions
  program_error = 1
  thers = 2.

endform. " ALV_DISPLAY


*&---------------------------------------------------------------------*
*&      Form  LAYOUT_INIT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_G_LAYOUT_S  text
*----------------------------------------------------------------------*
form. layout_init using p_g_layout_s type slis_layout_alv.
** Build layout for list display
  p_g_layout_s-detail_popup = 'X'.
  p_g_layout_s-colwidth_optimize = 'X'.
endform. " LAYOUT_INIT


*--------------------------------------------------------------------
* FORM. DISPLAYCATALOG_MERGE *
*--------------------------------------------------------------------
form. displaycatalog_merge using p_g_fieldcat_t
type slis_t_fieldcat_alv
p_tabname.


  call function 'REUSE_ALV_FIELDCATALOG_MERGE'
         exporting
              i_program_name         = sy-repid"SY-REPID
*            i_internal_tabname     = p_tabname
              i_structure_name = 'MAST'
              i_client_never_display = 'X'
             i_inclname             = sy-repid "SY-REPID
              i_bypassing_buffer     = 'X'
              i_buffer_active        = 'X'
         changing
              ct_fieldcat            = p_g_fieldcat_t.

 

endform. " FIELDCATALOG_MERGE

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/16993136/viewspace-1407701/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-01-20

  • 博文量
    18
  • 访问量
    21995