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

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

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

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

Анализ ошибки: почему не работает отбор по графе журнала

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

  1. Разработчик создает графу внутри журнала (например, с идентификатором ЗакрытьАвтоматом) и связывает ее с реквизитом документа.
  2. В модуле формы журнала пишется вызов метода УстановитьОтбор("ЗакрытьАвтоматом", 1);.
  3. Платформа выдает ошибку выполнения: Неверное имя реквизита!, либо отбор игнорируется.

Причина такого поведения заключается в архитектуре платформы: метод УстановитьОтбор() в общем журнале работает не с визуальными графами самого журнала, а исключительно со специальным объектом метаданных — Графой отбора, которая создается в корне конфигурации.

Пошаговая инструкция по настройке отбора через графу отбора

Разберем по шагам правильный алгоритм настройки отбора в общем журнале:

  1. Создание графы отбора в метаданных: открываем дерево конфигурации, находим ветку Журналы → Графы отбора. Добавляем новую графу отбора и задаем ей понятный идентификатор, например ЗакрытАвтоматом.
  2. Связывание с реквизитами документов: в окне свойств созданной графы отбора отмечаем галочками реквизиты тех видов документов, по которым должна производиться фильтрация. Если у документа нет нужного реквизита, он просто не включается в состав графы.
  3. Программная установка отбора в форме: переходим в модуль формы списка журнала документов и прописываем процедуру инициализации при открытии.

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


Процедура ПриОткрытии()
    // Устанавливаем фильтр по созданной графе отбора
    УстановитьОтбор("ЗакрытАвтоматом", 1);
КонецПроцедуры

Обратите внимание: первым параметром передается строковое имя графы отбора (в кавычках), а вторым — значение, по которому фильтруются строки.

Ограничения платформы 1С 7.7 при работе с отборами

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

  1. Принцип одного активного отбора: в стандартном журнале одновременно может действовать только один отбор. Повторный вызов УстановитьОтбор() не объединяет условия через логическое «И», а полностью перезаписывает предыдущий фильтр.
  2. Только точное соответствие: штатный фильтр работает только на точное равенство (=). Условия «не равно», «в списке» или сравнения «больше/меньше» через метод УстановитьОтбор() не поддерживаются.
  3. Хранение связей в служебной таблице: платформа строит отборы по отдельной таблице связей документов (_1SCRDOC). Запись в нее попадает только в том случае, если реквизит документа привязан к графе отбора и заполнен. Если вид документа не содержит такого реквизита, отфильтровать документы по признаку отсутствия значения штатным отбором невозможно.
  4. Взаимоисключение с отбором по виду: стандартный отбор по виду документа (УстановитьОтбор("ВидДокумента", "ИмяВида")) также является одиночным отбором и не может применяться параллельно с отбором по графе.

Как реализовать сложные отборы: проверенные подходы

Если перед вами стоит задача отфильтровать документы сразу по нескольким критериям (например, определенный вид документа И статус закрытия), рассмотрим следующие способы решения:

  1. Использование составного (синтетического) реквизита: в документы добавляется служебный строковый реквизит (например, КлючОтбора). При записи или проведении документа этот реквизит автоматически заполняется конкатенацией параметров (например, ПриходнаяНакладная_1). Графа отбора настраивается по этому реквизиту, а фильтрация выполняется одной строкой:УстановитьОтбор("КлючОтбора", "ПриходнаяНакладная_1");
  2. Специализированный (дополнительный) журнал: если нужно ограничить видимость только тремя конкретными видами документов, создается дополнительный журнал, в состав которого включаются только эти 3 вида. В таком журнале не требуется накладывать отбор по виду — он уже зафиксирован структурой журнала.
  3. Эмуляция журнала через Таблицу Значений: если требуется произвольная фильтрация («НЕ РАВНО», сложные диапазоны, пустые значения), форма строится на объекте ТаблицаЗначений, которая заполняется программно через объект Запрос или выборку ВыбратьДокументы().

Сброс отбора и обновление данных

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

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

Важное замечание: если графа отбора была добавлена в существующую информационную базу с уже созданными документами, новые индексы для старых документов автоматически не сформируются. Чтобы документы попали в выборку, необходимо выполнить реиндексацию базы данных через режим «Тестирование и исправление» в Конфигураторе либо программно пересохранить существующие документы.

← На главную