一、业务需求
- 用户点击 模版下载,下载要填的模版。
- 选择“请选择批导文件”按钮,将已填写完毕的模板导入系统。
- 首先校验数据格式,视图,换算关系,日期等格式是否正确,正确切数据库没有当前物料和工厂绑定关系即为创建,否则为黄灯修改,红灯即为前面的格式或关系不正确,会在错误信息栏抛出。
- 按ME11创建与ME12修改逻辑,判断是否已有,如有已有就执行修改,如果没有就执行创建。
- 第4步执行成功,即为创建或修改成功,可重复导入,会根据日期区间取新增条件或修改条件。
二、分析
主要涉及的表:EINA、EINE
函数:ME_INFORECORD_MAINTAIN、BAPI_TRANSACTION_COMMIT
三、界面
1.批导程序选择屏幕
2.ALV操作页面
三、代码
*&---------------------------------------------------------------------*
*& Report ZRMM_047
*&---------------------------------------------------------------------*
*& PeterZhang Create
*&---------------------------------------------------------------------*
REPORT ZRMM_047.
TABLES: SSCRFIELDS.
*----------------------------------------------------------------------*
* TYPES
*----------------------------------------------------------------------*
TYPES:BEGIN OF TY_DATA,
ZXH TYPE STRING, "char4, "序号
LIFNR TYPE EINA-LIFNR, "EINA-LIFNR, "供应商账户
MATNR TYPE EINA-MATNR, "EINA-MATNR, "物料编号
EKORG TYPE EINE-EKORG, "EINE-EKORG "采购组织
WERKS TYPE EINE-WERKS, "EINE-WERKS "工厂
LMEIN TYPE EINA-LMEIN, "EINA-LMEIN "基本单位
UMREN TYPE STRING, "EINA-UMREN "分母
MEIN1 TYPE RM06I-MEIN1, "RM06I-MEIN1 "转换单位
UMREZ TYPE STRING, "EINA-UMREZ "分子
APLFZ TYPE EINE-APLFZ , "EINE-APLFZ "计划交货天
UNTTO TYPE EINE-UNTTO, "EINE-UNTTO "交货不足容差
EKGRP TYPE EINE-EKGRP, "EINE-EKGRP "采购组
UEBTO TYPE EINE-UEBTO, "EINE-UEBTO "过量交货容差
NORBM TYPE EINE-NORBM, "EINE-NORBM "标准数量 "
"WEBRE TYPE EINE-WEBRE, "EINE-WEBRE "标识:基于收货的发票验证
MWSKZ TYPE EINE-MWSKZ, "EINE-MWSKZ "税码
NETPR TYPE STRING, "EINE-NETPR "净价
KPEIN TYPE KONP-KPEIN, "KONP-KPEIN "价格单位
DATAB TYPE RV13A-DATAB, "RV13A-DATAB "有效起始日
DATBI TYPE RV13A-DATBI, "RV13A-DATBI "有效截止日
ZCHECK TYPE ICON-NAME, "数据校验
ZEXEC TYPE ICON-NAME, "执行结果
MESSAGE TYPE C LENGTH 200, "消息
SEL TYPE FLAG, "选择标识
ZGX TYPE FLAG, "增加的复选框
END OF TY_DATA.
DATA: GT_DATA TYPE STANDARD TABLE OF TY_DATA,
GS_DATA TYPE TY_DATA.
FIELD-SYMBOLS:<FS_DATA> TYPE TY_DATA.
*----------------------------------------------------------------------*
* 定义alv数据对象
*----------------------------------------------------------------------*
DATA: GS_FUNCTXT TYPE SMP_DYNTXT. "功能代码文本
CONSTANTS: CON_TN LIKE T681-KOTABNR VALUE '305'.
DATA: GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
GS_LAYOUT TYPE LVC_S_LAYO,
GV_REPID TYPE SY-REPID,
GT_LISTHEADER TYPE SLIS_T_LISTHEADER,
GS_SETTING TYPE LVC_S_GLAY,
GT_EVENT TYPE SLIS_T_EVENT.
*----------------------------------------------------------------------*
* SELECTION-SCREEN *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE LIKE RLGRAP-FILENAME . "文件名
* SELECTION-SCREEN COMMENT /2(50) TEXT-003.
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BK2 WITH FRAME TITLE TEXT-002.
SELECTION-SCREEN:
COMMENT /2(75) TEXT-003,
COMMENT /2(75) TEXT-005,
COMMENT /2(75) TEXT-006,
COMMENT /2(75) TEXT-007.
SELECTION-SCREEN END OF BLOCK BK2.
SELECTION-SCREEN: FUNCTION KEY 1.
*----------------------------------------------------------------------*
* INITIALIZATION
*----------------------------------------------------------------------*
INITIALIZATION.
GS_FUNCTXT-ICON_ID = ICON_EXPORT.
GS_FUNCTXT-QUICKINFO = '下载模版'.
GS_FUNCTXT-ICON_TEXT = '下载模版'.
SSCRFIELDS-FUNCTXT_01 = GS_FUNCTXT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM FRM_F4_HELP CHANGING P_FILE. "导入路径搜索帮助
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
PERFORM FRM_DOWNLOAD_EXCEL USING 'ZRMM_047_EXCEL'.
WHEN OTHERS.
IF P_FILE IS INITIAL.
MESSAGE S001(00) WITH '批导文件不能为空!' DISPLAY LIKE 'E'.
STOP.
ELSE.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '正在读取EXCEL...'.
PERFORM FRM_READ_EXCEL TABLES GT_DATA[] USING P_FILE 1 2 18 20000 CHANGING GS_DATA. "导入SAP存放的内表gt_data,读取Excel开始的列行,结束列行,和gt_data相同结构gs_data。
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '正在校验EXCEL...'.
PERFORM FRM_CHECK_DATA TABLES GT_DATA[]. "数据校验
ENDIF.
ENDCASE.
START-OF-SELECTION.
PERFORM FRM_FIELDCAT CHANGING GT_FIELDCAT. "定义列标题信息
PERFORM FRM_LAYOUT CHANGING GS_LAYOUT. "定义alv格式属性
PERFORM FRM_DISPLAY TABLES GT_DATA[] "显示数据
CHANGING GT_FIELDCAT
GS_LAYOUT
GT_EVENT
GS_SETTING.
FORM FRM_DOWNLOAD_EXCEL USING LV_OBJID TYPE WWWDATATAB-OBJID.
DATA: L_FILENAME TYPE STRING,
LV_FILENAME TYPE STRING,
LV_PATH TYPE STRING,
LV_FULLPATH TYPE STRING.
DATA: LV_OBJ LIKE WWWDATATAB,
LV_DESTINATION LIKE RLGRAP-FILENAME.
DATA: LV_RC LIKE SY-SUBRC.
DATA: LV_ERROR TYPE CHAR255.
SELECT SINGLE * FROM WWWDATA
INTO CORRESPONDING FIELDS OF LV_OBJ
WHERE OBJID = LV_OBJID.
CONCATENATE LV_OBJ-TEXT '.XLSX' INTO L_FILENAME.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_FILE_NAME = L_FILENAME
FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
PROMPT_ON_OVERWRITE = 'X'
CHANGING
FILENAME = LV_FILENAME
PATH = LV_PATH
FULLPATH = LV_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
INVALID_DEFAULT_FILE_NAME = 4
OTHERS = 5.
IF LV_FULLPATH <> ''.
LV_DESTINATION = LV_FULLPATH.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LV_OBJ
DESTINATION = LV_DESTINATION
IMPORTING
RC = LV_RC.
ENDIF.
ENDFORM.
FORM FRM_READ_EXCEL TABLES L_TAB
USING PV_FILE TYPE RLGRAP-FILENAME
LV_I_BEGIN_COL TYPE I
LV_I_BEGIN_ROW TYPE I
LV_I_END_COL TYPE I
LV_I_END_ROW TYPE I
CHANGING L_WA TYPE ANY.
DATA: LT_EXCEL TYPE TABLE OF ZSALSMEX_TABLINE WITH HEADER LINE.
FIELD-SYMBOLS <LFS_VALUE> TYPE ANY.
CALL FUNCTION 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = PV_FILE "文件路径
I_BEGIN_COL = LV_I_BEGIN_COL "开始列
I_BEGIN_ROW = LV_I_BEGIN_ROW "开始行
I_END_COL = LV_I_END_COL "结束列
I_END_ROW = LV_I_END_ROW "结束行
TABLES
INTERN = LT_EXCEL
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
MESSAGE S001(00) WITH '读取 Excel 文件失败' DISPLAY LIKE 'E'.
STOP.
ENDIF.
"加上行号 ,以这个为主要id号
DATA:EX_ROW TYPE I VALUE 1.
DATA: LT_EXCEL_NEW TYPE TABLE OF ZSALSMEX_TABLINE WITH HEADER LINE.
LOOP AT LT_EXCEL.
IF LT_EXCEL-COL = 1.
LT_EXCEL_NEW-ROW = LT_EXCEL-ROW.
LT_EXCEL_NEW-COL = LT_EXCEL-COL.
LT_EXCEL_NEW-VALUE = |{ EX_ROW }|.
EX_ROW += 1.
APPEND LT_EXCEL_NEW.
ENDIF.
LT_EXCEL_NEW-ROW = LT_EXCEL-ROW.
LT_EXCEL_NEW-COL = LT_EXCEL-COL + 1.
LT_EXCEL_NEW-VALUE = LT_EXCEL-VALUE.
APPEND LT_EXCEL_NEW.
ENDLOOP.
"赋值
LOOP AT LT_EXCEL_NEW.
ASSIGN COMPONENT LT_EXCEL_NEW-COL OF STRUCTURE L_WA TO <LFS_VALUE>.
"系统将字符串lt_excel-col的组件l_wa分配给字段符号<lfs_value>
IF SY-SUBRC = 0 .
<LFS_VALUE> = LT_EXCEL_NEW-VALUE.
IF LT_EXCEL_NEW-COL = 18 OR LT_EXCEL_NEW-COL = 19.
SEARCH LT_EXCEL_NEW-VALUE FOR '/'.
IF SY-SUBRC = 0.
REPLACE ALL OCCURRENCES OF '/' IN LT_EXCEL_NEW-VALUE WITH ''.
<LFS_VALUE> = LT_EXCEL_NEW-VALUE.
ENDIF.
SEARCH LT_EXCEL_NEW-VALUE FOR '-'.
IF SY-SUBRC = 0.
REPLACE ALL OCCURRENCES OF '-' IN LT_EXCEL_NEW-VALUE WITH ''.
<LFS_VALUE> = LT_EXCEL_NEW-VALUE.
ENDIF.
ENDIF.
ENDIF.
AT END OF ROW.
APPEND L_WA TO L_TAB.
CLEAR L_WA.
ENDAT.
ENDLOOP.
ENDFORM.
*引用标准函数选择电脑文件内容打开
FORM FRM_F4_HELP CHANGING O_FNAME TYPE RLGRAP-FILENAME.
DATA: L_FILETAB TYPE FILETABLE,
L_WAFTAB LIKE LINE OF L_FILETAB,
L_RC TYPE I.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL
WINDOW_TITLE = '打开文件'
INITIAL_DIRECTORY = 'C:/'
CHANGING
FILE_TABLE = L_FILETAB
RC = L_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 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.
EXIT.
ELSE.
READ TABLE L_FILETAB INTO L_WAFTAB INDEX 1.
O_FNAME = L_WAFTAB-FILENAME.
CLEAR: L_FILETAB,
L_WAFTAB.
ENDIF.
ENDFORM. " frm_f4_help
*&---------------------------------------------------------------------*
*& Form FRM_BUILD_FIELD
*&---------------------------------------------------------------------*
*& 构建ALV Fieldcat
*&---------------------------------------------------------------------*
*& <-- GT_FIELDCAT
*&---------------------------------------------------------------------*
FORM FRM_FIELDCAT CHANGING VALUE(OT_FIELDCAT) TYPE LVC_T_FCAT.
DATA: L_POS TYPE I,
LS_FIELDCAT TYPE LVC_S_FCAT.
DEFINE ALV_APPEND_FIELD.
CLEAR LS_FIELDCAT.
LS_FIELDCAT-COL_POS = L_POS.
LS_FIELDCAT-FIELDNAME = &1.
LS_FIELDCAT-REPTEXT = &2.
LS_FIELDCAT-SCRTEXT_L = &2.
LS_FIELDCAT-SCRTEXT_M = &2.
LS_FIELDCAT-SCRTEXT_S = &2.
LS_FIELDCAT-KEY = &3.
LS_FIELDCAT-REF_TABLE = &4.
LS_FIELDCAT-REF_FIELD = &5.
LS_FIELDCAT-HOTSPOT = &6.
LS_FIELDCAT-EDIT = &7.
LS_FIELDCAT-OUTPUTLEN = &8.
APPEND LS_FIELDCAT TO OT_FIELDCAT.
L_POS = L_POS + 1.
END-OF-DEFINITION.
REFRESH OT_FIELDCAT.
L_POS = 1.
ALV_APPEND_FIELD 'ZGX' '勾选' '' '' '' '' 'X ' 'X'.
ALV_APPEND_FIELD 'ZCHECK' '数据校验' '' '' 'ZCHECK' '' '' 'X'.
ALV_APPEND_FIELD 'ZEXEC' '执行结果' '' '' 'ZEXEC' '' ' ' 'X'.
ALV_APPEND_FIELD 'MESSAGE' '消息' '' 'ICON' 'MESSAGE' '' ' ' 'X'.
ALV_APPEND_FIELD 'ZXH' '序号' '' '' '' '' ' ' 'X'.
ALV_APPEND_FIELD 'LIFNR' '供应商账户' '' 'EINA' 'LIFNR' '' ' ' 'X'.
ALV_APPEND_FIELD 'MATNR' '物料编号' '' 'EINA' 'MATNR' '' ' ' 'X'.
ALV_APPEND_FIELD 'EKORG' '采购组织' '' 'EINE' 'EKORG' '' ' ' 'X'.
ALV_APPEND_FIELD 'WERKS' '工厂' '' 'EINE' 'WERKS' '' ' ' 'X'.
ALV_APPEND_FIELD 'LMEIN' '基本单位' '' 'EINA' 'PLNNR' '' ' ' 'X'.
ALV_APPEND_FIELD 'UMREN' '分母' '' 'EINA' 'UMREN' '' ' ' 'X'.
ALV_APPEND_FIELD 'MEIN1' '转换单位' '' 'RM06I' 'VORNR' '' ' ' 'X'.
ALV_APPEND_FIELD 'UMREZ' '分子' '' 'EINA' 'UMREZ' '' ' ' 'X'.
ALV_APPEND_FIELD 'APLFZ' '计划交货天' '' 'EINE' 'APLFZ' '' ' ' 'X'.
ALV_APPEND_FIELD 'UNTTO' '交货不足容差' '' 'EINE' 'UNTTO' '' ' ' 'X'.
ALV_APPEND_FIELD 'EKGRP' '采购组' '' 'EINE' 'EKGRP' '' ' ' 'X'.
ALV_APPEND_FIELD 'UEBTO' '过量交货容差' '' 'EINE' 'UEBTO' '' ' ' 'X'.
ALV_APPEND_FIELD 'NORBM' '标准数量' '' 'EINE' 'NORBM' '' ' ' 'X'.
"ALV_APPEND_FIELD 'WEBRE' '标识:基于收货的发票验证' '' 'EINE' 'WEBRE' '' ' ' 'X'.
ALV_APPEND_FIELD 'MWSKZ' '税码' '' 'EINE' 'MWSKZ' '' ' ' 'X'.
ALV_APPEND_FIELD 'NETPR' '净价' '' 'EINE' 'NETPR' '' ' ' 'X'.
ALV_APPEND_FIELD 'KPEIN' '价格单位' '' 'KONP' 'KPEIN' '' ' ' 'X'.
ALV_APPEND_FIELD 'DATAB' '有效起始日' '' 'RV13A' 'DATAB' '' ' ' 'X'.
ALV_APPEND_FIELD 'DATBI' '有效截止日' '' 'RV13A' 'DATBI' '' ' ' 'X'.
OT_FIELDCAT[ FIELDNAME = 'ZGX' ]-CHECKBOX = 'X'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_layout
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- GS_LAYOUT
*&---------------------------------------------------------------------*
FORM FRM_LAYOUT CHANGING VALUE(OS_LAYOUT) TYPE LVC_S_LAYO.
CLEAR OS_LAYOUT.
OS_LAYOUT-ZEBRA = 'X'. "斑马线
OS_LAYOUT-CWIDTH_OPT = 'X'. "自动调整列宽
OS_LAYOUT-BOX_FNAME = 'SEL'. "选择列
ENDFORM.
*&---------------------------------------------------------------------*
*& Form frm_display
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> gt_data1[]
*& <-- GT_FIELDCAT
*& <-- GS_LAYOUT
*& <-- GT_EVENT
*& <-- GS_SETTING
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY TABLES PT_OTAB TYPE STANDARD TABLE
CHANGING PT_FIELDCAT TYPE LVC_T_FCAT
PS_LAYOUT TYPE LVC_S_LAYO
PT_EVENTS TYPE SLIS_T_EVENT
PS_SETTING TYPE LVC_S_GLAY.
* MESSAGE |本次导入有{ gv_index }条数据| TYPE 'S'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
I_CALLBACK_USER_COMMAND = 'FRM_USER_COMMAND'
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
IS_LAYOUT_LVC = PS_LAYOUT
IT_FIELDCAT_LVC = PT_FIELDCAT "传入fieldcat
IT_EVENTS = PT_EVENTS
I_GRID_SETTINGS = PS_SETTING
I_SAVE = 'A' "standard and user-specific saving
TABLES
T_OUTTAB = PT_OTAB[] "传入输出内表
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC NE 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
*报表按钮事件
FORM SET_PF_STATUS USING PT_EXCLUDE TYPE KKBLO_T_EXTAB. "ALV报表按钮事件代码
DATA:LT_EXCLUDE TYPE KKBLO_T_EXTAB WITH HEADER LINE.
SET PF-STATUS '100' EXCLUDING LT_EXCLUDE[].
ENDFORM.
*&--------------------------------------------------------------------*
*& Form FRM_USER_COMMAND
*&--------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
FORM FRM_USER_COMMAND USING PV_UCOMM LIKE SY-UCOMM
PS_SELFIELD TYPE SLIS_SELFIELD.
" DATA:gd_repid LIKE sy-repid,ref_grid TYPE REF TO cl_gui_alv_grid.
"刷新"ALV输出表"数据
DATA: LO_GRID TYPE REF TO CL_GUI_ALV_GRID.
"稳定刷新ALV
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' "获取ALV对象的函数
IMPORTING
E_GRID = LO_GRID.
CALL METHOD LO_GRID->CHECK_CHANGED_DATA.
CALL METHOD LO_GRID->REFRESH_TABLE_DISPLAY. "刷新alv
"用户触发功能码响应逻辑
CASE PV_UCOMM.
WHEN 'SELECT'. "批量选择
LOOP AT GT_DATA ASSIGNING <FS_DATA> WHERE SEL = 'X'.
<FS_DATA>-ZGX = 'X'.
ENDLOOP.
WHEN 'NOSELECT'. "批量取消
LOOP AT GT_DATA ASSIGNING <FS_DATA> WHERE SEL = 'X'.
<FS_DATA>-ZGX = ''.
ENDLOOP.
WHEN 'ANTI'. "反选
LOOP AT GT_DATA ASSIGNING <FS_DATA>." WHERE sel = 'X'.
IF <FS_DATA>-ZGX = ''.
<FS_DATA>-ZGX = 'X'.
ELSE.
<FS_DATA>-ZGX = ''.
ENDIF.
ENDLOOP.
WHEN 'ALL'. "全选
LOOP AT GT_DATA ASSIGNING <FS_DATA> WHERE ZGX <> 'X'.
<FS_DATA>-ZGX = 'X'.
ENDLOOP.
WHEN 'NONE'. "全不选
LOOP AT GT_DATA ASSIGNING <FS_DATA> WHERE ZGX = 'X'.
<FS_DATA>-ZGX = ''.
ENDLOOP.
WHEN 'EXECUTE'. "执行导入
IF LINE_EXISTS( GT_DATA[ ZGX = 'X' ] ).
IF LINE_EXISTS( GT_DATA[ ZGX = 'X' ZCHECK = ICON_LED_RED ] ).
MESSAGE '存在校验不通过的数据,请取消勾选后再执行' TYPE 'S' DISPLAY LIKE 'E'.
ELSE.
DATA:LT_DATA TYPE STANDARD TABLE OF TY_DATA.
LOOP AT GT_DATA INTO GS_DATA WHERE ZGX = 'X'.
APPEND GS_DATA TO LT_DATA.
AT END OF ZXH.
PERFORM FRM_ME11_RUN TABLES LT_DATA.
LOOP AT LT_DATA INTO DATA(LS_DATA).
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = |序号{ LS_DATA-ZXH }正在执行导入...|.
READ TABLE GT_DATA ASSIGNING <FS_DATA> WITH KEY ZXH = LS_DATA-ZXH.
IF SY-SUBRC = 0.
<FS_DATA>-ZEXEC = LS_DATA-ZEXEC.
<FS_DATA>-MESSAGE = LS_DATA-MESSAGE.
ENDIF.
ENDLOOP.
CLEAR:LT_DATA[].
ENDAT.
ENDLOOP.
MESSAGE '操作完成!' TYPE 'S'.
ENDIF.
ELSE.
MESSAGE '请至少勾选一条要执行的数据' TYPE 'S' DISPLAY LIKE 'E'.
ENDIF.
ENDCASE.
"稳定刷新ALV
DATA:STBL TYPE LVC_S_STBL.
STBL-ROW = 'X'." 基于行的稳定刷新
STBL-COL = 'X'." 基于列稳定刷新
CALL METHOD LO_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = STBL.
ENDFORM. "FRM_user_command
*&---------------------------------------------------------------------*
*& Form frm_check_data
*&---------------------------------------------------------------------*
FORM FRM_CHECK_DATA TABLES P_GT_DATA STRUCTURE GS_DATA.
LOOP AT P_GT_DATA ASSIGNING <FS_DATA>.
* CONDENSE <FS_DATA>-PLNNR NO-GAPS.
* CONDENSE <FS_DATA>-MASSEINHSW NO-GAPS.
PERFORM FRM_CHECK_DATA_ITEM CHANGING <FS_DATA>.
ENDLOOP.
ENDFORM.
* 校验数据层
FORM FRM_CHECK_DATA_ITEM CHANGING PS_DATA STRUCTURE GS_DATA.
DATA: LV_MEINS TYPE MARA-MEINS. "基本单位 物料匹配
DATA: LV_MEINS1 TYPE MARA-MEINS. "基本单位 函数后
DATA: LV_MEIN1 TYPE MARA-MEINS. "转换单位 物料匹配
DATA: LV_MEIN11 TYPE MARA-MEINS. "转换单位 函数后
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = PS_DATA-MATNR
IMPORTING
OUTPUT = PS_DATA-MATNR
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = PS_DATA-LIFNR
IMPORTING
OUTPUT = PS_DATA-LIFNR.
IF PS_DATA-LIFNR IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/供应商不能为空|.
ELSE.
SELECT * INTO TABLE @DATA(LV_BUT000) FROM BUT000 WHERE PARTNER = @PS_DATA-LIFNR.
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/供应商不存在|.
ENDIF.
ENDIF.
IF PS_DATA-MATNR IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/物料编码不能为空|.
ELSE.
SELECT SINGLE MEINS INTO LV_MEINS FROM MARA WHERE MATNR = PS_DATA-MATNR.
IF SY-SUBRC NE 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/没有该物料编码{ PS_DATA-MATNR }|.
ELSE.
DATA: LV_PSTAT TYPE MARA-PSTAT.
IF PS_DATA-MATNR IS NOT INITIAL .
SELECT SINGLE PSTAT INTO LV_PSTAT FROM MARA
WHERE MATNR = PS_DATA-MATNR.
IF SY-SUBRC = 0.
SEARCH LV_PSTAT FOR 'B'.
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/请维护会计视图|.
ENDIF.
ELSE.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/物料{ PS_DATA-MATNR }基本视图未维护| .
ENDIF.
ENDIF.
DATA: LV_XCHAR TYPE MARC-XCHAR.
SELECT SINGLE XCHAR INTO LV_XCHAR FROM MARC WHERE MATNR = PS_DATA-MATNR AND WERKS = PS_DATA-WERKS.
IF LV_XCHAR <> 'X'.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/物料{ PS_DATA-MATNR }在工厂{ PS_DATA-WERKS }中未被维护| .
ENDIF.
IF PS_DATA-LMEIN IS INITIAL.
"PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/基本单位不能为空|.
ELSE.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = PS_DATA-LMEIN
LANGUAGE = '1'
IMPORTING
OUTPUT = LV_MEINS1
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
IF LV_MEINS <> LV_MEINS1.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/基本单位不一致|.
ELSE.
IF PS_DATA-MEIN1 IS INITIAL.
"PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/转换单位不能为空|.
ELSE.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = PS_DATA-MEIN1
LANGUAGE = '1'
IMPORTING
OUTPUT = LV_MEIN11
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
SELECT * INTO TABLE @DATA(LV_MARM) FROM MARM WHERE MATNR = @PS_DATA-MATNR AND MEINH = @LV_MEIN11.
IF LV_MARM IS NOT INITIAL.
"换算关系start
DATA: LV_FM_UMREZ TYPE MARM-UMREZ. "分母的值
DATA: LV_FZ_UMREZ TYPE MARM-UMREZ. "分子的值
SELECT SINGLE UMREZ INTO LV_FM_UMREZ FROM MARM WHERE MATNR = PS_DATA-MATNR AND MEINH = LV_MEINS1.
SELECT SINGLE UMREZ INTO LV_FZ_UMREZ FROM MARM WHERE MATNR = PS_DATA-MATNR AND MEINH = LV_MEIN11.
IF PS_DATA-UMREN IS NOT INITIAL AND PS_DATA-UMREZ IS NOT INITIAL AND LV_FM_UMREZ > 0 AND LV_FZ_UMREZ > 0.
IF ( LV_FZ_UMREZ / LV_FM_UMREZ ) <> ( PS_DATA-UMREZ / PS_DATA-UMREN ).
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/分子与分母的比值与系统不一致|.
ENDIF.
ENDIF.
"换算关系end
ELSE.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/换算单位不一致|.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF PS_DATA-WERKS IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/工厂不能为空|.
ELSE.
SELECT * INTO TABLE @DATA(LV_T001W) FROM T001W WHERE VKORG = @PS_DATA-WERKS.
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/工厂不存在|.
ELSE.
IF PS_DATA-MATNR IS NOT INITIAL.
SELECT * INTO TABLE @DATA(LV_MARC) FROM MARC WHERE MATNR = @PS_DATA-MATNR AND WERKS = @PS_DATA-WERKS .
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/采购视图未维护|.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF PS_DATA-EKORG IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/采购组织不能为空|.
ELSE.
IF PS_DATA-EKORG <> 'P101'.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/采购组织必须为P101|.
ENDIF.
ENDIF.
IF PS_DATA-EKGRP IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/采购组不能为空|.
ELSE.
SELECT * INTO TABLE @DATA(LV_T024) FROM T024 WHERE EKGRP = @PS_DATA-EKGRP.
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/采购组不存在|.
ENDIF.
ENDIF.
IF PS_DATA-MWSKZ IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/税码不能为空|.
ELSE.
SELECT * INTO TABLE @DATA(LV_T007S) FROM T007S WHERE MWSKZ = @PS_DATA-MWSKZ.
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/税码不存在|.
ENDIF.
ENDIF.
IF PS_DATA-NETPR <= 0 OR PS_DATA-NETPR IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/净价不能为空或小于等于0|.
ELSE.
DATA: LV_1(10) TYPE C,
LV_DECIMAL(10) TYPE C,
LV_LEN TYPE I.
SPLIT PS_DATA-NETPR AT '.' INTO LV_1 LV_DECIMAL.
LV_LEN = STRLEN( LV_DECIMAL ).
IF LV_LEN > 2.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/净价最多两位小数|.
ENDIF.
ENDIF.
IF PS_DATA-DATAB IS INITIAL OR PS_DATA-DATBI IS INITIAL.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/有效起始、截止日期不能为空|.
ELSE.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = PS_DATA-DATAB
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/有效起始日格式有误|.
ENDIF.
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
EXPORTING
DATE = PS_DATA-DATBI
EXCEPTIONS
PLAUSIBILITY_CHECK_FAILED = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/有效截止日格式有误|.
ENDIF.
IF PS_DATA-DATBI < PS_DATA-DATAB.
PS_DATA-MESSAGE = |{ PS_DATA-MESSAGE }/起始日期不可大于截止日期|.
ENDIF.
ENDIF.
IF PS_DATA-MESSAGE IS INITIAL .
PS_DATA-ZCHECK = ICON_LED_GREEN.
PS_DATA-MESSAGE = '数据正确:待创建'.
"查询
DATA: WA_EINA TYPE EINA.
WA_EINA-LIFNR = PS_DATA-LIFNR. "供应商
WA_EINA-MATNR = PS_DATA-MATNR. "物料号
DATA: LINT_INDEX TYPE I.
LINT_INDEX = STRLEN( WA_EINA-LIFNR ).
DATA: ZERO(1) VALUE 0.
LINT_INDEX = 10 - LINT_INDEX.
IF STRLEN( WA_EINA-LIFNR ) < 10.
DO LINT_INDEX TIMES.
CONCATENATE ZERO WA_EINA-LIFNR INTO WA_EINA-LIFNR.
ENDDO.
ENDIF.
SELECT * INTO TABLE @DATA(LV_EINA) FROM EINA WHERE MATNR = @WA_EINA-MATNR AND LIFNR = @WA_EINA-LIFNR .
IF SY-SUBRC = 0.
IF LV_EINA IS NOT INITIAL.
PS_DATA-ZCHECK = ICON_LED_YELLOW.
PS_DATA-MESSAGE = '数据正确:待覆盖'.
ENDIF.
ENDIF.
"查询 END
ELSE.
SHIFT PS_DATA-MESSAGE LEFT DELETING LEADING '/'.
PS_DATA-ZCHECK = ICON_LED_RED.
PS_DATA-MESSAGE = |数据有误:{ PS_DATA-MESSAGE }|.
ENDIF.
ENDFORM.
*正式批导逻辑层
FORM FRM_ME11_RUN TABLES PT_DATA STRUCTURE GS_DATA.
" 定义 start
DATA: LV_MEINS LIKE MARA-MEINS.
DATA: LV_INFNR TYPE EINA-INFNR.
DATA OREF TYPE REF TO CX_ROOT.
DATA:
LS_EINA TYPE MEWIEINA,
LS_EINAX TYPE MEWIEINAX,
LS_EINE TYPE MEWIEINE,
LS_EINEX TYPE MEWIEINEX,
LT_COND_VALIDITY TYPE TABLE OF MEWIVALIDITY,
LT_CONDITION TYPE TABLE OF MEWICONDITION,
LT_RETURN TYPE MEWI_T_RETURN,
LV_MESSAGE TYPE STRING.
"定义 end
CLEAR:GS_DATA.
READ TABLE PT_DATA INTO GS_DATA INDEX 1.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = GS_DATA-MATNR
IMPORTING
OUTPUT = GS_DATA-MATNR
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GS_DATA-LIFNR
IMPORTING
OUTPUT = GS_DATA-LIFNR
EXCEPTIONS
LENGTH_ERROR = 1
OTHERS = 2.
DATA: LINT_INDEX TYPE I.
LINT_INDEX = STRLEN( GS_DATA-LIFNR ).
DATA: ZERO(1) VALUE 0.
LINT_INDEX = 10 - LINT_INDEX.
IF STRLEN( GS_DATA-LIFNR ) < 10.
DO LINT_INDEX TIMES.
CONCATENATE ZERO GS_DATA-LIFNR INTO GS_DATA-LIFNR.
ENDDO.
ENDIF.
IF GS_DATA-MEIN1 IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = GS_DATA-MEIN1
LANGUAGE = '1'
IMPORTING
OUTPUT = GS_DATA-MEIN1
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
ENDIF.
IF GS_DATA-LMEIN IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = GS_DATA-LMEIN
LANGUAGE = '1'
IMPORTING
OUTPUT = GS_DATA-LMEIN
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
ENDIF.
SELECT SINGLE MEINS INTO LV_MEINS FROM MARA WHERE MATNR = GS_DATA-MATNR.
IF SY-SUBRC = 0.
IF GS_DATA-LMEIN IS INITIAL.
GS_DATA-LMEIN = LV_MEINS.
ENDIF.
IF GS_DATA-MEIN1 IS INITIAL.
GS_DATA-MEIN1 = LV_MEINS.
ENDIF.
ENDIF.
IF GS_DATA-UMREN IS INITIAL.
GS_DATA-UMREN = 1.
ENDIF.
IF GS_DATA-UMREZ IS INITIAL.
GS_DATA-UMREZ = 1.
ENDIF.
SELECT SINGLE INFNR INTO LV_INFNR FROM EINA WHERE MATNR = GS_DATA-MATNR AND LIFNR = GS_DATA-LIFNR .
* IF SY-SUBRC = 0.
* WA_EINA-INFNR = LV_INFNR.
* ENDIF.
LS_EINA-INFO_REC = LV_INFNR.
LS_EINA-MATERIAL = GS_DATA-MATNR.
LS_EINA-VENDOR = GS_DATA-LIFNR.
LS_EINA-BASE_UOM = GS_DATA-LMEIN. "box 基本单位
LS_EINA-PO_UNIT = GS_DATA-MEIN1. "car 转换单位
LS_EINA-CONV_NUM1 = GS_DATA-UMREZ. "转换分子
LS_EINA-CONV_DEN1 = GS_DATA-UMREN. "转换分母
IF GS_DATA-ZCHECK = ICON_LED_GREEN.
LS_EINAX-INFO_REC = 'X'.
ENDIF.
LS_EINAX-MATERIAL = 'X'.
LS_EINAX-VENDOR = 'X'.
LS_EINAX-BASE_UOM = 'X'.
LS_EINAX-PO_UNIT = 'X'.
LS_EINAX-CONV_NUM1 = 'X'.
LS_EINAX-CONV_DEN1 = 'X'.
LS_EINE-INFO_REC = LV_INFNR.
LS_EINE-PURCH_ORG = GS_DATA-EKORG. "采购组织
LS_EINE-PLANT = GS_DATA-WERKS. "工厂
LS_EINE-NRM_PO_QTY = GS_DATA-NORBM. "标准数量 标准采购订单数量
LS_EINE-UNDER_TOL = GS_DATA-UNTTO. "交货不足容差
LS_EINE-OVERDELTOL = GS_DATA-UEBTO. "过量交货容差
LS_EINE-CONV_NUM1 = GS_DATA-UMREZ. "转换分子
LS_EINE-CONV_DEN1 = GS_DATA-UMREN. "转换分母
LS_EINE-PLND_DELRY = GS_DATA-APLFZ. "计划交货时间(天)
LS_EINE-PUR_GROUP = GS_DATA-EKGRP. "采购组
LS_EINE-TAX_CODE = GS_DATA-MWSKZ. "销售/购买税代码
LS_EINE-INFO_TYPE = '0'. "默认标准 0 标准 2 寄售 3 分包合同 P 管道 1 可记帐
IF GS_DATA-ZCHECK = ICON_LED_GREEN.
LS_EINEX-INFO_REC = 'X'.
ENDIF.
LS_EINEX-PURCH_ORG = 'X'.
LS_EINEX-PLANT = 'X'.
LS_EINEX-NRM_PO_QTY = 'X'.
LS_EINEX-UNDER_TOL = 'X'.
LS_EINEX-OVERDELTOL = 'X'.
LS_EINEX-CONV_NUM1 = 'X'.
LS_EINEX-CONV_DEN1 = 'X'.
LS_EINEX-PLND_DELRY = 'X'.
LS_EINEX-PUR_GROUP = 'X'.
LS_EINEX-TAX_CODE = 'X'.
LS_EINEX-INFO_TYPE = 'X'.
LS_EINE-NET_PRICE = GS_DATA-NETPR. "采购信息记录中的净价
LS_EINE-PRICE_UNIT = GS_DATA-KPEIN. "价格单位
LS_EINE-CURRENCY = 'CNY'. "货币码
LS_EINE-ORDERPR_UN = GS_DATA-LMEIN. "订单价格单位(采购)
*
LS_EINEX-NET_PRICE = 'X'.
LS_EINEX-PRICE_UNIT = 'X'.
LS_EINEX-CURRENCY = 'X'.
LS_EINEX-ORDERPR_UN = 'X'.
"开始处理
TRY.
CALL FUNCTION 'ME_INFORECORD_MAINTAIN'
EXPORTING
I_EINA = LS_EINA
I_EINAX = LS_EINAX
I_EINE = LS_EINE
I_EINEX = LS_EINEX
* TESTRUN =
* IMPORTING
* E_EINA =
* E_EINE =
TABLES
* TXT_LINES =
* COND_VALIDITY = LT_COND_VALIDITY
* CONDITION = LT_CONDITION
* COND_SCALE_VALUE =
* COND_SCALE_QUAN =
RETURN = LT_RETURN.
CLEAR: LV_MESSAGE.
LOOP AT LT_RETURN INTO DATA(LS_RETURN) WHERE TYPE CA 'AEX'.
IF LV_MESSAGE IS INITIAL.
LV_MESSAGE = |{ '导入失败!' }/{ LS_RETURN-MESSAGE }|.
ELSE.
LV_MESSAGE = |{ LV_MESSAGE }/{ LS_RETURN-MESSAGE }|.
ENDIF.
ENDLOOP.
IF LV_MESSAGE IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
* "条件
IF GS_DATA-NETPR IS NOT INITIAL.
SELECT SINGLE INFNR INTO LV_INFNR FROM EINA WHERE MATNR = GS_DATA-MATNR AND LIFNR = GS_DATA-LIFNR .
LS_EINA-INFO_REC = LV_INFNR.
LS_EINEX-INFO_REC = ''.
LS_EINE-INFO_REC = LV_INFNR.
LS_EINEX-INFO_REC = ''.
LS_EINE-NET_PRICE = ''. "采购信息记录中的净价
LS_EINEX-NET_PRICE = ''.
SELECT SINGLE *
INTO @DATA(LS_A017)
FROM A017
WHERE KAPPL = 'M'
AND KSCHL = 'PB00'
AND LIFNR = @GS_DATA-LIFNR
AND MATNR = @GS_DATA-MATNR
AND EKORG = @GS_DATA-EKORG
AND WERKS = @GS_DATA-WERKS
AND ESOKZ = '0'
AND DATAB <= @GS_DATA-DATAB
AND DATBI >= @GS_DATA-DATBI.
DATA:LS_KONP TYPE KONP.
IF LS_A017 IS NOT INITIAL.
CHECK LS_A017-KNUMH IS NOT INITIAL.
SELECT SINGLE *
INTO CORRESPONDING FIELDS OF @LS_KONP
FROM KONP
WHERE KNUMH = @LS_A017-KNUMH
AND LOEVM_KO = ''
AND KSCHL = 'PB00'.
ENDIF.
IF LS_KONP IS NOT INITIAL.
DATA(LV_FLAG) = 'U'.
ELSE.
LV_FLAG = 'I'.
ENDIF.
LT_CONDITION = VALUE #( ( SERIAL_ID = LS_KONP-KNUMH "条件记录编号
COND_COUNT = LS_KONP-KOPOS "条件的序列号
COND_TYPE = 'PB00' "条件类型
* SCALE_TYPE = 'A' "等级类型
* SCALE_BASE_TY = 'C' "等级基础类型
* CALCTYPCON = 'C' "条件的计算类型
COND_VALUE = GS_DATA-NETPR "条件金额 净价
CURRENCY = 'CNY' "货币码 条件货币
* SCALE_CURR = 'CNY' "货币码
COND_P_UNT = GS_DATA-KPEIN "条件的定价单位
COND_UNIT = GS_DATA-MEIN1 "条件单位 box
* SCALE_UNIT = GS_DATA-MEIN1 "条件等级计量单位
CHANGE_ID = LV_FLAG ) ).
LT_COND_VALIDITY = VALUE #( ( SERIAL_ID = LS_KONP-KNUMH
PLANT = GS_DATA-WERKS "工厂
* BASE_UOM = GS_DATA-LMEIN "基本计量单位
VALID_FROM = GS_DATA-DATAB "开始日期
VALID_TO = GS_DATA-DATBI ) ). "结束日期
ENDIF.
CALL FUNCTION 'ME_INFORECORD_MAINTAIN'
EXPORTING
I_EINA = LS_EINA
I_EINAX = LS_EINAX
I_EINE = LS_EINE
I_EINEX = LS_EINEX
* TESTRUN =
* IMPORTING
* E_EINA =
* E_EINE =
TABLES
* TXT_LINES =
COND_VALIDITY = LT_COND_VALIDITY
CONDITION = LT_CONDITION
* COND_SCALE_VALUE =
* COND_SCALE_QUAN =
RETURN = LT_RETURN.
CLEAR: LV_MESSAGE.
LOOP AT LT_RETURN INTO DATA(LS_RETURN1) WHERE TYPE CA 'AEX'.
IF LV_MESSAGE IS INITIAL.
LV_MESSAGE = |{ '导入失败:' }{ LS_RETURN1-MESSAGE }|.
ELSE.
LV_MESSAGE = |{ LV_MESSAGE }/{ LS_RETURN1-MESSAGE }|.
ENDIF.
ENDLOOP.
ENDIF.
IF LV_MESSAGE IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
LOOP AT PT_DATA ASSIGNING <FS_DATA>.
<FS_DATA>-ZEXEC = ICON_LED_GREEN.
<FS_DATA>-MESSAGE = |{ '导入成功:' }采购信息记录号:{ LV_INFNR }|.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
LOOP AT PT_DATA ASSIGNING <FS_DATA>.
<FS_DATA>-ZEXEC = ICON_LED_RED.
<FS_DATA>-MESSAGE = LV_MESSAGE.
ENDLOOP.
ENDIF.
CATCH CX_ROOT INTO OREF.
LOOP AT PT_DATA ASSIGNING <FS_DATA>.
<FS_DATA>-ZEXEC = ICON_LED_RED.
<FS_DATA>-MESSAGE += '导入失败:' + OREF->GET_TEXT( ).
ENDLOOP.
ENDTRY.
ENDFORM.
四、效果
1.EXCEL模板
2.批导程序
3.标准程序
备注:
原创不易,转载请注明出处!
原创不易,转载请注明出处!
原创不易,转载请注明出处!