需求:用户操作界面下载excel模板,填写数据并上传。程序收到数据并检查,将检查不通过的数据通过ALV展示出来,检查通过的数据创建后台JOB并将执行结果写入日志表。
第一部分程序:
REPORT ZPPU0006.
TYPE-POOLS: OLE2 ,ICON ,SLIS.
TABLES: SSCRFIELDS.
INCLUDE ZPPU0006_TOP.
INCLUDE ZPPU0006_SEL.
INCLUDE ZPPU0006_F01.
*&---------------------------------------------------------------------*
*& INITIALIZATION.
*&---------------------------------------------------------------------*
INITIALIZATION.
FUNCTXT-ICON_ID = ICON_EXPORT.
FUNCTXT-QUICKINFO = 'Download the template'.
FUNCTXT-ICON_TEXT = 'Download the template'.
SSCRFIELDS-FUNCTXT_01 = FUNCTXT.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
IMPORTING
FILE_NAME = P_FILE.
AT SELECTION-SCREEN.
CASE SSCRFIELDS-UCOMM.
WHEN 'FC01'.
PERFORM DOWNLOAD_EXCEL.
WHEN OTHERS.
ENDCASE.
START-OF-SELECTION.
IF P_FILE IS INITIAL.
MESSAGE 'Please enter the file path!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
IF SY-BATCH IS INITIAL.
PERFORM FORM_UPLOAD_DATA USING P_FILE.
PERFORM FORM_CHECK_DATA.
PERFORM FORM_SAVE_ZTABLE.
PERFORM FORM_CHECK_VAR.
PERFORM FORM_CREATE_JOB.
ELSE.
PERFORM FORM_GET_DATA.
IF D1 = 'X'.
PERFORM FORM_CREATE_ROS.
ELSEIF D2 = 'X'.
PERFORM FORM_ASSIGN_MATERIAL.
ENDIF.
ENDIF.
INCLUDE ZPPU0006_TOP
*&---------------------------------------------------------------------*
*& Include ZPPU0006_TOP
*&---------------------------------------------------------------------*
DATA:BEGIN OF T_FILE1 OCCURS 0,
TAKE_POZATION,
LOEKZ TYPE LOEKZ, "删除标记
PLNTY TYPE PLNTY, "task list type
MATNR(40),
WERKS(4),
PLNNR(8),"工艺路线组
PLNNR_ALT TYPE PLKO-PLNNR_ALT, "old routing number
PLNAL(2),
KTEXT(40),
LOSVN(17),"从批量
LOSBS(17),"到批量
PLNME(3),"单位
VORNR(4),
KTSCH(7),
LTXA1(40),
ARBPL(8),
WERKS_D(4),"工厂(工序)
STEUS(4),
BMSCH(20),
MEINH(3),"单位
STD01(15),
STP01(6),
STD02(15),
STP02(6),
STD03(15),
STP03(6),
STD04(15),
STP04(6),
STD05(15),
STP05(6),
STD06(15),
STP06(6),
ZWNOR TYPE PLPO-ZWNOR,
ZEIWN TYPE PLPO-ZEIWN,
ICON TYPE CHAR4,
ZMSG TYPE STRING,
END OF T_FILE1,
BEGIN OF T_FILE2 OCCURS 0,
TAKE_POZATION,
MATNR(40),
PLNNR(8),"工艺路线组
PLNAL(2),
WERKS(4),
PLNTY TYPE PLNTY,
LOEKZ TYPE LOEKZ,
PLNNR_ALT TYPE PLKO-PLNNR_ALT,
ICON TYPE CHAR4,
ZMSG TYPE STRING,
END OF T_FILE2,
BEGIN OF IT_MATNRCHECK OCCURS 0,
MATNR LIKE MAPL-MATNR,
END OF IT_MATNRCHECK,
BEGIN OF IT_ZAEHL OCCURS 0,
ZAEHL LIKE MAPL-ZAEHL,
END OF IT_ZAEHL,
BEGIN OF LS_JOB,
JOBCOUNT LIKE TBTCJOB-JOBCOUNT,
JOBNAME LIKE TBTCJOB-JOBNAME,
END OF LS_JOB,
BEGIN OF LS_PROG ,
REPORT LIKE RSVAR-REPORT,
VARIANT LIKE RSVAR-VARIANT,
END OF LS_PROG.
DATA:BEGIN OF LT_VARID OCCURS 0.
INCLUDE STRUCTURE VARID.
DATA:END OF LT_VARID.
DATA: BEGIN OF LT_RSPARAMS_TAB OCCURS 0.
INCLUDE STRUCTURE RSPARAMS.
DATA: END OF LT_RSPARAMS_TAB.
DATA: BEGIN OF LS_VARID_TAB.
INCLUDE STRUCTURE VARID.
DATA: END OF LS_VARID_TAB.
DATA: BEGIN OF LT_VARIT_TAB OCCURS 0.
INCLUDE STRUCTURE VARIT.
DATA: END OF LT_VARIT_TAB.
DATA: BEGIN OF BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.
DATA:MESSTAB TYPE TABLE OF BDCMSGCOLL WITH HEADER LINE,
LT_XTBTCSTEP LIKE TBTCSTEP OCCURS 0 WITH HEADER LINE,
T_FILE1_CUR LIKE T_FILE1 OCCURS 0 WITH HEADER LINE,
T_FILE1_OUT LIKE T_FILE1 OCCURS 0 WITH HEADER LINE,
T_FILE2_CUR LIKE T_FILE2 OCCURS 0 WITH HEADER LINE,
T_FILE2_OUT LIKE T_FILE2 OCCURS 0 WITH HEADER LINE,
LT_TAB1 TYPE TABLE OF ZPPT0011 WITH HEADER LINE,
GS_MSG1 TYPE TABLE OF ZPPT0012 WITH HEADER LINE,
LT_TAB2 TYPE TABLE OF ZPPT0003 WITH HEADER LINE,
GS_MSG2 TYPE TABLE OF ZPPT0013 WITH HEADER LINE,
TAB LIKE ALSMEX_TABLINE OCCURS 0 WITH HEADER LINE,
LT_PARAMS LIKE VANZ OCCURS 0 WITH HEADER LINE.
DATA: BLDAT_S(10) TYPE C,
G_LINES TYPE I,
S0 TYPE CHAR20,
S1 TYPE I,
S2 TYPE CHAR20,
N TYPE N,
X TYPE N,
G_PERC TYPE P,
G_SPERC TYPE C,
G_TEXT TYPE STRING,
GS_LAYOUT TYPE LVC_S_LAYO,
GT_FIELDCAT TYPE LVC_T_FCAT,
GS_FIELDCAT TYPE LVC_S_FCAT,
FUNCTXT TYPE SMP_DYNTXT,
G_KEY(30) TYPE C,
S_MODE TYPE C VALUE 'N',
C_UPDATE TYPE C VALUE 'S',
GS_FUNCTXT TYPE SMP_DYNTXT,
LV_MESSAGE TYPE STRING,
WA LIKE MESSTAB,
LS_XTBTCJOB TYPE TBTCJOB,
LS_XTBTCSTRT TYPE TBTCSTRT,
L_FULLPATH TYPE STRING,
L_PATH TYPE STRING,
L_NAME TYPE STRING,
L_INIT_PATH TYPE STRING,
L_INIT_FNAME TYPE STRING,
L_FILENAME TYPE STRING,
L_OBJDATA LIKE WWWDATATAB,
L_MIME LIKE W3MIME,
L_DESTINATION LIKE RLGRAP-FILENAME,
L_OBJNAM TYPE STRING,
L_RC LIKE SY-SUBRC,
L_ERRTXT TYPE STRING,
L_RESULT,
L_SUBRC TYPE SY-SUBRC,
L_OBJID TYPE WWWDATATAB-OBJID,
T_RAW_DATA TYPE TRUXS_T_TEXT_DATA,
LT_RETURN TYPE BAPIRET2_T,
LD_INDEX TYPE I,
L_NO_JOBS TYPE I,
L_FINISH_CANCEL TYPE I,
L_JOBNAME TYPE TBTCO-JOBNAME,
L_COUNT TYPE TBTCO-JOBCOUNT,
L_USED TYPE I,
IT_STPOX TYPE TABLE OF STPOX,
WA_STPOX TYPE STPOX,
LV_MATNR TYPE MARA-MATNR,
LV_NUM TYPE I,
IT_MARC TYPE TABLE OF MARC,
IT_MAPL TYPE TABLE OF MAPL.
FIELD-SYMBOLS: <FS1>.
FIELD-SYMBOLS: <FS2>.
INCLUDE ZPPU0006_SEL
*&---------------------------------------------------------------------*
*& Include ZPPU0006_SEL
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* Selection Screen
*----------------------------------------------------------------------*
SELECTION-SCREEN: FUNCTION KEY 1."在屏幕定义功能码
SELECTION-SCREEN BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
PARAMETERS:
P_FILE TYPE LOCALFILE MEMORY ID ME1.
PARAMETERS: S_PRF LIKE TCA41-PROFIDNETZ OBLIGATORY.
PARAMETERS: D1 RADIOBUTTON GROUP G1 DEFAULT 'X', "Create ROS
D2 RADIOBUTTON GROUP G1. "Assign material
SELECTION-SCREEN END OF BLOCK BLK.
INCLUDE ZPPU0006_F01
*&---------------------------------------------------------------------*
*& Include ZPPU0006_F01
*&---------------------------------------------------------------------*
FORM DOWNLOAD_EXCEL.
* 用户选择保存路径
PERFORM FRM_GET_FULLPATH CHANGING L_FULLPATH L_PATH L_NAME.
* 路径为空则退出
IF L_FULLPATH IS INITIAL.
MESSAGE 'User cancel operation' TYPE 'S'.
RETURN.
ENDIF.
"下载模板
PERFORM FRM_DOWNLOAD_EXCEL_FROM_SERVER USING L_FULLPATH.
ENDFORM.
FORM FRM_GET_FULLPATH CHANGING P_FULLPATH
P_PATH
P_NAME.
* 初始名称(输出的文件名称)
IF D2 = 'X'.
L_INIT_FNAME = 'Z_ASSIGNMATERIALTOROS' && '.xls'.
ELSE.
L_INIT_FNAME = 'Z_ROUTINGUPLOAD' && '.xls'.
ENDIF.
* 获取桌面路径
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GET_DESKTOP_DIRECTORY
CHANGING
DESKTOP_DIRECTORY = L_INIT_PATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
* 用户选择名称、路径
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
DEFAULT_EXTENSION = 'XLSX'
DEFAULT_FILE_NAME = L_INIT_FNAME
FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_ALL "文件类型 all代表全部类型,但是下载输出时必须指明文件类型,不然是白的
INITIAL_DIRECTORY = L_INIT_PATH
PROMPT_ON_OVERWRITE = 'X'
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC = 0.
P_FULLPATH = L_FULLPATH.
P_PATH = L_PATH.
ENDIF.
ENDFORM.
FORM FRM_DOWNLOAD_EXCEL_FROM_SERVER USING P_FILENAME.
IF D1 = 'X'.
L_OBJID = 'Z_ROUTINGUPLOAD'.
ELSEIF D2 = 'X'.
L_OBJID = 'Z_ASSIGNMATERIALTOROS'.
ENDIF.
"查找文件是否存在。
SELECT SINGLE RELID OBJID
FROM WWWDATA
INTO CORRESPONDING FIELDS OF L_OBJDATA
WHERE SRTF2 = 0
AND RELID = 'MI'
AND OBJID = L_OBJID.
"判断模版不存在则报错
IF SY-SUBRC NE 0 OR L_OBJDATA-OBJID EQ SPACE.
CONCATENATE 'Template:' L_OBJID 'not exist'
INTO L_ERRTXT.
MESSAGE E000(SU) WITH L_ERRTXT.
ENDIF.
L_FILENAME = P_FILENAME.
"判断本地地址是否已经存在此文件。
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = L_FILENAME
RECEIVING
RESULT = L_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF L_RESULT EQ 'X'. "如果存在则删除原始文件,重新覆盖
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_DELETE
EXPORTING
FILENAME = L_FILENAME
CHANGING
RC = L_SUBRC
EXCEPTIONS
FILE_DELETE_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
FILE_NOT_FOUND = 4
ACCESS_DENIED = 5
UNKNOWN_ERROR = 6
NOT_SUPPORTED_BY_GUI = 7
WRONG_PARAMETER = 8
OTHERS = 9.
IF L_SUBRC <> 0. "如果删除失败,则报错。
CONCATENATE 'The EXCEL file with the same name has been opened' 'please close the EXCEL and try again'
INTO L_ERRTXT.
MESSAGE E000(SU) WITH L_ERRTXT.
ENDIF.
ENDIF.
L_DESTINATION = P_FILENAME.
"下载模版。
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = L_OBJDATA
DESTINATION = L_DESTINATION
IMPORTING
RC = L_RC.
IF L_RC NE 0.
CONCATENATE 'Template' 'download failed' INTO L_ERRTXT.
MESSAGE E000(SU) WITH L_ERRTXT.
ENDIF.
ENDFORM.
FORM FORM_UPLOAD_DATA USING P_FILE.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
FILENAME = P_FILE
I_BEGIN_COL = 1
I_BEGIN_ROW = 5
I_END_COL = 99
I_END_ROW = 50000
TABLES
INTERN = TAB
EXCEPTIONS
INCONSISTENT_PARAMETERS = 1
UPLOAD_OLE = 2
OTHERS = 3.
LOOP AT TAB.
MOVE TAB-COL TO LD_INDEX.
IF D1 = 'X'.
ASSIGN COMPONENT LD_INDEX OF STRUCTURE T_FILE1 TO <FS1>.
MOVE TAB-VALUE TO <FS1>.
AT END OF ROW.
T_FILE1-ICON = ICON_YELLOW_LIGHT.
APPEND T_FILE1.
CLEAR T_FILE1.
ENDAT.
ELSEIF D2 = 'X'.
ASSIGN COMPONENT LD_INDEX OF STRUCTURE T_FILE2 TO <FS2>.
MOVE TAB-VALUE TO <FS2>.
AT END OF ROW.
T_FILE2-ICON = ICON_YELLOW_LIGHT.
APPEND T_FILE2.
CLEAR T_FILE2.
ENDAT.
ENDIF.
ENDLOOP.
IF T_FILE1[] IS INITIAL AND T_FILE2[] IS INITIAL.
MESSAGE 'The uploaded file does not contain any valid data!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDFORM.
FORM FORM_CHECK_DATA.
IF D1 = 'X'.
SORT T_FILE1 BY PLNTY WERKS PLNAL.
LOOP AT T_FILE1.
N = LINES( T_FILE1 ).
X = SY-TABIX.
G_PERC = ( X / N ) * 100 .
G_SPERC = G_PERC.
G_TEXT = |{ 'Data checking'}{ G_PERC }{ '%' }|.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = G_PERC
TEXT = G_TEXT.
ENDLOOP.
CLEAR: T_FILE1_OUT[],T_FILE1_CUR[].
T_FILE1_CUR[] = T_FILE1[].
DELETE T_FILE1_CUR WHERE ICON = ICON_RED_LIGHT.
T_FILE1_OUT[] = T_FILE1[].
DELETE T_FILE1_OUT WHERE ICON NE ICON_RED_LIGHT.
CLEAR T_FILE1[].
T_FILE1[] = T_FILE1_CUR[].
ELSEIF D2 = 'X'.
SORT T_FILE2 BY PLNTY WERKS MATNR PLNAL.
LOOP AT T_FILE2.
N = LINES( T_FILE2 ).
X = SY-TABIX.
G_PERC = ( X / N ) * 100 .
G_SPERC = G_PERC.
G_TEXT = |{ 'Data checking'}{ G_PERC }{ '%' }|.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = G_PERC
TEXT = G_TEXT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = T_FILE2-PLNAL
IMPORTING
OUTPUT = T_FILE2-PLNAL.
* CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
* EXPORTING
* input = gs_tab-matnr
* IMPORTING
* output = gs_tab-matnr
* EXCEPTIONS
* length_error = 1
* OTHERS = 2.
CLEAR IT_MATNRCHECK.
SELECT SINGLE MATNR INTO IT_MATNRCHECK FROM MARC
WHERE MATNR = T_FILE2-MATNR AND WERKS = T_FILE2-WERKS.
IF IT_MATNRCHECK IS INITIAL.
T_FILE2-ICON = ICON_RED_LIGHT.
T_FILE2-ZMSG = 'Material is not exist in the plant'.
MODIFY T_FILE2.
CLEAR: T_FILE2,IT_MATNRCHECK.
CONTINUE.
ENDIF.
CLEAR IT_MATNRCHECK.
SELECT SINGLE MATNR INTO IT_MATNRCHECK FROM MAPL
WHERE MATNR = T_FILE2-MATNR AND PLNAL = T_FILE2-PLNAL
AND WERKS = T_FILE2-WERKS AND PLNTY = 'S' AND LOEKZ NE 'X'.
IF IT_MATNRCHECK IS NOT INITIAL.
T_FILE2-ICON = ICON_RED_LIGHT.
T_FILE2-ZMSG = ' Assignment of material to reference operation set already exists '.
MODIFY T_FILE2.
CLEAR: T_FILE2,IT_MATNRCHECK.
CONTINUE.
ENDIF.
ENDLOOP.
CLEAR: T_FILE2_OUT[],T_FILE2_CUR[].
T_FILE2_CUR[] = T_FILE2[].
DELETE T_FILE2_CUR WHERE ICON = ICON_RED_LIGHT.
T_FILE2_OUT[] = T_FILE2[].
DELETE T_FILE2_OUT WHERE ICON NE ICON_RED_LIGHT.
CLEAR T_FILE2[].
T_FILE2[] = T_FILE2_CUR[].
ENDIF.
ENDFORM.
FORM FORM_ALV.
PERFORM FORM_SET_LAYOUT.
PERFORM FORM_SET_FCAT.
PERFORM FORM_OUTPUT.
ENDFORM.
FORM FORM_SET_LAYOUT.
CLEAR GS_LAYOUT.
GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'X'.
GS_LAYOUT-SEL_MODE = 'D'.
ENDFORM.
FORM FORM_SET_FCAT.
DEFINE ADD_FIELD.
CLEAR gs_fieldcat.
gs_fieldcat-fieldname = &1.
gs_fieldcat-scrtext_l = &2.
gs_fieldcat-scrtext_m = &2.
gs_fieldcat-scrtext_s = &2.
APPEND gs_fieldcat TO gt_fieldcat.
END-OF-DEFINITION.
CLEAR GT_FIELDCAT[].
IF D1 = 'X'.
ADD_FIELD 'ICON' 'LED'.
ADD_FIELD 'PLNNR_ALT' 'Old routing number'.
ADD_FIELD 'ZMSG' 'Message'.
ELSEIF D2 = 'X'.
ADD_FIELD 'ICON' 'LED'.
ADD_FIELD 'MATNR' 'Material'.
ADD_FIELD 'PLNNR' 'Routing number'.
ADD_FIELD 'ZMSG' 'Message'.
ENDIF.
ENDFORM.
FORM FORM_OUTPUT.
IF D1 = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
TABLES
T_OUTTAB = T_FILE1_OUT.
ELSEIF D2 = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
IS_LAYOUT_LVC = GS_LAYOUT
IT_FIELDCAT_LVC = GT_FIELDCAT
TABLES
T_OUTTAB = T_FILE2_OUT.
ENDIF.
ENDFORM.
FORM FORM_SAVE_ZTABLE .
IF D2 = 'X'.
G_KEY = |{ 'AM' }{ SY-DATUM+2(6) }{ SY-UZEIT }|.
LOOP AT T_FILE2.
LT_TAB2-ZKEY = G_KEY.
LT_TAB2-MATNR = T_FILE2-MATNR.
LT_TAB2-PLNNR = T_FILE2-PLNNR.
LT_TAB2-PLNAL = T_FILE2-PLNAL.
LT_TAB2-WERKS = T_FILE2-WERKS.
LT_TAB2-PLNTY = T_FILE2-PLNTY.
LT_TAB2-LOEKZ = T_FILE2-LOEKZ.
LT_TAB2-PLNNR_ALT = T_FILE2-PLNNR_ALT.
APPEND LT_TAB2.
CLEAR:LT_TAB2,T_FILE2.
ENDLOOP.
INSERT ZPPT0003 FROM TABLE LT_TAB2.
ELSEIF D1 = 'X'.
G_KEY = |{ 'CR' }{ SY-DATUM+2(6) }{ SY-UZEIT }|.
LOOP AT T_FILE1.
LT_TAB1-ZKEY = G_KEY.
LT_TAB1-PLNTY = T_FILE1-PLNTY.
LT_TAB1-MATNR = T_FILE1-MATNR.
LT_TAB1-WERKS = T_FILE1-WERKS.
LT_TAB1-PLNNR = T_FILE1-PLNNR.
LT_TAB1-PLNNR_ALT = T_FILE1-PLNNR_ALT.
LT_TAB1-PLNAL = T_FILE1-PLNAL.
LT_TAB1-LOEKZ = T_FILE1-LOEKZ.
LT_TAB1-KTEXT = T_FILE1-KTEXT.
LT_TAB1-LOSVN = T_FILE1-LOSVN.
LT_TAB1-LOSBS = T_FILE1-LOSBS.
LT_TAB1-PLNME = T_FILE1-PLNME.
LT_TAB1-VORNR = T_FILE1-VORNR.
LT_TAB1-KTSCH = T_FILE1-KTSCH.
LT_TAB1-LTXA1 = T_FILE1-LTXA1.
LT_TAB1-ARBPL = T_FILE1-ARBPL.
LT_TAB1-WERKS_D = T_FILE1-WERKS_D.
LT_TAB1-STEUS = T_FILE1-STEUS.
LT_TAB1-BMSCH = T_FILE1-BMSCH.
LT_TAB1-MEINH = T_FILE1-MEINH.
LT_TAB1-VGW01 = T_FILE1-STD01.
LT_TAB1-VGE01 = T_FILE1-STP01.
LT_TAB1-VGW02 = T_FILE1-STD02.
LT_TAB1-VGE02 = T_FILE1-STP02.
LT_TAB1-VGW03 = T_FILE1-STD03.
LT_TAB1-VGE03 = T_FILE1-STP03.
LT_TAB1-VGW04 = T_FILE1-STD04.
LT_TAB1-VGE04 = T_FILE1-STP04.
LT_TAB1-VGW05 = T_FILE1-STD05.
LT_TAB1-VGE05 = T_FILE1-STP05.
LT_TAB1-VGW06 = T_FILE1-STD06.
LT_TAB1-VGE06 = T_FILE1-STP06.
LT_TAB1-ZWNOR = T_FILE1-ZWNOR.
LT_TAB1-ZEIWN = T_FILE1-ZEIWN.
APPEND LT_TAB1.
CLEAR:LT_TAB1,T_FILE1.
ENDLOOP.
INSERT ZPPT0011 FROM TABLE LT_TAB1.
ENDIF.
COMMIT WORK AND WAIT.
ENDFORM.
FORM FORM_CHECK_VAR .
IF D1 = 'X'.
SELECT *
FROM VARID CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE LT_VARID
WHERE MANDT = SY-MANDT
AND REPORT = 'ZPPU0006'
AND VARIANT LIKE 'CR%'
AND FLAG1 = SPACE
AND FLAG2 = SPACE.
ELSEIF D2 = 'X'.
SELECT *
FROM VARID CLIENT SPECIFIED
INTO CORRESPONDING FIELDS OF TABLE LT_VARID
WHERE MANDT = SY-MANDT
AND REPORT = 'ZPPU0006'
AND VARIANT LIKE 'AM%'
AND FLAG1 = SPACE
AND FLAG2 = SPACE.
ENDIF.
IF SY-SUBRC = 0.
LOOP AT LT_VARID.
CLEAR:L_NO_JOBS ,
L_FINISH_CANCEL,
L_JOBNAME ,
L_COUNT ,
L_USED .
CALL FUNCTION 'BP_VARIANT_USED_IN_JOB'
EXPORTING
REPNAME = 'ZPPU0006'
VARNAME = LT_VARID-VARIANT
CLIENT = SY-MANDT
IMPORTING
NO_JOBS_STILL_USING = L_NO_JOBS
NO_JOBS_FINISHED_CANCELD_USING = L_FINISH_CANCEL
JOBNAME = L_JOBNAME
JOBCOUNT = L_COUNT
EXCEPTIONS
REPNAME_MISSING = 1
VARNAME_MISSING = 2
OTHERS = 3.
IF SY-SUBRC <> 0.
CLEAR LT_VARID.
CONTINUE.
ENDIF.
L_USED = L_NO_JOBS - L_FINISH_CANCEL.
IF L_USED NE 0.
CLEAR LT_VARID.
CONTINUE.
ENDIF.
CALL FUNCTION 'RS_VARIANT_DELETE'
EXPORTING
REPORT = 'ZPPU0006'
VARIANT = LT_VARID-VARIANT
FLAG_CONFIRMSCREEN = 'X'
FLAG_DELALLCLIENT = 'X'
EXCEPTIONS
NOT_AUTHORIZED = 1
NOT_EXECUTED = 2
NO_REPORT = 3
REPORT_NOT_EXISTENT = 4
REPORT_NOT_SUPPLIED = 5
VARIANT_LOCKED = 6
VARIANT_NOT_EXISTENT = 7
NO_CORR_INSERT = 8
VARIANT_PROTECTED = 9
OTHERS = 10.
ENDLOOP.
ENDIF.
PERFORM FORM_CREATE_VAR.
ENDFORM.
FORM FORM_CREATE_VAR .
LS_PROG-REPORT = 'ZPPU0006'.
LS_PROG-VARIANT = G_KEY.
CLEAR LS_VARID_TAB.
CONCATENATE SY-UZEIT SY-UNAME INTO LS_VARID_TAB-VARIANT.
LS_VARID_TAB-MANDT = SY-MANDT.
LS_VARID_TAB-REPORT = LS_PROG-REPORT.
LS_VARID_TAB-VARIANT = LS_PROG-VARIANT.
LS_VARID_TAB-FLAG1 = SPACE.
LS_VARID_TAB-FLAG2 = SPACE.
LS_VARID_TAB-TRANSPORT = SPACE.
LS_VARID_TAB-ENVIRONMNT = 'A'. "Variant for batch and online
LS_VARID_TAB-PROTECTED = SPACE.
LS_VARID_TAB-SECU = SPACE.
LS_VARID_TAB-VERSION = '1'.
LS_VARID_TAB-ENAME = SY-UNAME.
LS_VARID_TAB-EDAT = SY-DATUM.
LS_VARID_TAB-ETIME = SY-UZEIT.
LS_VARID_TAB-AENAME = SPACE.
LS_VARID_TAB-AEDAT = SPACE.
LS_VARID_TAB-AETIME = SPACE.
LS_VARID_TAB-MLANGU = SY-LANGU.
CLEAR LT_VARIT_TAB.
REFRESH LT_VARIT_TAB.
LT_VARIT_TAB-MANDT = SY-MANDT.
LT_VARIT_TAB-LANGU = SY-LANGU.
LT_VARIT_TAB-REPORT = LS_PROG-REPORT.
LT_VARIT_TAB-VARIANT = LS_PROG-VARIANT.
LT_VARIT_TAB-VTEXT = LS_PROG-REPORT.
LT_VARIT_TAB-VTEXT+9 = LS_PROG-VARIANT.
APPEND LT_VARIT_TAB.
REFRESH LT_RSPARAMS_TAB.
PERFORM FILL_RSPARAMS_TAB TABLES LT_RSPARAMS_TAB[]
USING 'S_PRF' 'P' '' '' S_PRF ''.
PERFORM FILL_RSPARAMS_TAB TABLES LT_RSPARAMS_TAB[]
USING 'P_FILE' 'P' '' '' P_FILE ''.
CALL FUNCTION 'RS_CREATE_VARIANT'
EXPORTING
CURR_REPORT = LS_VARID_TAB-REPORT
CURR_VARIANT = LS_VARID_TAB-VARIANT
VARI_DESC = LS_VARID_TAB
TABLES
VARI_CONTENTS = LT_RSPARAMS_TAB
VARI_TEXT = LT_VARIT_TAB
EXCEPTIONS
ILLEGAL_REPORT_OR_VARIANT = 1
ILLEGAL_VARIANTNAME = 2
NOT_AUTHORIZED = 3
NOT_EXECUTED = 4
REPORT_NOT_EXISTENT = 5
REPORT_NOT_SUPPLIED = 6
VARIANT_EXISTS = 7
VARIANT_LOCKED = 8
OTHERS = 9.
WAIT UP TO 1 SECONDS.
ENDFORM.
FORM FILL_RSPARAMS_TAB TABLES P_LT_RSPARAMS_TAB STRUCTURE RSPARAMS
USING SELNAME KIND SIGN OPTION LOW HIGH.
DATA:LS_RSPARAMS_TAB LIKE LINE OF P_LT_RSPARAMS_TAB.
LS_RSPARAMS_TAB-SELNAME = SELNAME.
LS_RSPARAMS_TAB-KIND = KIND.
LS_RSPARAMS_TAB-SIGN = SIGN.
LS_RSPARAMS_TAB-OPTION = OPTION.
LS_RSPARAMS_TAB-LOW = LOW.
LS_RSPARAMS_TAB-HIGH = HIGH.
APPEND LS_RSPARAMS_TAB TO P_LT_RSPARAMS_TAB .
ENDFORM.
FORM FORM_CREATE_JOB .
CONCATENATE SY-UNAME SY-DATUM SY-UZEIT 'ZPPU0006' INTO LS_JOB-JOBNAME.
WRITE SY-UZEIT TO LS_JOB-JOBCOUNT.
LS_XTBTCJOB-JOBNAME = LS_JOB-JOBNAME.
LS_XTBTCJOB-JOBCOUNT = LS_JOB-JOBCOUNT.
LS_XTBTCJOB-INTREPORT = 'ZPPU0006'.
LS_XTBTCJOB-SDLSTRTDT = SY-DATUM.
LS_XTBTCJOB-SDLSTRTTM = SY-UZEIT + 2.
LS_XTBTCJOB-PRIORITY = '1'.
LS_XTBTCJOB-JOBCLASS = 'A'.
LS_XTBTCJOB-NEWFLAG = 'O'.
LS_XTBTCJOB-SDLUNAME = SY-UNAME.
LS_XTBTCSTRT-SDLSTRTDT = SY-DATUM.
LS_XTBTCSTRT-SDLSTRTTM = SY-UZEIT + 2.
CLEAR LT_XTBTCSTEP.
LT_XTBTCSTEP-PROGRAM = 'ZPPU0006'.
LT_XTBTCSTEP-PARAMETER = G_KEY.
LT_XTBTCSTEP-AUTHCKNAM = SY-UNAME.
LT_XTBTCSTEP-TYP = 'A'.
LT_XTBTCSTEP-LANGUAGE = SY-LANGU.
LT_XTBTCSTEP-STATUS = 'P'.
APPEND LT_XTBTCSTEP.
CALL FUNCTION 'BP_JOB_CREATE'
EXPORTING
JOB_CR_DIALOG = 'N'
JOB_CR_HEAD_INP = LS_XTBTCJOB
IMPORTING
JOB_CR_HEAD_OUT = LS_XTBTCJOB
JOB_CR_STDT_OUT = LS_XTBTCSTRT
TABLES
JOB_CR_STEPLIST = LT_XTBTCSTEP
EXCEPTIONS
CANT_CREATE_JOB = 1
INVALID_DIALOG_TYPE = 2
INVALID_JOB_DATA = 3
JOB_CREATE_CANCELED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
PERFORM FORM_DEL_ZTABLE.
MESSAGE 'Create Background Job Failed.' TYPE 'E'.
ELSE.
MESSAGE 'Create Background Job Successfully.' TYPE 'S'.
PERFORM FORM_ALV.
"LEAVE TO SCREEN 0.
ENDIF.
ENDFORM.
FORM FORM_DEL_ZTABLE.
IF D1 = 'X'.
DELETE FROM ZPPT0011 WHERE ZKEY = G_KEY.
ELSEIF D2 = 'X'.
DELETE FROM ZPPT0003 WHERE ZKEY = G_KEY.
ENDIF.
ENDFORM.
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCDATA.
BDCDATA-PROGRAM = PROGRAM.
BDCDATA-DYNPRO = DYNPRO.
BDCDATA-DYNBEGIN = 'X'.
APPEND BDCDATA.
ENDFORM.
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCDATA.
BDCDATA-FNAM = FNAM.
BDCDATA-FVAL = FVAL.
APPEND BDCDATA.
ENDFORM.
FORM FORM_GET_DATA .
REFRESH:LT_TAB1,LT_TAB2.
CLEAR:LT_TAB1,LT_TAB2.
IF D1 = 'X'.
SELECT *
FROM ZPPT0011
INTO CORRESPONDING FIELDS OF TABLE LT_TAB1
WHERE ZKEY = SY-SLSET.
ELSEIF D2 = 'X'.
SELECT *
FROM ZPPT0003
INTO CORRESPONDING FIELDS OF TABLE LT_TAB2
WHERE ZKEY = SY-SLSET.
ENDIF.
ENDFORM.
FORM FORM_ASSIGN_MATERIAL.
LOOP AT LT_TAB2.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LT_TAB2-PLNNR
IMPORTING
OUTPUT = LT_TAB2-PLNNR.
CLEAR IT_ZAEHL.
SELECT ZAEHL INTO IT_ZAEHL FROM MAPL
WHERE PLNNR = LT_TAB2-PLNNR.
ENDSELECT.
APPEND IT_ZAEHL.
G_LINES = IT_ZAEHL.
S1 = 02."g_lines + 1.
PERFORM BDC_DYNPRO USING 'SAPLCPDI' '1001'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC271-PLNNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ALUE'.
PERFORM BDC_FIELD USING 'RC271-PLNNR'
LT_TAB2-PLNNR.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
DATE_INTERNAL = SY-DATUM "'20010101'
IMPORTING
DATE_EXTERNAL = BLDAT_S.
PERFORM BDC_FIELD USING 'RC271-STTAG'
BLDAT_S.
PERFORM BDC_FIELD USING 'RC271-WERKS'
LT_TAB2-WERKS.
PERFORM BDC_FIELD USING 'RC271-PLNAL'
LT_TAB2-PLNAL.
PERFORM BDC_DYNPRO USING 'SAPLCPDI' '1200'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC27X-ENTRY_ACT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=MTUE'.
PERFORM BDC_FIELD USING 'RC27X-ENTRY_ACT'
'1'.
PERFORM BDC_DYNPRO USING 'SAPLCZDI' '1010'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC27X-ENTRY_ACT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENT1'.
S0 = '' && G_LINES && ''.
PERFORM BDC_FIELD USING 'RC27X-ENTRY_ACT'
S0.
PERFORM BDC_DYNPRO USING 'SAPLCZDI' '1010'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MAPL-WERKS(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BACK'.
S2 = 'MAPL-PLNAL(' && S1 && ')'.
PERFORM BDC_FIELD USING S2
LT_TAB2-PLNAL.
CLEAR S2.
S2 = 'MAPL-MATNR(' && S1 && ')'.
PERFORM BDC_FIELD USING S2
LT_TAB2-MATNR.
CLEAR S2.
S2 = 'MAPL-WERKS(' && S1 && ')'.
PERFORM BDC_FIELD USING S2
LT_TAB2-WERKS.
CLEAR S2.
PERFORM BDC_DYNPRO USING 'SAPLCPDI' '1200'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RC27X-ENTRY_ACT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD USING 'RC27X-ENTRY_ACT'
'1'.
CALL TRANSACTION 'CA12' USING BDCDATA MODE S_MODE UPDATE C_UPDATE
MESSAGES INTO MESSTAB.
CLEAR: BDCDATA[],GS_MSG2,WA.
READ TABLE MESSTAB INTO WA WITH KEY MSGTYP = 'S'.
IF SY-SUBRC = 0 AND ( WA-MSGID NE '00' AND WA-MSGNR NE '344' ).
GS_MSG2-ICON = ICON_GREEN_LIGHT.
GS_MSG2-ZMSG = 'Success!'.
ELSE.
CLEAR:LV_MESSAGE.
CONCATENATE WA-MSGV1 WA-MSGV2 WA-MSGV3 WA-MSGV4
INTO LV_MESSAGE.
GS_MSG2-ICON = ICON_RED_LIGHT.
GS_MSG2-ZMSG = 'Upload failed!' && LV_MESSAGE.
ENDIF.
GS_MSG2-MATNR = LT_TAB2-MATNR.
GS_MSG2-PLNNR = LT_TAB2-PLNNR.
GS_MSG2-ZUSER = SY-UNAME.
GS_MSG2-ZDATE = |{ SY-DATUM }{ '-' }{ SY-UZEIT }|.
INSERT ZPPT0013 FROM GS_MSG2.
CLEAR:MESSTAB,MESSTAB[],GS_MSG2.
ENDLOOP.
ENDFORM.
FORM FORM_CREATE_ROS.
DATA:BEGIN OF IT_OLDNUM OCCURS 0,
OLDNUM LIKE PLKO-PLNNR_ALT,
END OF IT_OLDNUM.
DATA: LV_PLNNR TYPE MAPL-PLNNR,
IT_TASK TYPE TABLE OF BAPI1190_TSK_C, "任务清单头数据
WA_TASK TYPE BAPI1190_TSK_C,
IT_MATERIALTASKALLOCATION TYPE TABLE OF BAPI1190_MTK_C, "物料任务清单分配
WA_MATERIALTASKALLOCATION TYPE BAPI1190_MTK_C,
IT_OPERATION TYPE TABLE OF BAPI1190_OPR_C, "工序
WA_OPERATION TYPE BAPI1190_OPR_C,
IT_COMPONENTALLOCATION TYPE TABLE OF BAPI1190_COM_C, "组件
WA_COMPONENTALLOCATION TYPE BAPI1190_COM_C,
IT_RETURN TYPE TABLE OF BAPIRET2, "返回消息
WA_RETURN TYPE BAPIRET2,
WA_GROUP TYPE BAPI1190_TSK_C-TASK_LIST_GROUP, "任务清单
WA_GROUPCOUNTER TYPE BAPI1190_TSK_C-GROUP_COUNTER. "组计数器
LOOP AT LT_TAB1.
IT_OLDNUM-OLDNUM = LT_TAB1-PLNNR_ALT.
APPEND IT_OLDNUM.
CLEAR: LT_TAB1,IT_OLDNUM.
ENDLOOP.
SORT IT_OLDNUM BY OLDNUM.
DELETE ADJACENT DUPLICATES FROM IT_OLDNUM COMPARING ALL FIELDS.
LOOP AT IT_OLDNUM.
"头数据
LOOP AT LT_TAB1 WHERE PLNNR_ALT = IT_OLDNUM-OLDNUM.
WA_TASK-TASK_LIST_GROUP = LT_TAB1-PLNNR.
WA_TASK-GROUP_COUNTER = LT_TAB1-PLNAL. "组计数器
WA_TASK-VALID_FROM = '20010101'. "有效起始日期
WA_TASK-VALID_TO_DATE = '99991231'. "有效截止日期
IF LT_TAB1-LOSVN IS NOT INITIAL.
WA_TASK-LOT_SIZE_FROM = LT_TAB1-LOSVN.
ELSE.
WA_TASK-LOT_SIZE_FROM = ''. "从批量
ENDIF.
IF LT_TAB1-LOSBS IS NOT INITIAL.
WA_TASK-LOT_SIZE_TO = LT_TAB1-LOSBS.
ELSE.
WA_TASK-LOT_SIZE_TO = '99999999'. "到批量
ENDIF.
WA_TASK-DESCRIPTION = LT_TAB1-KTEXT. "任务清单描述
WA_TASK-DEL_IND = LT_TAB1-LOEKZ. "删除标记
WA_TASK-OLD_NUMBER_OF_TASK_LIST = LT_TAB1-PLNNR_ALT. "old number
APPEND WA_TASK TO IT_TASK.
CLEAR:WA_TASK,LT_TAB1.
ENDLOOP.
SORT IT_TASK BY OLD_NUMBER_OF_TASK_LIST.
DELETE ADJACENT DUPLICATES FROM IT_TASK COMPARING ALL FIELDS.
"工序
LOOP AT LT_TAB1 WHERE PLNNR_ALT = IT_OLDNUM-OLDNUM.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LT_TAB1-PLNAL
IMPORTING
OUTPUT = LT_TAB1-PLNAL.
WA_OPERATION-OPERATION_MEASURE_UNIT = LT_TAB1-MEINH."作业的计量单位
WA_OPERATION-TASK_LIST_GROUP = LT_TAB1-PLNNR.
WA_OPERATION-GROUP_COUNTER = LT_TAB1-PLNAL. "组计数器
WA_OPERATION-VALID_FROM = '20010101'. "有效起始日期
WA_OPERATION-VALID_TO_DATE = '99991231'. "有效截止日期
WA_OPERATION-ACTIVITY = LT_TAB1-VORNR. "工序
WA_OPERATION-CONTROL_KEY = LT_TAB1-STEUS. "控制码
WA_OPERATION-WORK_CNTR = LT_TAB1-ARBPL. "工作中心
IF LT_TAB1-BMSCH IS NOT INITIAL.
WA_OPERATION-BASE_QUANTITY = LT_TAB1-BMSCH. "基本数量
ELSE .
WA_OPERATION-BASE_QUANTITY = '1'.
LT_TAB1-BMSCH = '1'.
ENDIF.
WA_OPERATION-DENOMINATOR = '1'. "用于转换工艺路线和工序单位的分母
WA_OPERATION-NOMINATOR = '1'. "用于转换任务清单和工序计量单位的计数器
WA_OPERATION-COST_RELEVANT = 'X'.
WA_OPERATION-DESCRIPTION = LT_TAB1-LTXA1. "工序描述
WA_OPERATION-ACTTYPE_01 = 'A001'.
WA_OPERATION-STD_VALUE_01 = LT_TAB1-VGW01. "机器
WA_OPERATION-STD_UNIT_01 = LT_TAB1-VGE01. "单位
WA_OPERATION-ACTTYPE_02 = 'A002'.
WA_OPERATION-STD_VALUE_02 = LT_TAB1-VGW02. "计件人工
WA_OPERATION-STD_UNIT_02 = LT_TAB1-VGE02. "单位
WA_OPERATION-ACTTYPE_03 = 'A003'.
WA_OPERATION-STD_VALUE_03 = LT_TAB1-VGW03. "间接人工
WA_OPERATION-STD_UNIT_03 = LT_TAB1-VGE03. "单位
WA_OPERATION-ACTTYPE_04 = 'A004'.
WA_OPERATION-STD_VALUE_04 = LT_TAB1-VGW04. "低耗品
WA_OPERATION-STD_UNIT_04 = LT_TAB1-VGE04. "单位
WA_OPERATION-ACTTYPE_05 = 'A005'.
WA_OPERATION-STD_VALUE_05 = LT_TAB1-VGW05. "其他制造费用
WA_OPERATION-STD_UNIT_05 = LT_TAB1-VGE05. "单位
WA_OPERATION-ACTTYPE_06 = 'A006'.
WA_OPERATION-STD_VALUE_06 = LT_TAB1-VGW06. "自制动力
WA_OPERATION-STD_UNIT_06 = LT_TAB1-VGE06. "单位
WA_OPERATION-STANDARD_TEXT_KEY = LT_TAB1-KTSCH. "标准文本码
WA_OPERATION-PLANT = LT_TAB1-WERKS_D."工厂 工序
WA_OPERATION-DEL_IND = LT_TAB1-LOEKZ. "删除标记
WA_OPERATION-STANDARD_QUEUE_TIME = LT_TAB1-ZWNOR.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = LT_TAB1-ZEIWN
IMPORTING
OUTPUT = LT_TAB1-ZEIWN
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
WA_OPERATION-STANDARD_QUEUE_TIME_UNIT = LT_TAB1-ZEIWN.
APPEND WA_OPERATION TO IT_OPERATION.
CLEAR:WA_OPERATION,LT_TAB1.
ENDLOOP.
CALL FUNCTION 'BAPI_REFSETOFOPERATIONS_CREATE'
EXPORTING
PROFILE = S_PRF
IMPORTING
GROUP = WA_GROUP
GROUPCOUNTER = WA_GROUPCOUNTER
TABLES
TASK = IT_TASK
OPERATION = IT_OPERATION
COMPONENTALLOCATION = IT_COMPONENTALLOCATION
RETURN = IT_RETURN.
CLEAR : WA_RETURN,GS_MSG1.
READ TABLE IT_RETURN INTO WA_RETURN WITH KEY ID = 'BAPI' NUMBER = '000'.
IF SY-SUBRC EQ 0 .
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
GS_MSG1-ICON = ICON_GREEN_LIGHT.
GS_MSG1-PLNNR_ALT = IT_OLDNUM-OLDNUM.
GS_MSG1-ZMSG = WA_GROUP.
GS_MSG1-ZUSER = SY-UNAME.
GS_MSG1-ZDATE = |{ SY-DATUM }{ '-' }{ SY-UZEIT }|.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
GS_MSG1-ICON = ICON_RED_LIGHT.
GS_MSG1-PLNNR_ALT = IT_OLDNUM-OLDNUM.
GS_MSG1-ZMSG = WA_RETURN-MESSAGE.
GS_MSG1-ZUSER = SY-UNAME.
GS_MSG1-ZDATE = |{ SY-DATUM }{ '-' }{ SY-UZEIT }|.
ENDIF.
INSERT ZPPT0012 FROM GS_MSG1.
CLEAR:IT_TASK[],WA_GROUP,WA_GROUPCOUNTER,IT_OPERATION[],
IT_COMPONENTALLOCATION[],IT_RETURN[],GS_MSG1,GS_MSG1[].
ENDLOOP.
ENDFORM.
文本元素
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/19565.html