Вход | Регистрация
 

В результате запроса отсутствуют квалификаторы числовых колонок из константных выражений

В результате запроса отсутствуют квалификаторы числовых колонок из константных выражений
Я
   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))

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

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

v8: Отлегло о сердца - в ТЗ можно хранить числа разных форматов....
   TormozIT
 
15 - 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,Число ?
   TormozIT
 
19 - 07.08.21 - 11:32
(0) Отправил вопрос в 1С https://www.hostedredmine.com/issues/931800
   mistеr
 
20 - 07.08.21 - 13:49
(0) Сталкивался с таким. Логики не знаю.

Предположение навскидку — что-то связанное с диалектами SQL. Вероятно Выразить() транслируется в нативные функции, и они могут работать по-разному. А со строками наверное все просто и консистентно.
   Вафель
 
21 - 07.08.21 - 14:32
Числа всегда к макс длине приводятся.
По крайней имере в реальном скл запросе
   TormozIT
 
22 - 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''
   mistеr
 
23 - 07.08.21 - 18:07
(22) Осталось для остальных диалектов посмотреть.
   TormozIT
 
24 - 07.08.21 - 18:11
(23) Вроде (22) как раз демонстрирует, что для остальных нет смысла смотреть, т.к. трансформированные запросы выглядят корректно (ожидаемо). Значит проблема в финальном построении результата запроса.
   МихаилМ
 
25 - 07.08.21 - 18:18
проверьте на 8.2. вроде в ней была типизация
   mistеr
 
26 - 07.08.21 - 18:31
(24) Это для MSSQL ожидаемо. Если у кого-то из остальных есть что-то неожиданное (например баги на момент реализации, или каст параметра не поддерживается), то приходится приводить к общему знаменателю, чтобы не закладывать бомбу.

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


Список тем форума
 
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.