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