批量更改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. "MONTLYSTOCKIF 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.