批量更改SAP物料长描述ABAP

批量更改SAP物料长描述ABAP代码,希望对有需要的同学有所帮助

&---------------------------------------------------------------------
*& Report ZMMR006
&---------------------------------------------------------------------
*&
&---------------------------------------------------------------------
REPORT zmmr006.

INCLUDE zbcn_excel.
DATA: lv_name TYPE thead-tdname.
DATA: lv_name1 TYPE thead-tdname.
DATA:
zname TYPE thead-tdname .
DATA:message_rfc LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF gt_data ,

     matnr    TYPE marc-matnr,
     maktx    TYPE MAkt-maktx,
     zmaktx   TYPE MAkt-maktx,
     estr     TYPE string,
     zestr    TYPE string,
     selkz(1) TYPE c,
     zyx      TYPE string,
     zico     TYPE icon_d,
     mess     TYPE char200,
     ztype    TYPE char1,
   END OF gt_data .

DATA t_data TYPE TABLE OF gt_data WITH HEADER LINE .
DATA t_data1 TYPE TABLE OF gt_data WITH HEADER LINE .
DATA t_data2 TYPE TABLE OF gt_data WITH HEADER LINE .
DATA gs_header TYPE thead .
DATA gt_lines TYPE TABLE OF tline WITH HEADER LINE .
DATA gt_lines1 TYPE TABLE OF tline WITH HEADER LINE .
DATA: fieldcat TYPE lvc_t_fcat,
zfieldcat TYPE lvc_s_fcat,
zlvc_s_layo TYPE lvc_s_layo.
PARAMETERS: p_file TYPE rlgrap-filename MODIF ID m1.
SELECTION-SCREEN FUNCTION KEY: 1 .“筛选界面-模板下载需要”

INITIALIZATION .

--------------------------------------------------------------------
*模板下载代码
--------------------------------------------------------------------
DATA:gv_filter TYPE string,
gs_functxt TYPE smp_dyntxt.
gs_functxt-icon_id = icon_export.
gs_functxt-quickinfo = ‘模板下载’.
gs_functxt-icon_text = ‘模板下载’.
sscrfields-functxt_01 = gs_functxt.

AT SELECTION-SCREEN.
IF sscrfields-ucomm = ‘FC01’ .
PERFORM frm_download_template.
ENDIF.

--------------------------------------------------------------------

--------------------------------------------------------------------
*上传模板代码
--------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file . .
CALL FUNCTION ‘F4_FILENAME’
IMPORTING
file_name = p_file. "返回文件名

START-OF-SELECTION.
IF p_file IS NOT INITIAL .
PERFORM frm_get_excel_data USING p_file
1
2
5
10000
‘’.
SORT gt_iexcel BY row col .
REFRESH t_data .
FIELD-SYMBOLS .

LOOP AT gt_iexcel INTO gs_iexcel.
  ASSIGN COMPONENT gs_iexcel-col OF STRUCTURE  t_data TO <fs> .
  <fs> = gs_iexcel-value .
  AT END OF row .
    APPEND t_data .
    CLEAR t_data .
  ENDAT  .
ENDLOOP.

--------------------------------------------------------------------

--------------------------------------------------------------------
*ALV
--------------------------------------------------------------------
zfieldcat-fieldname = ‘SELKZ’.
zfieldcat-coltext = ‘选择’.
zfieldcat-checkbox = ‘X’.
zfieldcat-edit = ‘X’.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.

zfieldcat-fieldname = 'ZICO'.
zfieldcat-coltext = '指示灯'.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.


zfieldcat-fieldname = 'MATNR'.
zfieldcat-coltext = '物料'.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.

zfieldcat-fieldname = 'MAKTX'.
zfieldcat-coltext = '中文短描述'.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.

zfieldcat-fieldname = 'ZMAKTX'.
zfieldcat-coltext = '英文短描述'.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.


zfieldcat-fieldname = 'ESTR'.
zfieldcat-coltext = '中文长描述'.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.

zfieldcat-fieldname = 'ZESTR'.
zfieldcat-coltext = '英文长描述'.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.


zfieldcat-fieldname = 'ZYX'.
zfieldcat-coltext = '执行情况'.
APPEND zfieldcat TO fieldcat.
CLEAR zfieldcat.


zlvc_s_layo-cwidth_opt ='X'."优化ALV字段宽度"



CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
  EXPORTING
  •   I_INTERFACE_CHECK        = ' '
    
  •   I_BYPASSING_BUFFER       =
    
  •   I_BUFFER_ACTIVE          =
      i_callback_program       = sy-repid
      i_callback_pf_status_set = 'SUB_STATUS_SET'
      i_callback_user_command  = 'USER_COMMAND '
    
  •   I_CALLBACK_TOP_OF_PAGE   = ' '
    
  •   I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
    
  •   I_CALLBACK_HTML_END_OF_LIST       = ' '
    
  •   I_STRUCTURE_NAME         =
    
  •   I_BACKGROUND_ID          = ' '
    
  •   I_GRID_TITLE             =
    
  •   I_GRID_SETTINGS          =
      is_layout_lvc            = zlvc_s_layo
      it_fieldcat_lvc          = fieldcat
    
  •   IT_EXCLUDING             =
    
  •   IT_SPECIAL_GROUPS_LVC    =
    
  •   IT_SORT_LVC              =
    
  •   IT_FILTER_LVC            =
    
  •   IT_HYPERLINK             =
    
  •   IS_SEL_HIDE              =
    
  •   I_DEFAULT                = 'X'
    
  •   I_SAVE                   = ' '
    
  •   IS_VARIANT               =
    
  •   IT_EVENTS                =
    
  •   IT_EVENT_EXIT            =
    
  •   IS_PRINT_LVC             =
    
  •   IS_REPREP_ID_LVC         =
    
  •   I_SCREEN_START_COLUMN    = 0
    
  •   I_SCREEN_START_LINE      = 0
    
  •   I_SCREEN_END_COLUMN      = 0
    
  •   I_SCREEN_END_LINE        = 0
    
  •   I_HTML_HEIGHT_TOP        =
    
  •   I_HTML_HEIGHT_END        =
    
  •   IT_ALV_GRAPHICS          =
    
  •   IT_EXCEPT_QINFO_LVC      =
    
  •   IR_SALV_FULLSCREEN_ADAPTER        =
    
  • IMPORTING
  •   E_EXIT_CAUSED_BY_CALLER  =
    
  •   ES_EXIT_CAUSED_BY_USER   =
    TABLES
      t_outtab                 = t_data.
    
  • EXCEPTIONS
  • PROGRAM_ERROR = 1
  • OTHERS = 2

ENDIF.
FORM sub_status_set USING rt_extab TYPE slis_t_extab.
DATA: wa_extab LIKE LINE OF rt_extab.
wa_extab-fcode = ‘&INFO’. "隐藏图标
APPEND wa_extab TO rt_extab.

SET PF-STATUS ‘STATUS01’ EXCLUDING rt_extab .

ENDFORM.
FORM user_command USING s_ucomm TYPE sy-ucomm “屏幕事件”
re_selfield TYPE slis_selfield.

  • CALL METHOD gcl_alv_grid->check_changed_data. "触发数据变更
    CASE s_ucomm.

    WHEN ‘MASS’.
    PERFORM zmm02.
    WHEN ‘ALL’.
    PERFORM f_alv_all_select.
    WHEN ‘DEALL’.
    PERFORM f_alv_all_deselect .

    WHEN ‘&IC1’. “双击跳转”
    READ TABLE t_data INDEX re_selfield-tabindex.
    IF re_selfield-fieldname = ‘MATNR’.
    SET PARAMETER ID ‘MAT’ FIELD t_data-matnr .
    CALL TRANSACTION ‘MM03’ AND SKIP FIRST SCREEN .
    ENDIF .
    ENDCASE.
    re_selfield-refresh = ‘X’.
    ENDFORM.

FORM zmm02.
DATA:g_grid TYPE REF TO cl_gui_alv_grid.

CALL FUNCTION ‘GET_GLOBALS_FROM_SLVC_FULLSCR’ “动态刷新内表”
IMPORTING
e_grid = g_grid.

CALL METHOD g_grid->check_changed_data.
CALL METHOD g_grid->refresh_table_display.

LOOP AT t_data WHERE selkz = ‘X’.
IF t_data-estr IS NOT INITIAL.
CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
EXPORTING
input = t_data-matnr
IMPORTING
output = t_data-matnr.
gs_header-mandt = sy-mandt .
gs_header-tdname = t_data-matnr .
gs_header-tdid = ‘GRUN’.
gs_header-tdspras = sy-langu .
gs_header-tdobject = ‘MATERIAL’.
CLEAR gt_lines .
gt_lines-tdformat = ‘*’ .
gt_lines-tdline = t_data-estr .
APPEND gt_lines.
CALL FUNCTION ‘SAVE_TEXT’
EXPORTING
header = gs_header
savemode_direct = ‘X’
TABLES
lines = gt_lines[].
REFRESH gt_lines[].

  gs_header-mandt = sy-mandt .
  gs_header-tdname = t_data-matnr  .
  gs_header-tdid   = 'GRUN'.
  gs_header-tdspras = sy-langu .
  gs_header-tdobject = 'MATERIAL'.
  zname  = t_data-matnr .
  CLEAR   gt_lines1.
  CALL FUNCTION 'READ_TEXT'
    EXPORTING
  •     CLIENT   = SY-MANDT
        id       = 'GRUN'
        language = sy-langu
        name     = zname
        object   = 'MATERIAL'
    
  •   TABLES
        lines    = gt_lines1[].
    CLEAR t_data1-estr.
    

    else.
    CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
    EXPORTING
    input = t_data-matnr
    IMPORTING
    output = t_data-matnr.
    lv_name = t_data-matnr.

    CALL FUNCTION 'DELETE_TEXT'
      EXPORTING
        client          = sy-mandt
        id              = 'GRUN'     "这是文本的ID,可能需要根据你的系统进行修改
        language        = '1'
        name            = lv_name
        object          = 'MATERIAL'
        savemode_direct = 'X'
      EXCEPTIONS
        not_found       = 1
        OTHERS          = 2.
    

    ENDIF.

    IF t_data-maktx IS NOT INITIAL.
    CLEAR:bdcdata[],messtab[].

*perform bdc_dynpro using ‘SAPLMGMM’ ‘0060’.
*perform bdc_field using ‘BDC_CURSOR’

  •                          'RMMG1-MATNR'.
    

*perform bdc_field using ‘BDC_OKCODE’

  •                          '=ENTR'.
    

*perform bdc_field using ‘RMMG1-MATNR’

  •                          T_DATA-MATNR.
    

*perform bdc_dynpro using ‘SAPLMGMM’ ‘0070’.
*perform bdc_field using ‘BDC_CURSOR’

  •                          'MSICHTAUSW-DYTXT(01)'.
    

*perform bdc_field using ‘BDC_OKCODE’

  •                          '=DEF_SAVE'.
    

*perform bdc_field using ‘MSICHTAUSW-KZSEL(01)’

  •                          'X' .
    

*perform bdc_dynpro using ‘SAPLMGMM’ ‘0070’.
*perform bdc_field using ‘BDC_CURSOR’

  •                          'MSICHTAUSW-DYTXT(01)'.
    

*perform bdc_field using ‘BDC_OKCODE’

  •                          '=ENTR'.
    

*perform bdc_dynpro using ‘SAPLMGMM’ ‘4004’.
*perform bdc_field using ‘BDC_OKCODE’

  •                          '=BU'.
    

*perform bdc_field using ‘BDC_CURSOR’

  •                          'MAKT-MAKTX'.
    

*perform bdc_field using ‘MAKT-MAKTX’

  •                          T_DATA-MAKTX.
    

*perform bdc_field using ‘DESC_LANGU_GDTXT’

  •                          '1'.
    

--------------------------------------------------------------------
PERFORM bdc_dynpro USING ‘SAPLMGMM’ ‘0060’.
PERFORM bdc_field USING ‘BDC_CURSOR’
‘RMMG1-MATNR’.
PERFORM bdc_field USING ‘BDC_OKCODE’
‘=AUSW’.
PERFORM bdc_field USING ‘RMMG1-MATNR’
t_data-matnr.
PERFORM bdc_dynpro USING ‘SAPLMGMM’ ‘0070’.
PERFORM bdc_field USING ‘BDC_CURSOR’
‘MSICHTAUSW-DYTXT(01)’.
PERFORM bdc_field USING ‘BDC_OKCODE’
‘=DEF_SAVE’.
PERFORM bdc_field USING ‘MSICHTAUSW-KZSEL(01)’
‘X’.
PERFORM bdc_dynpro USING ‘SAPLMGMM’ ‘0070’.
PERFORM bdc_field USING ‘BDC_CURSOR’
‘MSICHTAUSW-DYTXT(01)’.
PERFORM bdc_field USING ‘BDC_OKCODE’
‘=ENTR’.
PERFORM bdc_dynpro USING ‘SAPLMGMM’ ‘4004’.
PERFORM bdc_field USING ‘BDC_OKCODE’
‘=ZU01’.
PERFORM bdc_field USING ‘BDC_CURSOR’
‘MAKT-MAKTX’.
PERFORM bdc_field USING ‘MAKT-MAKTX’
t_data-maktx.
PERFORM bdc_field USING ‘DESC_LANGU_GDTXT’
‘1’.
PERFORM bdc_dynpro USING ‘SAPLMGMM’ ‘4300’.
PERFORM bdc_field USING ‘BDC_OKCODE’
‘/00’.
PERFORM bdc_field USING ‘BDC_CURSOR’
‘SKTEXT-MAKTX(02)’.
PERFORM bdc_field USING ‘SKTEXT-SPRAS(02)’
‘EN’.
PERFORM bdc_field USING ‘SKTEXT-MAKTX(01)’
t_data-maktx.
PERFORM bdc_field USING ‘SKTEXT-MAKTX(02)’
t_data-zmaktx.
PERFORM bdc_dynpro USING ‘SAPLMGMM’ ‘4300’.
PERFORM bdc_field USING ‘BDC_OKCODE’
‘=BU’.
PERFORM bdc_field USING ‘BDC_CURSOR’
‘SKTEXT-SPRAS(02)’.

  CALL TRANSACTION 'MM02' USING bdcdata
             MODE   ctumode
             UPDATE cupdate
             MESSAGES INTO messtab.


  READ TABLE  messtab WITH KEY msgtyp = 'E'.

  IF sy-subrc = 0.
    CALL FUNCTION 'MESSAGE_TEXT_BUILD'
      EXPORTING
        msgid               = message_rfc-msgid
        msgnr               = message_rfc-msgnr
        msgv1               = message_rfc-msgv1
        msgv2               = message_rfc-msgv2
        msgv3               = message_rfc-msgv3
        msgv4               = message_rfc-msgv4
      IMPORTING
        message_text_output = t_data-mess.
    t_data-ztype = 'E' .
    t_data-zyx  = '物料描述更新失败!'  &&'('&& t_data-mess &&')'.
    t_data-zico = icon_red_light.
  ELSE.

    t_data-ztype = 'S'.
    t_data-zyx  = '物料描述更新成功!'.
    t_data-zico = icon_green_light.

  ENDIF.
  MODIFY  t_data.
  • ENDIF.
    IF t_data-zestr IS NOT INITIAL.
    CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
    EXPORTING
    input = t_data-matnr
    IMPORTING
    output = t_data-matnr.
    gs_header-mandt = sy-mandt .
    gs_header-tdname = t_data-matnr .
    gs_header-tdid = ‘GRUN’.
    gs_header-tdspras = ‘EN’ .
    gs_header-tdobject = ‘MATERIAL’.
    CLEAR gt_lines .
    gt_lines-tdformat = ‘*’ .
    gt_lines-tdline = t_data-zestr .
    APPEND gt_lines.
    CALL FUNCTION ‘SAVE_TEXT’
    EXPORTING
    header = gs_header
    savemode_direct = ‘X’
    TABLES
    lines = gt_lines[].
    REFRESH gt_lines[].
    else.
    CALL FUNCTION ‘CONVERSION_EXIT_MATN1_INPUT’
    EXPORTING
    input = t_data-matnr
    IMPORTING
    output = t_data-matnr.
    lv_name1 = t_data-matnr.
    CALL FUNCTION ‘DELETE_TEXT’
    EXPORTING
    client = sy-mandt
    id = ‘GRUN’ "这是文本的ID,可能需要根据你的系统进行修改
    language = ‘E’
    name = lv_name1
    object = ‘MATERIAL’
    savemode_direct = ‘X’
    EXCEPTIONS
    not_found = 1
    OTHERS = 2.
    CLEAR t_data1-estr.

    IF t_data-estr IS INITIAL.

  • REFRESH gt_lines[].
    endif.
    LOOP AT gt_lines1.

     t_data1-estr = t_data1-estr  &&  gt_lines1-tdline.
    

    ENDLOOP .

    IF t_data1-estr = t_data-estr.
    t_data-zyx = ‘长描述修改成功’.
    t_data-zico = icon_green_light .“ALV中指示灯显示”
    ELSE.
    t_data-zyx = ‘长描述修改失败’.
    t_data-zico = icon_red_light.“ALV中指示灯显示”
    ENDIF.
    MODIFY t_data.
    CLEAR t_data.
    ENDIF.
    ENDLOOP.

ENDFORM. "SUB_USER_COMMAND
*--------------------------------------------------------------------
**全选选按钮控制
*--------------------------------------------------------------------
FORM f_alv_all_select .

DATA:lv_tabix TYPE sy-tabix.

LOOP AT t_data.
lv_tabix = sy-tabix.
t_data-selkz = ‘X’.
MODIFY t_data INDEX lv_tabix.
ENDLOOP.
ENDFORM.
*
*--------------------------------------------------------------------
**反选按钮控制
*--------------------------------------------------------------------
FORM f_alv_all_deselect .

DATA:lv_tabix TYPE sy-tabix.

LOOP AT t_data.
lv_tabix = sy-tabix.
t_data-selkz = ’ '.
MODIFY t_data INDEX lv_tabix.
ENDLOOP.
ENDFORM.

&---------------------------------------------------------------------
*& FORM FRM_DOWNLOAD_TEMPLATE
&---------------------------------------------------------------------
*& TEXT:下载模板
&---------------------------------------------------------------------
FORM frm_download_template .

  • 检查系统是否存在模板
    DATA: lc_objname TYPE wwwdata-objid VALUE ‘ZMM_BAT_009’.
    DATA: ls_objdata TYPE wwwdatatab.

  • 弹出选择存放的路径.
    DATA: lc_window_title TYPE string VALUE ‘文件下载’,
    lc_default_extension TYPE string VALUE ‘XLSX’,
    lc_default_file_name TYPE string VALUE ‘物料英文描述批量导入模板’,
    lc_file_filter TYPE string VALUE ‘EXCEL文件(.XLSX)|.XLSX|’,
    lv_filename TYPE string,
    lv_path TYPE string,
    lv_fullpath TYPE string,
    lv_user_action TYPE i.
    DATA: lv_key TYPE wwwdatatab,
    lv_destination TYPE rlgrap-filename,
    lv_rc TYPE i,
    lv_temp TYPE c.
    CLEAR:ls_objdata.

  • 从SAP服务器中下载EXCEL模板
    SELECT SINGLE relid
    objid
    FROM wwwdata "存对象模板的表
    INTO CORRESPONDING FIELDS OF ls_objdata
    WHERE srtf2 = 0
    AND relid = ‘MI’ "有三种类型 HT MI IT
    AND objid = lc_objname. "MONTLYSTOCK

    IF sy-subrc <> 0.
    MESSAGE ‘EXCEL 模板不存在,请用TCODE:SMW0进行加载’ TYPE ‘E’.
    RETURN.
    ENDIF.
    IF ls_objdata-objid = space .
    MESSAGE ‘EXCEL 模板不存在,请用TCODE:SMW0进行加载’ TYPE ‘E’.
    RETURN.
    ENDIF.
    CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
    window_title = lc_window_title
    default_extension = lc_default_extension
    default_file_name = lc_default_file_name
    file_filter = lc_file_filter
    CHANGING
    filename = lv_filename
    path = lv_path
    fullpath = lv_fullpath
    user_action = lv_user_action
    EXCEPTIONS
    cntl_error = 1
    error_no_gui = 2
    not_supported_by_gui = 3
    invalid_default_file_name = 4
    OTHERS = 5.
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
    IF lv_user_action = ( cl_gui_frontend_services=>action_ok ).

  • 下载模板
    SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF lv_key
    FROM wwwdata
    WHERE objid = lc_objname .
    lv_destination = lv_fullpath.
    CALL FUNCTION ‘DOWNLOAD_WEB_OBJECT’
    EXPORTING
    key = lv_key
    destination = lv_destination
    IMPORTING
    rc = lv_rc
    CHANGING
    temp = lv_temp.
    IF lv_rc <> 0.
    MESSAGE ‘下载EXCEL模板出错’ TYPE ‘E’.
    STOP.
    ENDIF.
    ELSE.
    MESSAGE ‘已取消选择上载文件!’ TYPE ‘S’.
    ENDIF.
    ENDIF.
    ENDFORM.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我小时候很黑

你的打赏是对我的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值