Иногда возникает ситуация, когда в 1С 8.3 или 8.2 нужно сделать выборку, например, из справочника всех элементов, у которых в наименовании имеется слово «глазурь». Или из справочника выбрать всех контрагентов, в фамилии которых встречается слово «Иван». В общем, проверить какое-нибудь строковое значение.

Для этого существует оператор в запросах 1С 8.3 и 8.2 — «Подобно». Используется он, соответственно, в условиях:

Получите 267 видеоуроков по 1С бесплатно:

Как пользоваться шаблонами в запросах 1С?

Чтобы сформировать условие отбора, в качестве параметра нужно передать некий шаблон. Для создания шаблона существуют так называемые служебные символы.

Например, символ «%» допускает любую последовательность произвольных символов:

Существуют и другие специальные символы:

  • % (процент) — допускает любую последовательность произвольных символов;
  • _ (нижнее подчеркивание) — любой один символ;
  • […] – один произвольный символ из перечисленных внутри скобок. Кроме перечисления символов можно использовать диапазоны. Пример: а-о;
  • [^…] – то же самое, что и предыдущее, но наоборот. Знак «^» означает отрицание.

Оператор ПОДОБНО позволяет сравнить в запросе данные строкового типа, находящиеся слева от оператора с данными строкового типа находящимися справа от оператора. Результат сравнения принимает значения "Истина" или "Ложь", таким образом сравнение можно применять в виде условия.

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

  • "%" символ процента: обозначает наличие в строке любого количества произвольных символов
  • "[...]" один или несколько символов в квадратных скобках: обозначает наличие любого (одиночного) из перечисленных символов. Так же, может быть указан диапазон символов (например )
  • "_"символ подчеркивания: обозначает наличие любого произвольного символа
  • "[^...]" символ отрицания: обозначает наличие любого одиночного символа, кроме указанных в квадратных скобках
Если необходимо для сравнения указать один из вышеперечисленных спецсимволов, необходимо воспользоваться ключевым словом "СПЕЦСИМВОЛ"

Особенности использования с различными СУБД

IBM DB2 " справа от оператора ПОДОБНО может располагаться только параметр. Шаблонные символы только "_" (подчеркивание означающее любой символ) и "%" (процент означающий последовательность любых символов).
В случае использования СУБД "PostgreSQL " или "Oracle Database " спецсимволы "квадратные скобки [...]" воспринимаются только если указаны текстом в запросе, а НЕ передаются параметром в запрос.

Таким образом, в файловой базе спецсимволы будут всегда восприниматься одинаково, и по разному в зависимости от используемой СУБД в клиент-серверном варианте.

Пример: выбрать товары, содержащие в наименовании символ "%"

ВЫБРАТЬ | Спр.Ссылка |ИЗ | Справочник.Номенклатура КАК Спр |ГДЕ | Спр.Наименование ПОДОБНО "%\%" СПЕЦСИМВОЛ "\"

Пример: выбрать товары, наименование которых начинает на слово "Бак"

ВЫБРАТЬ | Спр.Ссылка |ИЗ | Справочник.Номенклатура КАК Спр |ГДЕ | Спр.Наименование ПОДОБНО "Бак%"

Пример: выбрать товары, наименование которых оканчивается цифру

ВЫБРАТЬ | Спр.Ссылка |ИЗ | Справочник.Номенклатура КАК Спр |ГДЕ | Спр.Наименование ПОДОБНО "%"

43
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL... 26
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос. Создается этот объект вызовом конструкции Новый Запрос. Запрос удобно... 18
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на... 12
Столкнулся с задачей, нужно было выбрать все документы по выплате и сгруппировать их по типу документа! Перелистав все ЖКК и интернет, понял что простого способа получить Вид документа в запросе нет:(Пришлось...

ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL.
Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если значение выражения удовлетворяет шаблону - результатом оператора будет ИСТИНА, иначе - ЛОЖЬ.
Следующие символы в строке шаблона являются служебными и имеют смысл, отличный от символа строки:
. % (процент): последовательность, содержащая любое количество произвольных символов
. _ (подчеркивание): один произвольный символ
. […] (в квадратных скобках один или несколько символов): любой одиночный символ из перечисленных внутри квадратных скобок
В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.
. [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов): любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки.
Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.
Например , шаблон “%АБВ[абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов:
буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в.
Причем перед этой последовательностью может располагаться произвольный набор символов.

Примеры использования:
Код 1C v 8.х Процедура БанкОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//Делаем запрос с поиском по шаблону вида "%" + <Текст введенный пользователм в поле ввода> + "%"
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наименование", "%" + Текст + "%");
Запрос.Текст = "ВЫБРАТЬ
| Банки.Ссылка
|ИЗ
| Справочник.Банки КАК Банки
|ГДЕ
| Банки.Наименование ПОДОБНО &Наименование";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Результат.Пустой() Тогда
//Ничего не нашли. Здесь можно вывести сообщение, или еще чего сделать:)
Иначе
//Получаем результаты
тзРезультаты = Результат.Выгрузить();
//Подготовим список значений который будет содержать найденные элементы.
Значение = Новый СписокЗначений();
Значение.ЗагрузитьЗначения(тзРезультаты.ВыгрузитьКолонку("Ссылка"));
КонецЕсли;
КонецПроцедуры

Нужно, что бы в "Договора по умолчанию" попадали только Наименования Основной договор и т.д:
Код 1C v 8.х Выбор
Когда Наименование ПОДОБНО "Договор №%" тогда "Договора с номером" //Подходит любая строка, начинающаяся с "Договор №"
Когда Наименование ПОДОБНО "Основной договор%[^А-яЁё"+Символ(33)+"-"+Символ(126)+"№»«"+Символы.ПС+Символы.Таб+Символы.ПФ+Символы.НПП+Символы.ВТаб+"]%" тогда "Договора по умолчанию" //Подходит любая строка, начинающаяся с "Основной договор"
Иначе "Прочие"
Конец Как ВидДоговора

Информация взята с сайта

Оператор ПОДОБНО в запросе проверяет строковые значения из таблиц на подобие шаблону.
Используется следующим образом слева от этого оператора помещается проверяемая строка, а справа шаблон.

После проверки возвращает Истина или Ложь, соответственно активно используется в условиях.
Для создания шаблона используются следующие служебные символы:

  • % (процент) - последовательность, содержащая любое количество произвольных символов
  • _ (подчеркивание) - один произвольный символ
  • […] (в квадратных скобках один или несколько символов) - любой одиночный символ из перечисленных внутри квадратных скобок
    Также кроме различных символов можно использовать диапазоны, например a-z(A-z), что означает наличие произвольного символа, входящего в диапазон, включая концы диапазона.
  • [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов) - любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания

Остальные символы используются по своему прямому назначению.
Если в качестве символа необходимо передать один из вышеуказанных служебных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.
Например, шаблон “%АБВ[абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов:
буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в.
Причем перед этой последовательностью может располагаться произвольный набор символов.

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