Имя: Пароль:
1C
 
v8: Ошибка: Arithmetic overflow error converting numeric to data type numeric
0 Evrepid
 
18.04.11
15:16
Подниму еще раз тему про:
"Microsoft OLE DB Provider for SQL Server: Arithmetic overflow error converting numeric to data type numeric"

Просто на русскоязычных форумах практически нет нормального ответа почему получаем такое сообщение.

Вот что говрят сотрудники MS по поводу возникновения указанной ошибки, и интепретация к 1С применительно к 8.0,8.1,8.2:

В работе клиент серверной 1С иногда появляется сообщение:

Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Microsoft OLE DB Provider for SQL Server: Arithmetic overflow error converting numeric to data type numeric.
HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1

Если данная ошибка появляется под управлением  MS SQL 2000, то рекомендуется проверить и установить обновление SP до SP4.
Но для SQL 2005 и 2008 появление такой ошибки не решается обновлением сервиспака.
Вообще появление указанной ошибки вызвано ошибкой в MS SQL при выполнении операции округления, например:
ROUND(9.5,0)
ROUND(9.6,0)
ROUND(99.5,0)
ROUND(999.5,0)
ROUND(9999.5,0)
ROUND(-9.5)

Более подробно про ошибки операции округления https://connect.microsoft.com/SQLServer/feedback/details/364387/using-round-function-with-passing-numeric-expression-to-9-5-and-length-0
. касательно 1С и запросов выполняемых в ней, указанная ошибка может появляться при выполнении команды: ВЫРАЗИТЬ(ЕСТЬNULL(ВремяПоГрафикуВЧасахНорма, 0) КАК ЧИСЛО(5, 2)) КАК WorkingHours
Если в качестве операнда будет число со значением после запятой .5, в этом случае SQL считает/разбирает значение как литерал х.5 и преобразует к данным типа Numeric(2,1). Функция ROUND (округления)  отрабытывает правильно получая округленный результат и затем пытается сохранить как данные в формате Numeric(2,1), что не правильно и мы получаем сообщение "arithmetic overflow".

Если у Вас возникает такая ошибка, то попробуете использовать преобразование:

ВЫРАЗИТЬ(ЕСТЬNULL(ВремяПоГрафикуВЧасахНорма, 0) КАК ЧИСЛО(  {НОВОЕ значение} , 2)) КАК WorkingHours
, ГДЕ
    {НОВОЕ значение} - Это увеличенное на один (несколько) разряд значение, в этом случае ошибки не будет возникать.

Всем спасибо.
Надеюсь что поможет быстро найти проблемы с ошибкой.

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