Колонки результата запроса
У результата запроса есть одна особенность. Какой бы вы ни выбирали тип значений, платформа добавит к колонке результата тип Null
. Число
, Строка
, Булево
, Ссылка
. Неважно. Даже если по тексту запроса очевидно, что в результате невозможен Null
- он всё равно будет.
Например:
1
2
3
4
5
Запрос = Новый Запрос("ВЫБРАТЬ 1");
Колонки = Запрос.Выполнить().Колонки;
Сообщить(Колонки.Получить(0).ТипЗначения);
//Сообщение: Null, Число
Так как в колонку добавляется тип Null
, то она становится составного типа. И получает в довесок тип Неопределено
. С таким поведением можно столкнуться воочию, если решить дополнять данными Выгрузку результата запроса. Все колонки добавленной строки будут значением Неопределено
.
Например:
1
2
3
4
5
6
Запрос = Новый Запрос("ВЫБРАТЬ 1 КАК Поле");
Выгрузка = Запрос.Выполнить().Выгрузить();
НоваяСтрока = Выгрузка.Добавить();
Сообщить(ТипЗнч(НоваяСтрока.Поле));
//Сообщение: Неопределено
В принципе, поведение платформы нельзя назвать ошибочным. 1С просто не считает целесообразным проверять, есть ли действительно Null
в результате. И просто добавляет этот тип, исключая возможные ошибки.
Поэтому, разработчику просто нужно это помнить. + Есть простой метод, который делает копию таблицы, удаляя из неё тип Null
. Его можно использовать на простых табличках. Например, в этом методе.
Как думаете, а возможны ли случаи иного поведения формирования типа колонки результата запроса ?