При разработке конфигураций на платформе 1С:Предприятие 8 мы часто сталкиваемся с необходимостью валидации данных. Одной из наиболее распространенных задач является проверка того, является ли переданное значение числом. В зависимости от того, с какими данными мы работаем — с уже типизированными переменными или с «сырыми» строками — подходы к решению будут различаться.
Если наша переменная уже содержит какое-то значение и нам нужно просто подтвердить, что это именно число, самым надежным, быстрым и правильным способом является использование функции ТипЗнч. Этот метод напрямую обращается к метаданным значения.
Рассмотрим, как это выглядит в коде:
Если ТипЗнч(Значение) = Тип("Число") Тогда
Сообщить("Это число!");
Иначе
Сообщить("Это не число.");
КонецЕсли;
Данный способ является стандартом для восьмой версии платформы. Он работает максимально эффективно и не требует затратных преобразований типов.
Ситуация усложняется, когда мы получаем данные из внешних источников (например, из текстового файла, Excel или ввода пользователя). В этом случае значение изначально имеет тип Строка, и нам необходимо понять, можно ли эту строку конвертировать в Число без возникновения ошибки.
Попытки проверять каждый символ строки в цикле на «циферичность» (сравнение с "0123456789") являются не самыми надежными. Такой подход не учитывает знаки отрицательных чисел, разделители дробной части (точки или запятые) и экспоненциальную запись.
Для корректной проверки мы рекомендуем использовать блок Попытка...Исключение. Это самый безопасный способ «на лету» проверить возможность преобразования:
Попытка
Результат = Число(ВходящаяСтрока);
Сообщить("Преобразование успешно: " + Результат);
Исключение
Сообщить("Строка не является числом");
КонецПопытки;
В современных конфигурациях, построенных на базе БСП (Библиотеки стандартных подсистем), разработчики имеют доступ к общим модулям, таким как СтроковыеФункцииКлиентСервер. Это предпочтительный путь для профессиональной разработки.
Почему стоит использовать стандартные функции:
Мы часто видим «прикольные» способы, которые кажутся элегантными, но несут в себе скрытые угрозы. Например, сравнение строковых представлений: Строка(Число(Знач)) = Строка(Знач).
Разберем, почему это плохая практика:
Число в Строка платформа 1С может автоматически добавлять пробелы-разделители тысяч (например, «1 000» вместо «1000»). Это приведет к тому, что условие вернет Ложь, хотя данные являются числовыми.Число(), но исказят строковое сравнение.Подводя итог, при работе с типами данных в 1С всегда следуйте принципу: используйте ТипЗнч для проверки типа, и обработку исключений Попытка...Исключение для проверки возможности приведения типов в строках. Это обеспечит стабильность и предсказуемость вашего кода в любых ситуациях.