При разработке отчетов в 1С часто возникает задача вывода данных не просто списком, а в разрезе периодов — например, вывод сумм выручки или затрат помесячно. Рассмотрим, как решить эту задачу, если у вас уже есть готовый отчет, построенный на прямом выводе макета, или если вы хотите сделать решение более профессиональным.
Если вы хотите сохранить текущую структуру отчета и не переписывать его с нуля, можно использовать механизм формирования табличного документа через Присоединить. Суть метода заключается в разделении области макета на фиксированную часть (наименование строки) и динамическую часть (ячейка с суммой за период).
Строка|Основное будет содержать название статьи или подразделения, а область Строка|Факт — ячейку с параметром суммы.ТабДок.Присоединить(Область).Посмотрим на пример реализации такого кода:
// Предположим, массив периодов уже получен из запроса
Для Каждого Стр Из МассивПериодов Цикл
// Получаем область колонки для конкретного периода
ОбластьФакт = Макет.ПолучитьОбласть("Строка|Факт");
ОбластьФакт.Параметры.Сумма = ВычислитьСуммуПоМесяцу(Стр.ПериодМесяц);
// Присоединяем область к текущей строке справа
ТабДок.Присоединить(ОбластьФакт);
КонецЦикла;
Важным аспектом является использование ТабДок.НачатьАвтогруппировкуКолонок() и ТабДок.ЗакончитьАвтогруппировкуКолонок(). Эти методы позволяют 1С автоматически собирать выведенные колонки в группы, что даст пользователю возможность сворачивать и разворачивать периоды прямо в сформированном отчете.
Хотя программный способ кажется логичным продолжением существующего кода, профессионалы рекомендуют перенос отчета на СКД. Почему это лучше? В СКД задача вывода колонок по месяцам решается декларативно, без написания сложного кода для вывода табличного документа.
Преимущества перехода на СКД:
Период с периодичностью Месяц.СКД самостоятельно обработает пустые периоды и правильно распределит данные по колонкам.Присоединить — достаточно изменить пару настроек в конструкторе СКД.Если вы выбрали программный путь, обязательно проверьте свой запрос. Для корректной работы важно, чтобы выборка данных включала поле с периодом (например, ПериодМесяц). Если отчет сложный и использует ОБЪЕДИНИТЬ ВСЕ, убедитесь, что каждое подмножество данных также возвращает это поле, иначе при выводе данных в колонки возникнет несоответствие.
Важный совет: если отчет содержит множество условий, которые сложно перенести в один запрос СКД, воспользуйтесь набором данных типа Объединение. Это позволит собрать данные из разных источников (например, регистры бухгалтерии и накопления) точно так же, как вы делали это в обычном запросе, сохранив всю логику фильтрации, но получив при этом удобство настройки макета от СКД.
Работая с ТабличнымДокументом, не забывайте про ТабДок.ОтображатьСетку = Ложь для придания отчёту товарного вида. Если при формировании возникают ошибки с позиционированием колонок, используйте отладчик, чтобы проверить правильность формирования областей перед вызовом Присоединить.
Выбирая между этими подходами, взвесьте трудозатраты: доработка текущего кода через Присоединить даст быстрый результат здесь и сейчас, но использование СКД — это инвестиция в простоту поддержки вашего решения в будущем.