К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как указать кавычку в 1С: все рабочие способы

Как указать кавычку в 1С: удвоение кавычек в строковых литералах, функция Символ(34), кавычки в запросах, именах реквизитов и при выводе на печать.

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

Существует несколько штатных способов указать кавычку в 1С: удвоение символа в строковом литерале, функция Символ() с кодом 34, а также особые приёмы для текста запросов и для квадратных скобок в именах полей. Каждый способ имеет свою область применения, и выбор зависит от того, где именно нужна кавычка — в коде модуля, в тексте запроса, в форматной строке или в данных, вводимых пользователем.

Ниже разобраны все практические сценарии: от простого вывода сообщения с кавычками до подстановки кавычек в запросы и обработки названий контрагентов вида ООО «Ромашка». Отдельно рассмотрены типичные ошибки, из-за которых код не компилируется или запрос возвращает пустой результат.

Как указать кавычку в строковом литерале удвоением

Основной способ — удвоить кавычку внутри строки. Два подряд идущих символа кавычек "" внутри строкового литерала интерпретируются как одна обычная кавычка в значении строки. Это стандартное правило языка, работающее во всех модулях: в общих модулях, модулях объектов, форм и внешних обработках.

Пример: чтобы получить строку ООО "Ромашка", в коде пишут:

Наименование = "ООО ""Ромашка""";

Сообщить(Наименование); // ООО "Ромашка"

Обратите внимание: внешние кавычки — это границы литерала, а двойные внутри — данные. Если требуется, чтобы строка начиналась или заканчивалась кавычкой, в начале или в конце ставится тройная кавычка: две дают символ, третья закрывает литерал.

Строка = """Привет"""; // результат: "Привет"

Проверить результат проще всего через Сообщить() или через вывод в табло в отладчике: поставьте точку останова после присваивания и посмотрите значение переменной. Если в значении видна одна кавычка там, где ожидалась, — всё сделано верно.

Как указать кавычку через Символ(34)

Второй способ — функция Символ(), возвращающая символ по его коду. Код двойной кавычки в Unicode — 34. Этот вариант удобен, когда кавычек много и удвоение делает строку нечитаемой, либо когда строка собирается динамически.

Кавычка = Символ(34);

Наименование = "ООО " + Кавычка + "Ромашка" + Кавычка;

// ООО "Ромашка"

Способ особенно полезен при формировании CSV-файлов, JSON-подобных структур вручную или текста для внешних систем, где кавычки — часть формата. В таких сценариях вынесение кавычки в переменную снижает риск ошибиться в количестве символов.

Для одинарной кавычки (апострофа) код — 39, для французских кавычек-ёлочек «» — 171 и 187, для типографских «лапок» — 8220 и 8221. Если пользователи вводят названия с ёлочками, а вам нужно сравнить их со строкой в коде, используйте именно Символ(171) и Символ(187) — это надёжнее, чем копировать символы из текста.

Сравнение способов

Удвоение кавычек ""

Быстрее всего для коротких статических строк; становится нечитаемым при большом количестве кавычек

Символ(34)

Удобен при динамической сборке строк и массовом использовании; требует конкатенации и слегка медленнее читается

Ёлочки через Символ(171)/Символ(187)

Правильный выбор для наименований организаций и печатных форм; не путать с обычной кавычкой

Как указать кавычку в тексте запроса

Текст запроса в 1С — это обычная строка, поэтому правило удвоения действует и там. Если в условии запроса нужно сравнить поле со строковым значением, содержащим кавычку, кавычки внутри литерала запроса удваиваются дважды по сути: один раз для строки 1С, а сами кавычки значения — внутри текста запроса.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Контрагенты.Ссылка

|ИЗ

| Справочник.Контрагенты КАК Контрагенты

|ГДЕ

| Контрагенты.Наименование = ""ООО """"Ромашка""""""";

Такая конструкция трудно читается и легко приводит к ошибкам. Правильная практика — не вставлять значения в текст запроса вообще, а использовать параметры. Параметр передаёт значение как есть, и кавычки в нём не требуют никакого экранирования:

Запрос.Текст =

"ВЫБРАТЬ

| Контрагенты.Ссылка

|ИЗ

| Справочник.Контрагенты КАК Контрагенты

|ГДЕ

| Контрагенты.Наименование = &Наименование";

Запрос.УстановитьПараметр("Наименование", "ООО ""Ромашка""");

Если в запросе нужно указать кавычку как часть имени поля или псевдонима со спецсимволами, используются квадратные скобки: [Поле с пробелом]. Это отдельный механизм языка запросов, не связанный со строковыми литералами.

Кавычки в наименованиях и данных, вводимых пользователем

Когда пользователь вводит в поле наименования значение вида ООО «Вега» или ООО "Вега", никакого экранирования не требуется: данные хранятся в базе как есть. Правила удвоения касаются только исходного кода, а не данных в информационной базе.

Проблемы возникают на стыке кода и данных. Типичный сценарий — поиск контрагента по наименованию: если в базе название с ёлочками, а сравнение в коде идёт со строкой с прямыми кавычками, совпадения не будет. Перед поиском стоит нормализовать строку — заменить ёлочки и лапки на прямые кавычки или наоборот:

Нормализованное = СтрЗаменить(Наименование, Символ(171), Символ(34));

Нормализованное = СтрЗаменить(Нормализованное, Символ(187), Символ(34));

Ещё один сценарий — выгрузка в CSV, где кавычки внутри значения по стандарту формата удваиваются, а само значение оборачивается в кавычки. Если выгружаете данные собственной обработкой, учитывайте это правило, иначе файл не откроется корректно в Excel или в системе получателя.

При обмене данными с внешними системами заранее договоритесь, какие кавычки используются в названиях: прямые, ёлочки или лапки. Разнобой в символах — одна из самых частых причин «не находится контрагент» при загрузке выписок и заказов.
ПЗ
Практическое замечание

Кавычки в форматных строках, макетах и печатных формах

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

В макетах печатных форм кавычки в тексте ячеек не требуют экранирования — это данные, а не код. Но если текст подставляется в параметр макета из кода, правила строковых литералов снова действуют в месте формирования значения.

Для печатных форм, где по правилам оформления нужны ёлочки (например, в реквизитах организации), формируйте строку через Символ(171) и Символ(187) или храните наименование сразу с нужными символами. Смешивание прямых кавычек и ёлочек в одном документе выглядит небрежно и может вызвать вопросы у контрагентов.

Порядок действий при ошибке с кавычкой
  1. 1
    Найдите строку, на которую указывает компилятор, и посчитайте кавычки: их количество должно быть чётным с учётом удвоений
  2. 2
    Замените проблемный фрагмент на конкатенацию с Символ(34), чтобы сделать код читаемым
  3. 3
    Если ошибка в запросе — перенесите значение в параметр запроса
  4. 4
    Выполните код в отладчике и проверьте итоговое значение строки через табло
  5. 5
    Убедитесь, что в данных и в коде используются одинаковые виды кавычек (прямые или ёлочки)

Типичные ошибки и как их проверить

Самая частая ошибка — нечётное количество кавычек в строке. Компилятор сообщает «Ожидается символ ';'» или «Неправильный строковый литерал», а причину найти сложно, если строка длинная. Помогает приём: временно разбить строку на конкатенацию коротких частей и локализовать сбойный фрагмент.

Вторая ошибка — копирование текста из Word или писем, где автозамена превратила прямые кавычки в лапки. В редакторе кода 1С такие символы выглядят похоже на обычные кавычки, но компилятор их не распознаёт как границы строки. Лечится ручной заменой символов в коде.

Третья группа ошибок — в запросах: вставка значения с кавычками конкатенацией приводит либо к синтаксической ошибке запроса, либо к пустому результату, потому что итоговый литерал не совпадает с данными в базе. Решение одно — параметры запроса.

Типичные ошибки
01
Одинарная кавычка внутри строки вместо удвоенной — строка обрывается, код не компилируется
02
Копирование текста из Word с типографскими лапками — компилятор не видит границы литерала
03
Подстановка значения с кавычками в текст запроса конкатенацией — синтаксическая ошибка или пустой результат
04
Сравнение наименования с прямыми кавычками против данных с ёлочками — поиск ничего не находит
Контрольные точки

Как проверить результат

Значение строки в отладчике
Норма

Кавычки отображаются там, где ожидалось, по одной

Тревожный признак

Кавычек нет или они удвоены в самом значении

Компиляция модуля
Норма

Модуль сохраняется без сообщений об ошибках

Тревожный признак

Ошибки «Ожидается символ» или «Неправильный строковый литерал»

Результат запроса
Норма

Запись с наименованием с кавычками найдена

Тревожный признак

Пустая выборка при заведомо существующей записи

FAQ

Как вывести кавычку в сообщении пользователю?

Удвойте кавычку внутри строки: Сообщить("Выбран контрагент ""Ромашка"""). В тексте сообщения появится одна кавычка. Либо соберите строку через Символ(34), если кавычек много.

Чем отличаются прямые кавычки от ёлочек в 1С?

Технически это разные символы с разными кодами: прямая кавычка — 34, ёлочки — 171 и 187. Границей строкового литерала может быть только прямая кавычка. В данных и печатных формах ёлочки допустимы и часто предпочтительны по правилам оформления.

Можно ли использовать одинарную кавычку для строк в 1С?

Нет. Во встроенном языке 1С строковый литерал ограничивается только двойными кавычками. Одинарная кавычка внутри строки — это обычный символ, не требующий экранирования.

Как указать кавычку, если строка занимает несколько строк кода?

Многострочный литерал продолжается вертикальной чертой | в начале каждой следующей строки. Правило удвоения кавычек действует в каждой части так же, как в обычной строке.

Почему запрос не находит наименование с кавычками?

Чаще всего значение вставлено в текст запроса конкатенацией с неправильным экранированием, либо в базе используются ёлочки, а в условии — прямые кавычки. Передайте значение через параметр запроса и при необходимости нормализуйте кавычки функцией СтрЗаменить.

Итог

Что важно запомнить

В коде 1С кавычка указывается удвоением ("") или через Символ(34). В запросах значения с кавычками передавайте только параметрами. В данных экранирование не нужно, но следите за единообразием прямых кавычек и ёлочек при поиске и обмене.