В процессе развития типовых конфигураций (УТ 11, ERP 2, КА 2), построенных на базе Библиотеки стандартных подсистем (БСП), многие разработчики заметили существенное изменение: контактная информация (адреса, телефоны, email) переехала из общего централизованного регистра сведений в табличные части каждого конкретного справочника. На первый взгляд это может показаться шагом назад к денормализации данных, однако за этим решением стоят серьезные архитектурные требования. Рассмотрим подробно, почему разработчики 1С приняли такое решение и какие преимущества это дает.
Одной из главных причин переноса данных является механизм RLS (Record Level Security) — ограничение доступа на уровне записей. Проанализируем ситуацию, когда контактная информация хранится в едином регистре сведений:
Контрагенты, он автоматически получает доступ к его табличной части. Системе больше не нужно проверять права на отдельную таблицу регистра, что существенно повышает общую производительность системы в крупных базах данных.Разберем, как изменение структуры повлияло на механизмы интеграции. Когда контактная информация отделена от объекта, при выгрузке данных (например, через Универсальный обмен данными XML или в распределенных информационных базах) программисту приходилось заботиться о дополнительных отборах в регистрах.
Рассмотрим преимущества хранения в ТЧ для обмена:
В современных конфигурациях активно используется подсистема «Версионирование объектов». Она позволяет отслеживать, кто и когда изменил реквизиты объекта. Выясним, почему ТЧ здесь удобнее:
Если данные хранятся в ТЧ, то при создании новой версии объекта БСП автоматически сохраняет состояние всех его табличных частей. При необходимости «откатиться» к старой версии справочника, адреса и телефоны восстановятся вместе с основными реквизитами. В случае с регистром сведений требовалась бы сложная дополнительная логика по синхронизации версий объекта и записей в независимой таблице.
Современные требования к хранению адресов предполагают наличие детальной информации: индекс, регион, город, улица, номер дома по ФИАС и т.д. В табличных частях БСП используется поле ЗначенияПолей, где вся структура адреса хранится в формате XML.
Посмотрим на пример того, как это упрощает структуру БД:
Проанализируем ограничение регистра сведений: в регистре сведений (если не добавлять лишних измерений) на один вид контактной информации (например, «Телефон менеджера») может быть только одна запись. Использование табличной части позволяет хранить произвольное количество записей одного и того же вида для одного владельца без конфликтов ключей записей.
Многие разработчики жалуются, что теперь запросы стали сложнее, так как требуется делать ЛЕВОЕ СОЕДИНЕНИЕ с табличной частью вместо обращения к одной таблице регистра. Однако, с точки зрения SQL, обращение к таблице _ReferenceXXX_VT_YYY (табличная часть) часто быстрее, чем поиск по огромному общему регистру всех видов информации.
Посмотрим на типичный пример запроса для получения телефона и email контрагента из табличной части:
ВЫБРАТЬ
Партнеры.Ссылка КАК Партнер,
ЕСТЬNULL(КИ_Телефон.Представление, "") КАК Телефон,
ЕСТЬNULL(КИ_Email.Представление, "") КАК ЭлектроннаяПочта
ИЗ
Справочник.Партнеры КАК Партнеры
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК КИ_Телефон
ПО Партнеры.Ссылка = КИ_Телефон.Ссылка
И КИ_Телефон.Вид = &ВидКИ_Телефон
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Партнеры.КонтактнаяИнформация КАК КИ_Email
ПО Партнеры.Ссылка = КИ_Email.Ссылка
И КИ_Email.Вид = &ВидКИ_Email
Несмотря на кажущуюся громоздкость, такой запрос работает эффективно, так как выборка ограничена данными только конкретного справочника.
Подведем итоги нашего анализа. Перенос контактной информации в табличные части — это осознанное решение фирмы «1С» для повышения масштабируемости систем уровня Enterprise (ERP).
Основные выгоды:
При разработке собственных конфигураций на базе БСП мы рекомендуем придерживаться именно этой методики. Если вы создаете новый справочник, которому нужна контактная информация, используйте стандартные механизмы БСП по добавлению табличной части КонтактнаяИнформация. Это обеспечит совместимость с типовыми отчетами, формами выбора и механизмами проверки адресов.