Замена кавычек в 1С: от правки вручную до массовой обработки
Содержание
Одиночную кавычку в наименовании или комментарии правят прямо в поле: встали курсором, стёрли символ, набрали нужный. Если кавычки нужно поменять сразу во всех элементах справочника — подойдёт функция СтрЗаменить в обработке или стандартная обработка «Групповое изменение реквизитов». А чтобы вставить кавычку внутрь строки в коде или в запросе, её удваивают: "".
Разберём все случаи: от правки одного значения до массовой замены типографских «ёлочек» на прямые кавычки в данных и в текстах. Пути и примеры — для 1С 8.3, интерфейс «Такси»; в 8.2 логика та же, отличаются только названия команд.
Какие кавычки встречаются в 1С и откуда берётся путаница
В русских текстах используют четыре вида кавычек, и внешне они похожи, но это разные символы:
- 📐 «ёлочки» —
«и», основной тип для русского языка; - 📏 „лапки" —
„и", для цитаты внутри цитаты; - прямая двойная —
"(один символ, U+0022), её же использует встроенный язык 1С; - прямая одинарная (апостроф) —
'(U+0027).
Чаще всего кавычки приходится менять, когда текст скопировали из Word. Редактор автоматически превращает прямые " в «ёлочки», и в 1С попадают символы, которых там быть не должно. Сама платформа кавычки не подменяет — она сохраняет ровно то, что вы ввели или вставили.
Отдельная тонкость — направленные «ёлочки». Открывающая « и закрывающая » различаются, и при замене это приходится учитывать: одной командой заменить обе на прямую кавычку просто, а вот обратно расставить парные «ёлочки» уже нельзя одним движением — программа не знает, где начало цитаты, а где конец. Поэтому замену на единый прямой символ делают легко, а восстановление пар — вручную или отдельным алгоритмом.
Проблемы всплывают в трёх местах:
- 🖨️ печать и обмен — в XML-выгрузке или на печатной форме «ёлочка» выглядит иначе, чем прямая кавычка, и контрагент видит «кракозябру», если кодировки разошлись;
- 💻 код и запросы — прямая
"закрывает строковый литерал, и забытое удвоение ломает модуль; - 🔎 поиск и сверка — наименование с «ёлочкой» не находится по прямой кавычке и наоборот.
Если не знаете, какой именно символ стоит в тексте, скопируйте его в любой онлайн-определитель Unicode или в блокнот с показом кодов. Это надёжнее, чем угадывать по виду.
Как заменить кавычку в одном поле вручную
Самый частый случай — поправить одно значение: наименование номенклатуры, назначение платежа, комментарий к документу.
- Откройте карточку элемента или документ двойным щелчком.
- Встаньте курсором в поле и выделите символ кавычки.
- Удалите его и введите нужный. Прямую кавычку даёт клавиша с русской буквой «э» в верхнем регистре (
Shift+Э) илиShift+2в английской раскладке. - Запишите:
Записать и закрытьв карточке справочника,Провести и закрыть— в документе.
Если текст длинный и кавычек много, редактировать по одной неудобно. Скопируйте содержимое поля в блокнот или в текстовый редактор с функцией поиска и замены (Ctrl+H), замените все кавычки разом и вставьте результат обратно.
В формах 1С нет собственного диалога «найти и заменить» для реквизитов. Внутренний поиск (Ctrl+F в списках) ищет значения, но не правит их. Для массовой правки нужны средства из следующих разделов.
Замена кавычек в коде: удвоение и функция СтрЗаменить
Во встроенном языке 1С строка ограничена прямыми кавычками ". Чтобы поставить кавычку внутрь строки, её удваивают — это главное правило, без которого модуль не скомпилируется:
Сообщить("Нажмите ""Записать и закрыть""");
// На экране: Нажмите "Записать и закрыть"
Та же логика в языке запросов — литерал тоже в двойных кавычках, внутренняя кавычка удваивается:
Запрос.Текст =
"ВЫБРАТЬ Наименование
|ИЗ Справочник.Номенклатура
|ГДЕ Наименование ПОДОБНО ""%""""%""";
Чтобы заменить один символ кавычки на другой в готовой строке, используют СтрЗаменить(Строка, Что, НаЧто). Строка из четырёх кавычек """" — это строковый литерал, содержащий один символ " (внешние кавычки плюс удвоенная внутренняя):
// «ёлочки» → прямая кавычка
Текст = СтрЗаменить(Текст, "«", """");
Текст = СтрЗаменить(Текст, "»", """");
// прямая кавычка → апостроф
Текст = СтрЗаменить(Текст, """", "'");
Обратная задача — поменять прямые " на «ёлочки» — сложнее: нужно различать открывающую и закрывающую кавычку по позиции в тексте. Простой СтрЗаменить поставит везде один символ. Если пар в тексте немного, надёжнее поправить вручную; если это поток данных — пишите разбор посимвольно с чередованием « и ».
Проверить, есть ли вообще кавычка в строке, можно через СтрНайти(Текст, "«") > 0 до вызова замены — так вы не будете трогать значения, где менять нечего.
Массовая замена кавычек в справочниках и документах кодом
Когда кавычки нужно поменять во всех элементах справочника, помогает обработка с перебором. Логика: выбрать элементы, у тех, где кавычка есть, заменить символ и записать объект.
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
ЕстьЁлочки = СтрНайти(Выборка.Наименование, "«") > 0
Или СтрНайти(Выборка.Наименование, "»") > 0;
Если ЕстьЁлочки Тогда
Объект = Выборка.ПолучитьОбъект();
Объект.Наименование = СтрЗаменить(Объект.Наименование, "«", """");
Объект.Наименование = СтрЗаменить(Объект.Наименование, "»", """");
Объект.Записать();
КонецЕсли;
КонецЦикла;
Условие Если ЕстьЁлочки важно: без него код перезапишет каждый элемент базы, даже нетронутые, — это лишняя нагрузка и записи в журнал регистрации.
Для документов есть нюанс. Простое Объект.Записать() сохранит реквизит, но не перепроведёт документ. Если кавычка стоит в реквизите, который попадает в движения или печать, документ после правки нужно перепровести — либо Объект.Записать(РежимЗаписиДокумента.Проведение), либо групповым перепроведением позже.
Такой код меняет данные рабочей базы. Перед запуском сделайте резервную копию и сначала прогоните обработку на копии базы. Запускать массовую правку лучше в то время, когда с базой никто не работает, — чтобы не столкнуться с блокировками записываемых объектов.
Кавычки часто живут не только в наименовании, но и в строках табличных частей — например, в тексте строки документа или в комментарии к позиции. Тогда после правки шапки нужно пройти по строкам:
Для Каждого Строка Из Объект.Товары Цикл
Строка.Содержание = СтрЗаменить(Строка.Содержание, "«", """");
Строка.Содержание = СтрЗаменить(Строка.Содержание, "»", """");
КонецЦикла;
После массовой замены полезно проверить, не осталось ли «ёлочек». Быстрее всего это сделать запросом с отбором ПОДОБНО по шаблону с кавычкой — если результат пустой, замена прошла по всем элементам.
Куда вставить код: создайте внешнюю обработку
(Файл → Новый → Внешняя обработка), добавьте модуль с процедурой и кнопкой на форме, либо выполните фрагмент через обработку «Выполнить код» в режиме отладки. Хранить такой код в основной конфигурации не нужно — это разовая операция.
Кавычки в обменах, запросах и печатных формах
В разных контекстах один и тот же символ кавычки ведёт себя по-разному, и правила замены отличаются.
| Где | Как хранится кавычка | Что делать |
|---|---|---|
| Встроенный язык | Прямая ", внутри строки удваивается "" | Удваивать вручную |
| Язык запросов | Так же, "" внутри литерала | Удваивать вручную |
| XML-обмен | Экранируется как " | Сериализация делает сама |
| JSON | Экранируется как \" | ЗаписьJSON делает сама |
| Печатная форма | Хранится как в данных | Правят в макете или данных |
Главный вывод: в выгрузках XML и JSON кавычки экранируются автоматически средствами записи. Не правьте " и \" руками в готовом файле — при обратной загрузке платформа распознает их сама. Ручное вмешательство в экранирование как раз и ломает обмен.
Если «ёлочки» попали на печать и выглядят неуместно, замену делают на уровне данных (см. разделы выше) или в макете печатной формы — там, где поле выводится, через выражение с СтрЗаменить. Менять шрифт или кодировку макета для этого не нужно: проблема в самих символах, а не в оформлении.
В отчётах на СКД кавычки в тексте выводятся как есть — отдельно их чистить не нужно. Но если кавычка попадает в выражение вычисляемого поля или в параметр компоновки, её так же удваивают, как в обычном коде. Текст запроса схемы компоновки подчиняется тем же правилам языка запросов: внутренняя кавычка в литерале — только через "".
Отдельный приём для разовой чистки без кода: выгрузить справочник в табличный документ или текст (Все действия → Вывести список в списке справочника), заменить кавычки во внешнем редакторе и при необходимости загрузить обратно через типовую загрузку из файла. Для небольших объёмов это быстрее, чем писать обработку.
Групповое изменение реквизитов: замена без программирования
В типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11 и других на базе БСП) есть стандартная обработка «Групповое изменение реквизитов». Она меняет значения реквизитов у выбранных объектов и умеет применять формулу — в том числе СтрЗаменить.
Как открыть и использовать:
Пункт Все функции включается в главном меню (Сервис → Параметры → Отображать команду "Все функции"), если он скрыт. Режим формулы в обработке позволяет написать выражение вида СтрЗаменить(СтрЗаменить(Наименование, "«", """"), "»", """") и применить его к отобранным элементам.
Этот способ не требует конфигуратора и прав разработчика на изменение конфигурации — достаточно прав на запись объектов. Для бухгалтера или оператора он удобнее внешней обработки.
Если менять кавычки в одном реквизите приходится регулярно (например, при каждой загрузке прайса из Word), логику замены выносят в расширение конфигурации
: подписка на событие ПередЗаписью чистит кавычки автоматически. Расширения доступны с версии платформы 8.3.6 и не меняют основную конфигурацию — их можно подключить к типовой базе без снятия с поддержки.
Типичные ошибки при замене кавычек
" записана как "", а вся строка закрыта." и \" трогать нельзя, его делает сериализация.« и прямая " — разные символы. Убедитесь, что в СтрЗаменить стоит именно тот символ, что в данных; проверьте код через определитель Unicode.СтрНайти перед записью — объект записывается, даже если кавычек в нём нет. Добавьте условие и пишите только изменённые элементы.Ещё одна незаметная ловушка — одинарная кавычка-апостроф '. В языке запросов 1С апостроф ограничивает литералы даты (&Дата = ДАТАВРЕМЯ(2026,1,1) или '20260101' в старом синтаксисе), поэтому путать его с текстовой кавычкой нельзя. В тексте наименования апостроф — обычный символ, но в выгрузках CSV он может сбить разбор, если разделитель или ограничитель настроены на него.
Частые вопросы
Чем «ёлочки» отличаются от прямых кавычек в 1С?
« » — типографские, прямая " — технический символ, которым встроенный язык ограничивает строки. Поиск по одному виду не находит другой, поэтому их и приходится приводить к одному типу.Почему кавычка в коде ломает модуль?
" закрывает строковый литерал. Если нужна кавычка внутри строки, её удваивают: "Текст ""в кавычках""". Одиночная внутренняя кавычка обрывает строку, и компилятор выдаёт ошибку.Как заменить кавычки сразу во всех элементах справочника без программирования?
Все функции → Стандартные). Она применяет выражение СтрЗаменить к отобранным объектам и не требует конфигуратора.Нужно ли менять кавычки в XML- или JSON-выгрузке вручную?
" и \"). Ручная правка готового файла как раз ломает обратную загрузку.Можно ли автоматически чистить кавычки при вводе?
ПередЗаписью вызвать СтрЗаменить для нужного реквизита. Расширение не снимает базу с поддержки и работает с версии платформы 8.3.6.