Коллеги, привет,
решил поделиться небольшой программой по выгрузке документации из запроса, возможна массовая обработка. Есть две возможности вывода: 1) на экран, с возможностью по дабл клику провалиться в запрос; 2) в файл.
Создано на версии 6.0 БЕЗ EHP, с 90-м уровнем пакетов.
Code:
*&---------------------------------------------------------------------*
*& Report ZBC_GET_SE10_TXT
*&
*&---------------------------------------------------------------------*
*& (с) Dmitriy Skorikov 05/03/2013
*& чтение документации из запроса
*&---------------------------------------------------------------------*
REPORT ZBC_GET_SE10_TXT.
TYPES : BEGIN OF lt_excel
, str TYPE string
, END OF lt_excel.
DATA : req_name TYPE E070-TRKORR
, req_txt TYPE TABLE OF TLINE
, wa_req_txt TYPE TLINE
, ln TYPE c LENGTH 100
, file_xls TYPE TABLE OF lt_excel
, wa_file_xls LIKE LINE OF file_xls
, i(4) TYPE n
, as4date TYPE as4date
, as4date_tx TYPE c LENGTH 10
.
CONSTANTS : IV_TYPE TYPE c LENGTH 4 VALUE 'REQU'
, IV_COMMAND LIKE SY-UCOMM VALUE 'REQUEST_SHOW'
.
SELECT-OPTIONS : request FOR req_name NO INTERVALS.
PARAMETERS : add_date as CHECKBOX
, TXT RADIOBUTTON GROUP grp
, XLS RADIOBUTTON GROUP grp.
DATA : wa_req LIKE LINE OF request.
START-OF-SELECTION.
IF NOT request IS INITIAL.
LOOP AT request INTO wa_req.
req_name = wa_req-low.
CALL FUNCTION 'TRINT_DOCU_INTERFACE'
EXPORTING
iv_object = req_name
iv_action = 'R'
iv_modify_appending = 'X'
TABLES
tt_line = req_txt
EXCEPTIONS
error = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
LOOP AT req_txt INTO wa_req_txt.
IF sy-tabix > 4 AND wa_req_txt-tdline(2) NE '**'.
IF NOT wa_req_txt-tdline IS INITIAL.
IF NOT add_date IS INITIAL.
SELECT SINGLE as4date FROM E070 INTO as4date WHERE TRKORR = req_name.
WRITE as4date TO as4date_tx DD/MM/YYYY.
CONCATENATE as4date_tx wa_req_txt-tdline INTO wa_req_txt-tdline SEPARATED BY space.
ENDIF.
IF txt = 'X'. "SCREEN OUTPUT.
CONCATENATE req_name wa_req_txt-tdline INTO ln SEPARATED BY space.
WRITE : / ln.
ELSE. "EXCEL OUTPUT
CONCATENATE req_name wa_req_txt-tdline INTO wa_file_xls-str SEPARATED BY space.
APPEND wa_file_xls TO file_xls.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF txt = 'X'.
ULINE AT /11(47).
ENDIF.
ENDIF.
ENDLOOP. " AT request
IF XLS = 'X'.
PERFORM save_to_excel.
ENDIF.
ELSE. " не выбрали ни одного запроса
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'не выбран запрос'
txt1 = 'необходимо указать хотя бы один запрос!'
txt2 = ''
.
ENDIF.
AT LINE-SELECTION.
CALL FUNCTION 'TRINT_TDR_USER_COMMAND'
EXPORTING
iv_object = sy-lisel(10)
iv_type = iv_type
iv_command = iv_command
.
*&---------------------------------------------------------------------*
*& Form SAVE_TO_EXCEL
*&---------------------------------------------------------------------*
FORM SAVE_TO_EXCEL .
DATA p_fname TYPE string.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'ВЫБЕРИТЕ ПУТЬ ВЫГРУЗКИ ФАЙЛА:'
CHANGING
selected_folder = p_fname
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF NOT p_fname IS INITIAL.
i = STRLEN( p_fname ) - 1.
IF p_fname+i(1) NE '\'.
CONCATENATE p_fname '\REQUEST_DOCS-' sy-datum+6(2) sy-datum+4(2) sy-datum(4) '-' sy-timlo '.xls' INTO p_fname.
ELSE.
CONCATENATE p_fname 'REQUEST_DOCS-' sy-datum+6(2) sy-datum+4(2) sy-datum(4) '-' sy-timlo '.xls' INTO p_fname.
ENDIF.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = p_fname
TABLES
data_tab = file_xls.
IF sy-subrc = 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'Файл успешно выгружен'
txt1 = 'полный путь выгрузки и имя файла:'
txt2 = p_fname
.
ENDIF.
ELSE.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = 'Файл НЕ выгружен'
txt1 = 'путь выгрузки не указан, укажите путь!'
txt2 = ''
.
ENDIF.
ENDFORM. " SAVE_TO_EXCEL