Кавычки в 1С:Предприятии: с клавиатуры, в строках кода и в документах на печать
Содержание
В поле формы 1С кавычки ставят обычным способом: Shift + 2 в русской или английской раскладке даёт прямую кавычку ", а «ёлочки» вводят Alt-кодами Alt + 0171 и Alt + 0187 на цифровой клавиатуре. В программном коде 1С кавычка внутри строки удваивается: "ООО ""Ромашка""", либо подставляется функцией Символ(34).
Дальше всё зависит от того, где вы ставите кавычки: в карточке контрагента, в модуле, в тексте запроса, в макете печатной формы или в файле выгрузки. Правила в этих местах разные, и большинство проблем с кавычками в 1С возникает именно на стыке: данные ввели с прямыми кавычками, а в договоре нужны «ёлочки», или текст скопировали из Word, и поиск по наименованию перестал находить контрагента.
Какие бывают кавычки и чем они отличаются для 1С
Для человека «Ромашка» и “Ромашка” — одно и то же название. Для программы это разные символы с разными кодами. 1С сравнивает строки посимвольно, поэтому ООО "Ромашка" и ООО «Ромашка» в справочнике будут двумя разными наименованиями.
| Вид | Символ | Код Unicode (десятичный) | Где встречается |
|---|---|---|---|
| Прямая («машинописная») | " | 34 | клавиатура, выписки ЕГРЮЛ, код 1С |
| Ёлочки открывающая / закрывающая | « » | 171 / 187 | договоры, официальные документы |
| Лапки открывающая / закрывающая | „ “ | 8222 / 8220 | вложенные кавычки в русском тексте |
| Английские двойные | “ ” | 8220 / 8221 | текст из Word, почты, сайтов |
| Апостроф | ' | 39 | литералы дат и строки формата в 1С |
💡 Отдельно про апостроф. В языке 1С он не заменяет двойную кавычку: строку в одинарных кавычках платформа не поймёт. Апостроф нужен для литерала даты ('20260101') и для значений внутри строки формата.
Ввод кавычек в поля форм и справочников
В карточке контрагента, номенклатуры, в комментарии к документу кавычки вводятся как в любой программе Windows. Платформа сама их не меняет: что набрали, то и сохранилось.
Прямые кавычки
- ⌨️ Русская раскладка:
Shift + 2. - ⌨️ Английская раскладка:
Shift + '(клавиша с буквой Э).
Это самый частый вариант. Если реквизиты контрагента заполняются по ИНН из сервиса, наименование обычно приходит в том виде, как оно записано в ЕГРЮЛ, то есть с прямыми кавычками.
«Ёлочки» и другие типографские кавычки
- Включите
NumLock. - Зажмите
Alt. - Наберите на цифровом блоке справа
0171и отпуститеAlt— появится «. - Для закрывающей наберите
Alt + 0187— появится ».
Коды для остальных видов: Alt + 0132 даёт „, Alt + 0147 — “, Alt + 0148 — ”. Это коды старой кодовой страницы Windows-1251, система переведёт их в правильный символ Unicode.
На ноутбуке без цифрового блока Alt-коды не работают. Варианты:
- 🔣
Win + .(точка) в Windows 10 и 11 открывает панель эмодзи, в ней есть вкладка символов с кавычками; - 🔣 стандартная программа «Таблица символов» (
charmapв окне «Выполнить»): выбрать символ, скопировать, вставить в поле 1С; - 🔣 типографская раскладка (например, раскладка Бирмана), где «ёлочки» назначены на
AltGrс клавишами; - 🔣 скопировать готовые « » из любого документа.
Договоритесь в компании об одном виде кавычек для наименований. Если половина контрагентов записана с прямыми кавычками, а половина с «ёлочками», поиск по списку и проверка на дубли начнут промахиваться: ООО “Вектор” и ООО «Вектор» не совпадут.
Кавычки при поиске в списке
Строка поиска в списке справочника ищет по вхождению. Поэтому кавычки в запросе поиска лучше вообще не набирать: введите Ромашка без кавычек, и программа найдёт контрагента, как бы ни были записаны кавычки в его наименовании.
Кавычки в строках кода и текстах запросов
В языке 1С строка ограничивается двойными кавычками. Чтобы кавычка оказалась внутри строки, её пишут дважды подряд. Это главный приём, который нужно запомнить.
Наименование = "ООО ""Ромашка""";
// В переменной: ООО "Ромашка"
Сообщить("Нажмите кнопку ""Провести""");
// На экране: Нажмите кнопку "Провести"
Считайте кавычки так: первая открывает литерал, каждая пара "" внутри — это одна кавычка в значении, последняя одиночная закрывает литерал. Строка "ООО ""Ромашка""" заканчивается тремя кавычками: две дают закрывающую кавычку названия, третья закрывает литерал.
Пустая строка записывается как "", а строка из одной кавычки — как """" (четыре символа).
Многострочные тексты
Многострочный литерал продолжается с вертикальной чертой в начале строки, правило удвоения остаётся прежним:
Текст = "Покупатель: ООО ""Ромашка""
|Основание: договор ""Поставка-12""";
Кавычки в тексте запроса
Текст запроса — тоже строка кода, поэтому все кавычки внутри него удваиваются:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Код = ""000000001""";
Строковые значения, в которых сами есть кавычки, в текст запроса не вписывайте. Передайте их параметром, тогда никакого экранирования не нужно:
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Ссылка
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.Наименование = &Наименование";
Запрос.УстановитьПараметр("Наименование", "ООО ""Ромашка""");
💡 Конструктор запроса в Конфигураторе сам оформляет текст для модуля: расставляет вертикальные черты и удваивает кавычки. Если правите длинный запрос, удобнее открыть его конструктором, чем считать кавычки вручную.
Где в коде нужны одинарные кавычки
Внутри строки формата значения параметров берутся в апострофы:
Формат(ТекущаяДата(), "ДФ='dd.MM.yyyy'");
Формат(1234.5, "ЧДЦ=2; ЧРД=','");
То же в функции НСтр: НСтр("ru = 'Документ проведён'"). Сюда двойные кавычки ставить нельзя, они закроют весь литерал.
Подстановка в шаблон
Когда название приходит из переменной, удобно собирать строку через СтрШаблон (есть в платформе 8.3.6 и новее):
Текст = СтрШаблон("Договор с ООО ""%1"" от %2", ИмяКонтрагента, Формат(ДатаДоговора, "ДЛФ=D"));
Символ(34), Символ(171) и другие функции для кавычек
Если удвоение кавычек путает, кавычку можно получить по коду. Функция Символ(Код) возвращает символ с указанным кодом Unicode, функция КодСимвола(Строка, Позиция) делает обратное.
Кавычка = Символ(34); // "
ЁлочкаОткр = Символ(171); // «
ЁлочкаЗакр = Символ(187); // »
ЛапкаОткр = Символ(8222); // „
ЛапкаЗакр = Символ(8220); // “
Наименование = "ООО " + ЁлочкаОткр + "Ромашка" + ЁлочкаЗакр;
// ООО «Ромашка»
Код = КодСимвола(Наименование, 5); // 171
В системном перечислении Символы есть перевод строки (Символы.ПС), табуляция (Символы.Таб), неразрывный пробел (Символы.НПП), но отдельной константы для кавычки нет. Поэтому Символ(34) или удвоенная кавычка — единственные варианты.
Узнать, какая кавычка на самом деле сидит в наименовании, помогает КодСимвола. Это первое, что стоит сделать, когда две «одинаковые» строки не совпадают при сравнении.
Автозамена: что делает платформа и что делают другие программы
Платформа 1С:Предприятие в полях ввода кавычки не заменяет: никакой «умной» замены прямых кавычек на «ёлочки», как в Word, в ней нет. Разные кавычки в базе появляются из внешних источников:
- 📄 Word и Outlook по умолчанию меняют прямые кавычки на типографские. Текст, скопированный из договора в Word, придёт в 1С уже с « » или “ ”;
- 🌐 сайты и мессенджеры часто отдают английские “ ”;
- 📥 загрузка из Excel или CSV переносит те кавычки, которые были в файле;
- ⌨️ программы-переключатели раскладки умеют подменять символы при наборе.
Если в базе нужен один вид кавычек, самый надёжный путь — привести данные к нему программно, а при ручном вводе следить за источником копирования. В Word автозамену отключают в параметрах автозамены, пункт о замене прямых кавычек парными.
Как привести прямые кавычки к «ёлочкам» кодом
Простая замена СтрЗаменить(Текст, """", "«") сделает все кавычки открывающими. Нужна функция, которая отличает открывающую кавычку от закрывающей. Рабочее правило: кавычка открывающая, если перед ней начало строки, пробел, скобка или другая открывающая кавычка; во всех остальных случаях — закрывающая.
Функция КавычкиВЁлочки(Знач Текст) Экспорт
Открывающие = " («" + Символы.ПС + Символы.Таб + Символы.НПП;
Результат = "";
Предыдущий = " ";
Для Н = 1 По СтрДлина(Текст) Цикл
С = Сред(Текст, Н, 1);
Если С = """" Тогда
Если СтрНайти(Открывающие, Предыдущий) > 0 Тогда
С = "«";
Иначе
С = "»";
КонецЕсли;
КонецЕсли;
Результат = Результат + С;
Предыдущий = С;
КонецЦикла;
Возврат Результат;
КонецФункции
Проверка на примерах:
| Исходная строка | Результат |
|---|---|
ООО "Ромашка" | ООО «Ромашка» |
АО "Фирма "Вектор"" | АО «Фирма «Вектор»» |
"Север" (г. Мурманск) | «Север» (г. Мурманск) |
Для вложенных кавычек по правилам русской типографики внутренние должны быть „лапками“: «Фирма „Вектор“». Если для ваших документов это важно, доработайте функцию счётчиком глубины вложенности. Для печати договоров обычно хватает варианта из таблицы.
Перед массовой заменой наименований в справочнике сделайте резервную копию базы. Обработку сначала запустите на копии и сверьте результат. Измените только печатное представление, если обмен с другими программами сравнивает наименования посимвольно: после замены сопоставление по наименованию может перестать работать.
Кавычки в печатных формах и при выгрузке в файлы
Текст в макете
В макете табличного документа текст ячейки вводится как в поле формы: кавычки ставятся с клавиатуры или Alt-кодами, удваивать их не нужно. Удвоение нужно только в коде модуля, а ячейка макета — это не литерал.
Если ячейка заполняется параметром (вид заполнения «Параметр» или «Шаблон» с [ИмяПараметра]), в документ попадёт ровно то, что лежит в данных. Значит, вид кавычек в печатной форме определяется тем, как записано наименование в справочнике.
Чтобы договор печатался с «ёлочками» без изменения справочника, пропустите значение через функцию преобразования перед заполнением параметра:
Область.Параметры.Покупатель = КавычкиВЁлочки(Строка(Покупатель));
В типовых конфигурациях печатные формы лучше дорабатывать в расширении конфигурации или подключить свою внешнюю печатную форму. Правка типового макета прямо в конфигурации снимает её с полной поддержки и усложняет обновления.
Кавычки в выгрузке JSON, XML и CSV
| Формат | Что происходит с кавычками | Что делать |
|---|---|---|
JSON (ЗаписьJSON) | кавычка внутри значения экранируется автоматически как \" | ничего, записывать значение как есть |
XML (ЗаписьXML) | спецсимволы в значениях атрибутов экранируются автоматически | не вставлять " вручную |
CSV через ЗаписьТекста | платформа ничего не экранирует | значение с кавычкой или разделителем обернуть в кавычки, внутренние удвоить |
| Табличный документ в Excel | кавычки сохраняются как текст ячейки | обработка не нужна |
Ручное экранирование поверх автоматического — частая ошибка. Если в JSON заранее написать \", библиотека экранирует ещё и обратную косую черту, и получатель увидит в названии мусор.
Для CSV правило такое: поле ООО "Ромашка" записывается как "ООО ""Ромашка""". Функция для этого короткая:
Функция ПолеCSV(Знач Значение)
Возврат """" + СтрЗаменить(Значение, """", """""") + """";
КонецФункции
Почему кавычки отображаются неправильно и как это исправить
Как нормализовать кавычки перед сравнением
Когда нужно сопоставить контрагента из файла банка или загрузки с записью в базе, приведите обе строки к одному виду:
Функция БезКавычек(Знач Текст)
Для Каждого Код Из СтрРазделить("34,171,187,8220,8221,8222", ",") Цикл
Текст = СтрЗаменить(Текст, Символ(Число(Код)), "");
КонецЦикла;
Возврат СокрЛП(ВРег(Текст));
КонецФункции
После такой очистки ООО "Ромашка", ООО «Ромашка» и ооо “Ромашка” превращаются в одну строку ООО РОМАШКА. Для поиска и проверки на дубли этого достаточно. Сохранять в базу очищенное значение не нужно, оно только для сравнения.
Частые ошибки
- ❌ Писать строку в апострофах по привычке из других языков:
'Текст'. В 1С это литерал даты, модуль не скомпилируется. - ❌ Удваивать кавычки в ячейке макета. Там кавычка обычный символ, и в документе появятся две кавычки подряд.
- ❌ Заменять все прямые кавычки на одну «ёлочку» через
СтрЗаменить. Получится «Ромашка« с двумя открывающими. - ❌ Склеивать значения с кавычками прямо в текст запроса вместо параметра.
- ❌ Чинить кавычки в справочнике, не проверив обмены, которые ищут контрагентов по наименованию.
Частые вопросы
Можно ли настроить 1С, чтобы она сама ставила «ёлочки» при вводе?
Какой код у прямой кавычки в 1С?
- Получить её можно через Символ(34), а проверить код символа в строке — функцией КодСимвола.