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

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

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

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

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

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

а = 2;

б = 2;

с = а + б;

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

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

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

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

а = 2;

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

с = а + б;

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

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

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

а = 2;

б = "2";

с = а + б;

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

Получите понятные самоучители по 1С бесплатно:

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

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

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

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

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

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

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

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

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

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

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

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

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

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

Комментариев: 8 на “Ошибка Преобразование значения к типу Число не может быть выполнено 1С 8.3
  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 выведен в сообщения!!!

    Ответить

  4. Здесь код калькулятора из учебных видео. Но он не работает. Пишет Преобразование к типу число не может быть выполнено. При этом на видео всё сделано точь в точь и всё работает.
    &НаКлиенте
    Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    Перем ИсходныеДанные;

    ИсходныеДанные=»»;
    //1.Вывести данные.
    Если НЕ ВвестиСтроку(ИсходныеДанные,»Что считать?») Тогда
    Возврат;
    КонецЕсли;
    //2.Разобрать данные на операнды
    ПозицияОперации=0;
    ТекущаяОперация=»^»;

    Операнд1=Лев(ИсходныеДанные,ПозицияОперации-1);
    Операнд2=Сред(ИсходныеДанные,ПозицияОперации+1);
    //3. Произвести вычисления
    Результат=Pow(Операнд1,Операнд2);
    //4.Вывести результат
    Сообщить(ИсходныеДанные+»=»+Результат);

    КонецПроцедуры

    Ответить

  5. Почему нигде нет даты статьи? Как я узнаю что это статья 30 летней давности?

    Ответить

    • Вы же программист, посмотрите в коде страницы.
      Дата публикации: 2013-05-21T12:57:44+00:00
      Дата изменения: article:2018-04-15T08:06:50+00:00
      Мини-квест)

      Ответить

  6. Преобразование значения к типу Число не может быть выполнено
    {ВнешняяОбработка.ЗагрузкаДанныхИзIIKO.Форма.Форма.Форма(4248)}:Год = Число(Сред(Стро,7,4));
    {ВнешняяОбработка.ЗагрузкаДанныхИзIIKO.Форма.Форма.Форма(4747)}:Док.ДатаВходящегоДокумента=ПолучитьДату(СписДок[0].ВходДата);
    {ВнешняяОбработка.ЗагрузкаДанныхИзIIKO.Форма.Форма.Форма(243)}:СоздатьНакладные(Тз,Объект.ПНПрефикс,Объект.ДеньПрефикс,1);
    {ВнешняяОбработка.ЗагрузкаДанныхИзIIKO.Форма.Форма.Форма(4392)}:ВыполнитьНажатиеНаСервере();

    Ответить

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

Ваш адрес email не будет опубликован.