Содержание:
1. Что такое составной тип данных
2. Недостатки составного типа данных
3. Использование составного типа данных
1. Что такое составной тип данных
Тип данных считается составным, если в Конфигураторе при выборе типа объекта метаданных (реквизита, измерения, ресурса и т.п.) в окне выбора типа данных:
- выбрано более одного типа данных

Выбор более одного типа объекта метаданных
- выбраны ссылки на объекты базы данных типов разного вида. Такие как: ДокументСсылка, ПеречислениеСсылка, ПланВидовХарактеристикСсылка, ПланСчетовСсылка, ПланВидовРасчетаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаБизнесПроцессаСсылка, ЗадачаСсылка, ПланОбменаСсылка, ЛюбаяСсылка.

Выбор ссылки на объекты базы данных типов разного вида
Как же создаются составные типы данных? Для этого нужно в конфигураторе открыть свойства объекта, тип данных которого вы хотите задать и установить флажок - "Составной тип данных"
Создание составного типа данных в 1С
2. Недостатки составного типа данных
Удобно, не правда ли? Всего несколько галочек и вот уже в реквизит, переменную, ресурс и т.д. можно поместить какую угодно информацию. Если, к примеру, вам нужно, чтобы в реквизите документа можно было выбрать не из одного вида документов, а из нескольких – составной тип незаменим.
К сожалению все далеко не так просто… Составной тип данных – он как айсберг. Помимо того, что он огромен, а видна только верхушка (реальное представление составного типа нужно искать в глубинах СУБД), так еще и может не затопить, но уж точно сильно затормозить ваш корабль (базу), если обращаться с ним неосторожно.
Самым очевидным недостатком составного типа, конечно же, является размер. Для каждого простого типа данных, выбранного в составном, база выделяет отдельное поле. Так что составной тип в 1С может занимать в два, три и так далее больше раз места, чем простой.
Также составные типы данных отрицательно сказываются на производительности (в особенности, когда дело касается запросов). Самый простой пример –запрос к составному типу данных (без метода «ВЫРАЗИТЬ») вернет все простые типы, входящие в составной.
ВЫБРАТЬ
ОбъектКонфигурации.СоставнойТип КАК СоставнойТип
ИЗ
ОбъектКонфигурации КАК ОбъектКонфигурации
это тоже самое, что и
ВЫБРАТЬ
ОбъектКонфигурации.СоставнойТип.Тип КАК СоставнойТипТип,
ОбъектКонфигурации.СоставнойТип.Булево КАК СоставнойТипБулево,
ОбъектКонфигурации.СоставнойТип.Число КАК СоставнойТипЧисло,
ОбъектКонфигурации.СоставнойТип.Дата КАК СоставнойТипДата,
ОбъектКонфигурации.СоставнойТип.Строка КАК СоставнойТипСтрока,
ОбъектКонфигурации.СоставнойТип.ВидСсылки КАК СоставнойТипСсылки,
ОбъектКонфигурации.СоставнойТип.Ссылка КАК СоставнойТипСсылка
ИЗ
ОбъектКонфигурации КАК ОбъектКонфигурации
Если говорить о влиянии составных типов на производительность - отдельного упоминания заслуживает индексирование таблиц базы данных. При индексировании составного типа данных программа создает индекс для каждого отдельного типа, а значит нагрузку, которую оказывает индексирование на систему можно помножить на количество простых типов в составном типе данных.
Составной тип данных совсем не сложен. Он полезен и весьма удобен при разработке, но таит в себе множество опасностей. И чем объемнее и сложнее база, с которой вы работаете, тем больше (в том числе и достаточно серьезных) проблем принесет необдуманное использование составного типа данных.
Ведь, по большому счету, составной тип – это такая запечатанная коробка, в которую положили много разных типов данных. Она опрятно заклеена и на ней есть этикетка, но, в конечном итоге, ее все равно придется вскрывать, доставать все типы и работать с каждым отдельно.
3. Использование составного типа данных
Но как же тогда работать с составными типами данных в 1С?
Самый простой и очевидный способ – не работать вовсе. Если задача требует использования составных типов, это повод проанализировать ее еще раз – может, есть другой способ?
В случае же, если составной тип в больших количествах используется в какой-нибудь подсистеме, следует использовать Определяемый тип (Объект метаданных, появившийся в платформе 8.3 и задающийся также как и обычный тип).
Объект метаданных Определяемый тип
Вместо того, чтобы прописывать состав типов для кучи элементов, можно будет использовать один универсальный Определяемый тип, что упростит как разработку, так и читаемость системы.
Так же стоит помнить, что не все составные типы одинаковы вредны . Так Составной тип, состоящий исключительно из ссылок не требует от СУБД так же много ресурсов, как Составной тип данных, в котором присутствуют основные типы и форматы данных (строка, число, дата и т.д.). С последним стоит быть особенно осторожным, т.к. он особенно сильно влияет на эффективность конфигурации.
И еще одно замечание относительно Составных типов данных. При проверке заполнения реквизитов, содержащие Составной тип, можно использовать только функцию ЗначениеЗаполнено(). Так как пока тип не выбран, такой реквизит содержит значение Неопределено, любая другой метод проверки заполнения реквизитов приведет к ошибке.
Теперь перейдем к Запросам – части 1С, которая больше всего страдает от Составных типов данных. Здесь тоже есть несколько методов, которые позволяют избежать просадок эффективности.
Во-первых, в Реквизиты Составных типов, участвующие в соединениях, отборах и упорядочивании, должны входить только Ссылочные типы данных. Использование любых других типов приведет к потере производительности. Причина этого кроется в особенностях их хранения в СУБД.
Если реквизиту, скажем, документа необходимо иметь как Ссылочный, так и нессылочный тип данных, то можно создать отдельный справочник для хранения нессылочного типа, а в Составной тип данных добавить ссылку на этот Справочник.
Кроме того, при всех отборах и соединениях Составных типов обязательно следует использовать метод ВЫРАЗИТЬ(). Если этого не сделать, реквизит соединится с Составным типом данных по всем таблицам, из которых этот тип состоит, после чего уже отсекаются ненужные. ВЫРАЗИТЬ() отсекает ненужные таблицы заранее, сильно влияя на эффективность Запроса.
Таким образом, даже с Составными типами данных в 1С можно работать. Только делать это нужно внимательно и осторожно.
Специалист компании «Кодерлайн»
Кирилл Пак