Как найти объект в 1С по части его кода с помощью запроса?

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

Зачастую при разработке или настройке отчетов в 1С возникает задача отобрать элементы справочника, у которых код содержит определенную последовательность символов. Рассмотрим, как правильно реализовать такой поиск с помощью языка запросов и на какие «подводные камни» стоит обратить внимание, чтобы запрос отработал корректно.

Использование оператора ПОДОБНО

Для поиска подстроки в поле типа «Строка» в языке запросов 1С используется специальный оператор ПОДОБНО. Этот оператор позволяет задавать шаблон поиска, где символ % означает произвольную последовательность любых символов (включая пустую строку).

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


ВЫБРАТЬ
    ФизическиеЛица.Код КАК Код,
    ФизическиеЛица.Ссылка КАК Ссылка
ИЗ
    Справочник.ФизическиеЛица КАК ФизическиеЛица
ГДЕ
    ФизическиеЛица.Код ПОДОБНО "%123%"

В данном примере запрос вернет все элементы, где подстрока «123» находится в любом месте кода. Если же нам необходимо найти коды, которые начинаются с определенных символов, мы просто убираем первый символ процента, например: "%TL%".

Почему поиск может «не работать»?

Если вы применили конструкцию ПОДОБНО, но не получили ожидаемого результата, давайте проанализируем типичные причины, с которыми сталкиваются разработчики:

  1. Тип данных реквизита. Оператор ПОДОБНО предназначен исключительно для работы со строками. Если в конфигураторе реквизит Код определен как число, поиск по шаблону вызовет ошибку или вернет пустой результат. Убедитесь, что тип реквизита — Строка.
  2. Неверная интерпретация данных. Иногда мы ищем табельные номера или специфические коды, которые могут содержать «ведущие нули» (например, «0000123»). Если вы ищете просто «123», а в базе код записан с нулями, запрос не найдет соответствия. В таких случаях нужно либо искать полную маску, либо приводить код к нужному виду.
  3. Использование параметров. Всегда лучше использовать параметры запроса вместо жестко заданных строк. Это позволяет гибко передавать искомую часть кода из пользовательского интерфейса. Например:

// В коде 1С:
Запрос.УстановитьПараметр("ЧастьКода", "%" + ВведеннаяСтрока + "%");

Практические советы и рекомендации

При работе с поиском по части кода важно помнить о производительности. Поиск с использованием % в начале строки (например, "%123") заставляет систему сканировать всю таблицу целиком, так как индексы не могут быть эффективно использованы для таких условий. Для небольших справочников это не критично, но в высоконагруженных системах с миллионами записей лучше использовать полнотекстовый поиск.

Если вы столкнулись с ситуацией, когда запрос «не работает», выполните следующие шаги для отладки:

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

← На главную