Текущее время: Вс, июн 29 2025, 11:51

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 12:15 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, июн 24 2009, 10:35
Сообщения: 51
Коллеги, возникла такая проблема. Есть такой код(ФМ), который вызывается в отчете и делает XML таблицу, код достаточно стандартный(покопался на гугл), проблема появляется, когда DATA_TAB идет порядка 1 000 000 записей, получаю дамп MEM_ALLOC_FAILED. Причем, если в системе разработке проходит порядка 700 - 800 тысяч записей(искусственно набиваю внутреннюю таблицу), то в продуктиве завал идет на 200 000 записей(наверно сам отчет выжирает память еще когда получает данные из системы). Была идея вызывать этот ФМ - CALL FUNCTION func STARTING NEW TASK task , но не знаю на сколько это поможет, да еще и ФМ на RFC проблемно переделать для такого вызова, т.к. data_tab - динамическая.
loop at data_tab.
r_row = l_document->create_simple_element(
name = 'Row'
parent = r_table ).
do l_count times.
assign component sy-index of structure data_tab to <fs>.
l_value = <fs>.
r_cell = l_document->create_simple_element(
name = 'Cell'
parent = r_row ).
r_cell->set_attribute_ns(
name = 'StyleID'
prefix = 'ss'
value = 's22' ).
r_data = l_document->create_simple_element(
name = 'Data'
value = l_value
parent = r_cell ).
r_data->set_attribute_ns(
name = 'Type'
prefix = 'ss'
value = 'String' ).

* Rendering the document
enddo.
endloop.

* Creating a stream factory
l_streamfactory = l_ixml->create_stream_factory( ).
* Connect internal XML table to stream factory
l_ostream =
l_streamfactory->create_ostream_itable( table = l_xml_table ).
* Rendering the document
l_renderer = l_ixml->create_renderer( ostream = l_ostream
document = l_document ).
l_rc = l_renderer->render( ).

move l_xml_table[] to xml_tab[].

....


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 14:51 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Так запустите SE30 в режиме анализа памяти и сделайте оптимизацию программы.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 16:01 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, окт 08 2009, 05:37
Сообщения: 70
Пол: Мужской
Я так понял что это к вопросу viewtopic.php?f=13&t=76039 и структура XML вам не важна. Попробуйте:
Code:
CALL TRANSFORMATION ('ID')
        SOURCE ROOT = data_tab[]
        RESULT XML xml_out.

Ну и если важна, можно потом еще одно преобразование сделать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 16:39 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, июн 24 2009, 10:35
Сообщения: 51
Ulis написал:
Я так понял что это к вопросу http://sapboard.ru/forum/viewtopic.php?f=13&t=76039 и структура XML вам не важна. Попробуйте:
Code:
CALL TRANSFORMATION ('ID')
        SOURCE ROOT = data_tab[]
        RESULT XML xml_out.

Ну и если важна, можно потом еще одно преобразование сделать.


Формат важен на самом деле, выше моего кода идет создание шапки, заголовка, тексты и стили и тд... т.е. просто TRANSFORMATION не поможет


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 16:43 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, июн 24 2009, 10:35
Сообщения: 51
Удав написал(а):
Так запустите SE30 в режиме анализа памяти и сделайте оптимизацию программы.


программа в которую я встроил свой фм стандартная(H99CWTR0), просто я добавил в нее выгрузку excel на почту.
se30 показывает что 60 процентов времени она висит на select в PCL2(кластер зарплатный), т.е. изменить я не могу это место.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 17:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Rocktrooper написал(а):
se30 показывает что 60 процентов времени она висит на select в PCL2(кластер зарплатный)

Речь об использовании памяти, а не о времени выполнения.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 17:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Всегда есть риск сформировать такой отчет, которому не хватит памяти. Выход - бить его на части.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 18:03 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, июн 24 2009, 10:35
Сообщения: 51
Parazit написал:
Всегда есть риск сформировать такой отчет, которому не хватит памяти. Выход - бить его на части.

Ну собственно как временное решение, а как известно нет ничего более постоянного =) сделал, разбивку экселек по 100 000 строк и их в цикле кидаю на почту, просто хочется по человечески сделать, пользователю ведь тоже неудобно 10 файлов потом в один собирать...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 18:05 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, июн 24 2009, 10:35
Сообщения: 51
Удав написал(а):
Rocktrooper написал(а):
se30 показывает что 60 процентов времени она висит на select в PCL2(кластер зарплатный)

Речь об использовании памяти, а не о времени выполнения.

Вопрос собственно на сколько поможет по работе с памятию CALL FUNCTION func STARTING NEW TASK task, если все таки заморочиться с этим?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 18:23 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Rocktrooper написал(а):
Parazit написал:
Всегда есть риск сформировать такой отчет, которому не хватит памяти. Выход - бить его на части.

Ну собственно как временное решение, а как известно нет ничего более постоянного =) сделал, разбивку экселек по 100 000 строк и их в цикле кидаю на почту, просто хочется по человечески сделать, пользователю ведь тоже неудобно 10 файлов потом в один собирать...

Пользователю, которому потребовался отчет >1млн. строк, всегда будет неудобно - это "в консерваторию (c)".

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 18:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Rocktrooper написал(а):
...
Вопрос собственно на сколько поможет по работе с памятию CALL FUNCTION func STARTING NEW TASK task, если все таки заморочиться с этим?

Принципиально не поможет, может только временно отсрочить проблему, сэкономив по мелочи...

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Формирование XML из внутр. таблицы
СообщениеДобавлено: Вт, апр 10 2012, 18:37 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Rocktrooper написал(а):
Вопрос собственно на сколько поможет по работе с памятию CALL FUNCTION func STARTING NEW TASK task, если все таки заморочиться с этим?

Подумайте сами - в ФМ все равно придется передавать большой объем данных.
Поэтому вместо STARTING NEW TASK лучше использовать обычный вызов ФМ для формирования писем в цикле с чисткой внутренных таблиц после вызова.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB