Замена кавычек в 1С: от правки вручную до массовой обработки

· 9 мин

Содержание

Одиночную кавычку в наименовании или комментарии правят прямо в поле: встали курсором, стёрли символ, набрали нужный. Если кавычки нужно поменять сразу во всех элементах справочника — подойдёт функция СтрЗаменить в обработке или стандартная обработка «Групповое изменение реквизитов». А чтобы вставить кавычку внутрь строки в коде или в запросе, её удваивают: "".

Разберём все случаи: от правки одного значения до массовой замены типографских «ёлочек» на прямые кавычки в данных и в текстах. Пути и примеры — для 1С 8.3, интерфейс «Такси»; в 8.2 логика та же, отличаются только названия команд.

Какие кавычки встречаются в 1С и откуда берётся путаница

В русских текстах используют четыре вида кавычек, и внешне они похожи, но это разные символы:

  • 📐 «ёлочки» — « и », основной тип для русского языка;
  • 📏 „лапки" — „ и ", для цитаты внутри цитаты;
  • прямая двойная — " (один символ, U+0022), её же использует встроенный язык 1С;
  • прямая одинарная (апостроф) — ' (U+0027).

Чаще всего кавычки приходится менять, когда текст скопировали из Word. Редактор автоматически превращает прямые " в «ёлочки», и в 1С попадают символы, которых там быть не должно. Сама платформа кавычки не подменяет — она сохраняет ровно то, что вы ввели или вставили.

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

Проблемы всплывают в трёх местах:

  • 🖨️ печать и обмен — в XML-выгрузке или на печатной форме «ёлочка» выглядит иначе, чем прямая кавычка, и контрагент видит «кракозябру», если кодировки разошлись;
  • 💻 код и запросы — прямая " закрывает строковый литерал, и забытое удвоение ломает модуль;
  • 🔎 поиск и сверка — наименование с «ёлочкой» не находится по прямой кавычке и наоборот.

Если не знаете, какой именно символ стоит в тексте, скопируйте его в любой онлайн-определитель Unicode или в блокнот с показом кодов. Это надёжнее, чем угадывать по виду.

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

Самый частый случай — поправить одно значение: наименование номенклатуры, назначение платежа, комментарий к документу.

  1. Откройте карточку элемента или документ двойным щелчком.
  2. Встаньте курсором в поле и выделите символ кавычки.
  3. Удалите его и введите нужный. Прямую кавычку даёт клавиша с русской буквой «э» в верхнем регистре (Shift+Э) или Shift+2 в английской раскладке.
  4. Запишите: Записать и закрыть в карточке справочника, Провести и закрыть — в документе.

Если текст длинный и кавычек много, редактировать по одной неудобно. Скопируйте содержимое поля в блокнот или в текстовый редактор с функцией поиска и замены (Ctrl+H), замените все кавычки разом и вставьте результат обратно.

В формах 1С нет собственного диалога «найти и заменить» для реквизитов. Внутренний поиск (Ctrl+F в списках) ищет значения, но не правит их. Для массовой правки нужны средства из следующих разделов.

Замена кавычек в коде: удвоение и функция СтрЗаменить

Во встроенном языке 1С строка ограничена прямыми кавычками ". Чтобы поставить кавычку внутрь строки, её удваивают — это главное правило, без которого модуль не скомпилируется:

Сообщить("Нажмите ""Записать и закрыть""");
// На экране: Нажмите "Записать и закрыть"

Та же логика в языке запросов — литерал тоже в двойных кавычках, внутренняя кавычка удваивается:

Запрос.Текст =
"ВЫБРАТЬ Наименование
|ИЗ Справочник.Номенклатура
|ГДЕ Наименование ПОДОБНО ""%""""%""";

Чтобы заменить один символ кавычки на другой в готовой строке, используют СтрЗаменить(Строка, Что, НаЧто). Строка из четырёх кавычек """" — это строковый литерал, содержащий один символ " (внешние кавычки плюс удвоенная внутренняя):

// «ёлочки» → прямая кавычка
Текст = СтрЗаменить(Текст, "«", """");
Текст = СтрЗаменить(Текст, "»", """");

// прямая кавычка → апостроф
Текст = СтрЗаменить(Текст, """", "'");

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

Проверить, есть ли вообще кавычка в строке, можно через СтрНайти(Текст, "«") > 0 до вызова замены — так вы не будете трогать значения, где менять нечего.

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

Когда кавычки нужно поменять во всех элементах справочника, помогает обработка с перебором. Логика: выбрать элементы, у тех, где кавычка есть, заменить символ и записать объект.

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл

    ЕстьЁлочки = СтрНайти(Выборка.Наименование, "«") > 0
        Или СтрНайти(Выборка.Наименование, "»") > 0;

    Если ЕстьЁлочки Тогда
        Объект = Выборка.ПолучитьОбъект();
        Объект.Наименование = СтрЗаменить(Объект.Наименование, "«", """");
        Объект.Наименование = СтрЗаменить(Объект.Наименование, "»", """");
        Объект.Записать();
    КонецЕсли;

КонецЦикла;

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

Для документов есть нюанс. Простое Объект.Записать() сохранит реквизит, но не перепроведёт документ. Если кавычка стоит в реквизите, который попадает в движения или печать, документ после правки нужно перепровести — либо Объект.Записать(РежимЗаписиДокумента.Проведение), либо групповым перепроведением позже.

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

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

Для Каждого Строка Из Объект.Товары Цикл
    Строка.Содержание = СтрЗаменить(Строка.Содержание, "«", """");
    Строка.Содержание = СтрЗаменить(Строка.Содержание, "»", """");
КонецЦикла;

После массовой замены полезно проверить, не осталось ли «ёлочек». Быстрее всего это сделать запросом с отбором ПОДОБНО по шаблону с кавычкой — если результат пустой, замена прошла по всем элементам.

Куда вставить код: создайте внешнюю обработку (Файл → Новый → Внешняя обработка), добавьте модуль с процедурой и кнопкой на форме, либо выполните фрагмент через обработку «Выполнить код» в режиме отладки. Хранить такой код в основной конфигурации не нужно — это разовая операция.

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

В разных контекстах один и тот же символ кавычки ведёт себя по-разному, и правила замены отличаются.

ГдеКак хранится кавычкаЧто делать
Встроенный языкПрямая ", внутри строки удваивается ""Удваивать вручную
Язык запросовТак же, "" внутри литералаУдваивать вручную
XML-обменЭкранируется как "Сериализация делает сама
JSONЭкранируется как \"ЗаписьJSON делает сама
Печатная формаХранится как в данныхПравят в макете или данных

Главный вывод: в выгрузках XML и JSON кавычки экранируются автоматически средствами записи. Не правьте " и \" руками в готовом файле — при обратной загрузке платформа распознает их сама. Ручное вмешательство в экранирование как раз и ломает обмен.

Если «ёлочки» попали на печать и выглядят неуместно, замену делают на уровне данных (см. разделы выше) или в макете печатной формы — там, где поле выводится, через выражение с СтрЗаменить. Менять шрифт или кодировку макета для этого не нужно: проблема в самих символах, а не в оформлении.

В отчётах на СКД кавычки в тексте выводятся как есть — отдельно их чистить не нужно. Но если кавычка попадает в выражение вычисляемого поля или в параметр компоновки, её так же удваивают, как в обычном коде. Текст запроса схемы компоновки подчиняется тем же правилам языка запросов: внутренняя кавычка в литерале — только через "".

Отдельный приём для разовой чистки без кода: выгрузить справочник в табличный документ или текст (Все действия → Вывести список в списке справочника), заменить кавычки во внешнем редакторе и при необходимости загрузить обратно через типовую загрузку из файла. Для небольших объёмов это быстрее, чем писать обработку.

Групповое изменение реквизитов: замена без программирования

В типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11 и других на базе БСП) есть стандартная обработка «Групповое изменение реквизитов». Она меняет значения реквизитов у выбранных объектов и умеет применять формулу — в том числе СтрЗаменить.

Как открыть и использовать:

Массовая замена через групповое изменение
Выполнено: 0 / 6

Пункт Все функции включается в главном меню (Сервис → Параметры → Отображать команду "Все функции"), если он скрыт. Режим формулы в обработке позволяет написать выражение вида СтрЗаменить(СтрЗаменить(Наименование, "«", """"), "»", """") и применить его к отобранным элементам.

Этот способ не требует конфигуратора и прав разработчика на изменение конфигурации — достаточно прав на запись объектов. Для бухгалтера или оператора он удобнее внешней обработки.

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

Типичные ошибки при замене кавычек

Диагностика: выберите симптом

Ещё одна незаметная ловушка — одинарная кавычка-апостроф '. В языке запросов 1С апостроф ограничивает литералы даты (&Дата = ДАТАВРЕМЯ(2026,1,1) или '20260101' в старом синтаксисе), поэтому путать его с текстовой кавычкой нельзя. В тексте наименования апостроф — обычный символ, но в выгрузках CSV он может сбить разбор, если разделитель или ограничитель настроены на него.

Частые вопросы

Чем «ёлочки» отличаются от прямых кавычек в 1С?
Это разные символы Unicode. «Ёлочки» « » — типографские, прямая " — технический символ, которым встроенный язык ограничивает строки. Поиск по одному виду не находит другой, поэтому их и приходится приводить к одному типу.
Почему кавычка в коде ломает модуль?
Прямая " закрывает строковый литерал. Если нужна кавычка внутри строки, её удваивают: "Текст ""в кавычках""". Одиночная внутренняя кавычка обрывает строку, и компилятор выдаёт ошибку.
Как заменить кавычки сразу во всех элементах справочника без программирования?
Через стандартную обработку «Групповое изменение реквизитов» (Все функции → Стандартные). Она применяет выражение СтрЗаменить к отобранным объектам и не требует конфигуратора.
Нужно ли менять кавычки в XML- или JSON-выгрузке вручную?
Нет. Запись XML и JSON экранирует кавычки сама (" и \"). Ручная правка готового файла как раз ломает обратную загрузку.
Можно ли автоматически чистить кавычки при вводе?
Да, через расширение конфигурации: в подписке на событие ПередЗаписью вызвать СтрЗаменить для нужного реквизита. Расширение не снимает базу с поддержки и работает с версии платформы 8.3.6.