|
В результате запроса отсутствуют квалификаторы числовых колонок из константных выражений | ☑ | ||
---|---|---|---|---|
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 тоже нет, проверил. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |