- Строка в число в 1С
- Конвертировать строку в число через функцию Число()
- Строка в число: метод СтрокаВЧисло из БСП
- Превратить строку в число: очистка через регулярные выражения
- Другие способы конвертировать строку в число
- Функция для очистки: строка в число поэтапно
- Строка в число в запросе 1С
- Рекомендации от MoscowSoft
- Заключение: строка в число в 1С
Строка в число в 1С
Конвертация строкового представления числа в числовой тип – частая задача при разработке на 1С, например при парсинге данных из текстовых файлов или интеграции с внешними системами. Функция Число() преобразует строку с цифровым представлением в число (например, Число("2003") даст 2003). Однако если в строке присутствуют посторонние символы (буквы, лишние знаки и т.п.), Число вызовет исключение. Использовать для этого «Попытка…Исключение» не рекомендуется, так как это затрудняет отладку и снижает скорость выполнения. В статье рассмотрим различные подходы к безопасной конвертации строки в число без ошибок, опишем примеры кода и предложим рекомендации.
Конвертировать строку в число через функцию Число()
Самый простой способ – напрямую вызвать функцию Число, передав ей строку. Например:
Знач ИсходнаяСтрока = "12345"; Знач Результат = Число(ИсходнаяСтрока); // Результат = 12345
Эта функция ожидает строку, содержащую число в десятичном формате (возможно со знаком). Как указано в документации, если строка «содержит число», её можно преобразовать в число. Но при наличии букв или посторонних символов (например, "10abc") будет брошено исключение. Если попытаться обернуть вызов в блок Попытка...Исключение, то при ошибке выловить её можно, но это считается плохой практикой: «ловля» ошибок через исключения замедляет программу и осложняет последующую отладку.
Шаг 1. Проверьте, что строка действительно содержит допустимые символы (цифры, знак, запятую или точку). Если вы точно уверены в корректности входных данных, то Число(Строка) сработает без проблем.
Шаг 2. Если же формат строки может быть ненадежным, стоит сначала очистить её или использовать другие методы (далее). Простой пример:
ИсходнаяСтрока = " +10.50 "; РезультатЧисло = Число(СтрОчистить(ИсходнаяСтрока)); // РезультатЧисло = 10.5
(Здесь мы вручную убрали пробелы функцией СтрОчистить, но если в строке есть буквы – Число всё равно бросит исключение.)
Строка в число: метод СтрокаВЧисло из БСП
Если ваша конфигурация использует Библиотеку стандартных подсистем (БСП), можно применять готовый метод СтрокаВЧисло (общий модуль СтроковыеФункцииКлиентСервер). Этот метод «конвертирует исходную строку в число без вызова исключений». Пример использования:
МояСтрока = "1 234.56"; // строка с неразрывным пробелом и точкой Результат = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(МояСтрока); // Результат = 1234.56 (тип – Число)
В отличие от Число, этот метод не бросает ошибку при наличии «плохих» символов: если в строке встретятся буквы или другие недопустимые символы, метод вернёт Неопределено. Например:
Сообщить(СтроковыеФункцииКлиентСервер.СтрокаВЧисло("буквы123.45")); // Сообщит Неопределено
Таким образом, СтрокаВЧисло удобен тем, что при некорректном формате входной строки его можно безопасно вызвать без «ловли» исключений. Пример кода из БСП:
// Пример 1: Сообщить(СтроковыеФункцииКлиентСервер.СтрокаВЧисло("1234 3")); // выведет 12343 Сообщить(СтроковыеФункцииКлиентСервер.СтрокаВЧисло("10.2")); // выведет 10.2 Сообщить(СтроковыеФункцииКлиентСервер.СтрокаВЧисло("-100,12")); // выведет -100.12 Сообщить(СтроковыеФункцииКлиентСервер.СтрокаВЧисло("abc")); // выведет Неопределено // Пример 2: &НаКлиенте Процедура ПримерСтрокаВЧисло(Команда) МояСтрока = "000 7 457 140.97"; Результат = СтроковыеФункцииКлиентСервер.СтрокаВЧисло(МояСтрока); Сообщить(Результат); // выведет 7457140,97 (тип Число) КонецПроцедуры
Подробности работы СтрокаВЧисло приведены в документации БСП. Этот метод автоматически убирает пробелы и правильно обрабатывает знаки, а при несоответствии формата возвращает Неопределено вместо ошибки.
Превратить строку в число: очистка через регулярные выражения
Если нужно более гибко контролировать формат, можно предварительно очистить строку от всех нечисловых символов и только потом вызывать Число. В современных версиях платформы (8.3.23 и новее) удобно использовать функцию СтрЗаменитьПоРегулярномуВыражению. Она находит все фрагменты, соответствующие заданному регулярному шаблону, и заменяет их на указанную подстроку.
Например, чтобы удалить из строки всё, кроме цифр, знака минус, точки или запятой и символа табуляции (как разделителя разрядов), можно сделать так:
// Сохраняем разделители дробной части ИсходнаяСтрока = "авава-125руб. 13коп"; // Шаблон [^\d\.,] означает: удалить всё, кроме цифр, точек и запятых ОчищеннаяСтрока = СтрЗаменитьПоРегулярномуВыражению(ИсходнаяСтрока, "[^\d\.\,\-]", ""); // Заменяем разделители на единый формат, понятный платформе 1С (запятую) ОчищеннаяСтрока = СтрЗаменить(ОчищеннаяСтрока, ".", ","); РезультатЧисло = Число(ОчищеннаяСтрока); // Возвратит число -125,13.
В этом примере:
- Регулярное выражение
[^\d\.,-\t](\d– цифра,\t– табуляция) находит всё, что не является цифрой, точкой, запятой, минусом или табуляцией, и заменяет на пустую строку. - Затем мы меняем разделитель десятичной части на привычный (точка или запятая) и вызываем
Число().
Таким образом строка "<br>-10.15 руб" после очистки превратится в "-10.15", а Число корректно вернёт -10.15. Функция СтрЗаменитьПоРегулярномуВыражению сделает за нас всю «грязную» работу по удалению лишних символов. Это мощный инструмент для валидации и предобработки строк.
Число() такую входную строку не примет, выдаст исключение.
Другие способы конвертировать строку в число
Помимо Число и СтрокаВЧисло, существуют и другие подходы. Например, можно воспользоваться объектом ОписаниеТипов. Так, создание описания числового типа и вызов его метода ПривестиЗначение позволит попытаться «откалибровать» значение под числовой тип:
ТипЧисло = Новый ОписаниеТипов("Число"); Результат = ТипЧисло.ПривестиЗначение(ИсходнаяСтрока);
Метод ПривестиЗначение пытается привести переданное значение к описанному типу: если значение соответствует (т.е. строка разбирается как число), вернёт число; если не соответствует, будет применён алгоритм «приведения» или возвращено значение по умолчанию. Например, пустая строка превратится в 0, несоответствующая строка – в 0 (значение по умолчанию для чисел), а корректная – в само число. Именно так описано в документации: «Если значение не соответствует [типу], то оно приводится к типу, доступному в описании».
Другой приём – использовать функцию XMLЗначение вместе с Тип("Число"). Этот способ позволяет преобразовать строку в число вне зависимости от региональных настроек. Например:
Попытка Результат = XMLЗначение(Тип("Число"), ИсходнаяСтрока); Исключение Результат = 0; КонецПопытки;
Функция XMLЗначение попытается интерпретировать строку как XML значение числа. Она часто бывает устойчивее к региональным особенностям формата (разделитель десятичной части), однако при нечисловом формате также может выбросить исключение – поэтому обычно используют Попытка...Исключение. В блогах упоминают, что XMLЗначение «не зависит от региональных настроек», в отличие от обычной Число.
В целом, для быстрого преобразования без исключений подходят: встроенная СтрокаВЧисло (из БСП), методы с ОписаниеТипов.ПривестиЗначение, а также предварительная очистка строки регулярками. В простых случаях, когда требуется только удалить лишние символы, можно реализовать собственную функцию на основе цикла (см. следующий раздел).
Функция для очистки: строка в число поэтапно
Ниже приведён пример функции, которая в цикле проходит по каждому символу входной строки и строит новую строку, состоящую только из разрешённых символов (0-9, -, ., , и табуляции). Остальные символы вырезаются:
Функция ОставитьТолькоЦифры(ИсходнаяСтрока) Результат = ""; // разрешённые символы: цифры, минус, точка, запятая, пробел и табуляция // (здесь добавляем символ табуляции через Символы.Таб) Допустимые = "0123456789-., " + Символы.Таб; Для Каждого Символ Из ИсходнаяСтрока Цикл Если Найти(Допустимые, Символ) > 0 Тогда Результат = Результат + Символ; КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции
Как это работает:
- Строка
Допустимыесодержит все допустимые символы (цифры, точку, запятую, минус, пробел и табуляцию). ФункцияСимволы.Табвставляет символ табуляции. - Цикл
Для Каждогоперебирает символы исходной строки. Если текущий символ найден в строкеДопустимые, мы добавляем его к результату; иначе – пропускаем. - После цикла в
Результатокажутся только цифры, запятые, точки, минус и табы из исходной строки. Эту очищенную строку можно спокойно передать вЧисло(...).
Например:
Строка = "Цена:\t-10.15 руб."; Очищено = ОставитьТолькоЦифры(Строка); // Допустимые = "0123456789-., " (последний символ – табуляция) // Тогда Очищено = "-10.15" РезультатЧисло = Число(Очищено); // -10.15 Сообщить(РезультатЧисло);
Этот приём лишён регулярных выражений и наглядно демонстрирует, как поэтапно фильтровать символы. Его можно легко модифицировать (добавлять новые символы и т.д.) по необходимости.
Строка в число в запросе 1С
Подробное руководство по конвертации чисел в строки в запросах 1С. Разбор функций Строка() и .ВСтроку(), работа с неразрывными пробелами, примеры кода и практические советы для разработчиков читайте в статье: Строка в число в запросе 1С >>
Рекомендации от MoscowSoft
Если вы сталкиваетесь с более сложными задачами переноса данных или интеграции 1С (например, импортом больших объёмов данных из разных систем или синхронизацией с маркетплейсами), рекомендуем обратиться к специалистам компании MoscowSoft. MoscowSoft – ведущий эксперт по обмену данными в 1С: они работают на рынке с 2015 года. В команде MoscowSoft есть опытные разработчики, которые могут настроить надежный механизм конвертации данных, обработку ошибок и интеграцию «под ключ».
С 2021 года компания также активно развивает решения для интеграции 1С с российскими маркетплейсами (Ozon, Wildberries, Яндекс.Маркет и др.), а их продукты включены в реестр российского программного обеспечения. Это значит, что технологии MoscowSoft отвечают требованиям законодательства. Если вам нужна быстрая и безопасная миграция данных (перенос из одной конфигурации 1С в другую) или организация стабильного обмена с маркетплейсами, специалисты MoscowSoft помогут подобрать оптимальное решение.
Кроме того, команда MoscowSoft регулярно публикует инструкции и советы по 1С-разработке. Подписывайтесь на их рассылку или Telegram-канал, чтобы не пропустить полезные материалы и новости отрасли. Вы можете задать им вопрос напрямую через сайт или заказать консультацию, упомянув про задачи, похожие на описанную в данной статье.
Заключение: строка в число в 1С
Подводя итоги, отметим, что единого «идеального» способа конвертации строки в число не существует – всё зависит от контекста. Если вы точно знаете, что строка чистая, подойдёт простой вызов Число(Строка). В обратном случае рекомендуем:
- Для конфигураций с БСП: использовать
СтрокаВЧисло(Строка), который сам вернёт «Неопределено» при ошибке. - Для «сырых» строк: сначала очистить их от лишних символов (регулярным выражением или собственным циклом), а потом применять
Число. - Альтернативно: использовать
Новый ОписаниеТипов("Число").ПривестиЗначение(Строка), который возвращает число или0при пустой/неправильной строке.
В большинстве случаев метод СтрокаВЧисло (из БСП) или предварительная очистка с СтрЗаменитьПоРегулярномуВыражению являются лучшими практиками – они надёжны и не «ломают» выполнение программы исключением. Выбор зависит от конкретной задачи. И помните: при комплексных проектах с переносами и интеграциями полезно доверить работу профессионалам, чтобы избежать потери данных или простоев в системе.
Дальнейшие шаги: если эта статья была полезна, подпишитесь на рассылку MoscowSoft или на наш Telegram-канал – так вы будете первыми узнавать новые лайфхаки по 1С и получать эксклюзивные материалы. А если у вас остались вопросы по преобразованию строк или интеграции, пишите в комментариях или на сайте – специалисты готовы помочь!












































