Составной тип - коварный тип!
Список значений в составном типе. Задание типа значения списка.
1) Проверка заполнения реквизита.
Если реквизит составного типа, то проверка реквизита на заполненность значением выполняем только с помощью функции ЗначениеЗаполнено().
Ответ таков: когда у составного реквизита тип не выбран, то он имеет значение Неопределено, поэтому проверки типа ПустаяСтрока(Реквизит) Или Реквизит.Пустая() могут сгенерировать исключительную ошибку.
2) Построение запроса
Если в запросе реквизит составного типа участвует в отборах или в соединениях, то следует использовать функцию ВЫРАЗИТЬ(), что уменьшит время выполнения запроса.
Ответ таков: в таких условия система производит левое соединение реквизита с таблицами, которые указаны в его типе, а потом уже отсекает лишние записи. Добавив функцию ВЫРАЗИТЬ в запрос, мы явно указываем с какой таблицей выполнять левое соединение. Умно выражаясь, данная функция выполняет приведение значения к определенному типу.
Синтаксис функции: ВЫРАЗИТЬ ( <Выражение> КАК <Тип значения> ).
Пример.
У справочника ТочкиКартыМаршуртаБизнесПроцесса имеется реквизит ВладелецТочки, который имеет составной тип: СправочникСсылка.ШаблоныБизнесПроцессов, БизнесПроцессСылка.БизнесПроцессУниверсальный. Требуется получить выборку, содержащая информацию о всех точках маршрута, которые относятся к шаблонам бизнес-процессов, а так же наименования этих шаблонов:
3) Проявление отрицательной стороны
При задании составного типа реквизиту старайтесь избегать включения в составной тип примитивных типов (число, булево, строка). Смешивая ссылочные типы с примитивными, увеличивается размер базы данных (создаются дополнительные колонки в таблице реляционной БД), может пострадать индексация реквизита (включение с составной тип неограниченной длины строку). Все это повлияет на производительность.
Вот такой вот коварный составной тип!
1) Проверка заполнения реквизита.
Если реквизит составного типа, то проверка реквизита на заполненность значением выполняем только с помощью функции ЗначениеЗаполнено().
Ответ таков: когда у составного реквизита тип не выбран, то он имеет значение Неопределено, поэтому проверки типа ПустаяСтрока(Реквизит) Или Реквизит.Пустая() могут сгенерировать исключительную ошибку.
2) Построение запроса
Если в запросе реквизит составного типа участвует в отборах или в соединениях, то следует использовать функцию ВЫРАЗИТЬ(), что уменьшит время выполнения запроса.
Ответ таков: в таких условия система производит левое соединение реквизита с таблицами, которые указаны в его типе, а потом уже отсекает лишние записи. Добавив функцию ВЫРАЗИТЬ в запрос, мы явно указываем с какой таблицей выполнять левое соединение. Умно выражаясь, данная функция выполняет приведение значения к определенному типу.
Синтаксис функции: ВЫРАЗИТЬ ( <Выражение> КАК <Тип значения> ).
Пример.
У справочника ТочкиКартыМаршуртаБизнесПроцесса имеется реквизит ВладелецТочки, который имеет составной тип: СправочникСсылка.ШаблоныБизнесПроцессов, БизнесПроцессСылка.БизнесПроцессУниверсальный. Требуется получить выборку, содержащая информацию о всех точках маршрута, которые относятся к шаблонам бизнес-процессов, а так же наименования этих шаблонов:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫРАЗИТЬ(ТочкиКартыМаршрутаБизнесПроцесса.ВладелецТочки КАК Справочник.ШаблоныБизнесПроцесса).Наименование КАК ШаблонБизнесПроцесса,
| ТочкиКартыМаршрутаБизнесПроцесса.Наименование КАК НаименованиеТочкиМаршрута,
| ТочкиКартыМаршрутаБизнесПроцесса.ВидТочки КАК ВидТочкиМаршрута
|ИЗ
| Справочник.ТочкиКартыМаршрутаБизнесПроцесса КАК ТочкиКартыМаршрутаБизнесПроцесса
|ГДЕ
| ВЫРАЗИТЬ(ТочкиКартыМаршрутаБизнесПроцесса.ВладелецТочки КАК Справочник.ШаблоныБизнесПроцесса) ЕСТЬ НЕ NULL
| И НЕ ТочкиКартыМаршрутаБизнесПроцесса.ПометкаУдаления";
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
3) Проявление отрицательной стороны
При задании составного типа реквизиту старайтесь избегать включения в составной тип примитивных типов (число, булево, строка). Смешивая ссылочные типы с примитивными, увеличивается размер базы данных (создаются дополнительные колонки в таблице реляционной БД), может пострадать индексация реквизита (включение с составной тип неограниченной длины строку). Все это повлияет на производительность.
Вот такой вот коварный составной тип!
Комментарии
Отправить комментарий