Top.Mail.Ru
Меню
Каталог Программы 1С Опыт и отзывы Услуги Компания Интересное Контакты

Строка в число 1С

Основатель и генеральный директор компании MoscowSoft, Сорокин Сергей
Сорокин Сергей, Генеральный директор MoscowSoft  02.09.2026 Актуальность проверена: 02.09.2026   5 мин.
Содержание

Строка в число в 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.

В этом примере:

  1. Регулярное выражение [^\d\.,-\t] (\d – цифра, \t – табуляция) находит всё, что не является цифрой, точкой, запятой, минусом или табуляцией, и заменяет на пустую строку.
  2. Затем мы меняем разделитель десятичной части на привычный (точка или запятая) и вызываем Число().

Таким образом строка "<br>-10.15 руб" после очистки превратится в "-10.15", а Число корректно вернёт -10.15. Функция СтрЗаменитьПоРегулярномуВыражению сделает за нас всю «грязную» работу по удалению лишних символов. Это мощный инструмент для валидации и предобработки строк.

Другие способы конвертировать строку в число

Помимо Число и СтрокаВЧисло, существуют и другие подходы. Например, можно воспользоваться объектом ОписаниеТипов. Так, создание описания числового типа и вызов его метода ПривестиЗначение позволит попытаться «откалибровать» значение под числовой тип:

ТипЧисло = Новый ОписаниеТипов("Число");
Результат = ТипЧисло.ПривестиЗначение(ИсходнаяСтрока);

Метод ПривестиЗначение пытается привести переданное значение к описанному типу: если значение соответствует (т.е. строка разбирается как число), вернёт число; если не соответствует, будет применён алгоритм «приведения» или возвращено значение по умолчанию. Например, пустая строка превратится в 0, несоответствующая строка – в 0 (значение по умолчанию для чисел), а корректная – в само число. Именно так описано в документации: «Если значение не соответствует [типу], то оно приводится к типу, доступному в описании».

Другой приём – использовать функцию XMLЗначение вместе с Тип("Число"). Этот способ позволяет преобразовать строку в число вне зависимости от региональных настроек. Например:

Попытка
	Результат = XMLЗначение(Тип("Число"), ИсходнаяСтрока);
Исключение
	Результат = 0;
КонецПопытки;

Функция XMLЗначение попытается интерпретировать строку как XML значение числа. Она часто бывает устойчивее к региональным особенностям формата (разделитель десятичной части), однако при нечисловом формате также может выбросить исключение – поэтому обычно используют Попытка...Исключение. В блогах упоминают, что XMLЗначение «не зависит от региональных настроек», в отличие от обычной Число.

В целом, для быстрого преобразования без исключений подходят: встроенная СтрокаВЧисло (из БСП), методы с ОписаниеТипов.ПривестиЗначение, а также предварительная очистка строки регулярками. В простых случаях, когда требуется только удалить лишние символы, можно реализовать собственную функцию на основе цикла (см. следующий раздел).

Функция для очистки: строка в число поэтапно

Ниже приведён пример функции, которая в цикле проходит по каждому символу входной строки и строит новую строку, состоящую только из разрешённых символов (0-9, -, ., , и табуляции). Остальные символы вырезаются:

Функция ОставитьТолькоЦифры(ИсходнаяСтрока)
	Результат = "";
	// разрешённые символы: цифры, минус, точка, запятая, пробел и табуляция
	// (здесь добавляем символ табуляции через Символы.Таб)
	Допустимые = "0123456789-., " + Символы.Таб;
	Для Каждого Символ Из ИсходнаяСтрока Цикл
		Если Найти(Допустимые, Символ) > 0 Тогда
			Результат = Результат + Символ;
		КонецЕсли;
	КонецЦикла;
	Возврат Результат;
КонецФункции

Как это работает:

  1. Строка Допустимые содержит все допустимые символы (цифры, точку, запятую, минус, пробел и табуляцию). Функция Символы.Таб вставляет символ табуляции.
  2. Цикл Для Каждого перебирает символы исходной строки. Если текущий символ найден в строке Допустимые, мы добавляем его к результату; иначе – пропускаем.
  3. После цикла в Результат окажутся только цифры, запятые, точки, минус и табы из исходной строки. Эту очищенную строку можно спокойно передать в Число(...).

Например:

Строка = "Цена:\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С

Подводя итоги, отметим, что единого «идеального» способа конвертации строки в число не существует – всё зависит от контекста. Если вы точно знаете, что строка чистая, подойдёт простой вызов Число(Строка). В обратном случае рекомендуем:

  1. Для конфигураций с БСП: использовать СтрокаВЧисло(Строка), который сам вернёт «Неопределено» при ошибке.
  2. Для «сырых» строк: сначала очистить их от лишних символов (регулярным выражением или собственным циклом), а потом применять Число.
  3. Альтернативно: использовать Новый ОписаниеТипов("Число").ПривестиЗначение(Строка), который возвращает число или 0 при пустой/неправильной строке.

В большинстве случаев метод СтрокаВЧисло (из БСП) или предварительная очистка с СтрЗаменитьПоРегулярномуВыражению являются лучшими практиками – они надёжны и не «ломают» выполнение программы исключением. Выбор зависит от конкретной задачи. И помните: при комплексных проектах с переносами и интеграциями полезно доверить работу профессионалам, чтобы избежать потери данных или простоев в системе.

Дальнейшие шаги: если эта статья была полезна, подпишитесь на рассылку MoscowSoft или на наш Telegram-канал – так вы будете первыми узнавать новые лайфхаки по 1С и получать эксклюзивные материалы. А если у вас остались вопросы по преобразованию строк или интеграции, пишите в комментариях или на сайте – специалисты готовы помочь!

MoscowSoft логотип

Подпишитесь на телеграм-канал MoscowSoft!
QR-код (ссылка приглашение) в канал MoscowSoft

https://t.me/MoscowSoft

Публикуем:
- инструкции и советы по разработке на 1С;
- рекомендации по интеграции 1С;
- бесплатно делимся своими обработками;
- публикуем секретные спецпредложения только для подписчиков.

Возврат к списку