Как программно добавить отбор в типовой отчет 1С?

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

При работе с типовыми конфигурациями на платформе 1С, такими как Бухгалтерия предприятия 3.0, разработчики часто сталкиваются с задачей модификации типовых отчетов. Одной из наиболее частых задач является добавление дополнительных условий отбора (например, по субконто) программным способом. Давайте разберем, почему стандартные методы не всегда работают и как правильно реализовать эту задачу.

Почему не срабатывает процедура ПриКомпоновкеРезультата?

Многие разработчики по привычке пытаются использовать обработчик ПриКомпоновкеРезультата в модуле объекта отчета. Однако в современных типовых конфигурациях, использующих БСП (Библиотеку стандартных подсистем), отчеты часто формируются через механизм Вариантов отчетов.

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

Использование модуля менеджера для модификации отчетов

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

Рассмотрим по шагам, как реализовать добавление отбора:

  1. Откройте конфигуратор и найдите нужный отчет.
  2. Перейдите в Модуль менеджера отчета.
  3. Добавьте (или используйте существующую) процедуру ПередКомпоновкойМакета.

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


Процедура ПередКомпоновкойМакета(ПараметрыОтчета, Схема, КомпоновщикНастроек) Экспорт
    
    // Получаем настройки отбора
    Отбор = КомпоновщикНастроек.Настройки.Отбор;
    
    // Добавляем новый элемент отбора
    НовыйЭлемент = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Субконто1");
    НовыйЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовыйЭлемент.ПравоеЗначение = НужнаяСсылкаНаСубконто;
    НовыйЭлемент.Использование = Истина;
    НовыйЭлемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный;

КонецПроцедуры

Важные советы по отладке и реализации

При выполнении данной задачи обратите внимание на следующие нюансы:

Заключение

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

← На главную