43
NULL – отсутствующие значения.
Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено.
NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа.
NULL...
26
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос. Создается этот объект вызовом конструкции Новый Запрос. Запрос удобно...
18
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на...
12
Столкнулся с задачей, нужно было выбрать все документы по выплате и сгруппировать их по типу документа!
Перелистав все ЖКК и интернет, понял что простого способа получить Вид документа в запросе нет:(Пришлось...
Несмотря на все недостатки, поиск по текстовому полю до сих пор является одним из самых популярных. Строковые типы данных мы можем встретить повсеместно – наименования, номера счетов, адреса, а также другая информация может храниться в этом формате. В запросах на встроенном языке 1С для удобства разработчиков используется специальный оператор «ПОДОБНО». Это одна из самых используемых команд, поэтому без досконального знания ее синтаксиса и возможностей программисту будет сложно работать.
Использование оператора «ПОДОБНО»
Перед тем, как применять какой-либо оператор на практике, нужно четко понять его предназначение, места применения и синтаксис. Целью использования «ПОДОБНО» в запросе 1С является проверка на удовлетворение условию, представленному в виде шаблона. Возвращаемым значением является логический тип – истина или ложь, демонстрирующий выполняется ли заданное условие. Использоваться оператор ПОДОБНО может в нескольких местах запроса:
- В блоке условий, обозначенном ключевым словом «ГДЕ»;
- В конструкции Выбор Когда Тогда Иначе Конец;
- Непосредственно в полях выборки, как результат сравнения полей.
Синтаксис проверки всегда одинаков и состоит из 3 звеньев. Слева текстовое значение, которое проверяется, затем непосредственно сам оператор «ПОДОБНО», а справа – шаблон, по которому идет проверка. Для быстрого и удобного составления шаблонов существуют специальные символы, облегчающие разработку:
- «%»– последовательность любых символов произвольной длины. Используется для поиска отдельных слов или цифр в строке;
- «_»– любой единичный символ. Предназначен для обозначения наличия одного знака;
- «[…]»– последовательность символов для сравнения со знаком в строке. С помощью подобного шаблона проверяется соответствие любому из перечисленных в скобках знаков. Также можно задать диапазон цифр или букв ([а-г], );
- «[^…]»– противоположный предыдущему шаблон. Проверяется отличие указанного в строке символа от перечисленных в скобках.
Чтобы лучше усвоить и понять принципы составления верных шаблонов, рассмотрим некоторые, часто встречающиеся в жизни разработчиков, примеры. Первый, когда нам необходимо выбрать из справочника номенклатуры все позиции, в наименованиях которых встречается слово «РЕЗЕЦ». В этом случае нам необходимо использовать ПОДОБНО в условиях запроса:
ВЫБРАТЬ Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование ПОДОБНО "%РЕЗЕЦ%"Если мы уберем оба символа «%», то запрос покажет номенклатуру, у которой наименование полностью совпадает с указанным в кавычках. Если оставим шаблон «РЕЗЕЦ%» или «%РЕЗЕЦ», то результатом будет список номенклатуры, оканчивающийся или начинающийся, соответственно, на заданную комбинацию символов.
Разберем задачу, которая может поставить в тупик начинающих программистов, не знающих синтаксис запросов. Допустим, вам нужно найти всю номенклатуру, в наименовании которой есть символ «%». Специально для случаев, когда нужно вести поиск зарезервированных символов, существует оператор «спецсимвол». В качестве спецсимвола можно использовать #,\,/,~ и другие знаки, после которых любые зарезервированные символы будут обозначать просто знак.
ВЫБРАТЬ Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование ПОДОБНО "%#%" СПЕЦСИМВОЛ "#"Если вам нужно в поиске использовать параметр, то переменная в запросе с параметром ПОДОБНО используется при помощи сложения. Помните, что параметр должен быть строкового типа или вам потребуется перевести ее в строку в запросе. Это достаточно сложная операция и лучше ее исключить заранее.
ВЫБРАТЬ Номенклатура.Наименование КАК Наименование ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Наименование ПОДОБНО "%" + &наименование + "%"Функция ПОДОБНО применима во всех версиях платформы, начиная с 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
Оператор ПОДОБНО в запросе проверяет строковые значения из таблиц на подобие шаблону.
Используется следующим образом слева от этого оператора помещается проверяемая строка, а справа шаблон.
После проверки возвращает Истина или Ложь, соответственно активно используется в условиях.
Для создания шаблона используются следующие служебные символы:
- % (процент) - последовательность, содержащая любое количество произвольных символов
- _ (подчеркивание) - один произвольный символ
- […] (в квадратных скобках один или несколько символов) - любой одиночный символ из перечисленных внутри квадратных скобок
Также кроме различных символов можно использовать диапазоны, например a-z(A-z), что означает наличие произвольного символа, входящего в диапазон, включая концы диапазона. - [^…] (в квадратных скобках значок отрицания, за которым следует один или несколько символов) - любой одиночный символ, кроме тех, которые перечислены следом за значком отрицания
Остальные символы используются по своему прямому назначению.
Если в качестве символа необходимо передать один из вышеуказанных служебных символов, то ему должен предшествовать <Спецсимвол>. Сам <Спецсимвол> (любой подходящий символ) определяется в этом же операторе после ключевого слова СПЕЦСИМВОЛ.
Например, шаблон “%АБВ[абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов:
буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в.
Причем перед этой последовательностью может располагаться произвольный набор символов.
Процедура ВыбратьДоговорСодержащийВНаименованииТекст(мТекст)
//В запросе будем использовать шаблон вида "%" + мТекст + "%"
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наименование", "%" + Текст + "%");
Запрос.Текст = "ВЫБРАТЬ
| Договоры.Ссылка,
| Договоры.Владелец
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК Договоры
|
|ГДЕ
| Договоры.Наименование ПОДОБНО &Наименование";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Сообщить("Договоры содержащие в наименование: " + мТекст + " имеют следующие Контрагенты");
Пока Выборка.Следующий() Цикл
Сообщить("Контрагент: " + Выборка.Владелец + "; Договор: " + Выборка.Ссылка
КонецЕсли;
КонецПроцедуры
Иногда возникает ситуация, когда в 1С 8.3 или 8.2 нужно сделать выборку, например, из справочника всех элементов, у которых в наименовании имеется слово «глазурь». Или из справочника выбрать всех контрагентов, в фамилии которых встречается слово «Иван». В общем, проверить какое-нибудь строковое значение.
Для этого существует оператор в запросах 1С 8.3 и 8.2 — «Подобно». Используется он, соответственно, в условиях:
Получите 267 видеоуроков по 1С бесплатно:
Как пользоваться шаблонами в запросах 1С?
Чтобы сформировать условие отбора, в качестве параметра нужно передать некий шаблон. Для создания шаблона существуют так называемые служебные символы.
Например, символ «%» допускает любую последовательность произвольных символов:
Существуют и другие специальные символы:
- % (процент) — допускает любую последовательность произвольных символов;
- _ (нижнее подчеркивание) — любой один символ;
- […] – один произвольный символ из перечисленных внутри скобок. Кроме перечисления символов можно использовать диапазоны. Пример: а-о;
- [^…] – то же самое, что и предыдущее, но наоборот. Знак «^» означает отрицание.