helpf.pro
Регистрация
 +4 
Распечатать

Оператор ПОДОБНО

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

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

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


Нужно, что бы в "Договора по умолчанию" попадали только Наименования Основной договор и т.д:
Код 1C v 8.х
 Выбор
Когда Наименование ПОДОБНО "Договор №%" тогда "Договора с номером" //Подходит любая строка, начинающаяся с "Договор №"
Когда Наименование ПОДОБНО "Основной договор%[^А-яЁё"+Символ(33)+"-"+Символ(126)+"№»«"+Символы.ПС+Символы.Таб+Символы.ПФ+Символы.НПП+Символы.ВТаб+"]%" тогда "Договора по умолчанию" //Подходит любая строка, начинающаяся с "Основной договор"
Иначе "Прочие"
Конец Как ВидДоговора
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 102988
 +4 
Распечатать
Возможно, вас также заинтересует
Автоматическая установка ширины колонки табличного документа. 0
Процедура, которая " примерно" делает автоширину колонок (навроде, как если бы выделить все колонки и дважды щелкнуть мышкой по границе заголовка колонки). Привожу текст, работает неахти, но лучше чем ничего: Процедура...
Алгоритм шифрования RC4 0
Для решения некоторых задач, иногда требуется имееть возможность шифровать и дешифровывать, какие-то данные. Но при этом нет возможности использовать стороние внешнии компоненты. Предлагаем пример реализации...
Выгрузка / Загрузка данных посредством текстовых (TXT) файлов 2
Для работы с текстовыми документами существуют три типа данных – ТекстовыйДокумент, ЗаписьТекста и ЧтениеТекста . Разница двух подходов состоит в способе загрузки документа: ТекстовыйДокумент загружает файл...
Загрузка Dbf-файлов с длиной имени больше 8 символов 0
Во время написания обработки чтения dbf файла столкнулся с проблемой: длина имени файла больше 8-ми символов. Вот так решил проблему: Процедура ПрочитатьФайлНажатие(Элемент) //Получаем объект Файл НашФайл = Новый...
Загрузка данных из текстовых файлов с выборкой через ADO. 0
Часто бывает потребность загружать данные из текстовых форматов, причем информация для загрузки бьется на 2 и более файлов. Хорошо бы посредством SQL запроса выбирать данные из этих файлов и производить загрузку! Это...
Посмотреть все результаты поиска похожих
Комментарии
_kozak_
02.12.2013 19:45Комментарий: 3
_kozak_
Код 1C v 8.х
 Появилась необходимость применения ПОДОБНО для сравнения 2 полей Виртуальных таблиц, привожу найденное мною решение сей задачи.

МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МенеджерВТ ;

Запрос1.Текст = "ВЫБРАТЬ
| Список1.Строка1 КАК Строка1,
| Список1.Строка2 КАК Строка2,
| ""%"" + Список1.Строка2 + ""%"" КАК Строка3
|ПОМЕСТИТЬ Таблица1
|ИЗ
| Список1 КАК Список1";
Запрос1.Выполнить();

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ ;
Запрос2.Текст = "ВЫБРАТЬ
| Список2.Строка1 КАК Строка1,
| Таблица1.Строка1 КАК Строка2,
| Таблица1.Строка2 КАК Строка3,
|ПОМЕСТИТЬ Результат
|ИЗ
| Список2 КАК Список2
| ПРАВОЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
| ПО (Список2.Строка1 ПОДОБНО Таблица1.Строка3)";
Запрос2.Выполнить();

Запрос2.Текст = "УНИЧТОЖИТЬ Таблица1"
Запрос2.Выполнить();

Собственно сей ответ становится очевидным после того как узнаём о его существовании. )
_kozak_
02.12.2013 19:43Комментарий: 2
_kozak_
Появилась необходимость применения ПОДОБНО для сравнения 2 полей Виртуальных таблиц, привожу найденное мною решение сей задачи.

МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МенеджерВТ ;

Запрос1.Текст = "ВЫБРАТЬ
| Список1.Строка1 КАК Строка1,
| Список1.Строка2 КАК Строка2,
| ""%"" + Список1.Строка2 + ""%"" КАК Строка3
|ПОМЕСТИТЬ Таблица1
|ИЗ
| Список1 КАК Список1";
Запрос1.Выполнить();

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ ;
Запрос2.Текст = "ВЫБРАТЬ
| Список2.Строка1 КАК Строка1,
| Таблица1.Строка1 КАК Строка2,
| Таблица1.Строка2 КАК Строка3,
|ПОМЕСТИТЬ Результат
|ИЗ
| Список2 КАК Список2
| ПРАВОЕ СОЕДИНЕНИЕ Таблица1 КАК Таблица1
| ПО (Список2.Строка1 ПОДОБНО Таблица1.Строка3)";
Запрос2.Выполнить();

Запрос2.Текст = "УНИЧТОЖИТЬ Таблица1"
Запрос2.Выполнить();

Собственно сей ответ становится очевидным после того как узнаём о его существовании. )
szhukov
01.09.2010 12:58Комментарий: 1
szhukov
Надо добавить, что этот оператор не работает со строковыми реквизитами неограниченной длины.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.