Имя: Пароль:
1C
1С v8
Что бы это значило? ошибка при подсчете количества записей в регистре.
,
0 Lama12
 
04.07.22
16:21
Есть запрос.

ВЫБРАТЬ
    СУММА(1)
ИЗ
    РегистрСведений.КлючиДоступаНаборовГруппДоступа КАК КлючиДоступаНаборовГруппДоступа

При выполнении возникает ошибка

Ошибка при выполнении операции над данными:
Microsoft SQL Server Native Client 11.0: Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
HRESULT=80040E57, SQLSrvr: SQLSTATE=22003, state=8, Severity=10, native=8115, line=1
1 Lama12
 
04.07.22
16:24
Неужели записей в регистре больше чем 1С поддерживает разрядность чисел?
2 shuhard
 
04.07.22
16:26
(1) сгруппируй по чему-нибудь - узнаешь
3 timurhv
 
04.07.22
16:29
(1) ошибка не 1С, а SQL.
Сумма(Выразить(1 КАК ЧИСЛО(30,0))
4 Lama12
 
04.07.22
16:31
(2) (3) Спасибо! Через профайлер посмотрел или как догадался?
5 ptiz
 
04.07.22
16:35
(0) Забавно. Максимум 9 999 999 даёт без выкрутасов.
6 СеменовСемен
 
04.07.22
16:41
Делай Количество (*)
7 timurhv
 
04.07.22
17:23
(4) Профайлер не смотрел, тоже ошибка вываливалась. В части не 1С виновата - неправ, голый запрос SQL SUM(1) отрабатывает, видимо сервер 1С свое отправляет.
8 ptiz
 
04.07.22
17:27
(4) В профайлере у меня так по-умолчанию: SELECT CAST(SUM(1.0) AS NUMERIC(15, 8))
9 TormozIT
 
гуру
05.07.22
00:53
Да. Баг в MSSQL. Но в платформе 8.3.21 уже сделали его обход https://www.hostedredmine.com/issues/939917
10 Конструктор1С
 
05.07.22
06:05
(0) записи таблиц надо считать через КОЛИЧЕСТВО(*), тогда платформа будет пулять
CAST(COUNT_BIG(*) AS NUMERIC(12))

когда пишешь СУММА(1) платформа пуляет
CAST(SUM(1.0) AS NUMERIC(7, 0))

т.е. у тебя ограничение в 7 знаков, или до 10 миллионов записей сможет сосчитать
11 Ненавижу 1С
 
гуру
05.07.22
07:24
(9) на 17 релизе нормально работает. MS SQL Server 12.0.6118.4
12 Lama12
 
05.07.22
09:21
(10) Да, спасибо. Уже понял. В таблице было 28 миллионов записей.
13 TormozIT
 
гуру
06.07.22
13:48
(11) Так баг в MSSQL. У тебя версия MSSQL без бага. Поэтому любая версия платформы будет работать.
14 TormozIT
 
гуру
06.07.22
14:01
(11) У тебя в MSSQL запрос выдает ошибку?
select 1 as w
into #tt2
where 1=0
;
SELECT
ISNULL(MAX(0.0),1.0)
FROM #tt2 T1 WITH(NOLOCK)
15 ДедМорроз
 
06.07.22
16:10
Это не баг,а значения по умолчанию для суммируемых величин,радуйтесь,что Numeric(1,0) не используется.
16 Ненавижу 1С
 
гуру
06.07.22
16:22
(14) да:
17 Ненавижу 1С
 
гуру
06.07.22
16:22
(строк обработано: 0)
Сообщение 8115, уровень 16, состояние 8, строка 6
Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric.
18 TormozIT
 
гуру
06.07.22
17:02
(15) Где прочитать про этот "не баг"?
19 1Сергей
 
06.07.22
17:07
(6) +1
Кто придумал считать количество строк через СУММА(1) ?
20 Волшебник
 
06.07.22
17:08
(19) Извращенцы, которые сами себя наказали
21 TormozIT
 
гуру
06.07.22
17:10
(19) Тот кому надо не все строки посчитать, а по условию, причем по нескольким независимо.
22 Волшебник
 
06.07.22
17:11
(21) ВЫБРАТЬ Количество(Id) ИЗ Table ГДЕ условие
23 TormozIT
 
гуру
06.07.22
17:17
(22) Для одного условия годится. А для нескольких - не очень.
24 1Сергей
 
06.07.22
17:19
(23) вот вообще не вижу связи между количеством условий и поведением КОЛИЧЕСТВО(*)
25 TormozIT
 
гуру
06.07.22
17:20
Посчитать в скольких строках Реквизит1=2 и посчитать в скольких строках Реквизит2<>3.
26 TormozIT
 
гуру
06.07.22
18:07
(14) Так и не понял почему этот запрос выдает ошибку. Няни есть?
27 TormozIT
 
гуру
06.07.22
19:14
Разобрались тут https://t.me/OneC_Expert/53693
0.0 и любое дробное 0.х трактуется как нумерик(1,1), к которому преобразовать любое число с общей длиной больше 1 уже нельзя.
Соответственно 1.0 и любое 1.х трактуется уже как нумерик(2,1).
28 СеменовСемен
 
06.07.22
19:59
Странно конечно что сиквел тупо все приводит к типу первой переменной
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn