SAP万能导入程序讲述.docx
- 文档编号:13518977
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:35
- 大小:28.06KB
SAP万能导入程序讲述.docx
《SAP万能导入程序讲述.docx》由会员分享,可在线阅读,更多相关《SAP万能导入程序讲述.docx(35页珍藏版)》请在冰点文库上搜索。
SAP万能导入程序讲述
SAP万能导入程序
Author:
SUNZKQQ:
1131341075
REPORT YMPSRIMPORTING MESSAGE-ID YMTT.
INCLUDE OLE2INCL.
INCLUDE Z_BATCHIMPORT_TOP.
INCLUDE Z_BATCHIMPORT_SCR.
INCLUDE Z_BATCHIMPORT_F01.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM GET_FILENAME_ON_F4 USING P_FILE.
AT SELECTION-SCREEN OUTPUT.
AT SELECTION-SCREEN.
START-OF-SELECTION.
IF P_FILE IS INITIAL.
MESSAGE '请输入文件路径!
' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
DATA:
LV_MSG TYPE C.
DATA:
LV_FILE TYPE STRING.
LV_FILE = P_FILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LV_FILE
RECEIVING
RESULT = LV_MSG
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
ENDIF.
IF LV_MSG IS INITIAL.
MESSAGE '文件不存在' TYPE 'S'.
ELSE.
CLEAR:
GV_MESSAGE.
"获取到EXCEL的 SHEET页名
PERFORM GET_SHEETNAMES.
"检查SHEET页名对应的表是否存在(并且仅允许操作Y,Z开头的自建表)
PERFORM CHECK_TABLE_NAME CHANGING GV_MESSAGE.
IF GV_MESSAGE IS NOT INITIAL.
MESSAGE GV_MESSAGE TYPE 'S' DISPLAY LIKE 'E'.
STOP.
ENDIF.
"根据SHEET页表名 生成其表结构对应的动态内表
PERFORM CREATE_DYNAMIC_TABLE.
"根据表结构 生成 ALV字段列表
PERFORM CREATE_ALV_FCAT.
"上载EXCEL数据到内表
PERFORM UPLOAD_DATA_FROM_EXCEL.
"填充状态栏上 按钮动态文本、初始状态、标题等。
PERFORM FILL_BUTTON_TEXT.
"数据屏幕
CALL SCREEN 1001.
ENDIF.
ENDIF.
TYPES:
BEGIN OF TY_BUTTON,
BT01 TYPE CHAR30,
BT02 TYPE CHAR30,
BT03 TYPE CHAR30,
BT04 TYPE CHAR30,
BT05 TYPE CHAR30,
BT06 TYPE CHAR30,
BT07 TYPE CHAR30,
BT08 TYPE CHAR30,
BT09 TYPE CHAR30,
BT10 TYPE CHAR30,
END OF TY_BUTTON."按钮文本结构,十个按钮
TYPES:
BEGIN OF TY_SHEETNAME,
SHEETNAME TYPE CHAR30,
END OF TY_SHEETNAME."EXCEL sheet页
DATA:
GS_BUTTON TYPE TY_BUTTON."BUTTON 描述
DATA:
GV_TITLE TYPE STRING."用于标识 当前状态下的 标题
DATA:
GV_SCR1001_MODE TYPE CHAR30."用于标识 当前屏幕的状态
DATA:
GV_CURRENT_TABLE TYPE CHAR30."用于记录当前 数据表名
DATA:
GT_SHEETNAME TYPE STANDARD TABLE OF TY_SHEETNAME."SHEET页名 内表
"动态内表定义
DATA:
DYN_TABLE01 TYPE REF TO DATA,
DYN_TABLE02 TYPE REF TO DATA,
DYN_TABLE03 TYPE REF TO DATA,
DYN_TABLE04 TYPE REF TO DATA,
DYN_TABLE05 TYPE REF TO DATA,
DYN_TABLE06 TYPE REF TO DATA,
DYN_TABLE07 TYPE REF TO DATA,
DYN_TABLE08 TYPE REF TO DATA,
DYN_TABLE09 TYPE REF TO DATA,
DYN_TABLE10 TYPE REF TO DATA.
"动态内表指针
FIELD-SYMBOLS:
"ALV字段内表
DATA:
GT_FCAT01 TYPE LVC_T_FCAT,
GT_FCAT02 TYPE LVC_T_FCAT,
GT_FCAT03 TYPE LVC_T_FCAT,
GT_FCAT04 TYPE LVC_T_FCAT,
GT_FCAT05 TYPE LVC_T_FCAT,
GT_FCAT06 TYPE LVC_T_FCAT,
GT_FCAT07 TYPE LVC_T_FCAT,
GT_FCAT08 TYPE LVC_T_FCAT,
GT_FCAT09 TYPE LVC_T_FCAT,
GT_FCAT10 TYPE LVC_T_FCAT.
DATA:
GV_MESSAGE TYPE CHAR255.
"ALV、容器对象定义
DATA:
GO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
GO_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
CONSTANTS:
CNS_CONTAINER TYPE CHAR50 VALUE 'CONTAINER_ALV'.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS:
p_file LIKE rlgrap-filename MEMORY ID m01."上传文件路径
PARAMETERS:
p1 RADIOBUTTON GROUP g1, "原样数据 上传
p2 RADIOBUTTON GROUP g1 DEFAULT 'X'. "外码转换到内码后 上传
SELECTION-SCREEN END OF BLOCK b1.
*&---------------------------------------------------------------------*
*& 包含 Z_BATCHIMPORT_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SET_STATUS_1001
*&---------------------------------------------------------------------*
* 设置1001屏幕状态栏
*----------------------------------------------------------------------*
FORM SET_STATUS_1001 .
DATA:
LT_EXCLUDE TYPE UI_FUNCTIONS,
LS_EXCLUDE TYPE UI_FUNC.
REFRESH:
LT_EXCLUDE[].
"用于测试时 方便删除 数据,其他情况屏蔽删除按钮
IF SY-MANDT EQ '123' AND ( SY-UNAME EQ 'AB_GENGJH' OR SY-UNAME EQ 'TEST823' ).
ELSE.
LS_EXCLUDE = 'DELETE'.
APPEND LS_EXCLUDE TO LT_EXCLUDE.
ENDIF.
SET PF-STATUS 'STATUS_1001' EXCLUDING LT_EXCLUDE.
SET TITLEBAR 'TITLE_1001' WITH GV_TITLE.
ENDFORM. " SET_STATUS_1001
*&---------------------------------------------------------------------*
*& Form PROCESS_USER_COMMAND_1001
*&---------------------------------------------------------------------*
* 处理1001屏幕按钮事件
*----------------------------------------------------------------------*
FORM PROCESS_USER_COMMAND_1001 .
DATA:
LV_LINES TYPE I.
DATA:
LS_SHEETNAME TYPE TY_SHEETNAME.
DATA:
LV_ANSWER TYPE C.
DEFINE CHANGE_DATA_STATU."根据按钮切换 当前数据
clear:
gv_title.
describe table &1 lines lv_lines.
gv_title = lv_lines.
read table gt_sheetname into ls_sheetname index &2.
concatenate '当前表:
' ls_sheetname-sheetname ' , 条目数:
' gv_title into gv_title.
gv_scr1001_mode = sy-ucomm.
gv_current_table = ls_sheetname-sheetname.
END-OF-DEFINITION.
CASE SY-UCOMM.
WHEN 'BACK' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN 'BT01'.
CHANGE_DATA_STATU
WHEN 'BT02'.
CHANGE_DATA_STATU
WHEN 'BT03'.
CHANGE_DATA_STATU
WHEN 'BT04'.
CHANGE_DATA_STATU
WHEN 'BT05'.
CHANGE_DATA_STATU
WHEN 'BT06'.
CHANGE_DATA_STATU
WHEN 'BT07'.
CHANGE_DATA_STATU
WHEN 'BT08'.
CHANGE_DATA_STATU
WHEN 'BT09'.
CHANGE_DATA_STATU
WHEN 'BT10'.
CHANGE_DATA_STATU
WHEN 'IMPORT'.
CLEAR:
LV_ANSWER.
"弹出确认框
PERFORM POPUP_TO_CONFIRM CHANGING LV_ANSWER.
IF LV_ANSWER EQ '1'.
"导入数据
PERFORM IMPORT_DATA_TO_DBTABLE.
ENDIF.
WHEN 'DELETE'."用于部分账号在 测试时 清空数据
DELETE FROM (GV_CURRENT_TABLE).
COMMIT WORK AND WAIT.
WHEN OTHERS.
ENDCASE.
"释放ALV对象
PERFORM FREE_ALV_OBJECT.
CLEAR:
SY-UCOMM.
ENDFORM. " PROCESS_USER_COMMAND_1001
*&---------------------------------------------------------------------*
*& Form get_sheetnames
*&---------------------------------------------------------------------*
* 获取上载EXCEL的 SHEET页名称
*----------------------------------------------------------------------*
FORM GET_SHEETNAMES.
DATA:
APPLICATION TYPE OLE2_OBJECT,
BOOK TYPE OLE2_OBJECT,
SHEET TYPE OLE2_OBJECT .
DATA:
LV_SHEETCOUNT TYPE I,
LV_INDEX TYPE SY-INDEX.
DATA:
LS_SHEETNAME TYPE TY_SHEETNAME.
REFRESH:
GT_SHEETNAME[].
CREATE OBJECT APPLICATION 'Excel.Application'.
SET PROPERTY OF APPLICATION 'Visible' = 0 .
CALL METHOD OF
APPLICATION
'Workbooks' = BOOK.
CALL METHOD OF
BOOK
'Open'
EXPORTING
#1 = P_FILE.
CALL METHOD OF
APPLICATION
'WORKSHEETS' = SHEET.
GET PROPERTY OF SHEET 'COUNT' = LV_SHEETCOUNT.
DO LV_SHEETCOUNT TIMES.
LV_INDEX = SY-INDEX.
CLEAR:
LS_SHEETNAME.
CALL METHOD OF
APPLICATION
'WORKSHEETS' = SHEET
EXPORTING
#1 = LV_INDEX.
GET PROPERTY OF SHEET 'NAME' = LS_SHEETNAME-SHEETNAME .
TRANSLATE LS_SHEETNAME-SHEETNAME TO UPPER CASE.
APPEND LS_SHEETNAME TO GT_SHEETNAME.
ENDDO.
GET PROPERTY OF APPLICATION 'ActiveWorkbook' = BOOK .
* CALL METHOD OF book 'SAVE' .
CALL METHOD OF
BOOK
'close'.
CALL METHOD OF
APPLICATION
'QUIT'.
ENDFORM. "get_sheetnames
*&---------------------------------------------------------------------*
*& Form CHECK_TABLE_NAME
*&---------------------------------------------------------------------*
* 以页签名 检查 数据表是否存在,不存在则报错
* 若操作表 不是 Z/Y 开头的,则报错。
*----------------------------------------------------------------------*
FORM CHECK_TABLE_NAME CHANGING PV_MESSAGE TYPE CHAR255.
DATA:
LS_SHEETNAME TYPE TY_SHEETNAME,
LS_DD02T TYPE DD02T.
LOOP AT GT_SHEETNAME INTO LS_SHEETNAME.
IF LS_SHEETNAME-SHEETNAME
(1) NE 'Z' AND LS_SHEETNAME-SHEETNAME
(1) NE 'Y'.
CONCATENATE '不允许操作表<' LS_SHEETNAME-SHEETNAME
'>,请检查!
' INTO GV_MESSAGE.
RETURN.
ENDIF.
SELECT SINGLE * INTO LS_DD02T FROM DD02T
WHERE TABNAME = LS_SHEETNAME-SHEETNAME.
IF SY-SUBRC NE 0.
CONCATENATE '不存在<' LS_SHEETNAME-SHEETNAME
'>页签对应的数据表,请检查!
' INTO GV_MESSAGE.
RETURN.
ENDIF.
ENDLOOP.
ENDFORM. " CHECK_TABLE_NAME
*&---------------------------------------------------------------------*
*& Form FILL_BUTTON_TEXT
*&---------------------------------------------------------------------*
* 根据SHEET页名 填充 状态栏上 按钮名
*----------------------------------------------------------------------*
FORM FILL_BUTTON_TEXT .
DATA:
LV_LINES TYPE I.
DATA:
LS_SHEETNAME TYPE TY_SHEETNAME.
DATA:
LV_TABIX TYPE SY-TABIX.
CLEAR:
GS_BUTTON,GV_TITLE.
CLEAR:
GV_SCR1001_MODE.
LOOP AT GT_SHEETNAME INTO LS_SH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SAP 万能 导入 程序 讲述