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 Сергей Старых 11 months ago. Updated 5 months 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 Сергей Старых 11 months ago

  • Description updated (diff)
Actions #2

Updated by Сергей Старых 11 months ago

  • Description updated (diff)
Actions #3

Updated by Сергей Старых 11 months ago

  • Description updated (diff)
Actions #4

Updated by Сергей Старых 11 months ago

  • Description updated (diff)
Actions #5

Updated by Сергей Старых 11 months ago

  • Description updated (diff)
Actions #6

Updated by Сергей Старых 5 months ago

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

Updated by Сергей Старых 5 months ago

  • Description updated (diff)
Actions #8

Updated by Сергей Старых 5 months ago

  • Description updated (diff)

Also available in: Atom PDF