Как использовать символ точки с запятой (;) в тексте запроса 1С и избежать ошибок в консоли запросов?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с языком запросов 1С:Предприятие разработчики иногда сталкиваются с ситуацией, когда запрос, содержащий точку с запятой внутри строкового литерала (например, при поиске по шаблону ГДЕ Наименование ПОДОБНО "%;%"), вызывает синтаксическую ошибку в консоли запросов. Рассмотрим подробнее, почему возникает эта проблема и как ее правильно решить.

Выясним причину возникновения проблемы

В языке запросов 1С символ точки с запятой ; является системным разделителем запросов в составе пакетного запроса. При этом платформа 1С:Предприятие штатно воспринимает точку с запятой внутри кавычек как обычный символ строки и не требует специального экранирования (экранируются в 1С только сам символ двойных кавычек путем их удвоения).

Проблема кроется в работе некоторых внешних обработок (консолей запросов). Перед передачей запроса на исполнение движку платформы консоль разбивает текст на отдельные запросы пакета по символу ;. Если в консоли используется упрощенный алгоритм разбора, который не учитывает контекст кавычек, обработка ошибочно режет текст запроса прямо внутри строки "%;%". В результате на выполнение передаются фрагменты с нарушенным синтаксисом.

Способ 1. Передача значения через параметр запроса

Проанализируем наиболее надежный и стандартизированный способ решения — вынос строки с точкой с запятой в параметр запроса. В этом случае символ ; находится в значении параметра, а не в тексте запроса, что полностью исключает ошибки парсинга в любых консолях.

Разберем по шагам написание такого запроса:

  1. В тексте запроса укажем условие с использованием параметра &ШаблонПоиска:

ВЫБРАТЬ
	Контрагенты.Ссылка КАК Ссылка,
	Контрагенты.Наименование КАК Наименование
ИЗ
	Справочник.Контрагенты КАК Контрагенты
ГДЕ
	Контрагенты.Наименование ПОДОБНО &ШаблонПоиска
  1. В таблице параметров консоли запросов (или программно через метод УстановитьПараметр()) зададим значение параметра &ШаблонПоиска равным строке "%;%".

Способ 2. Использование Конструктора запросов

Сформировать корректное выражение можно с помощью встроенного Конструктора запросов. При формировании условий через интерфейс конструктора платформа корректно обрабатывает строковые выражения, что снижает риск сбоев при передаче текста обработки движку запросов.

Способ 3. Использование современной консоли запросов

Рассмотрим вариант решения проблемы путем обновления инструментария разработчика. Если консоль запросов разбивает текст по точкам с запятой без учета кавычек, рекомендуется перейти на более актуальную или альтернативную консоль запросов.

Современные консоли разработчика оснащены полноценным лексическим анализатором кода. Они корректно игнорируют разделители пакета внутри строковых литералов, благодаря чему запросы вида ВЫБРАТЬ "%;%" КАК Поле или условия ПОДОБНО "%;%" выполняются без ошибок.

← На главную