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

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

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

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

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

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

Правила использования методов отбора в форме журнала

Разберем различия между методами УстановитьОтбор() и ЗакладкиОтбора():

  1. Метод УстановитьОтбор: Применяется для жесткой фильтрации списка документов по конкретному значению графы отбора. В журнале отображаются только те документы, у которых реквизит, входящий в графу отбора, совпадает с переданным значением.
  2. Метод ЗакладкиОтбора: Используется для формирования закладок в нижней части окна журнала, переключая которые пользователь может вручную менять фильтр. Если закладки не нужны, а требуется лишь жестко ограничить выборку, использовать ЗакладкиОтбора() не нужно.

Пошаговый алгоритм программной установки отбора

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

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

Посмотрим на пример правильной реализации в процедуре ПриОткрытии() модуля формы общего журнала:


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

Как снять установленный отбор

Если в процессе работы с журналом требуется программно вернуть полный список документов без ограничений, используется штатный метод СнятьОтбор().

Посмотрим на пример кода для кнопки сброса фильтра:


Процедура СброситьФильтр()
    СнятьОтбор();
КонецПроцедуры

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

При работе с механизмами отбора в платформе 1С 7.7 важно учитывать следующие системные ограничения:

  1. Один отбор за раз. Штатный механизм формы общего журнала позволяет держать активным только один отбор одновременно — либо по одной графе отбора, либо по виду документа. Наложить множественный фильтр (например, одновременно по контрагенту и условию оплаты) стандартным методом нельзя.
  2. Индексация. Отбор по графе отбора опирается на системные индексы журнала. Если графа отбора включает множество реквизитов в больших информационных базах, структура индексов должна быть корректной, иначе открытие журнала может замедляться.
  3. Альтернативы для сложных фильтров. Если требуется сложная множественная фильтрация документов по нескольким реквизитам, используют внешние обработки с построением списка в объекте ТаблицаЗначений на базе объекта Запрос либо специализированные внешние компоненты для прямого доступа к данным.
← На главную