Ошибка 1С: Преобразование значения к типу Число не может быть выполнено
- Аварийное прерывание расчетов, проведения документов или загрузки файлов (Excel, CSV, XML, JSON).
- Текст ошибки:
{Модуль(Строка)}: Преобразование значения к типу Число не может быть выполнено. - Сбой при вызове явной функции
Число(Значение)или при выполнении арифметических операций (+,-,*,/).
1. Причины ошибки приведения типов
Платформа 1С:Предприятие вызывает исключение при конвертации в число, если:
- Строка содержит неразрывные пробелы (символ
Символы.НПП/ ASCII 160), пробелы-разделители триад или буквы; - В качестве десятичного разделителя используется запятая вместо точки (или наоборот, в зависимости от локали);
- Значение содержит
Неопределено,Null, объект ссылки или пустую строку""(в некоторых версиях/контекстах).
2. Практические методы решения
Метод 1: Очистка строки от мусора и разделителей
Функция СтрокуВЧислоБезопасно(ВходнаяСтрока) Экспорт
// 1. Заменяем неразрывные пробелы и обычные пробелы на пустоту
ОчищеннаяСтрока = СтрЗаменить(ВходнаяСтрока, Символы.НПП, "");
ОчищеннаяСтрока = СтрЗаменить(ОчищеннаяСтрока, " ", "");
// 2. Унифицируем разделитель дроби (запятую на точку)
ОчищеннаяСтрока = СтрЗаменить(ОчищеннаяСтрока, ",", ".");
// 3. Проверка через Попытку
Попытка
Возврат Число(ОчищеннаяСтрока);
Исключение
Возврат 0;
КонецПопытки;
КонецФункцииМетод 2: Использование функции БСП
В типовых конфигурациях используйте готовый метод БСП:
// Безопасное извлечение числа из строки с любым форматированием:
ЧисловоеЗначение = ОбщегоНазначенияКлиентСервер.СтрокаВЧисло(ТекстовоеПоле);Метод 3: Безопасное сложение чисел и строк
// СБОЙ (если Переменная2 оказалась строкой "10a" или Неопределено):
Итого = Переменная1 + Число(Переменная2);
// ИСПРАВЛЕНИЕ:
Итого = ?(ТипЗнч(Переменная1) = Тип("Число"), Переменная1, 0)
+ ?(ТипЗнч(Переменная2) = Тип("Число"), Переменная2, 0); Частые вопросы (FAQ)
Почему Число(' 100 ') с обычными пробелами работает, а Число('100 000') падает?
Встроенная функция Число() автоматически обрезает начальные и конечные пробелы, но внутренние пробелы (разделители групп разрядов) воспринимаются как недопустимые нечисловые символы.
Что такое неразрывный пробел (Символы.НПП) и откуда он берется?
Символ с кодом 160 (НПП) вставляется функцией Формат() по умолчанию для разделения триад чисел (например, '1 000.00'). При копировании такого текста назад в поле ввода парсер Число() падает.
Преобразует ли функция Число() значение Ложь и Истина?
Да, Число(Ложь) вернет 0, а Число(Истина) вернет 1.
Как преобразовать число из экспоненциального формата (1.5e+04)?
Штатная функция Число() не поддерживает экспоненциальную запись (научный формат). Для ее разбора используйте XML-сериализацию: XMLЗначение(Тип('Число'), '1.5e+04').