Как динамически добавлять колонки по периодам в отчет 1С?

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

При разработке отчетов в 1С часто возникает задача вывода данных не просто списком, а в разрезе периодов — например, вывод сумм выручки или затрат помесячно. Рассмотрим, как решить эту задачу, если у вас уже есть готовый отчет, построенный на прямом выводе макета, или если вы хотите сделать решение более профессиональным.

Вариант 1: Программный вывод через метод Присоединить

Если вы хотите сохранить текущую структуру отчета и не переписывать его с нуля, можно использовать механизм формирования табличного документа через Присоединить. Суть метода заключается в разделении области макета на фиксированную часть (наименование строки) и динамическую часть (ячейка с суммой за период).

  1. Подготовка макета: Разделите строку в макете на горизонтальные области. Например, область Строка|Основное будет содержать название статьи или подразделения, а область Строка|Факт — ячейку с параметром суммы.
  2. Циклический вывод: Сначала выводите фиксированную область, а затем запускаете цикл по списку ваших периодов (например, по массиву месяцев). Внутри цикла вы выводите динамическую область, используя метод ТабДок.Присоединить(Область).

Посмотрим на пример реализации такого кода:


// Предположим, массив периодов уже получен из запроса
Для Каждого Стр Из МассивПериодов Цикл
    // Получаем область колонки для конкретного периода
    ОбластьФакт = Макет.ПолучитьОбласть("Строка|Факт");
    ОбластьФакт.Параметры.Сумма = ВычислитьСуммуПоМесяцу(Стр.ПериодМесяц);
    
    // Присоединяем область к текущей строке справа
    ТабДок.Присоединить(ОбластьФакт);
КонецЦикла;

Важным аспектом является использование ТабДок.НачатьАвтогруппировкуКолонок() и ТабДок.ЗакончитьАвтогруппировкуКолонок(). Эти методы позволяют 1С автоматически собирать выведенные колонки в группы, что даст пользователю возможность сворачивать и разворачивать периоды прямо в сформированном отчете.

Вариант 2: Использование Системы Компоновки Данных (СКД)

Хотя программный способ кажется логичным продолжением существующего кода, профессионалы рекомендуют перенос отчета на СКД. Почему это лучше? В СКД задача вывода колонок по месяцам решается декларативно, без написания сложного кода для вывода табличного документа.

Преимущества перехода на СКД:

Рекомендации по реализации

Если вы выбрали программный путь, обязательно проверьте свой запрос. Для корректной работы важно, чтобы выборка данных включала поле с периодом (например, ПериодМесяц). Если отчет сложный и использует ОБЪЕДИНИТЬ ВСЕ, убедитесь, что каждое подмножество данных также возвращает это поле, иначе при выводе данных в колонки возникнет несоответствие.

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

Работая с ТабличнымДокументом, не забывайте про ТабДок.ОтображатьСетку = Ложь для придания отчёту товарного вида. Если при формировании возникают ошибки с позиционированием колонок, используйте отладчик, чтобы проверить правильность формирования областей перед вызовом Присоединить.

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

← На главную