Особенности использования в запросах оператора ПОДОБНО
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. Оператор ПОДОБНО в тексте запроса необходимо использовать только
- с константным строковым литералом, например:
Реквизит ПОДОБНО «123%» - с параметром запроса, например:
Реквизит ПОДОБНО &Шаблон
Не следует формировать строку шаблона вычислениями или конкатенацией.
Реквизит ПОДОБНО «123%»
Реквизит ПОДОБНО &Шаблон
Реквизит ПОДОБНО «123» + «%»
Реквизит ПОДОБНО &Шаблон + «%»
Реквизит ПОДОБНО Таблица.Шаблон
2. При разработке конфигурации необходимо использовать такие шаблоны для оператора ПОДОБНО, которые одинаково работают на всех СУБД, поддерживаемых платформой 1С:Предприятие:
- % (процент) – последовательность, содержащая любое количество произвольных символов;
- _ (подчеркивание) – один произвольный символ.
Недопустимы, т.к. не работает на IBM DB 2:
- […] (в квадратных скобках один или несколько символов) – любой одиночный символ из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона;
- [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов) – любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания.
При разработке прикладных решений необходимо учитывать все ограничения, чтобы обеспечивать работу на всех СУБД, поддерживаемых платформой 1С:Предприятие (см. документацию к платформе 1С:Предприятие):
- Длина строки шаблона не должна превышать 1024 символа (ограничение MS SQL 2005).
3. Необходимо экранировать все спецсимволы (_%[]^), чтобы они трактовались как часть искомого текста (а не как спецсимвол). Иначе если пользователь в строке поиска, например, введет текст со скобками [ ], то при выполнении запроса возникнет ошибка вида: ERROR: invalid regular expression: invalid character range (PostgreSQL).
Для экранирования необходимо:
- выбрать спецсимвол экранирования, например (~);
- установить спецсимвол перед символами операнда, например (~%). Чтобы экранировать выбранный спецсимвол, его необходимо задвоить, например (~~).
- и дополнить шаблон ключевым словом СПЕЦСИМВОЛ.
Например, для поиска по строке «100%»:
При этом нужно иметь в виду, что установка параметров запроса с помощью Запрос.УстановитьПараметр не экранирует спецсимволы шаблона для ПОДОБНО. Для экранирования спецсимволов в конфигурациях с Библиотекой стандартных подсистем (БСП) рекомендуется вызывать процедуру ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе .
ВЫБРАТЬ
Номенклатура.Ссылка КАК Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Наименование ПОДОБНО &Шаблон СПЕЦСИМВОЛ «~»
…
Реализация для конфигураций без Библиотеки стандартных подсистем (БСП):
Функция СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска) Экспорт
Результат = СтрокаПоиска;
Результат = СтрЗаменить(Результат, «~», «~~»);
Результат = СтрЗаменить(Результат, «%», «~%»);
Результат = СтрЗаменить(Результат, «_», «~_»);
Результат = СтрЗаменить(Результат, «[«, «~[«);
Результат = СтрЗаменить(Результат, «]», «~]»);
Результат = СтрЗаменить(Результат, «^», «~^»);
4. Сравнение выполняется без учета регистра символов.
См. также
- Общие требования к конфигурации
- Оформление текстов запросов
Оператор ПОДОБНО
ПОДОБНО — Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.
Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону – результатом оператора будет ИСТИНА, иначе – ЛОЖЬ.
Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:
• % (процент): последовательность, содержащая любое количество произвольных символов
• _ (подчеркивание): один произвольный символ
• […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок
В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
• [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки.
Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать . Сам (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.
Например, шаблон “%АБВ[0-9][абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов:
буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в.
Причем перед этой последовательностью может располагаться произвольный набор символов.
Примеры использования:
Код 1C v 8.х
Процедура БанкОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//Делаем запрос с поиском по шаблону вида "%" + + "%"
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наименование", "%" + Текст + "%");
Запрос.Текст = "ВЫБРАТЬ
| Банки.Ссылка
|ИЗ
| Справочник.Банки КАК Банки
|
|ГДЕ
| Банки.Наименование ПОДОБНО &Наименование";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Результат.Пустой() Тогда
//Ничего не нашли. Здесь можно вывести сообщение, или еще чего сделать :)
Иначе
//Получаем результаты
тзРезультаты = Результат.Выгрузить();
//Подготовим список значений который будет содержать найденные элементы.
Значение = Новый СписокЗначений();
Значение.ЗагрузитьЗначения(тзРезультаты.ВыгрузитьКолонку("Ссылка"));
КонецЕсли;
КонецПроцедуры
Нужно, что бы в «Договора по умолчанию» попадали только Наименования Основной договор и т.д:
Код 1C v 8.х
Выбор
Когда Наименование ПОДОБНО "Договор №%" тогда "Договора с номером" //Подходит любая строка, начинающаяся с "Договор №"
Когда Наименование ПОДОБНО "Основной договор%[^А-яЁё"+Символ(33)+"-"+Символ(126)+"№»«"+Символы.ПС+Символы.Таб+Символы.ПФ+Символы.НПП+Символы.ВТаб+"]%" тогда "Договора по умолчанию" //Подходит любая строка, начинающаяся с "Основной договор"
Иначе "Прочие"
Конец Как ВидДоговора
Использование оператора ПОДОБНО
1. ПОДОБНО в запросе 1С 2. Специальные символы в 1С 8.3
В процессе разработки, программист 1С часто сталкивается с запросами. Чтобы грамотно и полноценно использовать данный инструмент, необходимо разобраться в операторах. Сегодня мы поговорим об одном из них – об операторе ПОДОБНО.
1. ПОДОБНО в запросе 1С
Цель использования ПОДОБНО в запросе 1С это проверка соответствия данных и условия, представленного в виде шаблона. Результатом данной проверки является значение с типом “булево в 1С”. Ввиду этого данный оператор следует использовать в следующих частях запроса:
· в блоке условий, который начинается с ключевого слова “ГДЕ”; · в конструкции “Выбор Когда Тогда Иначе Конец”; · в полях выборки, как результат сравнения полей.
Правила проверки формируются по определенному алгоритму с использованием своего синтаксиса, и состоят из 3 компонентов. Первый – строка, которая будет проверяться на соответствие. Второй – способ сопоставления (оператор), в нашем случае ПОДОБНО. И третий – шаблон, с учетом условий которого будет происходить проверка соответствия.
Шаблон в 1С 8.3 для проверки так же создается по определенным правилам. Проверка на соответствие происходит без учета регистра. Данный механизм значительно упрощает разработку данного решения. Сам шаблон в 1С 8.3 должен быть строковой величиной. То есть, если он полностью или частично передается в запрос в качестве параметра, то необходимо применять правила работы со строковыми выражениями. Помимо этого, для повышения удобства и скорости описания шаблонов имеются специальные символы в 1С 8.3.
2. Специальные символы в 1С 8.3
1. «%» – набор любых символов. Применяется для нахождения определенных символов или их сочетания в строке; (Номенклатура.Наименование ПОДОБНО «%ПроизволльнаяЧастьСтроки%»).
Несколько примеров:
1.1. Номенклатура.Наименование ПОДОБНО «%КАРАНДАШ%”
Выборке будут соответствовать: Карандаш простой Цветные карандаши Цветной карандаш, зеленый Угольный карандаш
1.2. Номенклатура.Наименование ПОДОБНО «%КАРАНДАШ”
Выборке будет соответствовать: Угольный карандаш
1.3. Номенклатура.Наименование ПОДОБНО «КАРАНДАШ%”
Выборке будет соответствовать: Карандаш простой 2. «_» – любой символ. Используется для определения наличия одного знака;
2.1. Номенклатура.Наименование ПОДОБНО «____”
Выборке будет соответствовать: Лист 3. «[…]» – символы для сравнения со знаком в строке. С помощью такого шаблона проверяется соответствие любому из указанных в квадратных скобках символов. Помимо этого, можно использовать диапазон цифр или букв ([а-ж], [3-9]);
3.1. Номенклатура.Наименование ПОДОБНО «[Ф-Ц]%”
Выборке будут соответствовать: Цветные карандаши Цветной карандаш, зеленый 4. «[^…]» – шаблон, обратный предыдущему. Поиск несоответствия, указанного в квадратных скобках символа или диапазона, от символов строки.
4.1. Номенклатура.Наименование ПОДОБНО «[^Ф-Ц]%”
Выборке будут соответствовать: Карандаш простой Лист Угольный карандаш Шаблоны с использованием нескольких вышеперечисленных пунктов позволяют составить огромное количество вариаций отборов, которые подойдут для решения большинства задач, связанных с поиском строк. Хотя, текстовый поиск всегда зависит от того, насколько точно введены данные, но именно данный вид сравнения, несмотря на это, остается одним из тех, которые очень часто находят себе применение на практике.
Специалист компании ООО «Кодерлайн» Романенков Марк Александрович
Оператор ПОДОБНО в запросе 1С 8.3

Несмотря на все недостатки, поиск по текстовому полю до сих пор является одним из самых популярных. Строковые типы данных мы можем встретить повсеместно – наименования, номера счетов, адреса, а также другая информация может храниться в этом формате. В запросах на встроенном языке 1С для удобства разработчиков используется специальный оператор «ПОДОБНО». Это одна из самых используемых команд, поэтому без досконального знания ее синтаксиса и возможностей программисту будет сложно работать.
Использование оператора «ПОДОБНО»
Перед тем, как применять какой-либо оператор на практике, нужно четко понять его предназначение, места применения и синтаксис. Целью использования «ПОДОБНО» в запросе 1С является проверка на удовлетворение условию, представленному в виде шаблона. Возвращаемым значением является логический тип – истина или ложь, демонстрирующий выполняется ли заданное условие. Использоваться оператор ПОДОБНО может в нескольких местах запроса:
- В блоке условий, обозначенном ключевым словом «ГДЕ»;
- В конструкции Выбор Когда Тогда Иначе Конец;
- Непосредственно в полях выборки, как результат сравнения полей.
Синтаксис проверки всегда одинаков и состоит из 3 звеньев. Слева текстовое значение, которое проверяется, затем непосредственно сам оператор «ПОДОБНО», а справа – шаблон, по которому идет проверка. Для быстрого и удобного составления шаблонов существуют специальные символы, облегчающие разработку:
- «%»– последовательность любых символов произвольной длины. Используется для поиска отдельных слов или цифр в строке;
- «_»– любой единичный символ. Предназначен для обозначения наличия одного знака;
- «[…]»– последовательность символов для сравнения со знаком в строке. С помощью подобного шаблона проверяется соответствие любому из перечисленных в скобках знаков. Также можно задать диапазон цифр или букв ([а-г], [1-7]);
- «[^…]»– противоположный предыдущему шаблон. Проверяется отличие указанного в строке символа от перечисленных в скобках.
Чтобы лучше усвоить и понять принципы составления верных шаблонов, рассмотрим некоторые, часто встречающиеся в жизни разработчиков, примеры. Первый, когда нам необходимо выбрать из справочника номенклатуры все позиции, в наименованиях которых встречается слово «РЕЗЕЦ». В этом случае нам необходимо использовать ПОДОБНО в условиях запроса:
ВЫБРАТЬ Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование ПОДОБНО "%РЕЗЕЦ%"
Если мы уберем оба символа «%», то запрос покажет номенклатуру, у которой наименование полностью совпадает с указанным в кавычках. Если оставим шаблон «РЕЗЕЦ%» или «%РЕЗЕЦ», то результатом будет список номенклатуры, оканчивающийся или начинающийся, соответственно, на заданную комбинацию символов.


Разберем задачу, которая может поставить в тупик начинающих программистов, не знающих синтаксис запросов. Допустим, вам нужно найти всю номенклатуру, в наименовании которой есть символ «%». Специально для случаев, когда нужно вести поиск зарезервированных символов, существует оператор «спецсимвол». В качестве спецсимвола можно использовать #,\,/,~ и другие знаки, после которых любые зарезервированные символы будут обозначать просто знак.
ВЫБРАТЬ Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование ПОДОБНО "%#%" СПЕЦСИМВОЛ "#"
Если вам нужно в поиске использовать параметр, то переменная в запросе с параметром ПОДОБНО используется при помощи сложения. Помните, что параметр должен быть строкового типа или вам потребуется перевести ее в строку в запросе. Это достаточно сложная операция и лучше ее исключить заранее.
ВЫБРАТЬ Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование ПОДОБНО "%" + &наименование + "%"
Функция ПОДОБНО применима во всех версиях платформы, начиная с 8, и ввиду ее применяемости разработчики 1С не захотят ее менять. Конечно, текстовый поиск всегда зависит от точности ввода наименования, но он все равно остается одним из самых распространенных. В связи с этим профессиональным разработчикам 1С необходимо изучить использование ПОДОБНО со всеми его нюансами.
