Как настроить отбор и сортировку по реквизиту в справочнике 1С 7.7

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

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

Настройка реквизитов справочника в конфигураторе

Рассмотрим порядок действий, позволяющий пользователю сортировать список и применять быстрый фильтр по значению конкретного реквизита прямо в интерактивном режиме работы программы.

Разберем по шагам, как подготовить метаданные:

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

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

Программное управление отбором в форме списка

Если требуется при открытии формы или по нажатию кнопки на форме принудительно установить определенный фильтр, проанализируем синтаксис штатного метода управления списком.

В модуле формы списка справочника используется метод УстановитьОтбор():


// Пример установки отбора по значению реквизита
УстановитьОтбор("Должность", ВыбДолжность);

// Пример отключения ранее установленного отбора
УстановитьОтбор("", );

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

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

Поднятие строк наверх через сортировку списка

Проанализируем частую ситуацию: пользователю требуется не скрывать остальные записи справочника, а вывести строки с определенным признаком на первые позиции. В этом случае используется не отбор, а изменение порядка следования элементов.

Для переключения порядка сортировки по реквизиту (при установленном в метаданных свойстве Сортировка) применяется метод формы списка ПорядокРеквизита():


// Установка сортировки формы списка по реквизиту "Должность"
ПорядокРеквизита("Должность");

В пользовательском интерфейсе упорядочивание можно выполнить простым кликом по заголовку соответствующей колонки или через системное меню списка.

Платформенные ограничения штатного механизма отборов

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

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

Построение отчетов и альтернативные способы группировки

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

1. Использование типовой обработки универсальной печати. На дисках информационно-технологического сопровождения (ИТС) в каталоге \UNIREPS\ поставляется типовая внешняя обработка REFPRINT.ERT (Универсальная печать справочников). Она позволяет без изменения конфигурации и без программирования вывести в печатную форму содержимое любого справочника, предварительно выбрав нужные колонки и условия отбора.

2. Использование объекта «Запрос» и вывод в таблицу. Если необходимо сформировать произвольный отчет с группировками внутри конфигурации, создается отчет, в модуле которого строится выборка через встроенный язык:


// Пример использования встроенного объекта Запрос для группировки справочника
ТекстЗапроса = "
|Период с ВыбДата по ВыбДата;
|Сотр = Справочник.Сотрудники.ТекущийЭлемент;
|Долж = Справочник.Сотрудники.Должность;
|Группировка Долж без групп;
|Группировка Сотр без групп;
|";

Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
    Пока Запрос.Группировка(1) = 1 Цикл
        // Обработка группировки по должности
        Пока Запрос.Группировка(2) = 1 Цикл
            // Вывод конкретных сотрудников в секции отчета
        КонецЦикла;
    КонецЦикла;
КонецЕсли;

3. Эмуляция списка через объект «ТаблицаЗначений». Когда требуется интерактивная форма со сложной фильтрацией сразу по нескольким колонкам, на форму диалога помещают элемент управления ТаблицаЗначений. В коде выполняют выборку элементов справочника через ВыбратьЭлементы() / ПолучитьЭлемент(), программно заполняют строки таблицы и управляют их показом с помощью методов Сортировать() и ручной перезагрузки данных по заданным условиям.

4. Ограничения табличных частей документов. Стоит подчеркнуть важную техническую деталь: если схожая задача возникает для табличной части документа, стандартные методы отбора там не применимы. В 1С 7.7 табличные части документов не поддерживают фильтрацию строк штатными средствами. Единственный способ отобразить отфильтрованные строки документа — выгрузить их методом ВыгрузитьТабличнуюЧасть() в отдельную ТаблицуЗначений, обработать данные и отобразить результат пользователю в диалоговом окне.

← На главную