Имя: Пароль:
1C
 
Как задать квалификаторы числовой колонки результата запроса?
0 TormozIT
 
гуру
10.01.23
08:54
8.3.22

Делаю так

Запрос = Новый Запрос("ВЫБРАТЬ ВЫРАЗИТЬ(0 КАК ЧИСЛО(10, 2))");
Сообщить(Запрос.Выполнить().Выгрузить().Колонки[0].ТипЗначения.КвалификаторыЧисла.Разрядность);

Получаю

0
1 Ryzeman
 
10.01.23
08:57
Возможно, какая-то приколюха с нулём. Создай ТЗ с нужной разрядностью и выгрузи в неё результат запроса, должно сработать.

А что вернёт

Запрос = Новый Запрос("ВЫБРАТЬ ВЫРАЗИТЬ(1.1111 КАК ЧИСЛО(10, 2))");
Сообщить(Запрос.Выполнить().Выгрузить().Колонки[0].ТипЗначения.КвалификаторыЧисла.Разрядность);
2 TormozIT
 
гуру
10.01.23
08:57
(1) 0
3 Гипервизор
 
10.01.23
08:58
4 Ryzeman
 
10.01.23
08:59
(2) Значит, он игнорирует расчётные форматы в принципе и задаёт типы значений исключительно по типам полей таблиц)
5 TormozIT
 
гуру
10.01.23
08:59
(1) Преобразование ТЗ на клиенте - лишние затраты, зависящие от размеры таблицы. Это - очень неэффективное решение, но согласен работать будет.
(3) Спасибо. Че то подзабыл уже.
6 TormozIT
 
гуру
10.01.23
09:02
Кстати из 1С мне так и не ответили. Зарегистрировали обращение и "положили на нижнюю полку"
7 TormozIT
 
гуру
10.01.23
09:10
Кстати проблема касается не только константных выражений, но и агрегатных функций
8 Ryzeman
 
10.01.23
09:11
(7) ну, это подтверждает мои догадки из (4). Не думаю, что это где-то описано, тут только эмпирическим путём выяснять.
9 TormozIT
 
гуру
10.01.23
09:16
Для запроса
ВЫБРАТЬ ВЫРАЗИТЬ(Константы.ГраницаПогрешностиСЛУ КАК ЧИСЛО(10, 2))
где константа имеет квалификаторы (15,2)
тоже будет 0
10 Ryzeman
 
10.01.23
09:17
(9) ну это опять же расчётный формат. Теперь попробуй
ВЫБРАТЬ Константы.ГраницаПогрешностиСЛУ

должно всё корректно быть
11 lodger
 
10.01.23
09:18
(9) слово Выразить всё ломает.
платформа на постообработке подставляет (2): Null, Число(0,0)
12 lodger
 
10.01.23
09:18
(10) так да
13 lodger
 
10.01.23
09:18
Запрос = Новый Запрос(      
"ВЫБРАТЬ
|    КоэффициентОкругленияЦен.Значение
|ИЗ
|    Константа.КоэффициентОкругленияЦен КАК КоэффициентОкругленияЦен
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    ВЫРАЗИТЬ(231.12345678 КАК ЧИСЛО(15, 8))
|");

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

вот так тоже ломает
14 lodger
 
10.01.23
09:22
и дело даже не в преобразовании к ТЗ

резЗапроса = Запрос.Выполнить();
Колонка = резЗапроса.Колонки.Получить(0);
Сообщить(Колонка.ТипЗначения.КвалификаторыЧисла.Разрядность);

тут такая же петрушка.
15 VladZ
 
10.01.23
09:59
(13) Поменяй местами  выборку: сначала  ВЫРАЗИТЬ(231.12345678 КАК ЧИСЛО(15, 8)) потом константу.
16 lodger
 
10.01.23
10:46
(15) без разницы.
17 VladZ
 
10.01.23
11:50
(16) Жаль, не удался фокус.
18 lodger
 
10.01.23
12:04
(17) положил в ВТ и выбрал из ВТ - то же.
сгруппировал в сумму типизированное и выраженное - то же.