Имя: Пароль:
1C
 
В результате запроса отсутствуют квалификаторы числовых колонок из константных выражений
0 TormozIT
 
гуру
07.08.21
09:28
8.3.18
Выполняю код

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

Получаю

0
10

Для строковой колонки квалификатор ожидаемый, а для числовой - нет. Поясните логику.
1 ДенисЧ
 
07.08.21
09:38
А если
ВЫРАЗИТЬ(1.0 КАК ЧИСЛО(10, 2))

?
2 DrShad
 
07.08.21
09:40
(0) есть такое
(1) в любом случае
3 TormozIT
 
гуру
07.08.21
09:50
За 20 минут получил 0 вариантов объяснения. Сегодня форум слабовато работает.
4 acht
 
07.08.21
10:05
(3) Сильно похоже на платформенную багу с созданием типов в выгруженной таблице.

Я знаю похожий пример порчи типов, когда получаешь таблицу из запроса и тут же отправляешь обратно в другой запрос. Линия поддержки, которая после ботов, кроме демоконфигурации и описания шагов, начала требовать комиксы-скриншоты, я забил =)
5 BeerHelpsMeWin
 
07.08.21
10:11
(3) 10 утра по Москве, суббота. Пик загруженности форума.
А по теме - а если ВЫРАЗИТЬ("1.0" КАК ЧИСЛО(10, 2))
6 Ёпрст
 
07.08.21
10:48
(0) ТипЗначения колонок содержит Null после выгрузить , отсюда - не будет там ни разрядности, ни точности.
Баян жешь..
Не ?
7 Ёпрст
 
07.08.21
10:48
там составной тип - число,Null
8 Ёпрст
 
07.08.21
10:50
(4) вот- вот.. приходилось потом явно типизировать колонки перед отправкой в другой запрос
9 palpetrovich
 
07.08.21
10:58
(8) упс, а как "типизировать колонки перед отправкой в другой запрос"?
я пока ничего умнее не придумал чем:
        ТЗ = Новый ТаблицаЗначений;
        ТЗ.Колонки.Добавить(ИмяКолонкиКарточка, Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(12)));
        ТЗ.Колонки.Добавить(ИмяКолонкиЦСегмент, Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(9, 0)));
        Для Каждого Стр Из ТЗ1 Цикл
            ЗаполнитьЗначенияСвойств(ТЗ.Добавить(), Стр);
        КонецЦикла;
10 palpetrovich
 
07.08.21
10:59
+(9) строк более 100000, цикл мне этот режет глаз )
11 acht
 
07.08.21
11:06
(10) Выгрузить/загрузить колонку через массив
12 acht
 
07.08.21
11:07
(11) И не надо новую таблицу делать - добавляй колонки прямо в текущую. Имя колонки - необзательный атрибут. Можно создать безымянную колонку, перелить в нее данные, грохнуть старую, задать имя новой.
13 TormozIT
 
гуру
07.08.21
11:08
(6)
https://www.meme-arsenal.com/memes/0429805230b5f55c34b50b7d2c7e8d21.jpg
Странное утверждение. В (0) же я показал что для типа "Строка" квалификаторы есть.
14 Документовед
 
07.08.21
11:10
В общем, если тип не задан, т.е. квалификаторы числа равны нулю, то разрядность может быть любая!!!!

v8: Отлегло о сердца - в ТЗ можно хранить числа разных форматов....
15 TormozIT
 
гуру
07.08.21
11:10
(6) Если выбрать из таблицы БД, то квалификаторы ожидаемо есть для всех типов
https://i.imgur.com/mVLNlKC.png
16 Ёпрст
 
07.08.21
11:10
(13) да нету..
Ну.мне лень проверять, с телефончика.
Покажи тип значения колонки на скриншоте.
17 Ёпрст
 
07.08.21
11:12
(15) аа..ну может быть.
18 Ёпрст
 
07.08.21
11:14
Для константы, поди, тип Null,Число ?
19 TormozIT
 
гуру
07.08.21
11:32
(0) Отправил вопрос в 1С https://www.hostedredmine.com/issues/931800
20 mistеr
 
07.08.21
13:49
(0) Сталкивался с таким. Логики не знаю.

Предположение навскидку — что-то связанное с диалектами SQL. Вероятно Выразить() транслируется в нативные функции, и они могут работать по-разному. А со строками наверное все просто и консистентно.
21 Вафель
 
07.08.21
14:32
Числа всегда к макс длине приводятся.
По крайней имере в реальном скл запросе
22 TormozIT
 
гуру
07.08.21
15:36
Трансформация запроса выглядит так:

SDBL
SELECT
CAST(1 AS NUMERIC(10, 2)),
CAST("" AS STRING(10)VARYING)

DBMSSQL
SELECT
CAST(? AS NUMERIC(10, 2)),
CAST(? AS NVARCHAR(10))
p_0: 1N
p_1: ''

MSSQL
exec sp_executesql N'SELECT
CAST(@P1 AS NUMERIC(10, 2)),
CAST(@P2 AS NVARCHAR(10))',N'@P1 numeric(10),@P2 nvarchar(4000)',1,N''
23 mistеr
 
07.08.21
18:07
(22) Осталось для остальных диалектов посмотреть.
24 TormozIT
 
гуру
07.08.21
18:11
(23) Вроде (22) как раз демонстрирует, что для остальных нет смысла смотреть, т.к. трансформированные запросы выглядят корректно (ожидаемо). Значит проблема в финальном построении результата запроса.
25 МихаилМ
 
07.08.21
18:18
проверьте на 8.2. вроде в ней была типизация
26 mistеr
 
07.08.21
18:31
(24) Это для MSSQL ожидаемо. Если у кого-то из остальных есть что-то неожиданное (например баги на момент реализации, или каст параметра не поддерживается), то приходится приводить к общему знаменателю, чтобы не закладывать бомбу.

(25) В 8.2 тоже нет, проверил.