Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Ошибка Преобразование значения к типу Число не может быть выполнено 1С 8.3 или 8.2

Очень часто начинающие программисты 1С 8.3 встречаются с этой проблемой. Рассмотрим причины возникновения ошибки Преобразование значения к типу Число не может быть выполнено и методы её решения.

Преобразование значения к типу Число не может быть выполнено

Причина ошибки Преобразование значения к типу Число не может быть выполнено

Причина достаточно банальна. Обычно при каком-либо арифметическом действии над переменными числового типа система ожидает увидеть в этом действии два значения числового типа, например:

а = 2;

б = 2;

с = а + б;

Сообщить(с);

Система, естественно, верно отработает это выражение и вернет 4.

Существуют ситуации, в которых в таких простых случаях в переменных оказывается не число, а, например, строка, NULL неопределено, дата  и др.

Вот такой пример обязательно выдаст ошибку Преобразование значения к типу Число не может быть выполнено:

а = 2;

б = ТекущаяДата();

с = а + б;

Сообщить(с);

Потому как платформа не может сложить значения типа число и значения типа дата.

Единственное исключение — сложения со строкой, в которой содержатся только цифры:

Получите 267 видеоуроков по 1С бесплатно:

а = 2;

б = "2";

с = а + б;

Сообщить(с);

Система выдаст результат 4, однако, если поменять слагаемые местами, система выдаст строковые «22», т.к 1С 8 выбирает тип по первому в выражению значению.

Решение Преобразование значения к типу Число не может быть выполнено

Для решения необходимо найти место в коде, в котором вызывается исключение, и исправить его.

В качестве решения рекомендую использовать дополнительные проверки. Например, на тип переменных:

ТипЗнч(Значение) = Тип("Число")

Очень распространенная ошибка — это получение NULL  в запросе и использование его в арифметических выражениях:

Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ВыпускПродукцииУслугОбороты.Организация,
| ВыпускПродукцииУслугОбороты.Продукция,
| ВыпускПродукцииУслугОбороты.КоличествоОборот,
| ВыпускПродукцииУслугОбороты.ПлановаяСтоимостьОборот
|ИЗ
| РегистрНакопления.ВыпускПродукцииУслуг.Обороты КАК ВыпускПродукцииУслугОбороты";
Выборка = Запрос.Выполнить().Выбрать();
Сч = 0;
Пока Выборка.Следующий() Цикл
Сч = Сч + Выборка.КоличествоОборот;
КонецЦикла;

Здесь в строке Сч = Сч + Выборка.КоличествоОборот вполне вероятно появление данной ошибки в случае получения в качестве значения NULL.

Чтобы избежать данной ошибки, достаточно использовать проверку на NULL ресурсов в запросе:

| ЕСТЬNULL(ВыпускПродукцииУслугОбороты.КоличествоОборот,0) КАК КоличествоОборот
| ЕСТЬNULL(ВыпускПродукцииУслугОбороты.ПлановаяСтоимостьОборот,0) КАК ПлановаяСтоимостьОборот

Если в значении будет значение NULL, то система заменит его на ноль, тем самым ошибка будет исправлена.

Другие статьи по 1С:

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 3 на “Ошибка Преобразование значения к типу Число не может быть выполнено 1С 8.3 или 8.2
  1. Примитивный вопрос: Как в переменной типа строка увеличивать значение на 1. Это нужно для цикла.Пример
    Процедура ПечатьТаблицыСЦиклом()
    //Печатается столбец таблицы умножения на 7 Необходимо на 1
    //увеличивать не только I(тип число), но и К(тип строка)
    //при отладке ошибка: преобразование числового типа.
    //Спасибо за помощь.Приму Ваши варианты. Прошу для чайничка //подробнее
    I=1; // Переменная цикла, тип число
    Пока I<11 Цикл
    К="1"; //Переменная К для печати тип строка
    Сообщить(I+"*7="+I*7);
    I=I+1; //Подготовка след.итерации
    К=I; //Здесь раньше была команда К=К+1; работает
    //без ошибки,но единица к К не добавляется
    КонецЦикла;
    КонецПроцедуры

    Ответить

  2. Сообщить(К+»*7=»+I*7); // В программе бы такой вариант. В
    //предыдущем сообщении допущена ошибка

    Ответить

  3. Ура! Сам решил! «Прежде, чем задать вопрос, почитай сначала ОС» (Афоризм Шаболтаса Г.В.)
    Исключаем переменную К (это балласт), а строка Сообщить выглядит след.образом: Сообщить (Формат(I)+»*7=»+I*7);
    Столбец таблицы умножения на 7 выведен в сообщения!!!

    Ответить

Добавить комментарий: