Project

Profile

Help

HostedRedmine.com has moved to the Planio platform. All logins and passwords remained the same. All users will be able to login and use Redmine just as before. Read more...

Bug #939917

open

8.3.18-20 Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric

Added by Сергей Старых almost 2 years ago. Updated over 1 year ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Sprint/Milestone:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

https://partners.v8.1c.ru/forum/t/2038306/m/2038306
https://bugboard.v8.1c.ru/error/000120358

Конфигурация ПО

1С 8.3.18-20, исправлено 8.3.21, СУБД MSSQL

Проблема

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

Воспроизведение

Открыть приложенную внешнюю обработку в любой базе в управляемом клиентском приложении. Нажать "Команда1". При этом выполнится код

Запрос = Новый Запрос;
    Запрос.Текст =
"ВЫБРАТЬ 1
|ПОМЕСТИТЬ ВТ ГДЕ ЛОЖЬ
|;
|ВЫБРАТЬ
|    ВЫБОР
|        КОГДА ЛОЖЬ
|            ТОГДА КОЛИЧЕСТВО(*)
|        ИНАЧЕ ЕСТЬNULL(МАКСИМУМ(0), 1)
|    КОНЕЦ
|ИЗ
|    вт
|";
    Результат = Запрос.Выполнить();

Т.е. вычисляем в запросе из пустой таблицы агрегатное выражение. Возникнет ошибка

Ошибка при вызове метода контекста (Выполнить)
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1.Форма(23)}:Результат = Запрос.Выполнить();
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма1.Форма(4)}:Команда1НаСервере();

по причине:
Ошибка выполнения запроса
по причине:
Ошибка при выполнении операции над данными:
Microsoft SQL Server Native Client 11.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1

Проверил SQL запрос
select 1 as w
into #tt2
where 1=0
;
SELECT
ISNULL(MAX(0.0),1.0)
FROM #tt2 T1 WITH(NOLOCK)

напрямую в MSSQL 13.0.1601.5 и 12.0.2269.0 . Выдает такую же ошибку.

Обойти ее можно путем указания квалификаторов числа.

SELECT ISNULL(MAX(CAST(0.0 AS numeric(15))), 1.0)

ВЫБРАТЬ ЕСТЬNULL(МАКСИМУМ(ВЫРАЗИТЬ(0 КАК ЧИСЛО(15))), 1)

Files

ВнешняяОбработка1.epf (7.95 KB) ВнешняяОбработка1.epf Сергей Старых, 2022-01-11 10:33 PM
Actions #1

Updated by Сергей Старых almost 2 years ago

  • Description updated (diff)
Actions #2

Updated by Сергей Старых almost 2 years ago

  • Description updated (diff)
Actions #3

Updated by Сергей Старых almost 2 years ago

  • Description updated (diff)
Actions #4

Updated by Сергей Старых almost 2 years ago

  • Description updated (diff)
Actions #5

Updated by Сергей Старых almost 2 years ago

  • Description updated (diff)
Actions #6

Updated by Сергей Старых over 1 year ago

  • Subject changed from 8.3.18-+ Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric to 8.3.18-20 Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric
  • Description updated (diff)
Actions #7

Updated by Сергей Старых over 1 year ago

  • Description updated (diff)
Actions #8

Updated by Сергей Старых over 1 year ago

  • Description updated (diff)

Also available in: Atom PDF