Оптимизация отчетов с набором данных - объект
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Введение
Наша цель, это оптимизация отчетов на СКД, в которых используется "Набор данных - объект".
Для начала, опишем проблему.
Рассмотрим стандартную схему работы с внешними наборами данных в отчетах на СКД:
В обработчике события отчета "ПриКомпоновкеРезультата":
1) Получаем полные данные
2) Передаем полученные данные в качестве внешних наборов данных в процессор компоновки
3) При формировании отчета отборы пользователя накладываются на изначально излишние данные
То есть обычная ситуация, когда полные данные содержат, скажем, 10000 строк и более, а в результат, с учетом отборов пользователя, попадает лишь малая часть от всех этих данных. Это может вызывать проблемы, если получение исходных данных занимает значительное время.
Варианты решения проблемы
1) Анализ настроек компоновки
Мы можем самостоятельно проанализировать настройки компоновки данных и перенести некоторые параметры, и отборы в наш алгоритм получения исходных данных. То есть схема кода будет следующей:
В обработчике события отчета "ПриКомпоновкеРезультата":
1) Анализируем настройки компоновки данных, формируем на их основе собственные параметры для нашего алгоритма
2) Получаем данные с учетом некоторых настроек пользователя
3) Передаем полученные данные в качестве внешних наборов данных в процессор компоновки
4) При формировании отчета отборы пользователя все еще могут сузить изначальный объем полученных данных
Минус данного подхода в том, что мы не сможем учесть все применяемые в отчете настройки пользователя. Механизм СКД предоставляет очень гибкие настройки, а наш алгоритм получения данных для отчета - всегда будет иметь ограниченный набор входящих параметров.
Посмотрев на код сразу становиться понятно, что анализировать отборы и пытаться их учесть в собственном алгоритме получения данных практически невозможно. Поэтому для текущего подхода лучше всего использовать параметры СКД. Параметры мы явно определяем при разработке схемы и знаем их структуру. Но это лишает нас гибкости и противоречит стандартам (#std407).
2) Использование двух СКД
Если в нашем алгоритме получения данных для отчета мы используем запрос, как это обычно бывает, то можно применить следующую схему:
- Создадим схему компоновки данных, которая будет получать данные. Назовем её "СхемаКомпоновкиЗапрос".
- Создадим схему компоновки данных, которая будет указана в качестве основной схемы отчета. В этой схеме источником будет "Набор данных - объект".
В обработчике события отчета "ПриКомпоновкеРезультата":
- Переносим параметры и отборы из настроек основной схемы компоновки данных в нашу "СхемуКомпоновкиЗапрос".
- Выводим результат "СхемыКомпоновкиЗапрос" в таблицу значений и передаем в качестве внешнего набора данных в основную схему компоновки отчета.
Требование, предъявляемое к двум СКД - имена полей и параметров должны совпадать. Ведь именно по ним будет происходит сопоставление и перенос настроек.
Если у вас уже есть готовая СКД с "набором данных - запрос", и вам понадобилось применить метод с двумя СКД, то потребуется вручную описывать поля "набора данных - объект", заново заводить параметры, ресурсы, вычисляемые поля и т.д. К сожалению, как минимум в конфигураторе, возможность копирования между двумя редактируемыми СКД отсутствует. Для облегчения этого процесса к статье приложена обработка которая преобразует СКД с "набором данных - запрос" в СКД с "источником данных - объект", автоматически заполнит типы полей, параметры, ресурсы и т.д.
Итог
Мы рассмотрели метод который позволяет переносить настройки и отборы между двумя различными СКД со схожей структурой. В основном применять его стоит тогда, когда нам необходимо программно обработать таблицу идущую в отчет. Например: распределить остатки на позиции отчета, использовать методы дорабатываемой конфигурации которые предоставляют необходимые данные, что бы не разрабатывать собственный запрос (плюс для долгосрочной поддержки) и т.д.
Ограничения и минусы описанного метода:
- Источником данных может выступать только СКД
- При разработке отчета необходимо следить за соответствием полей в двух СКД
Примеры подобных отчетов из конфигурации ERP 2.5 (2.5.21.104): ОборачиваемостьЗапасов, ТоварныйКалендарь.
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.22.67
Вступайте в нашу телеграмм-группу Инфостарт