1С 8.3 ПОДОБНО в запросе - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 ПОДОБНО в запросе

Данные > Примеры кода 1С > 1С 8.3 Запросы
В 1С 8.3 для поиска данных с использованием нечётких критериев применяется оператор ПОДОБНО. Этот оператор позволяет выполнять поиск строковых значений, соответствующих определённому шаблону. Он особенно полезен, когда требуется найти записи, содержащие частичное совпадение с заданным текстом.

Обращение в запросах к предопределенным данным конфигурации и значениям системных перечислений осуществляется с помощью литерала функционального типа ЗНАЧЕНИЕ. Данный литерал позволяет повысить удобочитаемость запроса и уменьшить количество параметров запроса.

Синтаксис оператора ПОДОБНО:
Строка ПОДОБНО Шаблон
  • Строка — это поле или значение, которое проверяется на соответствие шаблону.
  • Шаблон — это строка, которая содержит символы для поиска и специальные метасимволы.
Специальные метасимволы:
% — заменяет любую последовательность символов (включая пустую).
_ (нижнее подчёркивание) — заменяет один любой символ.
Для экранирования специальных символов используется обратная косая черта (\).
Поиск всех строк, начинающихся с "А" в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
    |    Справочники.Контрагенты.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Наименование ПОДОБНО &Шаблон";

Запрос.УстановитьПараметр("Шаблон", "А%");
Результат = Запрос.Выполнить();
Здесь А% означает, что строка должна начинаться с буквы "А", а за ней может следовать любое количество символов.
Поиск строк, содержащих слово "магазин" в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
    |    Справочники.Контрагенты.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Наименование ПОДОБНО &Шаблон";

Запрос.УстановитьПараметр("Шаблон", "%магазин%");
Результат = Запрос.Выполнить();
Здесь %магазин% означает, что слово "магазин" может находиться в любом месте строки.
Поиск строк с фиксированной длиной в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
    |    Справочники.Контрагенты.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Наименование ПОДОБНО &Шаблон";

Запрос.УстановитьПараметр("Шаблон", "___");
Результат = Запрос.Выполнить();
Здесь ___ (три нижних подчёркивания) означает, что строка должна состоять ровно из трёх символов.
Экранирование специальных символов в 1С 8.3:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
    |    Справочники.Контрагенты.Наименование КАК Наименование
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Наименование ПОДОБНО &Шаблон";

Запрос.УстановитьПараметр("Шаблон", "100\%");
Результат = Запрос.Выполнить();
Если в шаблоне нужно использовать символы % или _ как обычные символы, их необходимо экранировать с помощью обратной косой черты (\). Здесь 100\% ищет строки, содержащие именно "100%".
Нюансы использования
Чувствительность к регистру :
  • Оператор ПОДОБНО не чувствителен к регистру . Например, шаблон %магазин% найдёт как "Магазин", так и "магазин".
  • Если требуется учитывать регистр, можно использовать функцию Сред() или другие методы сравнения.
Производительность :
  • Использование оператора ПОДОБНО с символом % в начале шаблона (например, %магазин) может значительно замедлить выполнение запроса, так как база данных не сможет использовать индексы.
  • Для повышения производительности рекомендуется избегать таких конструкций или применять дополнительные условия фильтрации.
Экранирование символов :
  • Если в шаблоне используются специальные символы (%, _), их обязательно нужно экранировать с помощью обратной косой черты (\).
Работа с параметрами :
  • При передаче шаблона через параметры запроса (как в примерах выше) важно правильно формировать строку шаблона в коде.
Ограничения на использование :
  • Оператор ПОДОБНО работает только со строковыми данными. Если требуется выполнить поиск по числовым или другим типам данных, их предварительно нужно преобразовать в строку.
  • Используйте без контатенации шаблона в запросе. Пишите шаблон сразу или берите из параметра.
  • Если нужна работа на всех СУБД то используйте в паттерне только спецсимволы % (процент) и _ (подчеркивание). На IBM DB2 […] и [^…] не работает.
  • Запрос.УстановитьПараметр() не экранирует спецсимволы шаблона подобия.
  • Используйте ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе() для формирования шаблонов подобия

Оператор ПОДОБНО в 1С 8.3 является мощным инструментом для выполнения нечёткого поиска строковых данных. Однако его использование требует внимательного подхода, особенно в части производительности и корректного применения специальных символов. При правильном применении он значительно упрощает задачи поиска и фильтрации данных в информационной базе. Если стандартный оператор ПОДОБНО не удовлетворяет требованиям, можно рассмотреть следующие альтернативы: Регулярные выражения - Соответствие() или для простого поиска подстроки можно использовать функцию Найти().
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 23.02.2025
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому