Пост

Колонки результата запроса


У результата запроса есть одна особенность. Какой бы вы ни выбирали тип значений, платформа добавит к колонке результата тип Null. Число, Строка, Булево, Ссылка. Неважно. Даже если по тексту запроса очевидно, что в результате невозможен Null - он всё равно будет.

Например:

1
2
3
4
5
Запрос  = Новый Запрос("ВЫБРАТЬ 1");
Колонки = Запрос.Выполнить().Колонки;

Сообщить(Колонки.Получить(0).ТипЗначения);
//Сообщение: Null, Число

Так как в колонку добавляется тип Null, то она становится составного типа. И получает в довесок тип Неопределено. С таким поведением можно столкнуться воочию, если решить дополнять данными Выгрузку результата запроса. Все колонки добавленной строки будут значением Неопределено.

Например:

1
2
3
4
5
6
Запрос      = Новый Запрос("ВЫБРАТЬ 1 КАК Поле");
Выгрузка    = Запрос.Выполнить().Выгрузить();
НоваяСтрока = Выгрузка.Добавить();

Сообщить(ТипЗнч(НоваяСтрока.Поле));
//Сообщение: Неопределено

В принципе, поведение платформы нельзя назвать ошибочным. 1С просто не считает целесообразным проверять, есть ли действительно Null в результате. И просто добавляет этот тип, исключая возможные ошибки.

Поэтому, разработчику просто нужно это помнить. + Есть простой метод, который делает копию таблицы, удаляя из неё тип Null. Его можно использовать на простых табличках. Например, в этом методе.

Как думаете, а возможны ли случаи иного поведения формирования типа колонки результата запроса ?

Авторский пост защищен лицензией CC BY 4.0 .