Нередко у разработчиков, перешедших в 1С из других языков программирования (например, JavaScript, Python или SQL), возникает вопрос о поведении строковых литералов. В частности, появляется предположение, что одинарные кавычки могут автоматически заменяться платформой на двойные при выводе строк на экран, либо использоваться в качестве альтернативного разделителя текста. Разберем детально, как устроена работа со строками в платформе 1С:Предприятие, почему одинарные кавычки не заменяют двойные и какие приемы форматирования текста делают код чистым и читаемым.
Выясним причину, по которой конструкция вида Сообщить("Я сказал 'привет'") выводит на экран именно апострофы, а не привычные типографские или программные двойные кавычки. В синтаксисе встроенного языка 1С строковый литерал всегда обрамляется исключительно двойными кавычками. Одинарные кавычки внутри строкового литерала не обладают никакой особой магией или механизмом трансляции: они воспринимаются компилятором как обычный текстовый символ — апостроф.
В платформе 1С одинарные кавычки строго зарезервированы для совершенно иных языковых конструкций:
'20260101' или '20260101235959'.НСтр("ru = 'Текст сообщения'"). Если внутри такого текста требуется одинарная кавычка, она удваивается: ''.Автоматической конвертации одинарных кавычек в двойные внутри стандартных строк никогда не существовало в платформе 1С. Подобное поведение разработчики иногда путают с другими языками либо со специфическими функциями внешних библиотек и плагинов.
Рассмотрим, как правильно поместить двойную кавычку внутрь строки. Основное правило платформы 1С гласит: символ двойной кавычки внутри строки экранируется еще одной двойной кавычкой. То есть две кавычки подряд ("") дают один печатный символ кавычки в результирующей строке.
Посмотрим на практические примеры экранирования в различных ситуациях:
// В результате получим: Я сказал "привет" всем
Сообщить("Я сказал ""привет"" всем");
// В результате получим: Я сказал "привет"
Сообщить("Я сказал ""привет""");
Кавычка = """"; // Первая и последняя — границы строки, две внутренние — сам символ
Иногда встречается подход с получением кавычки через вызов функции Символ(34). Однако стандарты разработки фирмы «1С» не рекомендуют использовать системные коды печатных символов без строгой необходимости, так как это снижает читаемость программного кода по сравнению с прямым удвоением кавычек.
Когда в коде требуется динамически формировать текст со множеством кавычек (например, текст запроса, команды операционной системы, JSON или XML-пакеты), нагромождение удвоенных кавычек может затруднить чтение и отладку кода. Разберем эффективные практические приемы, позволяющие этого избежать.
Для удобного форматирования текста рекомендуется использовать встроенную функцию СтрШаблон(). Она позволяет зафиксировать положение кавычек в структуре шаблона и легко подставлять переменные без сложной конкатенации.
Посмотрим на пример использования:
ИмяСобытия = "Открытие смены";
ТекстСообщения = СтрШаблон("Событие ""%1"" зафиксировано в журнале.", ИмяСобытия);
Сообщить(ТекстСообщения);
Если необходимо сформировать объемный текст с большим числом кавычек и избежать постоянного удвоения каждого символа, на практике часто применяют постобработку. Разработчик пишет текст, используя в качестве маркера апостроф или специальный разделитель, а затем один раз заменяет его на кавычку с помощью функции СтрЗаменить().
Разберем по шагам данный подход:
// Формируем исходный текст с удобными маркерами-апострофами
ТекстКоманды = "cmd.exe /c 'echo 'Привет, мир!' & pause'";
// Заменяем маркеры на реальные двойные кавычки
ТекстКоманды = СтрЗаменить(ТекстКоманды, "'", """");
Сообщить(ТекстКоманды);
Именно использование этого удобного приема в прикладных решениях нередко создает ошибочное впечатление, будто платформа умеет преобразовывать кавычки самостоятельно. Применяя данные правила и методы, вы сможете писать надежный, корректный и легко читаемый код при работе с любыми текстовыми данными в 1С.