Разработка и Конфигурация · 10 мин
Как указать кавычку в 1С: все рабочие способы
Как указать кавычку в 1С: удвоение кавычек в строковых литералах, функция Символ(34), кавычки в запросах, именах реквизитов и при выводе на печать.
Во встроенном языке 1С кавычка является служебным символом: ей открывается и закрывается строковый литерал. Поэтому просто вставить кавычку внутрь строки нельзя — компилятор воспримет её как конец строки и выдаст ошибку синтаксиса. Эта особенность вызывает вопросы и у начинающих разработчиков, и у пользователей, которые сталкиваются с кавычками в названиях товаров, организаций или при выгрузке данных.
Существует несколько штатных способов указать кавычку в 1С: удвоение символа в строковом литерале, функция Символ() с кодом 34, а также особые приёмы для текста запросов и для квадратных скобок в именах полей. Каждый способ имеет свою область применения, и выбор зависит от того, где именно нужна кавычка — в коде модуля, в тексте запроса, в форматной строке или в данных, вводимых пользователем.
Ниже разобраны все практические сценарии: от простого вывода сообщения с кавычками до подстановки кавычек в запросы и обработки названий контрагентов вида ООО «Ромашка». Отдельно рассмотрены типичные ошибки, из-за которых код не компилируется или запрос возвращает пустой результат.
Как указать кавычку в строковом литерале удвоением
Основной способ — удвоить кавычку внутри строки. Два подряд идущих символа кавычек "" внутри строкового литерала интерпретируются как одна обычная кавычка в значении строки. Это стандартное правило языка, работающее во всех модулях: в общих модулях, модулях объектов, форм и внешних обработках.
Пример: чтобы получить строку ООО "Ромашка", в коде пишут:
Наименование = "ООО ""Ромашка""";
Сообщить(Наименование); // ООО "Ромашка"
Обратите внимание: внешние кавычки — это границы литерала, а двойные внутри — данные. Если требуется, чтобы строка начиналась или заканчивалась кавычкой, в начале или в конце ставится тройная кавычка: две дают символ, третья закрывает литерал.
Строка = """Привет"""; // результат: "Привет"
Проверить результат проще всего через Сообщить() или через вывод в табло в отладчике: поставьте точку останова после присваивания и посмотрите значение переменной. Если в значении видна одна кавычка там, где ожидалась, — всё сделано верно.
Как указать кавычку через Символ(34)
Второй способ — функция Символ(), возвращающая символ по его коду. Код двойной кавычки в Unicode — 34. Этот вариант удобен, когда кавычек много и удвоение делает строку нечитаемой, либо когда строка собирается динамически.
Кавычка = Символ(34);
Наименование = "ООО " + Кавычка + "Ромашка" + Кавычка;
// ООО "Ромашка"
Способ особенно полезен при формировании CSV-файлов, JSON-подобных структур вручную или текста для внешних систем, где кавычки — часть формата. В таких сценариях вынесение кавычки в переменную снижает риск ошибиться в количестве символов.
Для одинарной кавычки (апострофа) код — 39, для французских кавычек-ёлочек «» — 171 и 187, для типографских «лапок» — 8220 и 8221. Если пользователи вводят названия с ёлочками, а вам нужно сравнить их со строкой в коде, используйте именно Символ(171) и Символ(187) — это надёжнее, чем копировать символы из текста.
Сравнение способов
Быстрее всего для коротких статических строк; становится нечитаемым при большом количестве кавычек
Удобен при динамической сборке строк и массовом использовании; требует конкатенации и слегка медленнее читается
Правильный выбор для наименований организаций и печатных форм; не путать с обычной кавычкой
Как указать кавычку в тексте запроса
Текст запроса в 1С — это обычная строка, поэтому правило удвоения действует и там. Если в условии запроса нужно сравнить поле со строковым значением, содержащим кавычку, кавычки внутри литерала запроса удваиваются дважды по сути: один раз для строки 1С, а сами кавычки значения — внутри текста запроса.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование = ""ООО """"Ромашка""""""";
Такая конструкция трудно читается и легко приводит к ошибкам. Правильная практика — не вставлять значения в текст запроса вообще, а использовать параметры. Параметр передаёт значение как есть, и кавычки в нём не требуют никакого экранирования:
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", "ООО ""Ромашка""");
Если в запросе нужно указать кавычку как часть имени поля или псевдонима со спецсимволами, используются квадратные скобки: [Поле с пробелом]. Это отдельный механизм языка запросов, не связанный со строковыми литералами.
Кавычки в наименованиях и данных, вводимых пользователем
Когда пользователь вводит в поле наименования значение вида ООО «Вега» или ООО "Вега", никакого экранирования не требуется: данные хранятся в базе как есть. Правила удвоения касаются только исходного кода, а не данных в информационной базе.
Проблемы возникают на стыке кода и данных. Типичный сценарий — поиск контрагента по наименованию: если в базе название с ёлочками, а сравнение в коде идёт со строкой с прямыми кавычками, совпадения не будет. Перед поиском стоит нормализовать строку — заменить ёлочки и лапки на прямые кавычки или наоборот:
Нормализованное = СтрЗаменить(Наименование, Символ(171), Символ(34));
Нормализованное = СтрЗаменить(Нормализованное, Символ(187), Символ(34));
Ещё один сценарий — выгрузка в CSV, где кавычки внутри значения по стандарту формата удваиваются, а само значение оборачивается в кавычки. Если выгружаете данные собственной обработкой, учитывайте это правило, иначе файл не откроется корректно в Excel или в системе получателя.
При обмене данными с внешними системами заранее договоритесь, какие кавычки используются в названиях: прямые, ёлочки или лапки. Разнобой в символах — одна из самых частых причин «не находится контрагент» при загрузке выписок и заказов.
Кавычки в форматных строках, макетах и печатных формах
В форматной строке функции Формат() кавычки используются для литерального текста внутри шаблона. Если сам литерал должен содержать кавычку, она удваивается по общему правилу, поскольку форматная строка — тоже строковый литерал.
В макетах печатных форм кавычки в тексте ячеек не требуют экранирования — это данные, а не код. Но если текст подставляется в параметр макета из кода, правила строковых литералов снова действуют в месте формирования значения.
Для печатных форм, где по правилам оформления нужны ёлочки (например, в реквизитах организации), формируйте строку через Символ(171) и Символ(187) или храните наименование сразу с нужными символами. Смешивание прямых кавычек и ёлочек в одном документе выглядит небрежно и может вызвать вопросы у контрагентов.
- 1Найдите строку, на которую указывает компилятор, и посчитайте кавычки: их количество должно быть чётным с учётом удвоений
- 2Замените проблемный фрагмент на конкатенацию с Символ(34), чтобы сделать код читаемым
- 3Если ошибка в запросе — перенесите значение в параметр запроса
- 4Выполните код в отладчике и проверьте итоговое значение строки через табло
- 5Убедитесь, что в данных и в коде используются одинаковые виды кавычек (прямые или ёлочки)
Типичные ошибки и как их проверить
Самая частая ошибка — нечётное количество кавычек в строке. Компилятор сообщает «Ожидается символ ';'» или «Неправильный строковый литерал», а причину найти сложно, если строка длинная. Помогает приём: временно разбить строку на конкатенацию коротких частей и локализовать сбойный фрагмент.
Вторая ошибка — копирование текста из Word или писем, где автозамена превратила прямые кавычки в лапки. В редакторе кода 1С такие символы выглядят похоже на обычные кавычки, но компилятор их не распознаёт как границы строки. Лечится ручной заменой символов в коде.
Третья группа ошибок — в запросах: вставка значения с кавычками конкатенацией приводит либо к синтаксической ошибке запроса, либо к пустому результату, потому что итоговый литерал не совпадает с данными в базе. Решение одно — параметры запроса.
Как проверить результат
Кавычки отображаются там, где ожидалось, по одной
Кавычек нет или они удвоены в самом значении
Модуль сохраняется без сообщений об ошибках
Ошибки «Ожидается символ» или «Неправильный строковый литерал»
Запись с наименованием с кавычками найдена
Пустая выборка при заведомо существующей записи
FAQ
Как вывести кавычку в сообщении пользователю?
Удвойте кавычку внутри строки: Сообщить("Выбран контрагент ""Ромашка"""). В тексте сообщения появится одна кавычка. Либо соберите строку через Символ(34), если кавычек много.
Чем отличаются прямые кавычки от ёлочек в 1С?
Технически это разные символы с разными кодами: прямая кавычка — 34, ёлочки — 171 и 187. Границей строкового литерала может быть только прямая кавычка. В данных и печатных формах ёлочки допустимы и часто предпочтительны по правилам оформления.
Можно ли использовать одинарную кавычку для строк в 1С?
Нет. Во встроенном языке 1С строковый литерал ограничивается только двойными кавычками. Одинарная кавычка внутри строки — это обычный символ, не требующий экранирования.
Как указать кавычку, если строка занимает несколько строк кода?
Многострочный литерал продолжается вертикальной чертой | в начале каждой следующей строки. Правило удвоения кавычек действует в каждой части так же, как в обычной строке.
Почему запрос не находит наименование с кавычками?
Чаще всего значение вставлено в текст запроса конкатенацией с неправильным экранированием, либо в базе используются ёлочки, а в условии — прямые кавычки. Передайте значение через параметр запроса и при необходимости нормализуйте кавычки функцией СтрЗаменить.
Что важно запомнить
В коде 1С кавычка указывается удвоением ("") или через Символ(34). В запросах значения с кавычками передавайте только параметрами. В данных экранирование не нужно, но следите за единообразием прямых кавычек и ёлочек при поиске и обмене.