05.06.2022 Кирилл Пак 21851
Составные типы данных

Содержание:

1.       Что такое составной тип данных

2.       Недостатки составного типа данных

3.       Использование составного типа данных

   

1.     Что такое составной тип данных


Тип данных считается составным, если в Конфигураторе при выборе типа объекта метаданных (реквизита, измерения, ресурса и т.п.) в окне выбора типа данных:

  • выбрано более одного типа данных


Выбор более одного типа объекта метаданных

 

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


Выбор ссылки на объекты базы данных типов разного вида


Как же создаются составные типы данных? Для этого нужно в конфигураторе открыть свойства объекта, тип данных которого вы хотите задать и установить флажок - "Составной тип данных"



Создание составного типа данных в 1С   

 

2.     Недостатки составного типа данных


Удобно, не правда ли? Всего несколько галочек и вот уже в реквизит, переменную, ресурс и т.д. можно поместить какую угодно информацию. Если, к примеру, вам нужно, чтобы в реквизите документа можно было выбрать не из одного вида документов, а из нескольких – составной тип незаменим.


К сожалению все далеко не так просто… Составной тип данных – он как айсберг. Помимо того, что он огромен, а видна только верхушка (реальное представление составного типа нужно искать в глубинах СУБД), так еще и может не затопить, но уж точно сильно затормозить ваш корабль (базу), если обращаться с ним неосторожно.


Самым очевидным недостатком составного типа, конечно же, является размер. Для каждого простого типа данных, выбранного в составном, база выделяет отдельное поле. Так что составной тип в 1С может занимать в два, три и так далее больше раз места, чем простой.


Также составные типы данных отрицательно сказываются на производительности (в особенности, когда дело касается запросов). Самый простой пример –запрос к составному типу данных (без метода «ВЫРАЗИТЬ») вернет все простые типы, входящие в составной.

 

ВЫБРАТЬ
ОбъектКонфигурации.СоставнойТип КАК СоставнойТип
ИЗ
ОбъектКонфигурации КАК ОбъектКонфигурации

 

это тоже самое, что и

 
ВЫБРАТЬ
    ОбъектКонфигурации.СоставнойТип.Тип КАК СоставнойТипТип,
    ОбъектКонфигурации.СоставнойТип.Булево КАК СоставнойТипБулево, 
    ОбъектКонфигурации.СоставнойТип.Число КАК СоставнойТипЧисло,
    ОбъектКонфигурации.СоставнойТип.Дата КАК СоставнойТипДата,
    ОбъектКонфигурации.СоставнойТип.Строка КАК СоставнойТипСтрока,
    ОбъектКонфигурации.СоставнойТип.ВидСсылки КАК СоставнойТипСсылки,
    ОбъектКонфигурации.СоставнойТип.Ссылка КАК СоставнойТипСсылка
ИЗ
    ОбъектКонфигурации КАК ОбъектКонфигурации

 

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


Составной тип данных совсем не сложен. Он полезен и весьма удобен при разработке, но таит в себе множество опасностей. И чем объемнее и сложнее база, с которой вы работаете, тем больше (в том числе и достаточно серьезных) проблем принесет необдуманное использование составного типа данных.


Ведь, по большому счету, составной тип – это такая запечатанная коробка, в которую положили много разных типов данных. Она опрятно заклеена и на ней есть этикетка, но, в конечном итоге, ее все равно придется вскрывать, доставать все типы и работать с каждым отдельно.  


3.     Использование составного типа данных

 

Но как же тогда работать с составными типами данных в 1С?


Самый простой и очевидный способ – не работать вовсе. Если задача требует использования составных типов, это повод проанализировать ее еще раз – может, есть другой способ?


В случае же, если составной тип в больших количествах используется в какой-нибудь подсистеме, следует использовать Определяемый тип (Объект метаданных, появившийся в платформе 8.3 и задающийся также как и обычный тип).



Объект метаданных Определяемый тип


Вместо того, чтобы прописывать состав типов для кучи элементов, можно будет использовать один универсальный Определяемый тип, что упростит как разработку, так и читаемость системы.


Так же стоит помнить, что не все составные типы одинаковы вредны . Так Составной тип, состоящий исключительно из ссылок не требует от СУБД так же много ресурсов, как Составной тип данных, в котором присутствуют основные типы и форматы данных (строка, число, дата и т.д.). С последним стоит быть особенно осторожным, т.к. он особенно сильно влияет на эффективность конфигурации.


И еще одно замечание относительно Составных типов данных. При проверке заполнения реквизитов, содержащие Составной тип, можно использовать только функцию ЗначениеЗаполнено(). Так как пока тип не выбран, такой реквизит содержит значение Неопределено, любая другой метод проверки заполнения реквизитов приведет к ошибке.


Теперь перейдем к Запросам – части 1С, которая больше всего страдает от Составных типов данных. Здесь тоже есть несколько методов, которые позволяют избежать просадок эффективности.


Во-первых, в Реквизиты Составных типов, участвующие в соединениях, отборах и упорядочивании, должны входить только Ссылочные типы данных. Использование любых других типов приведет к потере производительности. Причина этого кроется в особенностях их хранения в СУБД.


Если реквизиту, скажем, документа необходимо иметь как Ссылочный, так и нессылочный тип данных, то можно создать отдельный справочник для хранения нессылочного типа, а в Составной тип данных добавить ссылку на этот Справочник.


Кроме того, при всех отборах и соединениях Составных типов обязательно следует использовать метод ВЫРАЗИТЬ(). Если этого не сделать, реквизит соединится с Составным типом данных по всем таблицам, из которых этот тип состоит, после чего уже отсекаются ненужные. ВЫРАЗИТЬ() отсекает ненужные таблицы заранее, сильно влияя на эффективность Запроса.


Таким образом, даже с Составными типами данных в 1С можно работать. Только делать это нужно внимательно и осторожно.

 

Специалист компании «Кодерлайн»

Кирилл Пак

Наши проекты

Госкорпорация «Ростех»
Госкорпорация «Ростех»

Отрасль:
Производство, ТЭК >> Машиностроение, приборостроение

Внедренное типовое решение:
1С:Управление холдингом 1.3.

Специалисты «Кодерлайн» помогли разработать и внедрить автоматизированную...

Установка программного продукта БИТ.Финанс для 1С:Бухгалтерия 8
ООО «Джи Эй Си Шиппинг энд Лоджистикс»

Отрасль:
Транспорт

Внедренное типовое решение:
БИТ.Финанс

Построение единого информационного пространства финансовой службы;
Учет ...

ООО «Мир Аксиомы»
ООО «Мир Аксиомы»

Отрасль:
Аудиторские и консалтинговые услуги

Внедренное типовое решение:
1С:Бухгалтерия КОРП

- Бухгалтерский учет:
Банк и касса
Завершение периода
Нематериальные ...

ООО «Иви.ру»
ООО «Иви.ру»

Отрасль:
Медиаиндустрия

Внедренное типовое решение:
1С:Управление корпоративными финансами

Подсистема казначейства
Модуль бюджетного контроля по ДДС ...

Автоматизация документооборота в компании ООО "Ликард"
ООО «Ликард» (ОАО ЛУКОЙЛ)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:Документооборот КОРП

- Отказ от бумажного документооборота, от громоздких систем на базе офисного...

МГК "Световые Технологии"
МГК "Световые Технологии"

Отрасль:

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Специалисты "Кодерлайн" произвели доработки в системе 1С:ЕРП 2.4 с учетом треб...

Внедрение блока расчета себестоимости РАУЗ в 1С:УПП 8
ООО «Пелигрин Матен»

Отрасль:
Производство

Внедренное типовое решение:
1С:Управление производственным предприятием

– Оформление заказов покупателей;
– Взаиморасчеты с покупателями;
– О...

Внедрение блоков в 1С:Комплексная автоматизация 8
ООО «Больцен Рус»

Отрасль:
Оптовая торговля

Внедренное типовое решение:
1С:Комплексная автоматизация

- Оперативный учет...

ООО «ПКП КАБЭЛЕКТРОСНАБ»
ООО «ПКП КАБЭЛЕКТРОСНАБ»

Отрасль:
Производство кабельной продукции

Внедренное типовое решение:
1С:Управление небольшой фирмой 1.6

- Оформление заказов покупателей;
- Управление складскими запасами;
- Ана...

Автоматизация интеграции с информсистемами клиентов на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
«1С:Предприятие 8. WMS Логистика. Управление складом»

– Управление складскими запасами;
– Оформление заказов покупателей;
– ...

ООО «Вистеон Автоприбор Электроникс»
ООО «Вистеон Автоприбор Электроникс»

Отрасль:

Внедренное типовое решение:
1C:Управление производственным предприятием

- Управленческий учет; - Расчет зарплаты; - Логистика адресного склада; - Учет ...

АО «Аэроклуб»
АО «Аэроклуб»

Отрасль:
Услуги в области делового туризма

Внедренное типовое решение:
1С:Бухгалтерия 8 КОРП

Проведение серии интервью с руководством и ключевыми специалистами Разраб...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение