В работе клиент серверной 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
ГДЕ
{НОВОЕ значение} - Это увеличенное на один (несколько) разряд значение, в это случае ошибки не будет возникать.
Автор решения: © Александр Шарафан
(Информация с ресурса http://gilev.blogspot.com)


















Read more...