К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как определить код символа в 1С

Как определить код символа в 1С с помощью функции КодСимвола: синтаксис, примеры кода, работа с Unicode, типичные ошибки и способы проверки результата.

Во встроенном языке 1С:Предприятие для определения числового кода символа используется функция КодСимвола(). Она принимает строку и возвращает число — код символа в таблице Unicode. Это базовый инструмент при разборе текста посимвольно, проверке введённых данных, обработке штрихкодов и обмене данными с внешними системами, где важны точные коды знаков.

Обратная операция — получение символа по его коду — выполняется функцией Символ(). Вместе эти две функции образуют пару, которой достаточно для большинства задач работы с кодировками внутри конфигурации. Ниже разобран синтаксис, практические примеры, ограничения платформы и типичные ошибки.

Синтаксис и параметры функции КодСимвола

Функция имеет два параметра. Первый — обязательная строка, из которой извлекается символ. Второй — необязательный номер позиции символа в строке. Если позиция не указана, берётся первый символ строки.

Пример простейшего вызова: Код = КодСимвола("А"); — переменная получит значение 1040, это код заглавной русской буквы «А» в Unicode. Вызов КодСимвола("Привет", 3) вернёт код символа «и», стоящего на третьей позиции.

Важно помнить о нумерации позиций: в 1С позиции символов в строке считаются с единицы, а не с нуля, как во многих других языках программирования. Передача позиции 0 или позиции больше длины строки приведёт к ошибке выполнения.

Практические примеры использования

Наиболее частый сценарий — посимвольный разбор строки в цикле с проверкой кода каждого знака. Например, нужно убедиться, что в поле введены только цифры. Коды цифр от 0 до 9 занимают диапазон от 48 до 57, поэтому проверка выглядит как сравнение кода с границами диапазона.

Функция ТолькоЦифры(Строка)

Для Позиция = 1 По СтрДлина(Строка) Цикл

Код = КодСимвола(Строка, Позиция);

Если Код < 48 Или Код > 57 Тогда

Возврат Ложь;

КонецЕсли;

КонецЦикла;

Возврат Истина;

КонецФункции

Другой пример — проверка, что символ является русской буквой. Заглавные кириллические буквы занимают диапазон 1040–1071, строчные — 1072–1103, буква «Ё» имеет код 1025, а «ё» — 1105. Именно из-за отдельных кодов буквы «Ё» простая проверка диапазоном часто даёт сбой, и её нужно учитывать отдельным условием.

1c
Код = КодСимвола("Пример", 2);
Сообщить(Код); // код символа "р"
СимволОбратно = Символ(Код);

Третий сценарий — поиск непечатаемых символов в данных, пришедших из внешних систем. Символы с кодами меньше 32 — служебные (табуляция — 9, перевод строки — 10, возврат каретки — 13). Если в наименовании товара из файла обмена появляются «невидимые» знаки, их можно обнаружить именно проверкой кодов.

Полезные диапазоны кодов Unicode

Для практических проверок удобно держать под рукой основные диапазоны. Они одинаковы для всех систем, работающих с Unicode, поэтому применимы и в 1С, и при анализе данных из других программ.

Группа символовДиапазон кодовПример применения
Цифры 0–948–57Проверка числового ввода
Латиница A–Z65–90Валидация логинов, артикулов
Латиница a–z97–122Проверка регистра
Кириллица А–Я1040–1071Проверка русского текста
Кириллица а–я1072–1103Проверка русского текста
Ё и ё1025, 1105Отдельная проверка вне диапазона
Служебные символы0–31Поиск непечатаемых знаков

Обратное преобразование: функция Символ()

Функция Символ(Код) выполняет обратную операцию — возвращает строку из одного символа по его числовому коду. Например, Символ(1040) вернёт строку «А».

Эта пара функций полезна при генерации последовательностей. Например, чтобы получить буквы от «А» до «Я» для нумерации вариантов, достаточно пройти циклом по кодам от 1040 до 1071 и преобразовать каждый код в символ.

Также Символ() применяется для вставки служебных символов в строки: перевода строки (код 10), табуляции (код 9). Впрочем, для перевода строки в 1С есть более читаемая конструкция — системный набор Символы.ПС, Символы.Таб и другие, который предпочтительнее в новом коде.

Ограничения и особенности платформы

Функция КодСимвола() работает с символами в базовой плоскости Unicode. Символы, которые в UTF-16 представляются суррогатными парами (некоторые редкие иероглифы, часть эмодзи), могут обрабатываться не так, как ожидает разработчик: один видимый знак может занимать две кодовые позиции. Если прикладное решение работает с таким контентом, поведение стоит проверить на тестовых данных.

Вторая особенность — поведение при пустой строке. Вызов КодСимвола("") завершится ошибкой, потому что символа для анализа нет. Перед вызовом функции в циклах и обработчиках всегда проверяйте длину строки через СтрДлина().

Третий момент — регистр. Функция не нормализует символ: коды заглавной и строчной буквы различаются. Если проверка не должна зависеть от регистра, предварительно приведите строку к одному регистру функциями ВРег() или НРег(), а уже потом анализируйте коды.

Типичные ошибки
01
Вызов КодСимвола() для пустой строки — приводит к ошибке выполнения; проверяйте СтрДлина() заранее
02
Проверка кириллицы диапазоном 1040–1103 без учёта букв Ё и ё — они находятся вне непрерывного диапазона
03
Нумерация позиций с нуля — в 1С первый символ имеет позицию 1, обращение к позиции 0 вызывает ошибку
04
Сравнение символов без учёта регистра — коды заглавной и строчной буквы различаются

Как проверить результат работы кода

Самый быстрый способ убедиться, что функция возвращает ожидаемое значение, — вывести результат через Сообщить() в отладочной обработке или выполнить код в консоли кода (внешней обработке для выполнения произвольных выражений). В конфигураторе также можно остановиться точкой останова и посмотреть значение переменной в табло.

Для перекрёстной проверки удобно использовать обратное преобразование: взять код, вернуть его в символ через Символ() и сравнить с исходным знаком. Если символы совпали — преобразование выполнено корректно.

Контрольные точки

Как проверить результат

Код известного символа
Норма

КодСимвола("А") возвращает 1040

Тревожный признак

Возвращается другое число или ошибка

Обратное преобразование
Норма

Символ(КодСимвола("Ж")) возвращает "Ж"

Тревожный признак

Символ отличается от исходного

Обработка пустой строки
Норма

Код проверяет длину до вызова функции

Тревожный признак

Ошибка выполнения на пустой строке

Альтернативные способы работы с символами

Не для каждой задачи нужен именно числовой код. Если цель — проверить вхождение символа в допустимый набор, часто проще использовать СтрНайти() со строкой допустимых знаков. Например, проверка СтрНайти("0123456789", Символ) > 0 решает задачу валидации цифр без обращения к кодам.

Для сложных проверок формата строк (например, соответствие шаблону артикула) в управляемых формах доступны регулярные выражения через объект COMОбъект("VBScript.RegExp") на Windows-сервере или аналогичные механизмы. Однако посимвольный разбор через КодСимвола() остаётся самым переносимым и предсказуемым вариантом, работающим на любой платформе без внешних компонентов.

Способы проверки символов

КодСимвола() и сравнение кодов

Подходит для диапазонов и непечатаемых символов; требует знания таблицы кодов

СтрНайти() по строке допустимых знаков

Проще и нагляднее для конечного списка символов; неудобно для широких диапазонов

Регулярные выражения

Гибко для сложных шаблонов; зависит от внешних компонентов и платформы

Часто задаваемые вопросы

Как получить код первого символа строки?

Достаточно вызвать функцию с одним параметром: КодСимвола(Строка). Позиция по умолчанию равна 1, поэтому возвращается код первого символа. Перед вызовом убедитесь, что строка не пустая.

Чем отличается КодСимвола от Символ?

Это взаимно обратные функции. КодСимвола() принимает строку и возвращает число — код знака. Символ() принимает число и возвращает строку из одного знака с этим кодом.

Почему проверка русских букв не находит букву «Ё»?

Буквы «Ё» (код 1025) и «ё» (код 1105) находятся вне непрерывных диапазонов кириллицы 1040–1071 и 1072–1103. Их нужно проверять отдельными условиями либо предварительно заменять на «Е» и «е», если различие непринципиально.

Можно ли определить код символа без программирования?

Да, для разовой проверки можно воспользоваться консолью кода в режиме предприятия или любой внешней таблицей Unicode. Но внутри прикладного решения корректный способ — именно функция КодСимвола(), так как она гарантированно работает с той же кодировкой, что и платформа.

Что вернёт функция для строки с эмодзи?

Эмодзи и некоторые редкие знаки в UTF-16 кодируются парой кодовых единиц, поэтому один видимый символ может дать два разных кода при посимвольном разборе. Если решение работает с таким текстом, протестируйте поведение на реальных данных и не полагайтесь на равенство «один символ — один код».

Как проверить, что строка содержит только латиницу?

Пройдите по строке циклом, получите код каждого символа и проверьте вхождение в диапазоны 65–90 и 97–122. Если хотя бы один код выходит за эти границы, строка содержит не только латинские буквы.

Итог

Что важно запомнить

Код символа в 1С возвращает функция КодСимвола(Строка, Позиция), обратное преобразование — Символ(Код). Позиции считаются с единицы, пустая строка вызывает ошибку, а буквы Ё/ё лежат вне основного диапазона кириллицы.