Текущее время: Чт, июл 03 2025, 20:31

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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