При написании кода на языке 1С разработчики часто сталкиваются с необходимостью манипулирования строками, особенно когда речь идет о форматировании ФИО, адресов или формировании текстов для вывода пользователю. Традиционный способ добавления пробела через кавычки " " кажется простым, однако у программистов, имеющих опыт работы в других средах (например, Delphi или Pascal), возникает резонный вопрос: существует ли более строгий или системный способ обращения к этому символу, аналогичный конструкции #32?
В этой статье мы подробно разберем, как работать с пробелами в 1С, изучим доступные системные функции и выясним, почему в платформе нет предопределенной константы для обычного пробела.
Рассмотрим основной способ получения символа по его коду. В языке 1С для этого предназначена встроенная функция Символ(). Если в Pascal вы привыкли использовать #32, то в 1С эквивалентом будет вызов функции с передачей ей кода 32.
Проанализируем пример формирования строки ФИО, используя этот подход:
// Пример использования функции Символ(32)
РезультатСтрока = Фамилия + Символ(32) + Имя + Символ(32) + Отчество;
Этот метод гарантирует, что в строку будет вставлен именно стандартный пробел (ASCII 32). Это бывает крайне полезно, когда вы хотите избежать случайного ввода "невидимых" управляющих символов, которые могут попасть в код при копировании текста из веб-браузеров или текстовых процессоров.
Разберем ситуацию с системными перечислениями. В платформе 1С существует глобальное значение Символы, которое содержит набор часто используемых спецсимволов. Однако, если мы заглянем в синтакс-помощник, то обнаружим интересную деталь: обычного пробела там нет.
В перечислении Символы доступны следующие значения:
Символы.ВК — Возврат каретки.Символы.ПС — Перевод строки.Символы.Таб — Табуляция.Символы.НПП — Неразрывный пробел (код 160).Символы.ПФ — Перевод формы (страницы).Важный момент: часто разработчики путают обычный пробел и неразрывный пробел Символы.НПП. Неразрывный пробел визуально выглядит так же, но имеет код 160. Он используется для того, чтобы предотвратить перенос частей строки на новую строчку (например, чтобы инициалы не "оторвались" от фамилии). При поиске или сравнении строк обычный пробел и НПП — это разные символы, и стандартное сравнение " " = Символы.НПП вернет Ложь.
Иногда нам нужно не вставить пробел, а проверить, является ли конкретный символ в строке пробелом. Для этого эффективнее использовать числовые коды, так как сравнение чисел в памяти процессора происходит быстрее, чем сравнение строковых литералов. Выясним, как это реализовать на практике:
// Проверяем первый символ строки
Если КодСимвола(ВходнаяСтрока, 1) = 32 Тогда
Сообщить("Строка начинается с пробела");
КонецЕсли;
Такой подход часто применяется в алгоритмах парсинга (разбора) сложных текстовых файлов или при написании собственных функций очистки строк от лишних знаков. Для решения подобной задачи можно использовать готовую функцию очистки наименований справочников от некорректных символов.
Нужно учитывать специфику работы в запросах. В отличие от программного кода, в языке запросов 1С функция Символ() недоступна. Посмотрим на способы решения этой задачи внутри запроса:
Пример использования литерала в запросе для объединения полей:
ВЫБРАТЬ
Контрагенты.Наименование + " " + Контрагенты.ИНН КАК НаимИНН
ИЗ
Справочник.Контрагенты КАК Контрагенты
Поскольку в запросах нельзя использовать функции типа Символ(32), важно следить за тем, чтобы внутри кавычек " " случайно не оказался неразрывный пробел или другой похожий символ, иначе результат запроса может быть непредсказуемым при последующей обработке.
В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), существуют готовые инструменты для работы с разделителями. Проанализируем возможности общего модуля СтроковыеФункцииКлиентСервер.
Если ваша задача — разделить строку по пробелам, лучше использовать проверенные методы:
// Разложение строки в массив по пробелу
МассивСлов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсходнаяСтрока, " ");
Здесь использование литерала " " является стандартным и предпочтительным, так как это делает код максимально читаемым для других разработчиков.
Выясним причину, по которой использование Символ(32) иногда предпочтительнее строкового литерала. При коллективной разработке или копировании фрагментов кода из мессенджеров (Skype, Telegram) в конфигуратор могут попасть символы с кодами 160 (non-breaking space), 8199 (figure space) и другие. Визуально в редакторе кода они выглядят как обычный пробел, но программа будет работать некорректно.
Использование явной функции Символ(32) гарантирует, что вы используете именно стандартный пробел. Это особенно актуально при работе с:
Подводя итог, можно сказать, что хотя в 1С нет прямого синтаксического аналога #32, платформа предоставляет гибкие инструменты для работы с символами. Использование литерала " " является общепринятым стандартом благодаря высокой читаемости кода, но в задачах, требующих строгой точности или при переходе с других языков программирования, функция Символ(32) станет вашим надежным инструментом.
Рассмотренные нами методы позволяют не только эффективно управлять пробелами, но и глубже понимать внутреннее устройство строковых типов данных в 1С, что отличает профессионального разработчика от новичка. Для расширения возможностей манипуляции текстовыми данными подойдёт набор универсальных методов для работы со строками.