#std728

Ограничения на использование реквизитов составного типа

1.1.

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

Не включайте в такой составной тип нессылочные значения: Строка, Число, Дата, УникальныйИдентификатор, Булево, ХранилищеЗначения.

Иначе производительность запросов заметно снижается из-за особенностей физического хранения составных типов в таблицах СУБД. Подробности: Особенности хранения составных типов данных.

1.2.

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

Пример: в документе есть реквизит Адрес составного типа, который включает ссылку на справочник Контакты и Строку. Вместо этого создайте отдельный справочник ПроизвольныеАдреса и включите его в тип реквизита Адрес вместо строки.

Новые элементы справочника ПроизвольныеАдреса добавляйте автоматически при записи документа, без участия пользователя. Удаление неиспользуемых элементов выполняйте регламентным заданием.

1.3.

Исключение могут составлять таблицы, в которых заведомо мало данных (до 1000 записей).

2.1.

Для типизированных объектов метаданных, которые хранятся в ИБ, не используйте составные типы ЛюбаяСсылка, СправочникСсылка, ДокументСсылка и аналогичные. Состав типов каждого такого объекта задавайте явно.

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

Проблемы избыточно широких составных типов:

  • при обращении «через точку» к реквизиту такого типа без ВЫРАЗИТЬ выполняется неявное соединение со всеми таблицами из состава типа, что существенно ухудшает производительность;
  • возникают лишние реструктуризации при удалении ссылочных объектов метаданных (например, значений перечислений или точек маршрута бизнес-процесса, которые тоже входят в ЛюбаяСсылка);
  • неоправданно усложняются алгоритмы, которые начинают поддерживать широкий набор типов, не нужный для прикладной задачи;
  • сложнее анализировать работу механизма внедренцам и сторонним разработчикам;
  • пользователю неудобно выбирать значение в форме из слишком большого списка типов (когда реально нужно 3-5 типов);
  • при удалении помеченных объектов растут издержки анализа и блокировок таблиц при поиске ссылок.
2.2.

Если составной тип массово используется в объектах подсистемы или всей конфигурации, применяйте #std704: определяемые типы.

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

См. также
Проверки

#v8cs:db-object-anyref-type #v8cs:db-object-ref-non-ref-type

#acc:1329 #acc:1330

Источник

https://its.1c.ru/db/v8std#content:728