В СКД появилась новая роль "Основное":

Поле с ролью "Основное" работает для детальных записей, такое поле автоматически открывается при нажатии на детальные записи.
Поле с ролью "Основное" имеет особенности при использовании и неочевидное поведение. Которое мы рассмотрим в этой статье.
Поле с ролью "Основное" в структуре xml отражается так:
<role>
<dcscom:isMain>true</dcscom:isMain>
</role>
Для тестировани напишем отчет с таким запросом:
ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
Настройками полей:

И структурой:

В событии ПриКомпоновкеДанных напишем код для получения итогового запроса, в дальнейшем мы будем анализировать запрос:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки());
КонецПроцедуры
Сформируем отчет и увидим, что при клике на расшифровку все работает стандартно:

Установим роль "Основное" у номенклатуры и сформируем отчет:

Визуально ничего не изменилось, но теперь при нажатии на поле детальных записей у нас автоматически открывается Номенклатура:

Отметим "Основное" у склада и не будем снимать у номенклатуры.

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

Если мы снимем "Основное" у номенклатуры, начнет работать склад в расшифровке детальных записей:

Оставим роль "Основное" только у номенклатуры и уберем поле из детальных записей:


Проанализируем итоговый запрос:

ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток,
ПРЕДСТАВЛЕНИЕССЫЛКИ(ТоварыНаСкладахОстаткиИОбороты.Склад) КАК СкладПредставление,
ТоварыНаСкладахОстаткиИОбороты.Склад.Наименование КАК СкладНаименование
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
В нем нет номенклатуры и расшифровка по детальным записям номенклатуру не открывает:

Уберем роль "Основное" у номенклатуры и добавим роль "Основное" у регистратора:

Возвращаемся к изначальной структуре отчета:

Сформируем отчет и увидим, что визуально он изменился.

Проанализируем запрос и увидим, что в случае с регистратором он добавил поле в итоговый запрос:
ВЫБРАТЬ
ТоварыНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
ТоварыНаСкладахОстаткиИОбороты.ПериодСекунда КАК ПериодСекунда,
ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииНачальныйОстаток КАК ВНаличииНачальныйОстаток,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииПриход КАК ВНаличииПриход,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииРасход КАК ВНаличииРасход,
ТоварыНаСкладахОстаткиИОбороты.ВНаличииКонечныйОстаток КАК ВНаличииКонечныйОстаток,
ПРЕДСТАВЛЕНИЕССЫЛКИ(ТоварыНаСкладахОстаткиИОбороты.Номенклатура) КАК НоменклатураПредставление,
ПРЕДСТАВЛЕНИЕССЫЛКИ(ТоварыНаСкладахОстаткиИОбороты.Склад) КАК СкладПредставление,
ВЫБОР
КОГДА ТоварыНаСкладахОстаткиИОбороты.Склад.Ссылка ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ 1
КОНЕЦ КАК СкладПолеУпорядочивания1,
ТоварыНаСкладахОстаткиИОбороты.Склад.Наименование КАК СкладПолеУпорядочивания2
ИЗ
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , Авто, , ) КАК ТоварыНаСкладахОстаткиИОбороты
УПОРЯДОЧИТЬ ПО
СкладПолеУпорядочивания1,
СкладПолеУпорядочивания2,
Склад
Из типовых конфигураций, переведенных на платформу 8.5, знаю только 1С:УНФ. В версии 3.0.13.342 УНФ нет использования роли "Основное" в отчетах.
Итого:
1) Поле с ролью "Основное" меняет поведение расшифровки для детальных записей. Открывая это поле при клике на детальные записи.
2) Второе "Основное" поле не работает.
3) Поле с ролью "Основное" может быть добавлено в запрос даже если не используется. Оптимизатор СКД может удалить такое поле из итогового запроса, а может и не удалить.
4) Присутствие поля с ролью "Основное" в структуре отчета может исказить результат.
Выводы:
Сценарии использования и работа роли Основное не очевидны, то, что оно делает, можно было сделать парой строчек кода в СКД. Ждем примеров использования этой роли от вендора.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.12.218
Вступайте в нашу телеграмм-группу Инфостарт