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