Имя: Пароль:
1C
 
Количество знаков после запятой в результате запроса
,
0 Aleks73
 
12.07.24
17:37
в результате запроса
СУММА(ЦенныеБумагиУОстаткиИОбороты.СуммаКонечныйОстаток)/СУММА(ЦенныеБумагиУОстаткиИОбороты.КоличествоКонечныйОстаток)
даёт шесть знаков после запятой. Можно ли больше, как?
Платформа
1С:Предприятие 8.3 (8.3.24.1342)
1 Timon1405
 
12.07.24
17:54
ВЫБРАТЬ
    1/3 как Поле,
    ВЫРАЗИТЬ(1 / 3 КАК ЧИСЛО(20, 8)) КАК Поле8,
    ВЫРАЗИТЬ(1 / 3 КАК ЧИСЛО(20, 6)) КАК Поле6,
    ВЫРАЗИТЬ(1 / 3 КАК ЧИСЛО(20, 0)) КАК Поле0
что там у вас где обрезает?
2 Aleks73
 
12.07.24
18:02
(1) я уже слыхал, что числа можно выразить с большим числом
знаков, но при делении переменных как не получается. у меня не работает         |        ВЫРАЗИТЬ(СУММА(ЦенныеБумагиУОстаткиИОбороты.СуммаКонечныйОстаток)/СУММА(ЦенныеБумагиУОстаткиИОбороты.КоличествоКонечныйОстаток) КАК ЧИСЛО(32,10)) КАК СуммаКонечныйОстаток

как было 6 знаков, так и осталось
3 Garykom
 
гуру
12.07.24
18:44
4 Aleks73
 
12.07.24
18:54
(3) Пичаль. Спасибо конечно.
5 Serg_1960
 
13.07.24
09:29
PS: Увеличивайте точность после запятой не результатов выражений, а операндов выражений.

"Агрегатная функция СУММА вычисляется по возможности точно. Количество цифр дробной части результата равно количеству цифр дробной части операнда."(ИТС)
6 PR
 
13.07.24
10:25
(0) До 6 знаков обрезает SQL
Варианты либо считать в запросе СУММА(ЦенныеБумагиУОстаткиИОбороты.СуммаКонечныйОстаток) и СУММА(ЦенныеБумагиУОстаткиИОбороты.КоличествоКонечныйОстаток), а потом уже в коде делить
Либо в запросе считать СУММА(ЦенныеБумагиУОстаткиИОбороты.СуммаКонечныйОстаток) * 1000000 / СУММА(ЦенныеБумагиУОстаткиИОбороты.КоличествоКонечныйОстаток), а потом уже в коде делить на 1000000
7 vde69
 
13.07.24
11:50
СУММА(ВЫРАЗИТЬ(ЦенныеБумагиУОстаткиИОбороты.СуммаКонечныйОстаток как ЧИСЛО(32,10))/СУММА(ЦенныеБумагиУОстаткиИОбороты.КоличествоКонечныйОстаток) КАК СуммаКонечныйОстаток
8 Конструктор1С
 
13.07.24
19:04
(0) сделать деление вне запроса что мешает?
9 Aleks73
 
15.07.24
15:07
(6) PR, спасибо огромное, помог второй вариант.
10 Aleks73
 
15.07.24
15:08
(8) я подумал, что это ограничение на деление любых переменных.
11 Aleks73
 
15.07.24
15:09
(7) я думаю, это опять получится деление в запросе
12 PR
 
17.07.24
13:09
(11) Нет, такой вариант тоже сработает
Потому что 1С что-то там в этом случае уже сама мутит с явно заданной ей точностью
13 Serg_1960
 
17.07.24
18:16
"До 6 знаков обрезает SQL"
"это ограничение на деление любых переменных"
как "вариант" - "ограничение" использованной агрегатной функции, см.(5).

Ибо "само по себе" деление в SQL "ограничивается" по иным принципам:

Запрос = Новый Запрос("ВЫБРАТЬ 13.1 / 13 КАК Результат"); //Результат = 1,007692307692307692307692307692307692
14 PR
 
18.07.24
12:11
Так, заканчиваем разброд и шатания, в (3) ссылка https://its.1c.ru/db/v8std/content/535/hdoc , в ней все написано, как там 1С живет
15 Aleks73
 
18.07.24
12:30
(12) Чудеса!
16 PR
 
18.07.24
13:03
(15) Не учи в школе физику и химию, и жизнь твоя будет наполнена чудесами, магией и волшебством
Здесь то же самое
17 Serg_1960
 
18.07.24
13:20
(14) Не заметил ни разброда, ни шатания. С моей стороны - только более подробное уточнение. В указанной Вами ссылке, есть ссылка на "Разрядность результатов выражений и агрегатных функций в языке запросов" - https://its.1c.ru/db/metod8dev#content:2665:hdoc и конкретно об агрегатной функции СУММА сказано:

"Агрегатная функция СУММА вычисляется по возможности точно. Количество цифр дробной части результата равно количеству цифр дробной части операнда. Количество цифр целой части увеличивается на 7 цифр. Если при этом общее количество цифр целой и дробной части превысит 38, то оно будет приведено к 38 за счет уменьшения числа цифр дробной части, но не менее, чем до 8."
18 PR
 
18.07.24
13:25
(17) Я не про (13),я  про общий настрой, что типа фиг его знает, как все это работает
В ссылке в (3) все четко написано
19 Толич
 
18.07.24
13:31
Проще всего умножить в запросе все ресурсы на миллион, а при обращении в выборке к суммам, делить на миллион.
20 PR
 
18.07.24
13:32
(19) Проще (7)