Система компоновки данных (медленный вывод в коллекцию значений при РСВ)

1. StAlexei 13.04.21 18:48 Сейчас в теме
Доброго времени суток.
История началась с того, что расчет себестоимости (УПП 1.3.151, используется РАУЗ) стал выполняться больше 24 часов. Запустив из конфигуратора (копии базы) обычное приложения и включив замер производительности, я запустил на ночь расчет себестоимости.
По результатам замера получилось, что больше всего времени (98%) занимается строка в общем модуле УчетЗатрат:
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.Вывести(ПроцессорКомпоновкиДанных)

Изучение алгоритма действий документа в этом модуле дало следующую информацию:
- создается таблица правил распределения затрат, среди колонок которой есть "Схема компоновки данных", "Настройка базы" и "База распределения".
- для каждого правила распределения, указанного в настройках (реквизит документа расчет себестоимости выпуска), в котором надо именно распределять затраты, алгоритм вызывает функцию ПолучитьДанныеПоСхемеКомпоновки (в ней содержится проблемная строка кода).

По сути эта процедура с помощью компоновщика макета компоновки данных "генерирует" макет на основании схемы компоновки и настроек компоновки (последний получаются на основе схемы и настройки базы отдельной функцией, затем на нее накладываются параметры для конкретной строки правил). А потом с помощью процессора компоновки данных и процессора вывода результата компоновки данных в коллекцию значений возвращает коллекцию значений (а именно, таблицу значений), которая присваивается реквизиту строки таблицы правил распределения.

И именно при вызове метода вывести тратиться огромное количество времени.
Чтобы не возиться с модулей я сделал обработку (сначала на обычной, потом на управляемой для выполнения кода на сервере, т.к. модуль "учет затрат" именно серверный), которая по сути проделывает часть алгоритма обработки проведения до проблемного места.

По началу в обработке вывод выполнялся относительно быстро (за 5-10 минут, наверно, не больше). Я уже обрадовался (тогда я выяснил, что возвращается таблица значений с базой, в которой около 32 тыс. строк), но после выходных, вывод стал занимать по 3 часа без результата (я просто закрывал отладку, не дождавшись). Тогда я связал быстрый вывод с перезапуском сервера 1С перед выходными.

Затем, я заменил часть кода, чтобы вывод был поэлементно. И вот тут всплыл интересный (для меня момент), т.к. при всех вызовах функции получение именно третьего элемента процессором вывода .
В обработке я сделал сохранение схемы компоновки в файл для изучения. Загрузив схему компоновки в консоль СКД я обнаружил, что:
1) стоит ограничение на параметры Организация (по ней отбирается одна аналитика для регистра учета затрат), Дата начала и дата окончания (используется для обращения к параметров виртуальной таблицы с оборотами регистра учета затрат).
2) вывод в коллекцию значений выполнялся быстро (5-10 минут по сравнению с несколькими часами).

Попытки найти ответ в интернете ничего не дали: в основном описывается, как программно использовать СКД, но некоторые пользователи тоже жаловались на медленный вывод результата (правда в табличный документ).

Сам в СКД я не силен, поэтому обращаюсь с вопросом: почему в модуле вывод в коллекцию может длиться так долго (тем более по сравнению с консолью), учитывая, что это схема создается на основании "типовой" (есть макет у регистра учет затрат), да и остальной функционал РАУЗа не изменялся.
Я подозревал и платформу (для упп рекомендована 8.3.14, а у нас стоит 8.3.12), но в описании новых версий нет ничего про изменения СКД. Потом было подозрение на сам сервер 1С (учитывая, что модуль выполняется на сервере).

Сталкивался ли кто-нибудь с подобным поведение процессора вывода результата?
Заранее, благодарю. Схему компоновки я прикрепил в файлах.
Прикрепленные файлы:
СхемаКомпоновкиДанных.xml
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. МихаилМ 13.04.21 19:32 Сейчас в теме
сам вывод в тз можно ускорить в 1,5 раза .
нужно к полям добавить группировочное поле, по нему свернуть в ВычислитьВыражениеСГруппировкойТаблицаЗначений
3. titanium2008 45 14.04.21 08:12 Сейчас в теме
регл процедуры настроены на MS SQL сервере? например провобовали после сбора статистики запустить расчет себестоимости?
4. titanium2008 45 14.04.21 08:13 Сейчас в теме
5. toypaul 63 14.04.21 08:36 Сейчас в теме
Выполнение схемы состоит из 2х этапов (если набор данных запрос)

1) Выполнение запроса. Берем запрос и выполняем в консоли (запросов). Или лучше выполнить в консоли СКД, взять запрос и выполнить его в консоли запросов. Иногда начальный запрос от выполняемого может отличаться. Посмотреть время. Здесь насколько я понял нет проблем?

2) Вывод данных в ТД или в ТЗ. Обычно вывод в ТД медленней чем в ТЗ. Если тормозит именно эта часть, то смотреть выражения вычисляемых поле и (может быть выражения представлений). Может быть там "тяжелые" функции выполняемые для каждой строки. Посмотреть сколько строк выводится. Если здесь проблем при отладке нет, то сравнивать как это делается в отладке и как в рабочем алгоритме.

Чудес не бывает. Точнее бывает, но редко. Чтобы в отладке выводилось за 5-10 мин, а в рабочей часы ... Надо искать разницу. И дело тут вовсе не в знании СКД
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот