Конечно, давайте разберемся, как работает оператор ПОДОБНО в языке запросов "1С:Предприятие". Оператор ПОДОБНО используется для сравнения строк на соответствие шаблону. Это мощный инструмент для поиска и фильтрации данных, когда вам нужно найти строки, частично соответствующие определенному тексту или формату.
Назначение оператора ПОДОБНО:
Оператор ПОДОБНО позволяет задать шаблон поиска и проверить, соответствует ли значение строкового выражения этому шаблону. Он особенно полезен в ситуациях, когда:
- Вы хотите найти строки, начинающиеся, заканчивающиеся или содержащие определенную последовательность символов.
- Вам нужно найти строки, соответствующие определенному формату (например, номер телефона, артикул, код).
- Вы хотите выполнить поиск с использованием символов подстановки (wildcards), чтобы задать гибкие условия поиска.
Синтаксис оператора ПОДОБНО:
Оператор ПОДОБНО используется в выражениях ГДЕ и ИМЕЮЩИЕ запроса и имеет следующий синтаксис:
Фрагмент кода
Выражение ПОДОБНО Шаблон
- Выражение: Это строковое выражение (поле таблицы, переменная или функция, возвращающая строку), которое нужно проверить на соответствие шаблону.
- ПОДОБНО: Ключевое слово оператора.
- Шаблон: Строка, представляющая шаблон, которому должно соответствовать выражение. Шаблон может содержать символы подстановки (wildcards), которые позволяют задать гибкие условия поиска.
Символы подстановки (Wildcards) в операторе ПОДОБНО:
Оператор ПОДОБНО поддерживает следующие символы подстановки:
- Символ "%" (Процент):Заменяет любую последовательность символов, включая отсутствие символов.
Аналог * (звездочка) в поисковых шаблонах многих операционных систем.
Примеры использования "%":"Строка" ПОДОБНО "С%": Истина (начало строки "С", далее любые символы).
"Строка" ПОДОБНО "%ка": Истина (окончание строки "ка", перед этим любые символы).
"Строка" ПОДОБНО "%ро%": Истина (содержит подстроку "ро", до и после могут быть любые символы).
"Строка" ПОДОБНО "%": Истина (любая строка, так как "%" заменяет любую последовательность символов).
"Строка" ПОДОБНО "С%": Истина ("Строка" начинается с "С").
"C" ПОДОБНО "С%": Истина ("C" начинается с "С" и может иметь символы после).
"Слово" ПОДОБНО "%ово%": Истина ("Слово" содержит "ово").
"Книга" ПОДОБНО "%ниг%": Истина ("Книга" содержит "ниг").
"Автомобиль" ПОДОБНО "%мобил%": Истина ("Автомобиль" содержит "мобил"). - Символ "_" (Подчеркивание):Заменяет ровно один любой символ.
Аналог ? (вопросительный знак) в поисковых шаблонах многих операционных систем.
Примеры использования "_":"Строка" ПОДОБНО "С____а": Истина (начало "С", затем ровно 4 любых символа, затем "а").
"Слова" ПОДОБНО "Слов_": Истина (начало "Слов", затем ровно 1 любой символ).
"Дом" ПОДОБНО "___": Истина (ровно 3 любых символа).
"Кот" ПОДОБНО "К_т": Истина ("К" затем любой символ затем "т").
"Бок" ПОДОБНО "Б_к": Истина ("Б" затем любой символ затем "к").
"Сок" ПОДОБНО "С_к": Истина ("С" затем любой символ затем "к").
"Слон" ПОДОБНО "Сл_н": Истина ("Сл" затем любой символ затем "н"). - Набор символов в квадратных скобках "[...]" (Квадратные скобки):Указывает один символ, который должен быть одним из перечисленных в скобках.
Внутри скобок можно перечислять символы по одному или задавать диапазоны символов.
Примеры использования "[...]":"Строка" ПОДОБНО "Стр[оуи]ка": Истина (четвертый символ должен быть "о", "у" или "и").
"С123" ПОДОБНО "С[0-9][0-9][0-9]": Истина (после "С" должны идти ровно 3 цифры от 0 до 9).
"Буква" ПОДОБНО "[А-Я]уква": Истина (первый символ должен быть заглавной буквой от "А" до "Я").
"cтрока" ПОДОБНО "[а-я]трока": Истина (первый символ должен быть строчной буквой от "а" до "я").
"Символ" ПОДОБНО "[АБВГДЕ]имвол": Истина (первый символ должен быть одной из букв А, Б, В, Г, Д, Е).
"Номер1" ПОДОБНО "Номер[1234567890]": Истина (последний символ должен быть цифрой).
"БукваА" ПОДОБНО "Буква[А-Я]": Истина (последний символ должна быть заглавной буквой от "А" до "Я").
"буквая" ПОДОБНО "буква[а-я]": Истина (последний символ должна быть строчной буквой от "а" до "я"). - Набор символов в квадратных скобках с символом отрицания "[^...]" (Квадратные скобки с отрицанием):Указывает один символ, который НЕ должен быть одним из перечисленных в скобках.
Аналогично набору символов в квадратных скобках, внутри скобок можно перечислять символы по одному или задавать диапазоны.
Примеры использования "[^...]":"Строка" ПОДОБНО "Стр[^аоу]ка": Истина (четвертый символ НЕ должен быть "а", "о" или "у").
"CDEF" ПОДОБНО "C[^0-9][^0-9][^0-9]": Истина (после "C" должны идти ровно 3 символа, каждый из которых НЕ является цифрой).
"аишка" ПОДОБНО "[^А-Я]ишка": Истина (первый символ НЕ должен быть заглавной буквой от "А" до "Я").
"Знак!" ПОДОБНО "Знак[^а-я]": Истина (последний символ НЕ должен быть строчной буквой от "а" до "я").
"Символ?" ПОДОБНО "Символ[^0123456789]": Истина (последний символ НЕ должен быть цифрой).
"НомерА" ПОДОБНО "Номер[^1234567890]": Истина (последний символ НЕ должен быть цифрой).
"Буква1" ПОДОБНО "Буква[^А-Я]": Истина (последний символ НЕ должна быть заглавной буквой от "А" до "Я").
"букваЯ" ПОДОБНО "буква[^а-я]": Истина (последний символ НЕ должна быть строчной буквой от "а" до "я"). - Символ экранирования "" (Обратная косая черта):Используется для экранирования специальных символов (%, _, [, ], ^, \), если нужно искать их как обычные символы в тексте, а не как символы подстановки.
Чтобы искать сам символ обратной косой черты \, нужно использовать двойную обратную косую черту \\.
Примеры использования "":"Процент 50%" ПОДОБНО "Процент 50\%": Истина (поиск именно символа "%", а не подстановки).
"Нижнее_подчеркивание" ПОДОБНО "Нижнее\_подчеркивание": Истина (поиск именно символа "_", а не подстановки).
"Квадратные [скобки]" ПОДОБНО "Квадратные \[скобки\]": Истина (поиск символов "[" и "]", а не набора символов).
"Обратная\черта" ПОДОБНО "Обратная\\черта": Истина (поиск именно символа "").
Примеры запросов с использованием оператора ПОДОБНО в "1С":
Пример 1: Поиск номенклатуры, начинающейся на "Мон":
Фрагмент кода
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Наименование ПОДОБНО "Мон%"
Пример 2: Поиск контрагентов, у которых ИНН начинается на "77" (код Москвы) и содержит 10 цифр:
Фрагмент кода
ВЫБРАТЬ
Контрагенты.Ссылка,
Контрагенты.Наименование,
Контрагенты.ИНН
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
Контрагенты.ИНН ПОДОБНО "77________" // 77 и 8 символов "_"
Пример 3: Поиск документов "Поступление товаров", у которых номер содержит цифры и буквы:
Фрагмент кода
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Ссылка,
ПоступлениеТоваровУслуг.Номер,
ПоступлениеТоваровУслуг.Дата
ИЗ
Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
ПоступлениеТоваровУслуг.Номер ПОДОБНО "%[0-9]%" И ПоступлениеТоваровУслуг.Номер ПОДОБНО "%[А-Яа-я]%" // Содержит хотя бы одну цифру и хотя бы одну букву
Пример 4: Поиск сотрудников, у которых фамилия начинается на букву из диапазона "А" - "Г":
Фрагмент кода
ВЫБРАТЬ
Сотрудники.Ссылка,
Сотрудники.Фамилия,
Сотрудники.Имя
ИЗ
Справочник.Сотрудники КАК Сотрудники
ГДЕ
Сотрудники.Фамилия ПОДОБНО "[А-Г]%"
Пример 5: Поиск документов, у которых комментарий содержит символ "%":
Фрагмент кода
ВЫБРАТЬ
ЗаказПокупателя.Ссылка,
ЗаказПокупателя.Номер,
ЗаказПокупателя.Комментарий
ИЗ
Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ
ЗаказПокупателя.Комментарий ПОДОБНО "%\\%" // Экранирование символа "%"
Производительность и индексы при использовании ПОДОБНО:
- Использование индексов: Для повышения производительности запросов, особенно на больших объемах данных, важно, чтобы поля, используемые в операторе ПОДОБНО, были проиндексированы. "1С:Предприятие" использует индексы для ускорения поиска данных. Если поле, по которому выполняется поиск с ПОДОБНО, проиндексировано, запрос будет выполняться значительно быстрее, чем при полном переборе данных.
- Сложность шаблона: Сложность шаблона также влияет на производительность. Более простые шаблоны (например, начинающиеся с символов, а не с %) обычно выполняются быстрее, чем сложные шаблоны с большим количеством символов подстановки и диапазонов.
- Расположение символов подстановки: Использование символа % в начале шаблона (например, ПОДОБНО "%фраза") может снизить производительность, так как в этом случае индекс может использоваться неэффективно. Если возможно, старайтесь использовать шаблоны, где символы подстановки расположены в конце строки или в середине, а начало строки задано явно.
В заключение:
Оператор ПОДОБНО – это мощный инструмент для гибкого поиска и фильтрации строк в запросах "1С:Предприятие". Понимание символов подстановки и правильное использование оператора ПОДОБНО позволяет создавать эффективные и выразительные запросы для решения разнообразных задач анализа и обработки данных. При использовании ПОДОБНО важно учитывать вопросы производительности и по возможности оптимизировать запросы, используя индексы и не усложняя шаблоны без необходимости.