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

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

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

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

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


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

Забавное применение метода ПОДОБНО:

Код 1C v 8.3
 

&НаСервере
Функция ПроверитьНаМаску(С, Маска)
    З = Новый Запрос(
    "ВЫБРАТЬ 1 ГДЕ
    |    ВЫБОР
    |        КОГДАС ПОДОБНОМаска
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ ");
    З.УстановитьПараметр("С", С);
    З.УстановитьПараметр("Маска", Маска);
    Выборка = З.Выполнить().Выбрать();
    Возврат Выборка.Следующий()
КонецФункции

&НаСервере
Процедура дор_ПриЗаписиНаСервереПеред(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    //Тут важно брать не из объекта формы, а из объекта базы

    Для Каждого Строка ИЗ ТекущийОбъект.КонтактнаяИнформация Цикл
        
        Если Строка.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда
            Если Не ПроверитьНаМаску(Строка.Представление, "+7([0-9][0-9][0-9])[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]") Тогда
                Сообщить("Телефон: " + Строка.Представление + " не соответствует формату +7(999)999-99-99, исправьте перед записью !");
                Отказ = истина;
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;
КонецПроцедуры
_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
Надо добавить, что этот оператор не работает со строковыми реквизитами неограниченной длины.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.