Ошибка преобразования к числу строка поле

I am struggling for a few days with this issue and I can’t figure out how can I fix it.

I would like to group by my table on values 1,2,3,4,5 so I have created a temporary table with this values.

Now I have to INNER JOIN this table with other tables on a.value = #myTempTable.num.

BUT a.value is ntext so I need to CONVERT it what I actually did, but I am getting an error:

Conversion failed when converting the varchar value ‘simple, ‘ to data
type int. (on line 7)

Create table #myTempTable
(
num int
)
insert into #myTempTable (num) values (1),(2),(3),(4),(5)

 SELECT a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) AS value, COUNT(*) AS pocet   
 FROM 
 (SELECT item.name, value.value 
  FROM mdl_feedback AS feedback 
  INNER JOIN mdl_feedback_item AS item 
       ON feedback.id = item.feedback
  INNER JOIN mdl_feedback_value AS value 
       ON item.id = value.item 
   WHERE item.typ = 'multichoicerated' AND item.feedback IN (43)
 ) AS a 
 INNER JOIN #myTempTable 
     on CONVERT(INT, CONVERT(VARCHAR(12), a.value)) = #myTempTable.num
 GROUP BY a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) ORDER BY a.name

 drop table #myTempTable

I am not getting this error without the last INNER JOIN

INNER JOIN #myTempTable on CONVERT(INT, CONVERT(VARCHAR(12), a.value))
= #myTempTable.num

Could someone help me please?

Thanks.

При написании кода 1С или проведения бухгалтерских операций в системе 1С 8.3 и более ранних системах вы можете столкнуться с уведомлением «Преобразование значения к типу Число не может быть выполнено». Причиной ошибки обычно является попытка программиста преобразовать в число значение, которое числовым быть не может. Ниже разберём суть данной ошибки, а также представим возможные варианты её решения.

Ошибка преобразование по типу число

Содержание

  1. Причины ошибки выполнения преобразования значения к типу Число
  2. Обновите вашу систему 1С до самой актуальной версии
  3. Внимательно проверьте код на наличие переменных
  4. Например, в примере:
  5. Измените первый тип слагаемого на число
  6. Используйте конфигуратор для нахождения исключения кода
  7. Переиндексируйте ваши файлы
  8. Используйте функцию «Есть NULL»
  9. Заключение

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

Обычно данная проблема возникает при запуске кода, выполнении процедуры проверки кода на ошибки или при осуществлении стандартных операцией составления отчётности в системе 1С 8.3 (и ранних системах).

В частности, ошибка фиксировалась в следующих обстоятельствах:

  • Вместо переменной числового типа был использован NULL, строка, индекс почты, ИНН, дата и другие значения. В этом случае стандартное арифметическое действие с двумя или несколькими числовыми переменными не может быть выполнено, так как какое-либо из значений не может быть трансформировано в число; Параметр NULL
  • При выполнении операции по сложению чисел программист указал первым значением строку, а не число, тем самым совершив ошибку;
  • Было использовано двойное обозначение для единиц исчисления. К примеру, это может быть руб и RUB. Для устранения ошибки рекомендуем использовать одно унифицированное обозначение, в случае двоих указывайте для них одинаковые ставки и коэффициенты во избежание конфликта;
  • В коде указана операция в двух разных направлениях (наиболее часто встречается в 8 версии 1С). Во избежание дисфункции необходимо убрать одну из проводок;
  • Пользователь использует устаревшую (неотлаженную) версию 1С, где пытается работать с современными типами данных.

Давайте разберём, как устранить ошибку «Преобразование значения к типу Число не может быть выполнено» в конфигурации 1С 8.3.

Ошибка преобразование 1С

Читайте также: Соединение с сервером баз данных разорвано администратором в системе 1С.

Обновите вашу систему 1С до самой актуальной версии

Прежде чем разбирать особенности ошибок в коде 1С, рекомендуем обновить вашу 1С до самой актуальной версии. В некоторых случаях ошибка «преобразование значения к типу число» вызвана устаревшим вариантом системы, на которой специалист пытается вести отчётность. Установите наиболее актуальную версию системы, и рассматриваемая нами ошибка может исчезнуть.

Сообщение об обновлении версии конфигурации

Внимательно проверьте код на наличие переменных

В большинстве случаев рассматриваемая ошибка вызвана невнимательностью программиста, вместо числового значения указавшего не числовое, что не позволяет системе выполнить правильный подсчёт числовых значений. Рекомендуем внимательно проверить создаваемый вами код, найти место в коде вызывающее исключение (ошибку) и пофиксить его.

Рисунок где ошибка

Например, в примере:

A=3;

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

С=A+B;

переменная B будет вести к ошибке так как её формат не позволяет системе сложить числовое значение «А» и значение в форме даты. Для решения проблемы замените B на строку: B=5 или аналогичную. В этом случае система выдаст вам корректный результат (в данном случае это будет 8).

Фото девушки жест отлично

Измените первый тип слагаемого на число

В некоторых случаях платформа 1С анализирует тип первого слагаемого числа, обнаруживает строку, вследствие чего может решить, что в данном коде речь идёт о сложении строк, а не необходимых программисту числах. Вследствие этого она пытается выполнить преобразование каждого слагаемого в строку, после чего объединить их как строки.

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

К примеру, вместо ошибочной строки:

Сообщить(«Результат:  » + 7 + 8 + 9);

Будет необходимо использовать строку:

Сообщить(«Результат:  » + (7 + 8 + 9));

Вследствие этого вы получите ожидаемый результат в виде числе 24.

Это может помочь: В данной транзакции уже происходили ошибки система 1С 8.3 —  как решить?

Используйте конфигуратор для нахождения исключения кода

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

Порядок действий в этом случае будет следующим:

  1. Выполните запуск конфигуратора;
  2. В его настройках поставьте галочку на опцию остановки по ошибке;
  3. Нажмите на кнопку F5 для запуска 1С;
  4. Выполните приведшие к ошибке операции. Программа определит строчку, где имеется некорректный код;
  5. Найдите в данной строчке ошибку и исправьте её. Проблема будете решена.

Остановка по ошибке

Переиндексируйте ваши файлы

В некоторых редких случаях исправить ошибку «Преобразование значения к типу Число» может помочь переиндексация ваших файлов. Для версии 1С 8.3 стоит использовать файл chdbfl.exe, запускающий переиндексацию. Обычно данный файл находится по пути C:Program Files (x86) 1cv88.3ХХХbin. Вместо ХХХ у вас могут находиться указатели вашей версии продукта.

Файл 1С

Запустите данный файл, укажите имя файла для проверки, поставьте галочку рядом с опцией «Исправлять обнаруженные ошибки», после чего нажмите на «Выполнить внизу». Дождитесь завершения процедуры проверки и исправления, после чего вновь попробуйте выполнить необходимые операции.

Окно переиндексации базы

Выполните проверку вашей базы

Используйте функцию «Есть NULL»

Если выскакивает ошибка, то иногда одна из задействуемых переменных может принимать значение NULL. Для исправления ошибки рекомендуется использовать функцию «ЕСТЬNULL» (переменная, 0), что позволит устранить рассматриваемую в статье проблему.

Параметр ЕСТЬNULL

Это также пригодится: Не удалось определить цифровой сертификат получателя в 1С — как решить?

Заключение

В нашем материале мы рассмотрели причины появления уведомления «Преобразование значения к типу Число не может быть выполнено» в версии системы 1С 8.3, и как исправить возникшую проблему. Поскольку фактором ошибки обычно выступает невнимательность программиста, внимательно изучите ваш код на наличие нечисловой переменной, часто используемой в арифметическом уравнении. Замена данной переменной на числовую, а также выполнение других перечисленных нами советов поможет устранить рассмотренную нами ошибку в вашей системе.

Black and white numbers backgroundЧаще всего ошибка «Преобразование значения к типу Число не может быть выполнено» выскакивает из-за невнимательности программиста. В одной из переменных указывается не числовое значение, что и приводит к несоответствию.

Например, правильный код будет выглядеть следующим образом:

a = 3;

b = 4;

c = a + b.

Программа вернёт значение 7.

Неправильный код:

a = 3;

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

c = a + b.

Программа выдаст ошибку.

Исключение возможно только в случае, когда в строке указаны только числа, например:

a = 5;

b= «3»;

c = a + b;

Результат отобразится корректно – 8. Но если пункты a и b поменять местами, программа выдаст результат «35», так как при вычислении тип чисел выбирается по первому пункту.

На месте переменной всегда должно стоять число, то есть значение, предназначенное для арифметических вычислений. Любые другие данные на этой позиции (NULL неопределенно, индекс почты, дата, ИНН и т. д.) приведут к ошибке.

Причины возникновения конфликта

image002

Ситуации, в которых ошибка «Преобразование значения к типу Число не может быть выполнено» возникает чаще всего:

  1. В проводке не указано числовое значение. Некоторые думают, что по умолчанию это число «0». Даже если это так, значение должно быть прописано;
  2. Двойное обозначение единиц исчисления. Например, RUB и руб. Нужно использовать одно из обозначений, а если используются оба, необходимо указывать к ним одинаковые ставки и коэффициенты, чтобы не возникало конфликта;
  3. В программе указывается одна из операций в двух разных направлениях. Допустим, производится начисление налога и перечисление его по банку. Для решения проблемы нужно убрать одну из проводок (ошибка встречается только на 8-ой версии программы).
Решение проблемы

image003

Если возникает подобная ошибка, требуется найти исключение кода, которое не соответствует числовому значению. Для этих целей лучше всего подходит конфигуратор 1С, который в режиме отладки сам указывает на места с ошибками. Порядок действий:

  • Запустить конфигуратор;
  • В настройках установить галочку «Останов по ошибке» (по окончании работы её необходимо будет убрать);
  • Нажать на F5 (откроется 1С);
  • Выполнить операции, которые привели к ошибке – программа укажет на строчку, в которой введён некорректный код;
  • Затем необходимо найти в этой строчке ошибку.

В некоторых случаях помогает переиндексация файлов:

  • На 7-ой версии 1С для этого требуется удалить cdx-файлы;
  • На 8-ой версии – файл chdbfl.exe
Конфликт 7-ой и 8-ой версии

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

В свойствах базы указывается развёрнутое сальдо, в том числе и по счёту 68.10. Когда в учёте наступает очередь этого счёта – появляется ошибка (на 8-ой версии). Для решения проблемы есть два пути:

  • Необходимо удалить из развёрнутого сальдо счёт 68.10 (это не совсем удобно, так как дебетные и кредитные налоги начинают учитываться вместе, что не является верным);
  • Свернуть всю базу (в дополнительных настройках нужно поставить галочку «выводить забалансовые счета»). С установленной галкой ошибка не выскакивает.

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

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

Я
   Fire-Rex

23.10.14 — 11:46

Добрый День!

Добавил внешнюю печатную форму «Уведомление на увольнение иностр.гр-н, никак не запущу.

Ругается «преобразование значения к типу число не может быть выполнено» в след.строке

Если СтрДлина(СтатьяТКРФ)>69 Тогда

        СтатьяТКРФПункт = Число(СокрЛП(Сред(СтатьяТКРФ,21,2)));

        СтатьяТКРФСтатья = Число(СокрЛП(Сред(СтатьяТКРФ,43,2)));

    Иначе

        СтатьяТКРФПункт = Число(СокрЛП(Сред(СтатьяТКРФ,7,2)));

        СтатьяТКРФСтатья = Число(СокрЛП(Сред(СтатьяТКРФ,29,3)));

   Cube

1 — 23.10.14 — 11:47

(0) Зачем тебе в печатной форме число?

   Fire-Rex

2 — 23.10.14 — 11:47

Там статья и пункт ТК РФ

   Cube

3 — 23.10.14 — 11:48

(2) И что? Они обижаются, что их строкой записывают?

   Fire-Rex

4 — 23.10.14 — 11:48

Видимо, да

   butterbean

5 — 23.10.14 — 11:49

в отладчик!

   Cube

6 — 23.10.14 — 11:50

(4) Ну, с пунктом ТК можно договориться легко — на мисте сто раз обсасывали. А вот со статей договариваться сложно, но тоже можно…

   18_plus

7 — 23.10.14 — 11:50

(4) где-то промахнулся с цифирями в сред или циферки плавают в разных значениях. отладчик в зубы и разбираться.

   Fire-Rex

8 — 23.10.14 — 11:50

СтатьяТКРФПункт = Число(СокрЛП(Сред(СтатьяТКРФ,7,2)));

        СтатьяТКРФСтатья = Число(СокрЛП(Сред(СтатьяТКРФ,29,3)));

Сюда ругается

   Fire-Rex

9 — 23.10.14 — 11:50

в форме есть два поля, в одно пункт, в другое статью

   программистище

10 — 23.10.14 — 11:51

и что ни сообщить

ни отладчиком не смотрено

что там в СокрЛП(Сред(СтатьяТКРФ,21,2))?

   Fire-Rex

11 — 23.10.14 — 11:55

Отладчик:

Ошибка времени выполнения:

ВнешняяОбработка.ПечатьУведомленияНаИностранногоГражданина.МодульОбъекта(375): преобразование значения к типу Число не может быть выполнено в модуле ВнешняяОбработка.ПечатьУведомленияНаИностранногоГражданина.МодульОбъекта(375)

   Fire-Rex

12 — 23.10.14 — 11:56

В зупе строка выглядит так: ст 278 п 2.

В форме:   Статья____  пункт _____

   Enders

13 — 23.10.14 — 11:58

(12) Пиши строкой, в чем проблема?

Пройдись отладчиком, посмотри что у тебя в СокрЛП(Сред(СтатьяТКРФ,21,2))

в (11) это не отладчик, это текст ошибки

   silent person

14 — 23.10.14 — 11:59

значит у тебя в строке которая получается после СокрЛП() кроме цифр есть еще какие то символы

Встроенные функции языка (Script functions)

Число (Number)

Значение типа Строка преобразуется в число в том случае, если параметр является строковым представлением литерала численного типа….В противном случае будет выдано сообщение об ошибке выполнения функции.

   Cube

15 — 23.10.14 — 12:00

(9) Ну так и засунь в эти поля СТРОКИ. Зачем туду сувать ЧИСЛА?

   Fire-Rex

16 — 23.10.14 — 12:05

Тупо заменить число на строку?

   Cube

17 — 23.10.14 — 12:07

(16) Тупо удалить преобразование к числу.

Вместо

СтатьяТКРФПункт = Число(СокрЛП(Сред(СтатьяТКРФ,21,2)));

пиши

СтатьяТКРФПункт = СокрЛП(Сред(СтатьяТКРФ,21,2));

   МимохожийОднако

18 — 23.10.14 — 12:09

А не пробовал получить из строки с разделителями список значений или массив?

   Fire-Rex

19 — 23.10.14 — 12:10

Терь вот что:

{ВнешняяОбработка.ПечатьУведомленияНаИностранногоГражданина.МодульОбъекта(25)}: Метод объекта не обнаружен (РазложитьСтрокуВМассивПодстрок)

    МассивМестоРождения    =    ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(?(ВерхнийРегистр, Врег(СтрокаМестоРождения), СтрокаМестоРождения));

   palpetrovich

20 — 23.10.14 — 12:13

(19)  а она (РазложитьСтрокуВМассивПодстрок) там есть, в ОбщегоНазначения?

   Cube

21 — 23.10.14 — 12:14

(19) Позови специалиста))))

Или скопипасти процедуру РазложитьСтрокуВМассивПодстрок() из общего модуля (там, где она есть) к себе и юзай её.

   Fire-Rex

22 — 23.10.14 — 12:17

Заменил на ОбщегоНазначенияЗК

   Fire-Rex

23 — 23.10.14 — 12:18

Ошибок нет, но форма вышла пустая

   palpetrovich

24 — 23.10.14 — 12:18

(21) «Позови специалиста» — ваще-т да, 20 постов и наконец-то верный

   Cube

25 — 23.10.14 — 12:18

(23) Печаль, беда?))

   Fire-Rex

26 — 23.10.14 — 12:19

Задница, в целом

   Fire-Rex

27 — 23.10.14 — 12:20

Была б возможность — вызвал бы)

   Fire-Rex

28 — 23.10.14 — 12:24

разобрался

   palpetrovich

29 — 23.10.14 — 12:24

(27) из тюрьмы пишешь? :)

  

Fire-Rex

30 — 23.10.14 — 12:24

Мужики, Всем спасибо!!!

Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший

Входная строка имела неверный формат — означает, что Вы пытаетесь преобразовать строку символов в целое число, при этом в исходной строке символов не все символы являются числами. Для того, чтобы выяснить, что пошло не так — достаточно просто посмотреть, что Вы передаете в метод преобразования. К примеру:

string inputStr = "123a56";
int number;
bool isNumeric = int.TryParse(inputStr, out number);
if(isNumeric)
{
    Console.WriteLine("Строка успешно преобразована в число");
}
else
{
    Console.WriteLine("Ошибка преобразования. Вы уверены, что '" + inputStr + "' число?");
}

Ошибка, связанная с DateTime возможно падает, потому что входная строка составного формата. Этот составной формат построен неправильно и похож на дату. И Вам правильно сказали использовать Метод Int32.TryParse.

Полезные ссылки для ознакомления:

  1. FormatException
  2. Составное форматирование
  3. Метод, используемый Вами Метод Int32.Parse (скорее всего)

Если Вы хотите использовать именно Int32.Parse, то проблему можно решить так:

string inputStr = "123a56";
try
{
    int number = Int32.Parse(inputStr);
    Console.WriteLine("Строка успешно преобразована в число");
}
catch(Exception ex)
{
    Console.WriteLine("Ошибка преобразования. Вы уверены, что '" + inputStr + "' число?");
}

Про операторы try-catch можно почитать тут:

  1. try-catch
  2. try-catch-finally

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Ошибка преобразования bad allocation
  • Ошибка прекращена работа программы windows 7 как исправить
  • Ошибка прекращена работа программы internet explorer
  • Ошибка прекращена работа программы firefox

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии