Разработка и Конфигурация · 8 мин
Как узнать код символа в 1С
Как узнать код символа в 1С с помощью функции КодСимвола, получить символ по коду через Символ, проверить результат и избежать типичных ошибок.
Функция КодСимвола() во встроенном языке 1С возвращает числовой код символа в кодировке Unicode. Она применяется при разборе строк посимвольно, проверке ввода, генерации диапазонов символов, работе со специальными знаками и отладке текстовых данных, где символы выглядят одинаково, но имеют разные коды.
Обратная задача — получить символ по известному коду — решается функцией Символ(). Вместе эти две функции покрывают практически все сценарии низкоуровневой работы с текстом: от поиска «невидимых» символов в наименованиях номенклатуры до формирования служебных строк с табуляцией и переносом строки.
Ниже разобраны синтаксис, практические примеры, частые ошибки и способы проверки результата. Все примеры работают как в тонком и толстом клиенте, так и на сервере, включая внешние обработки и консоль кода.
Функция КодСимвола: синтаксис и поведение
Функция имеет два параметра: КодСимвола(Строка, Позиция). Первый — строка, из которой берётся символ, второй — необязательный номер позиции (нумерация начинается с 1). Если позицию не указывать, берётся первый символ строки.
Код = КодСимвола("А"); // 1040 — кириллическая А
Код = КодСимвола("A"); // 65 — латинская A
Код = КодСимвола("Пример", 3); // 1080 — третий символ «и»
Результат — число типа «Число», соответствующее коду символа в Unicode. Это важно при сравнении похожих символов: кириллическая «А» и латинская «A» выглядят одинаково, но их коды различаются, из-за чего поиск и сравнение строк могут неожиданно не срабатывать.
Если позиция выходит за границы строки или строка пустая, поведение зависит от контекста, поэтому перед обращением к символу строку стоит проверять на длину через СтрДлина().
Получение символа по коду: функция Символ
Функция Символ(Код) выполняет обратное преобразование: принимает числовой код и возвращает строку из одного символа. Это стандартный способ вставить в строку служебные символы, которых нет на клавиатуре.
ПереносСтроки = Символ(10); // LF — перевод строки
ВозвратКаретки = Символ(13); // CR
Табуляция = Символ(9); // табуляция
НеразрывныйПробел = Символ(160);
Для переноса строки в платформе есть и предопределённое значение Символы.ПС, а также Символы.Таб, Символы.ВК — их удобнее использовать вместо «магических» чисел, так код читается лучше.
Практические сценарии использования
Поиск скрытых и «чужих» символов в данных
Частая задача — найти в наименовании товара или ФИО контрагента неразрывный пробел, табуляцию или латиницу вместо кириллицы. Такие символы ломают поиск, сортировку и обмен данными, хотя визуально строка выглядит нормально.
Для Поз = 1 По СтрДлина(Текст) Цикл
Код = КодСимвола(Текст, Поз);
Если Код = 160 Тогда
Сообщить("Неразрывный пробел на позиции " + Поз);
КонецЕсли;
КонецЦикла;
Проверка допустимости ввода
Через коды удобно проверять, что строка содержит только цифры (коды 48–57), только кириллицу (основной диапазон 1040–1103) или только латиницу. Это применяется при валидации артикулов, кодов и идентификаторов перед записью в базу.
Генерация диапазонов символов
Цикл по кодам позволяет сформировать алфавит или последовательность значений, например буквенные индексы для нумерации:
Для Код = КодСимвола("А") По КодСимвола("Я") Цикл
Сообщить(Символ(Код));
КонецЦикла;
- 1Откройте внешнюю обработку «Консоль кода» или любую форму, где можно выполнить произвольный код
- 2Введите выражение: Сообщить(КодСимвола("А")) — с нужным символом в кавычках
- 3Выполните код и посмотрите выведенное число — это код символа в Unicode
- 4Для проверки выполните обратное: Сообщить(Символ(ПолученныйКод)) — должен вывестись исходный символ
Как проверить результат и где выполнять код
Самый быстрый способ узнать код конкретного символа — выполнить выражение в консоли кода или в отладчике. В отладчике достаточно остановиться в любой точке и в окне «Вычислить выражение» набрать КодСимвола("Ж") — результат появится сразу, без изменения конфигурации.
Для проверки корректности преобразования используйте круговой тест: Символ(КодСимвола(СимволИсходный)) должен вернуть исходный символ. Если возвращается другой знак — в исходных данных был не тот символ, который вы видели на экране (например, латиница вместо кириллицы).
Как проверить результат
Возвращается исходный символ
Возвращается другой знак — в данных скрытый или похожий символ
32 — обычный пробел, 160 — неразрывный, 9 — табуляция
Ожидался пробел, а код другой — строка содержит служебный символ
Кириллица 1040–1103, латиница 65–90 и 97–122
Код вне ожидаемого диапазона — смешение алфавитов
Типичные ошибки и ограничения
Главная ошибка — путать код символа и позицию. КодСимвола возвращает код знака в Unicode, а не его номер в строке. Для позиции вхождения подстроки используется функция СтрНайти().
Вторая распространённая проблема — сравнение строк «на глаз» вместо сравнения кодов. Если запрос или поиск не находит заведомо существующее значение, пройдитесь по строке посимвольно и выведите коды: почти всегда обнаруживается неразрывный пробел, латинская буква или невидимый управляющий символ, попавший в данные при копировании из Excel или внешних систем.
Также учитывайте, что часть символов Unicode (эмодзи и некоторые редкие знаки) кодируется суррогатными парами — одним «символом» с точки зрения пользователя могут быть две кодовые позиции. При посимвольном разборе таких строк результат может отличаться от ожидаемого.
Альтернативные способы узнать код символа
Если под рукой нет консоли кода, код символа можно посмотреть внешними средствами: в Windows — через стандартное приложение «Таблица символов» (charmap), где внизу окна отображается код выбранного знака. Однако учтите, что таблица может показывать код в шестнадцатеричном виде, а Символ() в 1С принимает десятичное число — значение потребуется перевести.
Для разового анализа строки из базы удобно выгрузить значение в текстовый файл и посмотреть коды в редакторе, отображающем служебные символы. Но для регулярной работы надёжнее написать небольшую обработку, которая выводит таблицу «символ — код» для произвольной строки.
Способы узнать код символа
Самый быстрый и точный способ внутри 1С; требует права на выполнение произвольного кода
Подходит, когда код уже выполняется; не требует отдельных инструментов
Работает без 1С, но код выводится в шестнадцатеричном виде и не проверяет реальные данные базы
Оптимальна для регулярного анализа строк целиком; требует однократной разработки
Частые вопросы
Чем КодСимвола отличается от СтрНайти?
КодСимвола возвращает числовой код Unicode одного символа в указанной позиции. СтрНайти ищет подстроку в строке и возвращает позицию её начала. Это разные задачи: первая — про представление символа, вторая — про поиск текста.
Какой код у обычного и неразрывного пробела?
Обычный пробел имеет код 32, неразрывный — 160. Внешне они неотличимы, поэтому неразрывный пробел часто становится причиной «не находящихся» строк. Заменить его можно через СтрЗаменить(Текст, Символ(160), " ").
Как вставить перенос строки в строковое значение?
Используйте Символы.ПС или Символ(10). Для совместимости с Windows-форматами иногда нужна пара CR+LF: Символ(13) + Символ(10). В многострочных строковых литералах в модуле перенос можно задать и символом вертикальной черты.
Почему КодСимвола возвращает не тот код, который я ожидаю?
Чаще всего символ в данных отличается от того, что вы видите: латиница вместо кириллицы, неразрывный пробел, похожий знак из другого алфавита. Выведите коды всех символов строки по позициям и сравните с ожидаемыми диапазонами.
Работает ли КодСимвола на сервере и в веб-клиенте?
Да, функция доступна во всех контекстах исполнения: тонкий, толстый, веб-клиент и сервер. Ограничений по директивам компиляции у неё нет, поэтому код посимвольного разбора можно размещать в общих модулях.
Как узнать коды сразу всех символов строки?
Организуйте цикл от 1 до СтрДлина(Строка), внутри вызывайте КодСимвола(Строка, Позиция) и выводите пару «символ — код» через Сообщить или в таблицу значений. Это стандартный приём диагностики «грязных» строк из обменов и загрузок.
Что важно запомнить
Код символа в 1С возвращает функция КодСимвола(Строка, Позиция), обратное преобразование делает Символ(Код). Посимвольная проверка кодов — основной способ найти скрытые символы, из-за которых ломаются поиск, сравнение и обмен данными.