Имя: Пароль:
1C
1С v8
Разрядность числовой колонки ТЗ
0 Гипервизор
 
12.08.21
14:50
Туплю, не дождавшись пятницы.

Имею 3 варианта запроса:
1) ВЫБРАТЬ КоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад И Номенклатура = &Номенклатура)
2) ВЫБРАТЬ Количество ИЗ РегистрНакопления.ТоварыНаСкладах ГДЕ Склад = &Склад И Номенклатура = &Номенклатура
3) ВЫБРАТЬ СУММА(Количество) ИЗ РегистрНакопления.ТоварыНаСкладах ГДЕ Склад = &Склад И Номенклатура = &Номенклатура

Заполняю параметры, выгружаю в ТЗ, смотрю разрядность:
Таблица = Запрос.Выполнить().Выгрузить();
Разрядность = Таблица.Колонки[0].ТипЗначения.КвалификаторыЧисла.Разрядность;

Получаю следующие числа: 38, 15, 0.
Почему именно так? Как это вообще работает?
Прочитал на ИТС "Разрядность результатов выражений и агрегатных функций в языке запросов" (https://its.1c.ru/db/metod8dev/content/2665/hdoc), но понятней не стало, у меня это единственная запись в регистре. Кроме того, как тогда объяснить, почему именно в 3 варианте разрядность 0?
1 lodger
 
12.08.21
14:55
запись то приведи
2 Жан Пердежон
 
12.08.21
14:59
Какие числа от какого варианта?
38 от суммы должно быть по идее
3 Гипервизор
 
12.08.21
15:03
(1) А что вам даст эта запись? Ну допустим склад: "Москва, ул. Селезневская", а номенклатура: "Патч Бармина универсальный".
А, пардон, количество номенклатуры 1. Всё, одна запись с таким складом и номенклатурой.
4 Гипервизор
 
12.08.21
15:05
(2) В порядке написания вариантов:
1) 38, 2) 15, 3) 0
5 lodger
 
12.08.21
15:08
(3) Количество цифр дробной части результата равно количеству цифр дробной части операнда 1 = 0.
6 Жан Пердежон
 
12.08.21
15:09
(2) А не, там же остатки, так что всё норм.
(4) Разрядность у количества в регистре какая?
7 Гипервизор
 
12.08.21
15:13
(5) Так я же смотрю Разрядность, а не РазрядностьДробнойЧасти. Количество 1,000.
(6) Число(15,3).
8 1Сергей
 
12.08.21
15:15
сколько записей в каждом из случаев?
9 серый КТУЛХУ
 
12.08.21
15:17
если не юзаешь "выразить" то функция/формула в запросе в результат возвращает ту разрядность, которая получается де-факто. если получается целое из оперции/функции хоть над стотыщточнотиразрядным ресурсом - возвращается резцльтат с разрядностью 0.
юзай ВЫРАЗИТЬ для функций/формул в запросе
10 серый КТУЛХУ
 
12.08.21
15:20
ЗЫ: попробуй чтобы сумма(количество) у тебя давало 1,1 - получишь разрядность не 0 а 1. если например 1,11 - получишь 2. а попробуешь чтобы среднее из 5  2 и 3 - получишь разрядность дофигища (3,33333...)
11 Гипервизор
 
12.08.21
15:54
(9) Ну попробовал использовать ВЫРАЗИТь, всё равно разрядность 0.
(10) Вот, например:
ВЫБРАТЬ
    СУММА(ВложенныйЗапрос.Поле1)
ИЗ
    (ВЫБРАТЬ
        1 КАК Поле1
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        0.1) КАК ВложенныйЗапрос

Результат будет 1,1. А разрядность снова 0.
12 серый КТУЛХУ
 
12.08.21
16:28
(11): ох ё, да.
просто потому что в результате запроса это - всегда(!) составной тип "Null,Число"
выжечь оттуда тип "Null" через ЕСТЬNULL, ВЫРАЗИТЬ - у меня не получилось.
13 МихаилМ
 
12.08.21
17:10
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.