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

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

При переходе на платформу 1С:Предприятие 8 с версии 7.7 или при начале работы с управляемыми формами разработчики часто сталкиваются с дилеммой: продолжать строить отчеты «по старинке» (ручной обход выборки запроса и вывод секций табличного документа через Вывести() и Присоединить()) или осваивать Систему компоновки данных (СКД). Проанализируем ключевые возможности, архитектурные особенности, методы отладки и ограничения СКД.

Почему СКД является обязательным стандартом разработки

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

  1. Декларативный подход: разработчик описывает структуру данных, связи и группировки, а платформа автоматически строит деревья, кросс-таблицы, рассчитывает итоги и применяет оформление.
  2. Пользовательские настройки: без доработки программного кода пользователь может самостоятельно менять состав колонок, добавлять группировки, настраивать сортировки, условное оформление и фильтры. Реализовать аналогичный функционал вручную требует сотен строк кода.
  3. Динамическая оптимизация запросов: платформа анализирует только те поля, которые пользователь выбрал для вывода или отбора. Лишние таблицы и соединения исключаются из итогового обращения к СУБД, что снижает нагрузку на сервер.

Реализация сложных отчетов: границы возможностей СКД

Система компоновки данных покрывает более 90% аналитических задач. Если отчет требует нетривиальной бизнес-логики, СКД предоставляет гибкие механизмы расширения:

  1. Набор данных «Объект»: если данные невозможно получить одним запросом (требуется сложный алгоритмический расчет, чтение внешних файлов или вызов веб-сервисов), мы можем рассчитать данные во встроенном языке, поместить их в ТаблицаЗначений и передать в СКД как внешний набор. Вся мощь группировок и оформления СКД при этом сохраняется.
  2. Вызов функций общих модулей: в выражениях вычисляемых полей и пользовательских полей можно напрямую вызывать экспортные серверные функции конфигурации.
  3. Собственные макеты оформления: на вкладке «Макеты» схемы компоновки можно переопределить оформление шапок, подвалов и строк конкретных группировок, если стандартный макет не подходит под требования заказчика.
  4. Вложенные схемы: позволяют объединять в один документ несколько независимых аналитических блоков с разной структурой колонок.

Методы отладки и получение реального текста запроса

Отладка СКД отличается от привычной пошаговой отладки модулей, так как платформа трансформирует исходный запрос. Для анализа применяются следующие инструменты и программные методы:

  1. Специализированные инструменты: внешняя обработка «Консоль системы компоновки данных» позволяет загрузить схему с пользовательскими настройками и увидеть исполняемый запрос, состав параметров и промежуточные таблицы.
  2. Программный перехват итогового запроса: мы можем получить реальный текст запроса, сгенерированный платформой с учетом отборов пользователя, выполнив компоновку макета программно.

Рассмотрим пример кода на сервере, позволяющий получить итоговый текст запроса для анализа в отладчике:


// Создаем компоновщик макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

// Формируем макет компоновки с текущими настройками схемы
МакетКомпоновки = КомпоновщикМакета.Выполнить(
    СхемаКомпоновкиДанных, 
    КомпоновщикНастроек.ПолучитьНастройки(), 
    ДанныеРасшифровки
);

// Обходим наборы данных и считываем реальный текст запроса
Для Каждого НаборДанных Из МакетКомпоновки.НаборыДанных Цикл
    Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
        ИтоговыйТекстЗапроса = НаборДанных.Запрос;
    КонецЕсли;
КонецЦикла;

Типичная ошибка: почему двоятся остатки и как работают роли полей

Частая проблема начинающих разработчиков — некорректный расчет итогов по остаткам (начальный и конечный остатки на верхних уровнях группировок суммируются по строкам регистратора, давая завышенные суммы). Выясним причину этой проблемы.

Для корректного вычисления остатков в СКД платформа должна понимать семантику каждого поля. На вкладке «Наборы данных» в таблице полей необходимо корректно настроить колонку «Роль»:

  1. Для полей номенклатуры, склада, контрагента указываем тип роли Измерение.
  2. Для поля ПериодСекунда или Регистратор назначаем соответствующую роль периода с указанием порядка.
  3. Для ресурсов начального и конечного остатков (например, КоличествоНачальныйОстаток, КоличествоКонечныйОстаток) указываем тип роли остатка и связываем их с соответствующими именами групп.

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

Печатные формы на СКД: специфика применения

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

  1. Регламентированные формы со строгим бланком: (ТОРГ-12, Счет-фактура, УПД, формы по ОКУД). Для таких документов использование СКД не рекомендуется. Строгая координатная сетка ячеек, жесткие требования законодательства и фиксированная структура проще и надежнее реализуются классическим макетом табличного документа.
  2. Управленческие печатные формы и реестры: (ведомости комплектации, реестры документов, акты сверок, спецификации заказов). Здесь СКД является отличным решением, так как позволяет пользователям выводить дополнительные свойства номенклатуры или контрагентов без привлечения программиста.

Таким образом, изучение СКД является обязательным этапом для любого разработчика 1С 8. Инструмент сокращает время разработки типовых отчетов в разы, а при освоении объектной модели компоновщика позволяет решать задачи практически любой сложности.

← На главную