|
|
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Исходные данные: 1С , конфигурация УПП 1.2.27, платформа 8.1.15.14, MSSQL 2008, Win x64 2008. При выполнении запроса есть такое вычисление суммы: Стоимость * КурсыВалют.Курс * КурсыВалютУпрУчет.Кратность / (ЕСТЬNULL(КурсыВалют.Кратность, 1) * КурсыВалютУпрУчет.Курс) т.е. приведение суммы из любой валюты в управленческую. И при выполнении запроса возникает ошибка: Arithmetic overflow error converting numeric to data type numeric. HRESULT=80040E57, SQLSrvr: Error state=8, Severity=10, native=8115, line=1 Это арифметическое переполнение. Потеря значащих цифр при вычислении значения выражения. У нас используется такая валюта, как иена, вот в ней кратность = 100. На ней и возникает такая ошибка. По гривнам, например, где кратность = 10, все окей. Суммы вроде в иенах небольшие. Например, 3900000*34,5867/(100*39.5248) = 34127,47, где 34,5867 - курс иены, 100 - кратность иены, 39.5248 - курс евро. И вот такое вычисление приводит к переполнению? Не могу понять, где собака зарылась, или как обойти эту ошибку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 09:54 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Сам запрос на на 1С: Модератор: Он тут абсолютно бесполезен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 09:57 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Запрос из профайлера SQL: Модератор: И эта портянка лишняя, раз Вы знаете "место", где происходит ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 09:59 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret Zet, смотрите запрос профайлером ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:00 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret ZetИ вот такое вычисление приводит к переполнению? Не могу понять, где собака зарылась, или как обойти эту ошибку. Гм... А Вы сможете изменить запрос (не на птичьем языке, а на T-SQL) и \ или типы данных в таблицах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:09 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
ekaskiesRet Zet, смотрите запрос профайлером Ну я привел запрос из профайлера, модератор потер, типа лишняя портянка. А в самом SQL я ни в зуб ногой. Открыл в профайлере, нашел свой запрос, дальше что? На такой интерпретированный SQL-запрос я смотрю как баран на новые ворота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:15 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret Zet Суммы вроде в иенах небольшие. Например, 3900000*34,5867/(100*39.5248) = 34127,47, где 34,5867 - курс иены, 100 - кратность иены, 39.5248 - курс евро. И вот такое вычисление приводит к переполнению? Каждое вычисление дает на выходе результат, размер и точность которого отличаются от размеров и точности операндов Конкретно в этом примере результат вовсе не 34127.47, а 34127.466805651135489 Поэтому вам придется переписать запрос так, чтобы и промежуточные вычиления явно приводились к такому размеру и точности, которые не вызовут переполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:17 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
pkarklinRet ZetИ вот такое вычисление приводит к переполнению? Не могу понять, где собака зарылась, или как обойти эту ошибку. Гм... А Вы сможете изменить запрос (не на птичьем языке, а на T-SQL) и \ или типы данных в таблицах? Простите, я на 1С V8 могу только запрос написать. Мне не понятно, что вы просите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:17 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
GloryRet Zet Суммы вроде в иенах небольшие. Например, 3900000*34,5867/(100*39.5248) = 34127,47, где 34,5867 - курс иены, 100 - кратность иены, 39.5248 - курс евро. И вот такое вычисление приводит к переполнению? Каждое вычисление дает на выходе результат, размер и точность которого отличаются от размеров и точности операндов Конкретно в этом примере результат вовсе не 34127.47, а 34127.466805651135489 Поэтому вам придется переписать запрос так, чтобы и промежуточные вычиления явно приводились к такому размеру и точности, которые не вызовут переполнения Я делал это так: Выразить(ТутМоеВычисление КАК ЧИсло(15,2)) и на каждый элемент в вычислении, не помогло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:21 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret Zet Я делал это так: Выразить(ТутМоеВычисление КАК ЧИсло(15,2)) и на каждый элемент в вычислении, не помогло. Значит неправильно сделали. Или не в том месте запроса И я не уверен, что функция Выразить() преобразует результат именно на стороне сервера ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:23 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret ZetЯ делал это так: Выразить(ТутМоеВычисление КАК ЧИсло(15,2)) и на каждый элемент в вычислении, не помогло. И это хоть как-то повлияло на запрос, отправляемый на сервер? ЗЫ. Что-то у меня сомнения, что это привело к вставке CAST в запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:24 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ребята, я спецом привел запросы. Модератор их потер. Я теперь не знаю как быть. Могу выложить снова, но не забанят ли за такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:26 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
GloryRet Zet Я делал это так: Выразить(ТутМоеВычисление КАК ЧИсло(15,2)) и на каждый элемент в вычислении, не помогло. Значит неправильно сделали. Или не в том месте запроса И я не уверен, что функция Выразить() преобразует результат именно на стороне сервера Вот где именно он преобразует, мне сложно сказать. Я так сказать одинесник. Но вроде как сама 1С говорит, что все запросы выполняются исключительно на сервере. Утверждать не буду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:28 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret ZetРебята, я спецом привел запросы. Модератор их потер. Я теперь не знаю как быть. Могу выложить снова, но не забанят ли за такое? Вы привели запроса 1С. Которые вовсе не являются теми запросами, которые выполняет сервер Кроме того незачем постить "простыню" на несколько экранов, когда есть опция Присоеденить файл ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:29 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret ZetЯ теперь не знаю как бытьЗа помощью в изменении кода на языке 1С рекомендую обратиться в форум по 1С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:29 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret Zet, все что можно посоветовать - это переписать выражения таким образом, чтобы после каждой операции получалось число не выходящее за пределы типа операндов. Надеюсь понятно выразился :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:30 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
pkarklinRet ZetЯ делал это так: Выразить(ТутМоеВычисление КАК ЧИсло(15,2)) и на каждый элемент в вычислении, не помогло. И это хоть как-то повлияло на запрос, отправляемый на сервер? ЗЫ. Что-то у меня сомнения, что это привело к вставке CAST в запрос. Не могу сказать как на запрос по влияло, но ошибка от этого не исчезла. Т.е. Выразить() накладывал на каждый множитель или делитель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:31 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret ZetGloryRet Zet Я делал это так: Выразить(ТутМоеВычисление КАК ЧИсло(15,2)) и на каждый элемент в вычислении, не помогло. Значит неправильно сделали. Или не в том месте запроса И я не уверен, что функция Выразить() преобразует результат именно на стороне сервера Вот где именно он преобразует, мне сложно сказать. Я так сказать одинесник. Но вроде как сама 1С говорит, что все запросы выполняются исключительно на сервере. Утверждать не буду. Вы понимаете, что есть технология клиент-сервер Ваши команды для 1С есть всего лишь оболочка-надстройка над языком запросов Неужели вы думаете, что в MS SQL Server есть функция Выразить() ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:32 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
GloryRet ZetРебята, я спецом привел запросы. Модератор их потер. Я теперь не знаю как быть. Могу выложить снова, но не забанят ли за такое? Вы привели запроса 1С. Которые вовсе не являются теми запросами, которые выполняет сервер Кроме того незачем постить "простыню" на несколько экранов, когда есть опция Присоеденить файл Я честно не знаю как это сделать. "Впервые замужем", так сказать :) . Типа загнать в текст и приложить текстовый файл? Могу так сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:35 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret ZetGloryRet ZetРебята, я спецом привел запросы. Модератор их потер. Я теперь не знаю как быть. Могу выложить снова, но не забанят ли за такое? Вы привели запроса 1С. Которые вовсе не являются теми запросами, которые выполняет сервер Кроме того незачем постить "простыню" на несколько экранов, когда есть опция Присоеденить файл Я честно не знаю как это сделать. "Впервые замужем", так сказать :) . Типа загнать в текст и приложить текстовый файл? Могу так сделать. Это всяко будет лучше, чем листать экраны вашего запроса Только все равно это будет запрос 1С,а не MS SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:36 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
ekaskiesRet Zet, все что можно посоветовать - это переписать выражения таким образом, чтобы после каждой операции получалось число не выходящее за пределы типа операндов. Надеюсь понятно выразился :) Понятно. Что и пытался сделать. Естественно на 1С. SQL-запросом я уже не могу управлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:36 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
GloryRet ZetGloryRet Zet Я делал это так: Выразить(ТутМоеВычисление КАК ЧИсло(15,2)) и на каждый элемент в вычислении, не помогло. Значит неправильно сделали. Или не в том месте запроса И я не уверен, что функция Выразить() преобразует результат именно на стороне сервера Вот где именно он преобразует, мне сложно сказать. Я так сказать одинесник. Но вроде как сама 1С говорит, что все запросы выполняются исключительно на сервере. Утверждать не буду. Вы понимаете, что есть технология клиент-сервер Ваши команды для 1С есть всего лишь оболочка-надстройка над языком запросов Неужели вы думаете, что в MS SQL Server есть функция Выразить() ??? Конечно нет там такой функции, во что она преобразуется, я не могу сказать. Тут я полный профан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:38 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Ret Zet Понятно. Что и пытался сделать. Естественно на 1С. SQL-запросом я уже не могу управлять. Это вы так думаете ? Или вам это кто-то сказал ? Или вы где-то прочитали об этом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:39 |
|
||
|
Arithmetic overflow error converting numeric
|
|||
|---|---|---|---|
|
#18+
Интерпретированный запрос из профайлера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2010, 10:41 |
|
||
|
|

start [/forum/topic.php?fid=28&msg=36778766&tid=1522122]: |
0ms |
get settings: |
6ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
162ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 480ms |

| 0 / 0 |
