1С 8.3 ПОДОБНО в запросе
Данные > Примеры кода 1С > 1С 8.3 Запросы
Перейти в раздел примеры кода 1С 8.3:

В 1С 8.3 для поиска данных с использованием нечётких критериев применяется оператор ПОДОБНО. Этот оператор позволяет выполнять поиск строковых значений, соответствующих определённому шаблону. Он особенно полезен, когда требуется найти записи, содержащие частичное совпадение с заданным текстом.
Обращение в запросах к предопределенным данным конфигурации и значениям системных перечислений осуществляется с помощью литерала функционального типа ЗНАЧЕНИЕ. Данный литерал позволяет повысить удобочитаемость запроса и уменьшить количество параметров запроса.
Синтаксис оператора ПОДОБНО:
Строка ПОДОБНО Шаблон
- Строка — это поле или значение, которое проверяется на соответствие шаблону.
- Шаблон — это строка, которая содержит символы для поиска и специальные метасимволы.
Специальные метасимволы:
% — заменяет любую последовательность символов (включая пустую)._ (нижнее подчёркивание) — заменяет один любой символ.Для экранирования специальных символов используется обратная косая черта (\).
Поиск всех строк, начинающихся с "А" в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "А%");
Результат = Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "А%");
Результат = Запрос.Выполнить();
Здесь А% означает, что строка должна начинаться с буквы "А", а за ней может следовать любое количество символов.
Поиск строк, содержащих слово "магазин" в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "%магазин%");
Результат = Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "%магазин%");
Результат = Запрос.Выполнить();
Здесь %магазин% означает, что слово "магазин" может находиться в любом месте строки.
Поиск строк с фиксированной длиной в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "___");
Результат = Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "___");
Результат = Запрос.Выполнить();
Здесь ___ (три нижних подчёркивания) означает, что строка должна состоять ровно из трёх символов.
Экранирование специальных символов в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "100\%");
Результат = Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| Справочники.Контрагенты.Наименование КАК Наименование
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование ПОДОБНО &Шаблон";
Запрос.УстановитьПараметр("Шаблон", "100\%");
Результат = Запрос.Выполнить();
Если в шаблоне нужно использовать символы % или _ как обычные символы, их необходимо экранировать с помощью обратной косой черты (\). Здесь 100\% ищет строки, содержащие именно "100%".
Нюансы использования
✔ Чувствительность к регистру :
- Оператор ПОДОБНО не чувствителен к регистру . Например, шаблон %магазин% найдёт как "Магазин", так и "магазин".
- Если требуется учитывать регистр, можно использовать функцию Сред() или другие методы сравнения.
✔ Производительность :
- Использование оператора ПОДОБНО с символом % в начале шаблона (например, %магазин) может значительно замедлить выполнение запроса, так как база данных не сможет использовать индексы.
- Для повышения производительности рекомендуется избегать таких конструкций или применять дополнительные условия фильтрации.
✔ Экранирование символов :
- Если в шаблоне используются специальные символы (%, _), их обязательно нужно экранировать с помощью обратной косой черты (\).
✔ Работа с параметрами :
- При передаче шаблона через параметры запроса (как в примерах выше) важно правильно формировать строку шаблона в коде.
✔ Ограничения на использование :
- Оператор ПОДОБНО работает только со строковыми данными. Если требуется выполнить поиск по числовым или другим типам данных, их предварительно нужно преобразовать в строку.
Используйте без контатенации шаблона в запросе. Пишите шаблон сразу или берите из параметра. Если нужна работа на всех СУБД то используйте в паттерне только спецсимволы % (процент) и _ (подчеркивание). На IBM DB2 […] и [^…] не работает. Запрос.УстановитьПараметр() не экранирует спецсимволы шаблона подобия. Используйте ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе() для формирования шаблонов подобия
Оператор ПОДОБНО в 1С 8.3 является мощным инструментом для выполнения нечёткого поиска строковых данных. Однако его использование требует внимательного подхода, особенно в части производительности и корректного применения специальных символов. При правильном применении он значительно упрощает задачи поиска и фильтрации данных в информационной базе. Если стандартный оператор ПОДОБНО не удовлетворяет требованиям, можно рассмотреть следующие альтернативы: Регулярные выражения - Соответствие() или для простого поиска подстроки можно использовать функцию Найти().
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник