Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE38 - ABAP Редактор => Тема начата: Паганель от Май 28, 2009, 12:52:33 pm
-
Тут вот возникла надобность выгрузить пару программ (типа бекап), выгрузить код смог, смартформы тоже, тексты критереев выбора просто скопировал в файлик, а вот что делать с GUI-статусом? Как его выгрузить что бы потом можно было загрузить повторно?
-
Скриншотом делал. Хотя может кто и знает другие способы. ???
-
Скриншотом делал. Хотя может кто и знает другие способы. ???
думаю, это один из самых неудобных способов .... ну если уже ты ничего не нашел (с твоими 7 лет опыта)
-
думаю, это один из самых неудобных способов .... ну если уже ты ничего не нашел (с твоими 7 лет опыта)
Дело в том, что не искал просто. ;)
-
поможет ?
http://www.sapnet.ru/viewtopic.php?p=6893
-
Интересно.... удем пробывать .....
Кстати, падает в дамп ......
-
поможет ?
http://www.sapnet.ru/viewtopic.php?p=6893
Эхх, системы под рукой нет - в отпуске.
2 Паганель: а по поводу 7 лет опыта... Уставать начинаешь от кода, типовых задач и т.д., особенно когда сниться все это дело начинает. Особенно когда консультантов приходится учить еще правильно тестировать... Ну это так, лирика, навеяло во время перепахивания 24-х PDF-формуляров. ;D
-
Эхх, системы под рукой нет - в отпуске.
2 Паганель: а по поводу 7 лет опыта... Уставать начинаешь от кода, типовых задач и т.д., особенно когда сниться все это дело начинает. Особенно когда консультантов приходится учить еще правильно тестировать... Ну это так, лирика, навеяло во время перепахивания 24-х PDF-формуляров. ;D
Знаю, сам так часто себя чувствую, я в свое время перешел с програмизма в консальт, думал менше буду програмировать ;-)
-
у меня отлично,
выгрузил,
кучу файликов...
что дамп говорит ?
-
Прогу подправил, сейчас тут выложу подправленный исходник и на форуме автора тоже напишу ..... мол начал пользоватся, валится в ошибку .... исправил ....
Ошибка
ДинамОшибка READ_REPORT_LINE_TOO_LONG
ОсобСит. CX_SY_READ_SRC_LINE_TOO_LONG
Дата и время 28.05.2009 13:12:14
Валилось на строке 182
................
* Таблицы программы
IF cbprog = 'X'.
APPEND atr.
READ REPORT repid INTO prg.
......
Странно, в моей системе, по похожей ошибке валилась прога Димы.
http://sapforum.biz/index.php/topic,371.0.html
Исправление:
Вместо
DATA: BEGIN OF PRG OCCURS 0, " Иначе WS_Download
LINE(100) TYPE C, " неправильно работает
END OF PRG.
Надо
DATA: BEGIN OF PRG OCCURS 0, " Иначе WS_Download
LINE(500) TYPE C, " неправильно работает
END OF PRG.
Весь код, думаю автор не будет против,
скопированно с http://www.sapnet.ru/viewtopic.php?p=6893 (http://www.sapnet.ru/viewtopic.php?p=6893)
REPORT YDK_PROGS.
TABLES: EUDB, TRDIR, TADIR, D020T.
SELECT-options: sprog FOR sy-repid obligatory NO INTERVALS.
selection-SCREEN SKIP.
PARAMETERS: saveinc AS CHECKBOX.
SELECT-options: incmask FOR sy-repid NO INTERVALS.
selection-SCREEN SKIP.
PARAMETERS: dir(132) TYPE C obligatory.
selection-SCREEN SKIP.
PARAMETERS rbdl RADIOBUTTON GROUP rbl.
PARAMETERS rbul RADIOBUTTON GROUP rbl.
selection-SCREEN SKIP.
PARAMETERS: cbprog AS CHECKBOX DEFAULT 'X'.
PARAMETERS: cbcua AS CHECKBOX DEFAULT 'X'.
PARAMETERS: cbdyn AS CHECKBOX DEFAULT 'X'.
DATA: repid LIKE sy-repid.
DATA: itprog LIKE sy-repid OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF PRG OCCURS 0, " Иначе WS_Download
LINE(500) TYPE C, " неправильно работает
END OF PRG.
DATA: txt LIKE TEXTPOOL OCCURS 0 WITH HEADER LINE.
DATA: atr LIKE trdir OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF INC OCCURS 0, " Иначе WS_Download
repid LIKE sy-repid, " неправильно работает
END OF INC.
DATA: inct LIKE LINE OF inc OCCURS 0 WITH HEADER LINE.
DATA: STA LIKE RSMPE_STAT OCCURS 0 WITH HEADER LINE.
DATA: FUN LIKE RSMPE_FUNT OCCURS 0 WITH HEADER LINE.
DATA: MEN LIKE RSMPE_MEN OCCURS 0 WITH HEADER LINE.
DATA: MTX LIKE RSMPE_MNLT OCCURS 0 WITH HEADER LINE.
DATA: ACT LIKE RSMPE_ACT OCCURS 0 WITH HEADER LINE.
DATA: BUT LIKE RSMPE_BUT OCCURS 0 WITH HEADER LINE.
DATA: PFK LIKE RSMPE_PFK OCCURS 0 WITH HEADER LINE.
DATA: SET LIKE RSMPE_STAF OCCURS 0 WITH HEADER LINE.
DATA: DOC LIKE RSMPE_ATRT OCCURS 0 WITH HEADER LINE.
DATA: TIT LIKE RSMPE_TITT OCCURS 0 WITH HEADER LINE.
DATA: ADM LIKE RSMPE_ADM OCCURS 0 WITH HEADER LINE.
DATA: BIV LIKE RSMPE_BUTS OCCURS 0 WITH HEADER LINE.
DATA: DYNNAME(44) TYPE C.
DATA: dyn LIKE D020S OCCURS 0 WITH HEADER LINE.
DATA: H LIKE D020S.
DATA: F LIKE D021S OCCURS 0 WITH HEADER LINE.
DATA: E LIKE D022S OCCURS 0 WITH HEADER LINE.
DATA: M LIKE D023S OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF DYNH OCCURS 0.
INCLUDE STRUCTURE D020S.
DATA: DTXT LIKE D020T-DTXT,
END OF DYNH.
DATA: BEGIN OF dynf OCCURS 0,
prog LIKE D020S-PROG,
dnum LIKE D020S-DNUM.
INCLUDE STRUCTURE D021S.
DATA: END OF dynf.
DATA: BEGIN OF dyne OCCURS 0,
prog LIKE D020S-PROG,
dnum LIKE D020S-DNUM.
INCLUDE STRUCTURE D022S.
DATA: END OF dyne.
DATA: BEGIN OF dynm OCCURS 0,
prog LIKE D020S-PROG,
dnum LIKE D020S-DNUM.
INCLUDE STRUCTURE D023S.
DATA: END OF dynm.
DATA: ittab(10) TYPE C OCCURS 0 WITH HEADER LINE.
FIELD-symbols <tab> TYPE TABLE.
INITIALIZATION.
FIELD-symbols <fs>.
LOOP AT SCREEN.
CHECK SCREEN-INPUT = 0.
IF SCREEN-name CP '*SPROG*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'Programm, include, ...'.
ENDIF.
IF SCREEN-name CP '*SAVEINC*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'Include Unload/Download'.
ENDIF.
IF SCREEN-name CP '*INCMASK*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'Include mask'.
ENDIF.
IF SCREEN-name CP '*DIR*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'File directory'.
ENDIF.
IF SCREEN-name CP '*RBDL*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'From file to SAP'.
ENDIF.
IF SCREEN-name CP '*RBUL*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'From SAP to file'.
ENDIF.
IF SCREEN-name CP '*CBPROG*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'Program'.
ENDIF.
IF SCREEN-name CP '*CBCUA*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'GUI Status'.
ENDIF.
IF SCREEN-name CP '*CBDYN*'.
ASSIGN (SCREEN-name) TO <fs>.
<fs> = 'Dynpro'.
ENDIF.
ENDLOOP.
start-OF-selection.
PERFORM add_tab USING:
'PRG', 'TXT', 'ATR', 'INC',
'STA', 'FUN', 'MEN', 'MTX', 'ACT', 'BUT', 'PFK', 'SET',
'DOC', 'TIT', 'ADM',
'DYN', 'DYNH', 'DYNF', 'DYNE', 'DYNM'.
CASE 'X'.
WHEN rbul. " Выгрузка
SELECT name INTO TABLE itprog
FROM trdir
WHERE name IN sprog.
CHECK sy-subrc = 0.
LOOP AT itprog.
PERFORM save_prog USING itprog.
IF saveinc = 'X' AND cbprog = 'X'.
inct[] = inc[].
LOOP AT inct.
PERFORM save_prog USING inct-repid.
ENDLOOP.
ENDIF.
ENDLOOP.
WHEN rbdl. " Загрузка
LOOP AT sprog WHERE SIGN = 'I'
AND option = 'EQ'.
PERFORM load_prog USING sprog-low.
IF saveinc = 'X' AND cbprog = 'X'.
inct[] = inc[].
LOOP AT inct WHERE repid IN incmask.
PERFORM load_prog USING inct-repid.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDCASE.
FORM save_prog USING arepid.
repid = arepid.
PERFORM refresh_tabs.
SELECT SINGLE * INTO atr
FROM TRDIR
WHERE NAME = repid.
CHECK sy-subrc = 0
AND atr-subc CA '1MFI'. " Типы программ.
* Таблицы программы
IF cbprog = 'X'.
APPEND atr.
READ REPORT repid INTO prg.
IF atr-subc = 'I'. " Include
PERFORM save_tabs.
EXIT.
ENDIF.
READ TEXTPOOL repid INTO txt LANGUAGE SY-LANGU.
IF saveinc = 'X'.
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
EXPORTING
PROGRAM = repid
TABLES
INCLUDETAB = inc
EXCEPTIONS
NOT_EXISTENT = 1
NO_PROGRAM = 2
OTHERS = 3.
IF NOT incmask[] IS INITIAL.
DELETE inc WHERE NOT repid IN incmask.
ENDIF.
ENDIF.
ENDIF.
CHECK atr-subc CA '1MF'. " Типы программ.
* Таблицы GUI статуса
IF cbcua = 'X'.
CALL FUNCTION 'RS_CUA_INTERNAL_FETCH'
EXPORTING
PROGRAM = REPID
LANGUAGE = SY-LANGU
IMPORTING
ADM = ADM
TABLES
STA = STA
FUN = FUN
MEN = MEN
MTX = MTX
ACT = ACT
BUT = BUT
PFK = PFK
SET = SET
DOC = DOC
TIT = TIT
BIV = BIV
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
IF SY-SUBRC = 0.
APPEND ADM.
ENDIF.
ENDIF.
* Таблицы экранов
IF cbdyn = 'X'.
SELECT * INTO TABLE dyn
FROM D020S
WHERE PROG = REPID.
DELETE dyn WHERE TYPE CA 'SW'. " Sel screen
LOOP AT dyn.
DYNNAME(40) = DYN-PROG.
DYNNAME+40(4) = DYN-DNUM.
REFRESH: F, E.
CLEAR: H, F, E.
IMPORT DYNPRO H F E M ID DYNNAME.
dynh = H.
SELECT SINGLE DTXT INTO DYNH-DTXT
FROM D020T
WHERE PROG = DYN-PROG
AND DYNR = DYN-DNUM
AND LANG = SY-LANGU.
APPEND dynh.
LOOP AT f.
dynf-prog = dyn-prog.
dynf-dnum = dyn-dnum.
MOVE-corresponding f TO dynf.
APPEND dynf.
ENDLOOP.
LOOP AT e.
dyne-prog = dyn-prog.
dyne-dnum = dyn-dnum.
MOVE-corresponding e TO dyne.
APPEND dyne.
ENDLOOP.
LOOP AT M.
dynm-prog = dyn-prog.
dynm-dnum = dyn-dnum.
MOVE-corresponding M TO dynm.
APPEND dynm.
ENDLOOP.
ENDLOOP.
ENDIF.
PERFORM save_tabs.
ENDFORM.
FORM load_prog USING arepid.
DATA: TRKEY LIKE TRKEY.
repid = arepid.
PERFORM load_tabs.
* Программа
IF cbprog = 'X' AND NOT prg[] IS INITIAL.
INSERT REPORT repid FROM prg.
PERFORM UPDATE_TRDIR.
IF NOT txt[] IS INITIAL.
INSERT TEXTPOOL repid FROM txt LANGUAGE SY-LANGU.
ENDIF.
ENDIF.
* GUI статус
IF cbcua = 'X' AND NOT sta[] IS INITIAL.
READ TABLE adm INDEX 1.
TRKEY-DEVCLASS = '$TMP'.
TRKEY-OBJ_TYPE = 'PROG'.
TRKEY-OBJ_NAME = repid.
TRKEY-SUB_TYPE = 'CUAD'.
TRKEY-SUB_NAME = repid.
CALL FUNCTION 'RS_CUA_INTERNAL_WRITE'
EXPORTING
PROGRAM = repid
LANGUAGE = sy-langu
TR_KEY = TRKEY
ADM = adm
STATE = 'I'
TABLES
STA = sta
FUN = fun
MEN = men
MTX = mtx
ACT = act
BUT = but
PFK = pfk
SET = SET
DOC = doc
TIT = tit
BIV = biv
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
ENDIF.
* Экраны
IF cbdyn = 'X' AND NOT dyn[] IS INITIAL.
LOOP AT dyn WHERE TYPE NA 'SW'.
REFRESH: F, E, M.
DYNNAME(40) = DYN-PROG.
DYNNAME+40(4) = DYN-DNUM.
READ TABLE dynh WITH KEY prog = dyn-prog dnum = dyn-dnum.
h = dynh.
LOOP AT dynf WHERE prog = dyn-prog
AND dnum = dyn-dnum.
MOVE-corresponding dynf TO f.
APPEND f.
ENDLOOP.
LOOP AT dyne WHERE prog = dyn-prog
AND dnum = dyn-dnum.
MOVE-corresponding dyne TO e.
APPEND e.
ENDLOOP.
LOOP AT dynm WHERE prog = dyn-prog
AND dnum = dyn-dnum.
MOVE-corresponding dynm TO M.
APPEND M.
ENDLOOP.
EXPORT DYNPRO H F E M ID DYNNAME.
D020T-PROG = dyn-prog.
D020T-DYNR = dyn-dnum.
D020T-LANG = sy-langu.
D020T-DTXT = dynh-dtxt.
MODIFY D020T. " Подругому ввести текст экрана не получается
ENDLOOP.
ENDIF.
ENDFORM.
FORM UPDATE_TRDIR.
READ TABLE atr INDEX 1.
CHECK sy-subrc = 0.
TRDIR = atr.
MODIFY TRDIR.
SELECT SINGLE *
FROM TADIR
WHERE PGMID = 'R3TR'
AND OBJECT = 'PROG'
AND OBJ_NAME = TRDIR-NAME.
IF SY-SUBRC NE 0. " Иначе не будет записи каталога объектов
TADIR-PGMID = 'R3TR'.
TADIR-OBJECT = 'PROG'.
TADIR-OBJ_NAME = TRDIR-NAME.
TADIR-DEVCLASS = '$TMP'.
TADIR-CPROJECT = 'L'.
TADIR-MASTERLANG = SY-LANGU.
TADIR-SRCSYSTEM = SY-SYSID.
INSERT TADIR.
ENDIF.
ENDFORM.
FORM add_tab USING tab.
CONCATENATE tab '[]' INTO ittab.
APPEND ittab.
ENDFORM.
FORM refresh_tabs.
LOOP AT ittab.
ASSIGN (ittab) TO <tab>.
CHECK sy-subrc = 0.
REFRESH <tab>.
ENDLOOP.
ENDFORM.
FORM save_tabs.
DATA: FILENAME LIKE RLGRAP-FILENAME.
LOOP AT ittab.
ASSIGN (ittab) TO <tab>.
CHECK sy-subrc = 0.
CHECK NOT <tab> IS INITIAL.
TRANSLATE ittab USING '[ ] '. " Убираем []
CONCATENATE dir '\' repid '.' ittab INTO filename.
CALL FUNCTION 'WS_DOWNLOAD'
EXPORTING
FILENAME = filename
FILETYPE = 'DAT'
TABLES
DATA_TAB = <tab>
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_WRITE_ERROR = 2
INVALID_FILESIZE = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
NO_AUTHORITY = 10
OTHERS = 11.
ENDLOOP.
ENDFORM.
FORM load_tabs.
DATA: FILENAME LIKE RLGRAP-FILENAME.
LOOP AT ittab.
ASSIGN (ittab) TO <tab>.
CHECK sy-subrc = 0.
REFRESH <tab>.
TRANSLATE ittab USING '[ ] '. " Убираем []
CONCATENATE dir '\' repid '.' ittab INTO filename.
CASE ittab.
WHEN 'DYNF'.
PERFORM load_tabx TABLES <tab> USING filename.
WHEN OTHERS.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = filename
FILETYPE = 'DAT'
TABLES
DATA_TAB = <tab>
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
NO_AUTHORITY = 10
OTHERS = 11.
ENDCASE.
ENDLOOP.
ENDFORM.
* При выгрузке для полей с типом X перед значением ставится
* символ "X" врезультате ошибка при загрузке
* проявилось на таблице DYNF
FORM load_tabx TABLES tab USING filename.
DATA: BEGIN OF itf OCCURS 0,
LINE(2300) TYPE C,
END OF itf.
DATA: itw(256) TYPE C OCCURS 0 WITH HEADER LINE.
DATA: xtab(2) TYPE X VALUE '0900'.
DATA: ctab TYPE C.
DATA: typ TYPE C.
FIELD-symbols <fs>.
ASSIGN ctab TO <fs> TYPE 'X'.
<fs> = xtab.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME = filename
FILETYPE = 'ASC'
TABLES
DATA_TAB = itf
EXCEPTIONS
CONVERSION_ERROR = 1
FILE_OPEN_ERROR = 2
FILE_READ_ERROR = 3
INVALID_TYPE = 4
NO_BATCH = 5
UNKNOWN_ERROR = 6
INVALID_TABLE_WIDTH = 7
GUI_REFUSE_FILETRANSFER = 8
CUSTOMER_ERROR = 9
NO_AUTHORITY = 10
OTHERS = 11.
LOOP AT itf.
SPLIT itf AT ctab INTO TABLE itw.
CLEAR tab.
LOOP AT itw.
ASSIGN COMPONENT sy-tabix OF STRUCTURE tab TO <fs>.
IF sy-subrc <> 0. EXIT. ENDIF.
DESCRIBE FIELD <fs> TYPE typ.
IF typ = 'X'.
<fs> = itw+1.
ELSE.
<fs> = itw.
ENDIF.
ENDLOOP.
APPEND tab.
ENDLOOP.
ENDFORM.
-
Афтор не против ;D
Но думаю писать проги с кодом длиннее 72 имхо не прилично
Найдутся те кому и 500 не хватит
-
Афтор не против ;D
Но думаю писать проги с кодом длиннее 72 имхо не прилично
Найдутся те кому и 500 не хватит
А там именно длина программы или программа + путь?
-
Афтор не против ;D
Но думаю писать проги с кодом длиннее 72 имхо не прилично
Найдутся те кому и 500 не хватит
Если память мне ни с кем не изменяет ФМ 'REUSE_ALV_FIELDCATALOG_MERGE' до сих пор проверяет на длину строки, при формировании каталога полей по имеющейся объявленной вн.табличке. К тому же читать длинный по строке код не очень удобно. ;)
-
формировании каталога полей по имеющейся объявленной вн.табличке. К тому же читать длинный по строке код не очень удобно.
А, понял... это старое ограничение редактора в 72 символа, которое отменили в новых редакторах кода...
-
А, понял... это старое ограничение редактора в 72 символа, которое отменили в новых редакторах кода...
Да, вот только в коде прог, проверяющих длину строки репорта, не везде исправлено. ;D ;)
-
Да, вот только в коде прог, проверяющих длину строки репорта, не везде исправлено. ;D ;)
Да это мы знаем... вообще было прикольно когда они только редактор сменили, на курсах известный абап-лектор В.К. показывая пример программы, чуток вылез за 72 символа (кстати перед этим он расхваливал новый редактор), причем в имени переменной, причем всего-то на пару букв, ну например имя было типа p_value., и вот эта последняя .(точка) и вылезла за 72. Ну система говорит, что дескать в строке такой-то типа то ли точки нет, то ли строка не завершена... ну он смотрит, да нет как бы вот есть... и так минут 15, пока не сделали структурную печать кода, которая и разбила эту строку на две... после чего последовала фраза, что да... с новым редактором еще не все хорошо... так похоже что не все хорошо идет уже который год :D
-
Да это мы знаем... вообще было прикольно когда они только редактор сменили, на курсах известный абап-лектор В.К. показывая пример программы, чуток вылез за 72 символа (кстати перед этим он расхваливал новый редактор), причем в имени переменной, причем всего-то на пару букв, ну например имя было типа p_value., и вот эта последняя .(точка) и вылезла за 72. Ну система говорит, что дескать в строке такой-то типа то ли точки нет, то ли строка не завершена... ну он смотрит, да нет как бы вот есть... и так минут 15, пока не сделали структурную печать кода, которая и разбила эту строку на две... после чего последовала фраза, что да... с новым редактором еще не все хорошо... так похоже что не все хорошо идет уже который год :D
Ну старым редактором пользовался мало, а вот отладчиком старым, достаточно «напользовался», у нас некоторые вещи в продуктиве только им и можно отлаживать,
там много полезных вещей есть, которых в новом отладчике/редакторе нету, например тот же WathList (так кажись),
хотя на современных экранах, он выглядит маленьким
-
Ну старым редактором пользовался мало, а вот отладчиком старым, достаточно «напользовался», у нас некоторые вещи в продуктиве только им и можно отлаживать,
там много полезных вещей есть, которых в новом отладчике/редакторе нету, например тот же WathList (так кажись),
хотя на современных экранах, он выглядит маленьким
Кстати пользую "старый" debagger. Новый, на мой взгляд, перенаворочен. Но всегда можно переключиться. ;)