• Подобно в условиях запроса. Подобно в условиях запроса 1с подобно в запросе

    09.05.2022

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

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

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

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

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

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

    Несмотря на все недостатки, поиск по текстовому полю до сих пор является одним из самых популярных. Строковые типы данных мы можем встретить повсеместно – наименования, номера счетов, адреса, а также другая информация может храниться в этом формате. В запросах на встроенном языке 1С для удобства разработчиков используется специальный оператор «ПОДОБНО». Это одна из самых используемых команд, поэтому без досконального знания ее синтаксиса и возможностей программисту будет сложно работать.

    Использование оператора «ПОДОБНО»

    Перед тем, как применять какой-либо оператор на практике, нужно четко понять его предназначение, места применения и синтаксис. Целью использования «ПОДОБНО» в запросе 1С является проверка на удовлетворение условию, представленному в виде шаблона. Возвращаемым значением является логический тип – истина или ложь, демонстрирующий выполняется ли заданное условие. Использоваться оператор ПОДОБНО может в нескольких местах запроса:

    • В блоке условий, обозначенном ключевым словом «ГДЕ»;
    • В конструкции Выбор Когда Тогда Иначе Конец;
    • Непосредственно в полях выборки, как результат сравнения полей.

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

    1. «%»– последовательность любых символов произвольной длины. Используется для поиска отдельных слов или цифр в строке;
    2. «_»– любой единичный символ. Предназначен для обозначения наличия одного знака;
    3. «[…]»– последовательность символов для сравнения со знаком в строке. С помощью подобного шаблона проверяется соответствие любому из перечисленных в скобках знаков. Также можно задать диапазон цифр или букв ([а-г], );
    4. «[^…]»– противоположный предыдущему шаблон. Проверяется отличие указанного в строке символа от перечисленных в скобках.

    Чтобы лучше усвоить и понять принципы составления верных шаблонов, рассмотрим некоторые, часто встречающиеся в жизни разработчиков, примеры. Первый, когда нам необходимо выбрать из справочника номенклатуры все позиции, в наименованиях которых встречается слово «РЕЗЕЦ». В этом случае нам необходимо использовать ПОДОБНО в условиях запроса:

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

    Если мы уберем оба символа «%», то запрос покажет номенклатуру, у которой наименование полностью совпадает с указанным в кавычках. Если оставим шаблон «РЕЗЕЦ%» или «%РЕЗЕЦ», то результатом будет список номенклатуры, оканчивающийся или начинающийся, соответственно, на заданную комбинацию символов.


    Разберем задачу, которая может поставить в тупик начинающих программистов, не знающих синтаксис запросов. Допустим, вам нужно найти всю номенклатуру, в наименовании которой есть символ «%». Специально для случаев, когда нужно вести поиск зарезервированных символов, существует оператор «спецсимвол». В качестве спецсимвола можно использовать #,\,/,~ и другие знаки, после которых любые зарезервированные символы будут обозначать просто знак.

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

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

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

    Функция ПОДОБНО применима во всех версиях платформы, начиная с 8, и ввиду ее применяемости разработчики 1С не захотят ее менять. Конечно, текстовый поиск всегда зависит от точности ввода наименования, но он все равно остается одним из самых распространенных. В связи с этим профессиональным разработчикам 1С необходимо изучить использование ПОДОБНО со всеми его нюансами.

    Рассмотрим назначение и использование условного оператора ПОДОБНО(eng. LIKE) в языке запроса 1С в примерах.

    Быстрый переход

    Предназначение

    Проверить на соответствие строкового значения в запросе указанному шаблону — возвращает значение Булево-типа (ИСТИНА или ЛОЖЬ).

    • Проверка регистро — независима.
    • При запросе используются индексы таблиц — не связано с индексами полнотекстового поиска.
    • Может долго выполнятся при больших таблицах.
    • Строки неограниченной длины следует привести функцией ПОДСТРОКА

    Места использования

    • В условиях оператора ГДЕ
    • В условиях конструкции ВЫБОР КОГДА <> ТОГДА «» ИНАЧЕ «» КОНЕЦ
    • В полях выборки (например: Наименование ПОДОБНО &ПараметрПодобно как СтрокаПодходит)

    Описание синтаксиса оператора ПОДОБНО

    Параметр оператора должен быть строкой: может задаться константой, либо передан как параметр запроса.

    Литералы(маски), указанные ниже, допускается использовать совместно и по отдельности.

    Точное указание строки

    ВЫБРАТЬ первые 10
    Ключи.Наименование
    ИЗ
    Справочник.Ключи КАК Ключи
    ГДЕ
    Ключи.Наименование ПОДОБНО "1"//Равносильно Ключи.Наименование ="1"

    Результат:

    % — литерал, означающий произвольное количество любых символов

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

    Результат : любые 10 наименований

    _ (подчеркивание): литерал, соответствующий одному любому символу

    Пример №1:

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

    Пример №2: начинающиеся на любой символ, затем следует «1», а дальше любые символы

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

    Результат:

    (в квадратных скобках один или несколько символов)

    • Каждый литерал, соответствующий одному любому символу — используется как ИЛИ.
      Допустимо указание диапазона, например a-z,0-5, означающее произвольный символ из заданного диапазона

    Пример

    ВЫБРАТЬ первые 10
    Ключи.Наименование
    ИЗ
    Справочник.Ключи КАК Ключи
    ГДЕ
    Ключи.Наименование ПОДОБНО "[лз]%"

    Результат : 10 начинающихся на «л» или «з»

    Пример: начинающиеся на 5,6,7

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

    Результат:

    [^] (в квадратных скобках значок исключения ^, за которым следует один или несколько символов)

    Равносильно любому символу (_) кроме указанных ()

    Пример

    ВЫБРАТЬ первые 10
    Ключи.Наименование
    ИЗ
    Справочник.Ключи КАК Ключи
    ГДЕ
    Ключи.Наименование ПОДОБНО "8.[^012]%"//не включаем 8.0,8.1,8.2

    Результат : все начинающиеся на «8.» исключая указанные

    СПЕЦСИМВОЛ — команда для указания в запросе зарегистрированных выше символов

    В качестве служебного символа допустимо использовать как минимум: #,~,/,\

    Пример:

    ВЫБРАТЬ первые 10
    Ключи.Наименование
    ИЗ
    Справочник.Ключи КАК Ключи
    ГДЕ
    Ключи.Наименование ПОДОБНО "#_" СПЕЦСИМВОЛ "#"

    Результат:

    Применимость в платформах

    Неверные параметры ПОДОБНО <>

    • Передается параметр не строкового типа: например число 1 вместо строки «1»
    • Сравнивается поле не строкового типа с верной маской (например ссылка) или при соединении значение не проверяется на ЕстьNUL

    Обратите внимание на текст ошибки, где выводится вопрос:

    Ключи.Наименование ПОДОБНО <>&L

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

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

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

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

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

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

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

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

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

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

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

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