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