При переходе на платформу 1С:Предприятие 8 с версии 7.7 или при начале работы с управляемыми формами разработчики часто сталкиваются с дилеммой: продолжать строить отчеты «по старинке» (ручной обход выборки запроса и вывод секций табличного документа через Вывести() и Присоединить()) или осваивать Систему компоновки данных (СКД). Проанализируем ключевые возможности, архитектурные особенности, методы отладки и ограничения СКД.
В среде управляемого интерфейса использование СКД — это не просто альтернативный способ вывода информации, а базовый стандарт платформы. Разберем главные причины, почему отказ от СКД в пользу ручного вывода макетов неэффективен:
Система компоновки данных покрывает более 90% аналитических задач. Если отчет требует нетривиальной бизнес-логики, СКД предоставляет гибкие механизмы расширения:
ТаблицаЗначений и передать в СКД как внешний набор. Вся мощь группировок и оформления СКД при этом сохраняется.Отладка СКД отличается от привычной пошаговой отладки модулей, так как платформа трансформирует исходный запрос. Для анализа применяются следующие инструменты и программные методы:
Рассмотрим пример кода на сервере, позволяющий получить итоговый текст запроса для анализа в отладчике:
// Создаем компоновщик макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
// Формируем макет компоновки с текущими настройками схемы
МакетКомпоновки = КомпоновщикМакета.Выполнить(
СхемаКомпоновкиДанных,
КомпоновщикНастроек.ПолучитьНастройки(),
ДанныеРасшифровки
);
// Обходим наборы данных и считываем реальный текст запроса
Для Каждого НаборДанных Из МакетКомпоновки.НаборыДанных Цикл
Если ТипЗнч(НаборДанных) = Тип("НаборДанныхЗапросМакетаКомпоновкиДанных") Тогда
ИтоговыйТекстЗапроса = НаборДанных.Запрос;
КонецЕсли;
КонецЦикла;
Частая проблема начинающих разработчиков — некорректный расчет итогов по остаткам (начальный и конечный остатки на верхних уровнях группировок суммируются по строкам регистратора, давая завышенные суммы). Выясним причину этой проблемы.
Для корректного вычисления остатков в СКД платформа должна понимать семантику каждого поля. На вкладке «Наборы данных» в таблице полей необходимо корректно настроить колонку «Роль»:
Измерение.ПериодСекунда или Регистратор назначаем соответствующую роль периода с указанием порядка.КоличествоНачальныйОстаток, КоличествоКонечныйОстаток) указываем тип роли остатка и связываем их с соответствующими именами групп.После правильного указания ролей СКД автоматически рассчитывает остаток на уровне родительских группировок как значение на срез времени, а не через простое арифметическое сложение подчиненных строк.
Использование СКД для создания печатных форм документов имеет четкие границы применимости:
Таким образом, изучение СКД является обязательным этапом для любого разработчика 1С 8. Инструмент сокращает время разработки типовых отчетов в разы, а при освоении объектной модели компоновщика позволяет решать задачи практически любой сложности.