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