Как программно установить отбор в журнале документов в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Принцип работы механизма отбора в 1С 7.7

Для фильтрации строк в общем или специализированном журнале документов используются графы отбора, созданные в дереве метаданных конфигурации. Чтобы отбор сработал без ошибок, необходимо соблюдение базовых правил платформы:

  1. Наличие графы отбора: в конфигураторе должна быть создана графа отбора с нужным именем, в состав которой включены соответствующие реквизиты документов нужных видов.
  2. Соответствие типов данных: тип передаваемого значения должен строго совпадать с типом реквизитов, входящих в данную графу. Если графа отбора построена по справочнику, передавать в качестве значения фильтра текстовую строку нельзя — требуется передать ссылку на конкретный элемент справочника.
  3. Отбор только по элементам: механизм граф отбора платформы 1С 7.7 не поддерживает иерархический фильтр по группам справочников. Значением отбора может выступать только конкретный элемент, значение перечисления или примитивный тип (число, строка, дата).

Разбор типичных ошибок при установке отбора

Проанализируем распространенные ошибки, из-за которых журнал может открываться пустым или отбор не применяется:

  1. Передача строки вместо ссылки: вызов вида УстановитьОтбор("УсловияОплаты", "ЕРИП") не сработает, если графа отбора типизирована справочником. Метод ожидает объектную ссылку Спр.ТекущийЭлемент().
  2. Непонимание работы поиска: метод НайтиПоНаименованию() не возвращает сам найденный элемент, а возвращает числовой статус (1 — элемент успешно найден, 0 — не найден). Для получения ссылки необходимо обращаться к свойству ТекущийЭлемент() объекта справочника.
  3. Обращение не к тому справочнику: если в реквизите документа используется справочник Справочник.УслПлатежа, а поиск элемента выполняется по объекту Справочник.УслОплаты, типы данных не совпадут, и отбор выдаст пустой результат.
  4. Дублирование наименований: если в справочнике присутствует несколько элементов с одинаковым наименованием, метод найдет первый попавшийся, который может не совпадать с реальным значением в документах.

Пошаговое решение: программная установка фильтра

Рассмотрим правильный алгоритм установки фильтра в предопределенной процедуре ПриОткрытии формы журнала документов:

  1. Создаем объект нужного справочника через СоздатьОбъект().
  2. Выполняем поиск нужного элемента и проверяем результат.
  3. Убеждаемся, что найденный объект не является группой (ЭтоГруппа() = 0).
  4. Вызываем метод УстановитьОтбор(), передавая имя графы отбора и полученную ссылку.
  5. При необходимости принудительно перерисовываем форму через Форма.Обновить(0).

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


Процедура ПриОткрытии()
    Спр = СоздатьОбъект("Справочник.УслПлатежа");
    Если Спр.НайтиПоНаименованию("ЕРИП", 0, 1) = 1 Тогда
        Если Спр.ЭтоГруппа() = 0 Тогда
            УстановитьОтбор("УсловияОплаты", Спр.ТекущийЭлемент());
        Иначе
            Предупреждение("Выбранная позиция является группой! Отбор не установлен.");
        КонецЕсли;
    Иначе
        Сообщить("Элемент 'ЕРИП' не найден в справочнике УслПлатежа!");
    КонецЕсли;
    Форма.Обновить(0);
КонецПроцедуры

Альтернативные варианты: использование закладок и управление доступом

В зависимости от поставленной задачи можно использовать дополнительные методы управления отображением данных в журнале:

1. Использование штатного метода ЗакладкиОтбора

Метод позволяет автоматически сформировать закладки по значениям графы отбора в нижней части журнала:


// Синтаксис: ЗакладкиОтбора(ИмяОтбора, ФлагВИнтервале, ФлагУстановки, ЗначениеОтбора)
Спр = СоздатьОбъект("Справочник.УслПлатежа");
Если Спр.НайтиПоНаименованию("ЕРИП", 0, 1) = 1 Тогда
    ЗакладкиОтбора("УсловияОплаты", 1, 1, Спр.ТекущийЭлемент());
КонецЕсли;

Параметр ФлагВИнтервале = 1 позволяет сформировать закладки только по тем значениям, которые реально присутствуют в документах за выбранный интервал журнала, а ФлагУстановки = 1 сразу активирует закладку с переданным значением.

2. Блокировка изменения отбора пользователем

Если требуется жестко зафиксировать отбор и запретить пользователю его отключение или изменение через командную панель, применяют метод ВидыОтбора:


// Запрещаем пользователю менять или сбрасывать программно установленный отбор
ВидыОтбора("");

3. Снятие установленного отбора

Для программной отмены текущей фильтрации и показа всех документов вызывается метод без параметров или с пустой строкой:

УстановитьОтбор("");

← На главную