Разработка и Конфигурация · 8 мин
Как в 1С поставить символы: практическое руководство
Как в 1С вставить специальные символы: функция Символ(), константа Символы, табуляция, перенос строки, кавычки в коде и в макетах печатных форм.
В 1С специальные символы — перенос строки, табуляцию, неразрывный пробел, кавычки — вставляют двумя способами: через встроенные конструкции языка (константа Символы и функция Символ()) или визуально в макетах и текстовых полях. Выбор зависит от того, где нужен символ: в программном коде, в печатной форме или в тексте, который видит пользователь.
Ошибки со спецсимволами — одна из самых частых причин «битых» печатных форм и некорректного обмена данными. Например, обычный перенос строки вместо символа ПС в многострочной строке приведёт к синтаксической ошибке, а неразрывный пробел из скопированного текста может сломать сравнение строк при загрузке данных.
Константа «Символы» — основной способ в коде
Во встроенном языке 1С есть системное перечисление Символы, которое покрывает большинство повседневных задач. Доступные значения: Символы.ПС — перенос строки, Символы.ВК — возврат каретки, Символы.Таб — табуляция, Символы.НПП — неразрывный пробел, Символы.ВТаб — вертикальная табуляция, Символы.ПФ — перевод формы (страницы).
Использование выглядит так:
ТекстСообщения = "Первая строка" + Символы.ПС + "Вторая строка";
Адрес = "г. Москва" + Символы.НПП + "ул. Примерная";
Константа предпочтительнее функции Символ(), потому что код остаётся читаемым: по записи Символы.Таб сразу понятно, что вставляется, а Символ(9) требует знания кодовой таблицы. Используйте Символ() только для символов, которых нет в перечислении.
Функция Символ() для произвольных кодов
Функция Символ(Код) возвращает символ по его числовому коду Unicode. Она нужна, когда требуется символ, отсутствующий в перечислении Символы: стрелки, значки валют, математические знаки, технические символы.
Примеры типовых кодов:
Символ(9)— табуляция (то же, что Символы.Таб);Символ(10)— перенос строки (то же, что Символы.ПС);Символ(13)— возврат каретки (Символы.ВК);Символ(160)— неразрывный пробел (Символы.НПП);Символ(34)— двойная кавычка.
Обратная функция — КодСимвола(Строка) — возвращает код первого символа строки. Она полезна при отладке: если строка «не сравнивается» с эталоном, проверьте коды посимвольно — часто оказывается, что в данных затесался неразрывный пробел (160) вместо обычного (32).
Сообщить(КодСимвола(Лев(ПроверяемаяСтрока, 1))); // узнать код первого символаКавычки и вертикальная черта в строковых литералах
Двойная кавычка внутри строкового литерала — классическая проблема, потому что кавычка завершает строку. В 1С её экранируют удвоением:
Текст = "Организация ""Ромашка"" отгрузила товар";
Многострочные строки в коде оформляются через вертикальную черту | в начале каждой следующей строки:
ДлинныйТекст = "Первая строка
|Вторая строка
|Третья строка";
При этом переносы внутри такого литерала уже являются частью строки — добавлять Символы.ПС между ними не нужно. Если вертикальную черту забыть, компилятор выдаст синтаксическую ошибку.
Символы в макетах и печатных формах
В табличных макетах (макетах печатных форм) символы вставляются напрямую в ячейки. Для нестандартных знаков — галочек, стрелок, градусов, валют — используют таблицу символов Windows (программа «charmap») или комбинации Alt+код на цифровом блоке клавиатуры, например Alt+0176 для знака градуса.
Если символ должен подставляться программно, его добавляют в текст параметра в коде перед выводом области:
Область.Параметры.Статус = "Согласовано " + Символ(10003); // галочка
Учитывайте шрифт: не всякий шрифт макета содержит экзотический символ. Если вместо значка печатается пустой квадрат, смените шрифт ячейки на тот, где символ есть (например, Segoe UI Symbol), или замените символ на текстовое обозначение.
Неразрывный пробел и проблемы сравнения строк
Неразрывный пробел (код 160) визуально неотличим от обычного, но 1С при сравнении строк считает их разными символами. Это источник скрытых дефектов: номенклатура «не находится» при поиске, контрагент «не совпадает» с записью в базе, число не преобразуется из строки, потому что разделитель разрядов — НПП.
Надёжный приём очистки перед сравнением или преобразованием:
ЧистаяСтрока = СтрЗаменить(ИсходнаяСтрока, Символы.НПП, " ");
ЧистаяСтрока = СокрЛП(ЧистаяСтрока);
Обратная задача — вывести число с неразрывными пробелами как разделителями разрядов — решается функцией Формат() с указанием группировки, вручную вставлять НПП не требуется.
Как проверить результат
Каждая часть текста на своей строке
Текст слипся или появились пустые строки
Сравнение даёт Истина
Строки визуально одинаковы, но не равны — ищите скрытый НПП
Символ отображается в предпросмотре и на печати
Вместо символа квадрат или знак вопроса — проблема шрифта
Спецсимволы в запросах и при обмене данными
В тексте запроса 1С строковые литералы тоже заключаются в двойные кавычки, и кавычка внутри экранируется удвоением — правило то же, что в коде. Перенос строки внутри строкового литерала запроса допустим.
При выгрузке в XML, JSON или CSV управляющие символы (коды 0–31, кроме табуляции и переводов строк) часто запрещены форматом. Перед выгрузкой такие символы стоит удалять или заменять, иначе файл не пройдёт валидацию у получателя. Для XML дополнительно экранируются &, <, > — при использовании штатных объектов записи XML это происходит автоматически, при ручной сборке строк — нет.
Как выбрать способ
Часто задаваемые вопросы
Как вставить перенос строки в сообщение пользователю?
Соедините части текста через Символы.ПС: "Строка 1" + Символы.ПС + "Строка 2". Это работает в Сообщить(), в тексте предупреждения и в многострочных полях формы.
Чем Символы.ПС отличается от Символы.ВК?
ПС — перевод строки (код 10), ВК — возврат каретки (код 13). Внутри 1С для переноса достаточно ПС; пара ВК+ПС нужна в основном при обмене с системами, ожидающими Windows-разделитель строк.
Как поставить кавычки внутри строки в коде?
Удвойте кавычку: "Организация ""Ромашка""". Альтернатива — собрать строку через Символ(34), но удвоение читается проще.
Почему вместо спецсимвола на печати выводится квадрат?
В шрифте ячейки макета нет этого символа. Смените шрифт на тот, где символ присутствует, либо замените значок текстовым обозначением.
Как найти скрытый неразрывный пробел в строке?
Пройдите по строке циклом и выведите КодСимвола() для каждого символа: у обычного пробела код 32, у неразрывного — 160. Затем удалите НПП через СтрЗаменить(Строка, Символы.НПП, " ").
Можно ли использовать эмодзи и произвольные Unicode-символы?
Технически да, через Символ(Код), но отображение зависит от шрифта клиента и платформы. В печатных формах и обмене данными от экзотических символов лучше отказаться в пользу текстовых обозначений.
Что важно запомнить
В коде используйте константу Символы для стандартных символов и Символ(Код) для остальных; кавычки в строках удваивайте; в макетах вставляйте символы напрямую и проверяйте шрифт; при проблемах со сравнением строк в первую очередь ищите неразрывный пробел.