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