несем в продуктив
Code:
REPORT Z_sa38.
DATA: HEAD LIKE THEAD.
DATA: HEADSAVE LIKE THEAD.
DATA: TEXT like table of TLINE with header line.
DATA: TEXT1 like table of TLINE-TDLINE with header line.
DATA: TEXTSAVE like table of TLINE with header line.
DATA: textname(70), MsgRez(1).
*************************************************
* в тексте ZSAVE_uname хранится последний вариант
data: SaveTextName type THEAD-TDNAME.
Concatenate 'ZSAVE' sy-uname into SaveTextName separated by '_'.
CALL FUNCTION 'READ_TEXT'
EXPORTING
ID = 'ST '
LANGUAGE = 'R'
NAME = SaveTextName
OBJECT = 'TEXT'
* ARCHIVE_HANDLE = 0
* LOCAL_CAT = ' '
IMPORTING
HEADER = HEADSAVE
TABLES
LINES = TEXTSAVE
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
NOT_FOUND = 4
OBJECT = 5
REFERENCE_CHECK = 6
WRONG_ACCESS_TO_ARCHIVE = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
* если текста ZSAVE_uname нет то создаю его.
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
CALL FUNCTION 'INIT_TEXT'
EXPORTING
ID = 'ST '
LANGUAGE = 'R'
NAME = SaveTextName
OBJECT = 'TEXT'
IMPORTING
HEADER = HEADSAVE
TABLES
LINES = TEXTSAVE
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 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.
ENDIF.
TEXTSAVE-TDFORMAT = '*'. TEXTSAVE-TDLINE = ' '. Append TEXTSAVE.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
HEADER = HEADSAVE
INSERT = 'X'
SAVEMODE_DIRECT = 'X'
TABLES
LINES = TEXTSAVE
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 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.
ENDIF.
ENDIF.
***************************************************
Concatenate 'ZZRT' sy-uname sy-datum sy-uzeit
into textname separated by '_'.
CALL FUNCTION 'INIT_TEXT'
EXPORTING
ID = 'ST '
LANGUAGE = 'R'
NAME = textname
OBJECT = 'TEXT'
IMPORTING
HEADER = HEAD
TABLES
LINES = TEXT
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 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.
ENDIF.
Insert lines of textsave into table text.
CALL FUNCTION 'EDIT_TEXT'
EXPORTING
* DISPLAY = ' '
EDITOR_TITLE = 'Editor title'
HEADER = HEAD
* SAVE = ' '
* LINE_EDITOR = ' '
* CONTROL = ' '
* PROGRAM = ' '
* LOCAL_CAT = ' '
* IMPORTING
* FUNCTION =
* NEWHEADER =
* RESULT =
TABLES
LINES = TEXT
EXCEPTIONS
ID = 1
LANGUAGE = 2
LINESIZE = 3
NAME = 4
OBJECT = 5
TEXTFORMAT = 6
COMMUNICATION = 7
OTHERS = 8.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
HEADER = HEAD
* INSERT = ' '
SAVEMODE_DIRECT = 'X'
* OWNER_SPECIFIED = ' '
* LOCAL_CAT = ' '
* IMPORTING
* FUNCTION =
* NEWHEADER =
TABLES
LINES = TEXT
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 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.
ENDIF.
**********************************************************
* Сохраняю последнюю выполняемую программу
CALL FUNCTION 'SAVE_TEXT'
EXPORTING
CLIENT = SY-MANDT
HEADER = HEADSAVE
* INSERT = ' '
SAVEMODE_DIRECT = 'X'
* OWNER_SPECIFIED = ' '
* LOCAL_CAT = ' '
* IMPORTING
* FUNCTION =
* NEWHEADER =
TABLES
LINES = TEXT
EXCEPTIONS
ID = 1
LANGUAGE = 2
NAME = 3
OBJECT = 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.
ENDIF.
************************************************************
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
DEFAULTOPTION = 'J'
DIAGNOSETEXT1 =
'log - "C:\Temp\Log_sa38.log"'
TEXTLINE1 = 'Выполнить программу?'
TITEL = 'Динамический запуск программ.'
CANCEL_DISPLAY = ' '
IMPORTING
ANSWER = MsgRez .
* Если выполнить программу
if MsgRez = 'J'.
Write 'Текст программы'. new-line.
loop at text.
write: (3) sy-tabix, text-tdline. new-line.
endloop.
write 'Результат выполнения:'. new-line.
DATA: CODE(72) OCCURS 10,
PROG(8), MSG(120), LIN(3), WRD(10), OFF(3).
APPEND 'PROGRAM SUBPOOL.' TO CODE.
APPEND 'LOAD-OF-PROGRAM.' TO CODE. " BAA added
* APPEND 'FORM RUNTIME.' TO CODE. " BAA commented
loop at text.
append text-tdline to code.
endloop.
* APPEND 'ENDFORM.' TO CODE. " BAA commented
GENERATE SUBROUTINE POOL CODE NAME PROG
MESSAGE MSG LINE LIN WORD WRD OFFSET OFF.
IF SY-SUBRC <> 0.
WRITE: / 'Error during generation in line', LIN, / MSG,
/ 'Word:', WRD, 'at offset', OFF.
ELSE.
* WRITE: / 'The name of the subroutine pool is', PROG.
SKIP 2.
PERFORM RUNTIME IN PROGRAM (PROG) IF FOUND. " BAA added 'IF FOUND'
ENDIF.
EndIf.
Concatenate '*******' sy-uname sy-datum sy-uzeit '*******'
Into text1 separated by ' '.
Append TEXT1.
loop at TEXT.
TEXT1 = TEXT-TDLINE. Append TEXT1.
EndLoop.
Text1 = '******* END *******'.
Append text1.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
codepage = 'ASC'
filename = 'C:\Temp\Log_sa38.log'
filetype = 'ASC'
mode = 'A'
TABLES
data_tab = TEXT1
EXCEPTIONS
file_open_error = 1
file_write_error = 2
invalid_filesize = 3
invalid_table_width = 4
invalid_type = 5.
в продуктиве sa38 и выбираем Z_sa38