Как программно получить данные из отчета на СКД и использовать их в документе?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В процессе разработки часто возникает задача заполнения табличной части документа данными, которые уже реализованы в типовом отчете на базе Системы Компоновки Данных (СКД). Разберем, как подойти к этой задаче профессионально, где искать источники данных и как правильно организовать программный вызов.

Анализ структуры отчета и поиск источников данных

Прежде чем приступать к программному вызову отчета, важно понять, откуда он берет информацию. В типовых конфигурациях, таких как Бухгалтерия для Казахстана или ЗУП, отчеты часто имеют сложную структуру наборов данных. Чтобы «подсмотреть» логику, выполним следующие шаги:

  1. Откроем отчет в Конфигураторе и найдем функцию СформироватьОтчетНаСервере в модуле формы отчета. Именно здесь инициализируются параметры компоновки.
  2. Изучим вызовы серверных модулей, например БухгалтерскиеОтчетыВызовСервера.СформироватьОтчет, чтобы понять, как формируется структура параметров отчета.
  3. Для получения финального текста запроса воспользуемся Консолью системы компоновки данных. В ней можно увидеть итоговый макет, который генерируется после применения всех пользовательских отборов.

Методы получения данных: отчет или прямой запрос?

Хотя технически возможно программно запустить ПроцессорКомпоновкиДанных и вывести результат в таблицу значений, мы рекомендуем использовать этот подход только для ознакомления. Важное предостережение: использование готового отчета для заполнения документа делает ваш код «хрупким». Если пользователь изменит настройки отчета, добавит группировку или исключит поле, ваш алгоритм перестанет работать.

Лучшим решением будет:

  1. Использовать отчет как «шпаргалку» для получения текста SQL-запроса.
  2. Скопировать итоговый запрос из консоли СКД.
  3. Очистить его от специфичных для СКД конструкций и поместить в модуль вашего документа как обычный объект Запрос.

Как программно сформировать результат СКД в таблицу значений

Если задача все же требует вывода результата СКД в таблицу, разберем программный механизм. Для этого нам понадобится цепочка объектов платформы.

Рассмотрим по шагам логику реализации:

  1. Создаем КомпоновщикМакетаКомпоновкиДанных для генерации макета.
  2. Выполняем метод Выполнить, передав в качестве пятого параметра тип ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений. Это критически важно, иначе платформа подготовит данные для табличного документа, а не для таблицы значений.
  3. Инициализируем ПроцессорКомпоновкиДанных и ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.

Пример программного формирования:


// Инициализация схемы и настроек
Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = Схема.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(Схема, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

// Процессоры компоновки и вывода
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ТаблицаРезультат = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Ограничения при выгрузке в коллекцию

При работе с этим методом необходимо учитывать специфические ограничения, которые накладывает платформа 1С:

Итоги и рекомендации

Мы проанализировали процесс работы с отчетами на СКД. Главный вывод: не стремитесь «переиспользовать» готовый отчет внутри кода документа. Лучше один раз потратить время на отладку запроса, вынесенного в отдельный метод модуля, чем зависеть от изменений в настройках типового отчета. Используйте Инструменты разработчика или штатную Консоль СКД, чтобы увидеть реальный текст запроса, который 1С отправляет к базе данных, и переносите его в свой код для максимальной производительности и надежности.

← На главную