При разработке отчетов на базе СКД в УТ 11.5 часто возникает необходимость объединить данные из разных источников по значению дополнительного реквизита. Ситуация осложняется тем, что один реквизит может быть представлен ссылкой на СправочникСсылка.ЗначенияСвойствОбъектов, а другой — хранить значение примитивного типа или иметь иную структуру хранения. Давайте разберем, как грамотно настроить связь в такой конфигурации.
Если вы решили использовать два набора данных (два запроса) и планируете соединять их средствами самой СКД во вкладке «Связи наборов данных», вам необходимо привести поля к единому типу. Самым доступным способом является приведение к строковому типу.
Рассмотрим по шагам, как это реализовать:
ВЫРАЗИТЬ, чтобы привести эти значения к типу СТРОКА. Например, ВЫРАЗИТЬ(МоеПоле КАК СТРОКА(100)).СКД.Важное замечание: Приведение к строке может негативно сказаться на производительности отчета, особенно если данных в системе много. Индексация по строковым представлениям работает хуже, чем по ссылкам, поэтому используйте этот метод с осторожностью на больших объемах данных.
Чтобы избежать сложностей с настройкой связей внутри СКД, рекомендуем перенести логику объединения на уровень языка запросов 1С. Это позволит системе оптимизировать выборку данных на уровне СУБД.
Рассмотрим, как это сделать структурно:
ЛЕВОЕ СОЕДИНЕНИЕ для присоединения таблиц, содержащих дополнительные реквизиты.Вот пример того, как может выглядеть структура подобного запроса:
ВЫБРАТЬ
Документы.Ссылка КАК Документ,
ЗначенияСвойств.Значение КАК Свойство
ИЗ
Документ.РеализацияТоваровУслуг КАК Документы
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ДополнительныеСведения КАК ЗначенияСвойств
ПО
Документы.Ссылка = ЗначенияСвойств.Объект
Использование ЛЕВОЕ СОЕДИНЕНИЕ позволяет не терять данные из основного документа, даже если значение дополнительного реквизита не заполнено.
Помните, что архитектура БСП (Библиотеки Стандартных Подсистем), на которой построена УТ 11.5, предполагает хранение доп. реквизитов в специализированных регистрах ДополнительныеСведения или непосредственно в табличных частях объектов. Пытаться обращаться к ним «точечной нотацией» через свойства метаданных в СКД не всегда эффективно.
Если вы работаете с СправочникСсылка.ЗначенияСвойствОбъектов, учитывайте, что это составной тип. Чтобы отчет работал корректно:
СКД могла их «сравнить».Вычисляемые поля для выполнения JOIN, так как они вычисляются уже после получения данных, что делает невозможным их использование для связи наборов.Подводя итог, можно сказать, что самым надежным способом является написание одного общего запроса. Это даст вам полный контроль над тем, как именно 1С соединяет таблицы, позволит использовать индексы и обеспечит максимальную быстроту формирования отчета.