Разработка и Конфигурация · 9 мин
Что значит символ в 1С и как с ним работать
Что означает символ в 1С: функция Символ(), коды символов, спецсимволы, перевод строки, неразрывный пробел. Примеры кода и типичные ошибки.
Запрос «1С что значит символ» обычно возникает в трёх ситуациях: пользователь встретил в коде встроенного языка функцию Символ(), увидел в строке странный знак вроде квадратика или вопросительного знака, либо столкнулся с типом данных «Символ» при работе с последовательностями строк. Во всех случаях речь идёт об одном и том же понятии — отдельном знаке (букве, цифре, знаке препинания или служебном коде), из которых состоят строки в 1С.
Во встроенном языке 1С нет отдельного типа данных «символ», как в некоторых других языках программирования. Любой одиночный знак — это просто строка длиной в один символ. Однако платформа предоставляет специальные инструменты для работы с символами: функции Символ() и КодСимвола(), объект Символы со служебными знаками и методы строк, оперирующие посимвольной обработкой.
Что такое символ во встроенном языке 1С
Символ — минимальная единица строки. Когда вы пишете Строка = "Привет", платформа хранит последовательность из семи символов. Обратиться к отдельному знаку можно функцией Сред(): выражение Сред("Привет", 2, 1) вернёт строку «р» — один символ.
Каждый символ имеет числовой код в кодировке Unicode. Буква «А» кириллическая, латинская «A» и даже невидимый перевод строки — всё это символы с собственными кодами. Именно поэтому визуально похожие знаки могут быть разными символами, что нередко становится причиной ошибок при сравнении строк и поиске данных.
Функция Символ(): как получить знак по коду
Функция Символ(КодСимвола) возвращает строку из одного символа по его числовому коду Unicode. Это основной способ вставить в строку знак, который нельзя набрать с клавиатуры напрямую: например, неразрывный пробел (код 160) или знак копирайта (код 169).
Типичный пример использования:
НеразрывныйПробел = Символ(160);
ТекстСообщения = "Итого:" + НеразрывныйПробел + "1 000 руб.";
Обратная функция — КодСимвола(Строка) — возвращает код первого символа переданной строки. С её помощью можно проверить, какой именно знак скрыт в данных: КодСимвола("А") покажет, кириллическая это буква (код 1040) или латинская (код 65). Это незаменимый приём при отладке, когда строки «на вид одинаковые», но сравнение возвращает Ложь.
Код = КодСимвола(Сред(ПроверяемаяСтрока, 5, 1));
Сообщить("Код пятого символа: " + Код);Объект Символы: готовые служебные знаки
Чтобы не запоминать коды самых востребованных служебных символов, платформа предоставляет объект Символы. Он содержит набор свойств, каждое из которых — строка с нужным знаком.
| Свойство | Что содержит | Где применяется |
|---|---|---|
Символы.ПС | Перевод строки | Многострочные сообщения, текстовые файлы |
Символы.ВК | Возврат каретки | Обмен с внешними системами, файлы Windows-формата |
Символы.Таб | Табуляция | Разделители колонок, отступы |
Символы.НПП | Неразрывный пробел | Форматирование чисел и сумм |
Символы.ВТаб | Вертикальная табуляция | Редкие форматы обмена |
Символы.ПФ | Перевод формы (страницы) | Печатные формы, текстовые документы |
Самый частый сценарий — сборка многострочного текста: Текст = "Строка 1" + Символы.ПС + "Строка 2". Второй по популярности — очистка данных от неразрывных пробелов, которые приходят из Excel или веб-форм и ломают преобразование строки в число.
Невидимые символы в данных: почему строки «не совпадают»
Классическая проблема: два наименования контрагента выглядят одинаково, но поиск по справочнику ничего не находит, а запрос с условием равенства возвращает пустой результат. Почти всегда причина — скрытые символы: неразрывный пробел вместо обычного, перевод строки в конце значения, табуляция или латинская буква вместо кириллической.
Диагностика выполняется посимвольным разбором строки в цикле с выводом кода каждого знака через КодСимвола(). Если длина строки (СтрДлина()) больше, чем видимых знаков, — в данных точно есть невидимые символы.
- 1Проверьте длину строки функцией СтрДлина() и сравните с числом видимых знаков.
- 2Пройдите по строке циклом: для каждой позиции выведите Сред(Строка, Н, 1) и КодСимвола().
- 3Найдите коды, не соответствующие ожидаемым буквам и цифрам: 160 (неразрывный пробел), 10 (перевод строки), 9 (табуляция).
- 4Удалите лишние знаки через СтрЗаменить() или СокрЛП() и повторите сравнение.
Посимвольная обработка строк: типовые приёмы
Когда нужно проверить или преобразовать строку посимвольно, используется цикл с функцией Сред(). Например, проверка, что строка состоит только из цифр, или фильтрация недопустимых знаков в номере документа.
Результат = "";
Для Н = 1 По СтрДлина(ИсходнаяСтрока) Цикл
ТекСимвол = Сред(ИсходнаяСтрока, Н, 1);
Если КодСимвола(ТекСимвол) >= 48 И КодСимвола(ТекСимвол) <= 57 Тогда
Результат = Результат + ТекСимвол;
КонецЕсли;
КонецЦикла;
Для простых задач посимвольный цикл не нужен: функции СтрЗаменить(), СокрЛП(), ВРег() и НРег() решают большинство бытовых операций быстрее и понятнее. Цикл оправдан, когда логика зависит от кода каждого знака — например, при разборе нестандартных форматов обмена.
При обмене с внешними системами перевод строки может приходить в двух вариантах: только Символы.ПС (Unix-стиль) или пара Символы.ВК + Символы.ПС (Windows-стиль). Если текст «слипается» или, наоборот, появляются пустые строки, проверьте, какой вариант использует источник, и нормализуйте данные через СтрЗаменить().
Типичные ошибки при работе с символами
Отдельная группа ошибок связана с числовым преобразованием. Строка «1 000» с неразрывным пробелом не преобразуется в число напрямую. Безопасный порядок: сначала СтрЗаменить(Значение, Символы.НПП, ""), затем удаление обычных пробелов и только потом вызов Число() в конструкции Попытка...Исключение.
Как проверить результат и выбрать подход
Как проверить результат
Сравнение возвращает Истина, поиск находит элемент
Строки по-прежнему не равны — остались скрытые символы
СтрДлина() равна числу видимых знаков
Длина больше видимого текста — есть невидимые коды
Число() возвращает значение без исключения
Ошибка преобразования — проверьте НПП и разделители
Как выбрать действие
Частые вопросы
Есть ли в 1С отдельный тип данных «символ»?
Нет. Одиночный символ — это обычная строка длиной 1. Все строковые функции платформы работают с ним как со строкой, поэтому специальных операций для типа «символ» не требуется.
Чем отличается Символ(160) от обычного пробела?
Обычный пробел имеет код 32, а Символ(160) — неразрывный пробел. Визуально они одинаковы, но неразрывный пробел не разрывает строку при переносе и не воспринимается функциями преобразования как разделитель, из-за чего ломает преобразование в число и сравнение строк.
Как узнать код символа, который вижу в данных?
Используйте функцию КодСимвола(): передайте ей сам знак или выделите его из строки через Сред(Строка, Позиция, 1). Полученное число — код Unicode, по которому можно определить, что это за символ.
Почему Символы.ПС не даёт переноса строки в поле ввода?
Однострочное поле ввода игнорирует переводы строк. Чтобы перенос отображался, у поля должно быть включено свойство «Многострочный режим», либо используйте многострочное текстовое поле.
Как удалить все невидимые символы из строки разом?
Универсальной одной функции нет. Практичный вариант — последовательно применить СтрЗаменить() для Символы.НПП, Символы.Таб, Символы.ПС и Символы.ВК, а затем СокрЛП(). Для строгой фильтрации используйте посимвольный цикл, оставляющий только допустимые коды.
Можно ли использовать Символ() для вставки спецзнаков в печатные формы?
Да, если используемый шрифт содержит этот знак. Перед выводом проверьте результат на тестовой печати: при отсутствии глифа в шрифте вместо символа появится пустой квадрат или знак вопроса.
Что важно запомнить
Символ в 1С — это строка длиной 1 с кодом Unicode. Функция Символ() создаёт знак по коду, КодСимвола() возвращает код знака, объект Символы даёт готовые служебные знаки. Большинство проблем со строками связано с невидимыми символами — диагностируйте их посимвольным разбором и очищайте данные перед сравнением или преобразованием.