Back to top

Подобно в 1с

Опубликовано e-1c@mail.ru - ср, 03/29/2017 - 16:39

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

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

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

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