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

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе в обычном приложении 1С (ОФ) разработчики часто сталкиваются с тем, что стандартные колонки табличных полей, имеющие тип СправочникСсылка, не поддерживают интерактивный поиск и сортировку так же легко, как строковые реквизиты. Давайте разберем, как преодолеть эти ограничения и сделать работу со списками удобной для пользователей.

Настройка сортировки для ссылочных полей

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

  1. Индексирование в конфигураторе: Перейдите в свойства нужного реквизита справочника и установите для параметра Индексирование значение Индексировать. Это критически важное условие, без которого платформа не сможет эффективно выполнять сортировку по данному полю.
  2. Активация через программный код: По умолчанию доступ к настройке порядка может быть ограничен. Чтобы разрешить пользователю сортировку, необходимо добавить код в процедуру ПриОткрытии модуля формы.

Разберем пример реализации активации сортировки:


Процедура ПриОткрытии()
    // Укажите имя вашего табличного поля вместо "СправочникСписок"
    // и имя вашего реквизита вместо "Местонахождение"
    ЭлементыФормы.СправочникСписок.НастройкаПорядка.Местонахождение.Доступность = Истина;
КонецПроцедуры

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

Решение проблемы поиска

Стандартный механизм «быстрого поиска» при наборе текста на клавиатуре в обычном приложении жестко завязан на строковые данные. Поскольку ссылка — это сложный тип, «на лету» преобразовать введенные символы в поиск по наименованию объекта платформа не может. Рассмотрим проверенные способы решения этой задачи.

Способ 1: Использование универсального механизма поиска типовых конфигураций

Если вы разрабатываете расширение для типовой системы (например, УПП), вы можете воспользоваться готовым объектом ПоискОбъектовВСпискахДанных. Это профессиональный подход, позволяющий реализовать поиск по нескольким реквизитам одновременно.


// Пример создания объекта для поиска
Функция СоздатьОбъектПоискаДанныхДляНоменклатуры(ЭлементФормыЗначениеОтбора, ОбъектФормыСписок, СписокДанных) Экспорт
    мПоискОбъектов = Обработки.ПоискОбъектовВСпискахДанных.Создать();
    мПоискОбъектов.ТипОбъектовПоиска = Тип("СправочникСсылка.ВашСправочник");
    
    // Добавляем поля для поиска
    мПоискОбъектов.СписокБыстрыхОтборовПоРеквизитам.Добавить("Наименование", "Наименование");
    
    мПоискОбъектов.ОбъектФормыСписок = ОбъектФормыСписок;
    мПоискОбъектов.Список = СписокДанных;
    Возврат мПоискОбъектов;
КонецФункции

Способ 2: Создание «реквизита-дублера»

Если вам нужен максимально простой и быстрый поиск по мере набора текста, самым надежным методом остается создание дополнительного строкового реквизита в справочнике. Например, ПредставлениеМестонахождения.

  1. Добавьте в справочник реквизит ПредставлениеМестонахождения (строка).
  2. В модуле объекта в процедуре ПередЗаписью пропишите логику автоматического заполнения этого реквизита: ПредставлениеМестонахождения = Строка(Местонахождение);.
  3. Включите индексацию для этого строкового реквизита.
  4. Выведите это поле в форму списка вместо самой ссылки или вместе с ней.

Таким образом, поиск будет работать стандартными средствами платформы, так как для 1С это будет обычное строковое поле.

Рекомендации по организации работы

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

Применяя эти методы, вы сможете сделать работу с данными справочников в обычном приложении комфортной, предсказуемой и быстрой.

← На главную