20.05.2008, 16:46 | #1 |
MCTS
|
Коллеги,
Смотрел один отчет (процессинг онли), увидел интересную конструкцию: В отчете один датаайтем: Транзакция (так и называется, это LS Retail). В датайатеме стоит сортировка по дате (не первичный ключ). В триггере OnPreDataItem следующий код (условно): Код: IF FIND('-') THEN REPEAT Найти записи в связанных таблицах (ТранзакцияСтроки) Скопировать записи из связанных таблиц в соответствующие архивные таблицы Удалить записи в связанных таблицах Скопировать записи таблицы Транзакция в архивную таблицу Удалить записи из таблицы транзакция UNTIL NEXT=0; |
|
20.05.2008, 17:18 | #2 |
Участник
|
Цитата:
Сообщение от apanko
Коллеги,
Смотрел один отчет (процессинг онли), увидел интересную конструкцию: В отчете один датаайтем: Транзакция (так и называется, это LS Retail). В датайатеме стоит сортировка по дате (не первичный ключ). В триггере OnPreDataItem следующий код (условно): Код: IF FIND('-') THEN REPEAT Найти записи в связанных таблицах (ТранзакцияСтроки) Скопировать записи из связанных таблиц в соответствующие архивные таблицы Удалить записи в связанных таблицах Скопировать записи таблицы Транзакция в архивную таблицу Удалить записи из таблицы транзакция UNTIL NEXT=0; Хотя могу сделать не очень умное предположение - в таком случае на SQL будет меньше чтений из таблиц. Хотя с другой стороны - почем они тогда не сделали "разделение" по системам. |
|
21.05.2008, 11:18 | #3 |
Участник
|
Такой цикл, написанный в PreDataItem отрабатывет быстрее, если писать в OnAfterGetRecord.
Скорее всего для быстродействия так и сделано. |
|
21.05.2008, 13:06 | #4 |
Участник
|
|
|
21.05.2008, 18:35 | #5 |
Участник
|
Проверено на личном опыте.
Можете сами проверить - написать в PreDataItem цикл и посмотреть, за сколько он отработает, и за сколько этот же цикл пройдет по AfterGetRecord. |
|