Posted: Wed Jan 16, 2008 6:00 pm Post subject: Экспорт из ALV Grid в текстовый файл
В интерфейсе стандартного ALV Grid есть кнопка Экспорт -> Локальный файл -> Без преобр. -> Указать каталог и имя текстового файла -> нажать ОК. После этого он сохраняет содержимое грида в текстовый файл.
Мне заранее известны и каталог и имя файла, они - константы. Как закодить выгрузку в нужный текстовый файл, чтобы пользователю не приходилось ничего выбирать, а выгружалось по одной кнопке ?
Само событие - нажатие кнопки - есть документация как кнопку можно добавить и обработать EVENT before_user_command OF cl_gui_alv_grid
А что вызывать чтоб содержимое куда надо в нужном текстовом формате сохранить ? Об этом ничего пока не нашёл ни в инете ни в перечне методов класса cl_gui_alv_grid. Отладка тоже не помогла - по кнопке Экспорт вызывается контекстное меню, которое при переключении из отладчика обратно в грид исчезает .
Буду благодарен за идеи, как сохранить грид в текст стандартного SAP формата ни о чём не спрашивая пользователя.
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Wed Jan 16, 2008 11:02 pm Post subject:
При экспорте в файл сначала формируется листинг на экране, а далее вызовом ФМ LIST_TO_ASCI сохраняется во внутренней таблице и далее в файле. Все жестко интегрировано в ALV, можно попробовать обойти место выбора формата и файла через динамический вызов. Криво, сами понимаете.
Нашел только один похожий пример, но его нужно реанимировать
Quote:
I have an old code that I have wrote to transform ALV in HTML in background to send the result by email. Maybe that could help you (don't be rude, it's one of my first ALV program ).
The comments are in french, but, you could understand.
Code:
REPORT z_alv_to_html.
DATA:
itab_fieldcatalog TYPE lvc_t_fcat,
itab_mt_sort TYPE lvc_t_sort,
v_es_layout TYPE lvc_s_layo,
struct_variant TYPE disvariant.
* Recherche de la variante d'affichage.
MOVE : sy-repid TO struct_variant-report ,
sy-uname TO struct_variant-username ,
'2' TO struct_variant-handle.
IF p_vgrid NE space.
MOVE p_vgrid TO struct_variant-variant.
ENDIF.
* Ne pas demander d'explication, merci :)
GET REFERENCE OF itab_zgre000_s2 INTO mt_outtab.
LOOP AT itab_fieldcatalog INTO tmp_fieldcatalog
WHERE tabname NE space.
EXIT.
ENDLOOP.
* Recherche de la variante.
CALL METHOD m_cl_variant->load_variant
EXPORTING
i_tabname = tmp_fieldcatalog-tabname
i_bypassing_buffer = 'X'
i_dialog = space.
CREATE DATA mt_ct00 LIKE itab_zgre000_s2.
CREATE DATA mt_ct01 LIKE itab_zgre000_s2.
CREATE DATA mt_ct02 LIKE itab_zgre000_s2.
CREATE DATA mt_ct03 LIKE itab_zgre000_s2.
CREATE DATA mt_ct04 LIKE itab_zgre000_s2.
CREATE DATA mt_ct05 LIKE itab_zgre000_s2.
CREATE DATA mt_ct06 LIKE itab_zgre000_s2.
CREATE DATA mt_ct07 LIKE itab_zgre000_s2.
CREATE DATA mt_ct08 LIKE itab_zgre000_s2.
CREATE DATA mt_ct09 LIKE itab_zgre000_s2.
ASSIGN mt_ct00->* TO <lt_ct00>.
ASSIGN mt_ct01->* TO <lt_ct01>.
ASSIGN mt_ct02->* TO <lt_ct02>.
ASSIGN mt_ct03->* TO <lt_ct03>.
ASSIGN mt_ct04->* TO <lt_ct04>.
ASSIGN mt_ct05->* TO <lt_ct05>.
ASSIGN mt_ct06->* TO <lt_ct06>.
ASSIGN mt_ct07->* TO <lt_ct07>.
ASSIGN mt_ct08->* TO <lt_ct08>.
ASSIGN mt_ct09->* TO <lt_ct09>.
recherche des valeurs a partir de la variante selectionnee.
CALL METHOD m_cl_variant->get_values
IMPORTING
es_variant = struct_variant
et_fieldcatalog = itab_fieldcatalog
et_sort = itab_mt_sort
et_filter = itab_mt_filter
es_layout = v_es_layout
et_grouplevels_filter = mt_grouplevels_filter
e_variant_save = v_e_var_save
e_variant_default = v_e_var_def.
Спасибо за ответ !
С трассировкой разобрался. Но там действительно глубоко в дебрях лежит экспорт, и внутри себя два эти диалога создаёт (который тип выбирает и потом имя файла) и вызывает.
Никаких публичных методов у ALV grid для этих целей экспорта нет
А что имелось в виду под "можно попробовать обойти место выбора формата и файла через динамический вызов" ?
Дотрассировал до места где передаётся таблица со строками будущего текстового файла и вызывается диалог, который его и сохраняет. А есть ли какой-то ФМ или класс, который внутреннюю таблицу в текстовый файл сохраняет, с заданным именем, без лишних вопросов ? Проще, получается, самостоятельный экспорт в текст написать, но хотелось бы знать про внутренние средства SAP для сохранения текста - чтоб с нуля не искать...
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Thu Jan 17, 2008 12:36 pm Post subject:
Илья Петров wrote:
А что имелось в виду под "можно попробовать обойти место выбора формата и файла через динамический вызов" ?
Это фактически переписать код alv в Z-программе.
Получать с помощью assign ссылки на внутренние структуры alv, заполнять их в своей программе или вызывая последовательно участки кода в alv через
PERFORM (zzz) IN PROGRAM ( xxx ) IF FOUND, где
zzz - alv подпрограмма,
xxx - alv программа.
Просто таблицу сохратить GUI_DOWNLOAD, но пропадет часть форматирования (шапка)
спасибо за ответ!
уфф... 3 дня трассировки - это жесть изучение внутренней вселенной САПа даётся не быстро
быстрее сделать таки думаю через GUI_DOWNLOAD, чем весь код по выгрузке грида в абап лист разбирать и дублировать...
последний вопрос наверно: через GUI_DOWNLOAD я выгрузил таблицу в текст с разделителями табуляции. 2 мелких "проблемки":
1. Я наивно надеялся что параметр fieldnames GUI_DOWNLOAD позволяет (как у АЛВ грида - каталог полей) указать, какие поля таблицы выгрузить в каком порядке. Эксперимент показывает что это не так - он тупо пишет всё что туда записал в 1-ю строку файла.
2. При выводе ячеек не подавляются лидирующие нули и дата выводится в формате ГГГГММДД. Ну, это мелочь совсем...
Полагаю таки что мне проще будет загрузку в 1С переписать, пропарсив файл и всё расставив на свои места при загрузке. Или существуют какие-то ФМ в SAP для вывода таблицы в файл с минимальными опциями указания порядка полей и форматирования, в качестве альтернативы GUI_DOWNLOAD ?
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Jan 18, 2008 11:39 pm Post subject:
Илья Петров wrote:
2. При выводе ячеек не подавляются лидирующие нули и дата выводится в формате ГГГГММДД. Ну, это мелочь совсем...
Например, формировать свою структуру, похожую на словарную, но где все поля текстовые и заполнять с нужными преобразованиями - удаление лидирующих нулей, перемещение знака минус перед числом, формирование даты в нужном порядке и тд. Данный вариант применим, если требуется фиксированный размер каждого поля.
Другой вариант, если разделителем поля является какой-нибудь разделитель, например символ табуляции или вертикальной черты, всю поля можно собирать в одной строке, например типа char(1000), не заботясь о длине каждого поля, вставляя разделитель.
Полученную таблицу выгружаем на сервер.
Илья Петров wrote:
Полагаю таки что мне проще будет загрузку в 1С переписать, пропарсив файл и всё расставив на свои места при загрузке. Или существуют какие-то ФМ в SAP для вывода таблицы в файл с минимальными опциями указания порядка полей и форматирования, в качестве альтернативы GUI_DOWNLOAD ?
Можно и в абапе парсить указанным выше способом. Других ФМ, принципиально отличающихся, что-то на ум не приходит. Поищите самописные.
вобщем, прописал всё через GUI_Download , доделал малость загрузку в 1С.
GUI_Download даже по-своему более удобен: в заголовках полей можно задать параметры каждой колонки для 1Са (Имя, тип, ширина, заголовок и т.п.). И в 1Се жёстко не кодить колонки при загрузке, а брать все данные из того что задано при выгрузке из SAP.
Просто я до этого делал отчёты в SQ01, а там только типовыми средствами можно выгрузить, для него универсальная загрузка и была. Теперь вот дорвался до чистого АБАПа, загрузку дописал, стала вдвойне универсальной .
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.