Как правильно использовать и экранировать кавычки в строках 1С?

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

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

Специфика одинарных кавычек в платформе 1С

Выясним причину, по которой конструкция вида Сообщить("Я сказал 'привет'") выводит на экран именно апострофы, а не привычные типографские или программные двойные кавычки. В синтаксисе встроенного языка 1С строковый литерал всегда обрамляется исключительно двойными кавычками. Одинарные кавычки внутри строкового литерала не обладают никакой особой магией или механизмом трансляции: они воспринимаются компилятором как обычный текстовый символ — апостроф.

В платформе 1С одинарные кавычки строго зарезервированы для совершенно иных языковых конструкций:

  1. Литералы типа Дата: для непосредственного задания даты и времени в коде используются одинарные кавычки, например '20260101' или '20260101235959'.
  2. Многоязычные строки функции НСтр: текст для каждого конкретного кода языка заключается в одинарные кавычки, например НСтр("ru = 'Текст сообщения'"). Если внутри такого текста требуется одинарная кавычка, она удваивается: ''.

Автоматической конвертации одинарных кавычек в двойные внутри стандартных строк никогда не существовало в платформе 1С. Подобное поведение разработчики иногда путают с другими языками либо со специфическими функциями внешних библиотек и плагинов.

Правила экранирования двойных кавычек в строковых литералах

Рассмотрим, как правильно поместить двойную кавычку внутрь строки. Основное правило платформы 1С гласит: символ двойной кавычки внутри строки экранируется еще одной двойной кавычкой. То есть две кавычки подряд ("") дают один печатный символ кавычки в результирующей строке.

Посмотрим на практические примеры экранирования в различных ситуациях:

  1. Слово в кавычках внутри текста:
    
    // В результате получим: Я сказал "привет" всем
    Сообщить("Я сказал ""привет"" всем");
    
  2. Строка, заканчивающаяся кавычкой: если строка оканчивается символом кавычки, в коде на конце строки окажется три кавычки подряд — две экранирующие внутренний символ и одна закрывающая строковый литерал:
    
    // В результате получим: Я сказал "привет"
    Сообщить("Я сказал ""привет""");
    
  3. Строка, состоящая только из одного символа кавычки: для получения отдельного символа кавычки потребуется написать четыре кавычки подряд:
    
    Кавычка = """"; // Первая и последняя — границы строки, две внутренние — сам символ
    

Иногда встречается подход с получением кавычки через вызов функции Символ(34). Однако стандарты разработки фирмы «1С» не рекомендуют использовать системные коды печатных символов без строгой необходимости, так как это снижает читаемость программного кода по сравнению с прямым удвоением кавычек.

Альтернативные способы оформления сложных строк

Когда в коде требуется динамически формировать текст со множеством кавычек (например, текст запроса, команды операционной системы, JSON или XML-пакеты), нагромождение удвоенных кавычек может затруднить чтение и отладку кода. Разберем эффективные практические приемы, позволяющие этого избежать.

Применение функции СтрШаблон

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

Посмотрим на пример использования:


ИмяСобытия = "Открытие смены";
ТекстСообщения = СтрШаблон("Событие ""%1"" зафиксировано в журнале.", ИмяСобытия);
Сообщить(ТекстСообщения);

Паттерн постобработки через СтрЗаменить

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

Разберем по шагам данный подход:


// Формируем исходный текст с удобными маркерами-апострофами
ТекстКоманды = "cmd.exe /c 'echo 'Привет, мир!' & pause'";

// Заменяем маркеры на реальные двойные кавычки
ТекстКоманды = СтрЗаменить(ТекстКоманды, "'", """");

Сообщить(ТекстКоманды);

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

← На главную