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

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Способ 1. Удвоение кавычек в строковых литералах

Рассмотрим базовый механизм встроенного языка 1С. Чтобы компилятор воспринял кавычку как печатный символ внутри строковой константы, а не как признак окончания строки, эту кавычку необходимо удвоить. Посмотрим на примеры объявления строк в модуле:


// Вывод текста: Операция "Копирование" закончена
Сообщить("Операция """"Копирование"""" закончена");

// Вывод слова в кавычках: "текст"
Сообщить("""текст""");

Проанализируем синтаксис: внешние кавычки открывают и закрывают строковый литерал, а каждая пара внутренних кавычек "" превращается ровно в один символ двойной кавычки внутри результирующего значения.

Способ 2. Использование функции получения символа по коду

Если строка собирается динамически из нескольких фрагментов или удвоенные кавычки ухудшают читаемость исходного кода, можно использовать вставку символа по его ASCII-коду. Код символа двойной кавычки — 34.

Важное отличие платформы 1С 7.7: во встроенном языке версии 7.7 используется функция Симв(), в то время как функция Символ() появилась только в 1С 8.х. Попытка вызова Символ(34) в семерке приведет к ошибке выполнения.

Разберем по шагам конкатенацию строк с использованием кода символа:


Кавычка = Симв(34);
СтрокаСообщения = "Операция " + Кавычка + "Копирование" + Кавычка + " закончена";
Сообщить(СтрокаСообщения);

Чтение строк с кавычками из текстовых файлов

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

Посмотрим на пример работы с объектом Текст:


Файл = СоздатьОбъект("Текст");
Файл.Открыть("C:\data.txt");
Для НомерСтроки = 1 По Файл.КоличествоСтрок() Цикл
    Стр = Файл.ПолучитьСтроку(НомерСтроки);
    // Значение Стр уже содержит все исходные кавычки без синтаксических ошибок
    Сообщить(Стр);
КонецЦикла;

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


// Замена двойных кавычек на типографские «елочки» или апострофы
СтрокаБезКавычек = СтрЗаменить(Стр, Симв(34), "''");

Особые случаи: функция Шаблон() и внешние команды

При дальнейшей обработке строк, содержащих кавычки, обратим внимание на ситуации, в которых могут возникнуть скрытые ошибки:

  1. Вызовы функции Шаблон(): Если строка с кавычками попадает внутрь вычисляемых выражений в квадратных скобках [...], синтаксический анализатор завершит работу с ошибкой. Значения с кавычками следует выносить за пределы вычисляемых блоков или формировать обычной конкатенацией.
  2. Системные команды (КомандаСистемы): При передаче путей к файлам или аргументов командной строки Windows, содержащих пробелы, их необходимо принудительно оборачивать в кавычки, например: КомандаСистемы("notepad.exe """ + ИмяФайла + """");.
  3. Прямые SQL-запросы: При отправке прямых запросов к СУБД одинарные кавычки (апострофы) внутри текста должны удваиваться (СтрЗаменить(Текст, "'", "''")), чтобы избежать нарушения синтаксиса SQL.
← На главную