Работа новой роли "Основное" в СКД у платформы 8.5
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
В СКД появилась новая роль "Основное":

Поле с ролью "Основное" работает для детальных записей, такое поле автоматически открывается при нажатии на детальные записи.
Поле с ролью "Основное" имеет особенности при использовании и неочевидное поведение. Которое мы рассмотрим в этой статье.
Поле с ролью "Основное" в структуре 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
Вступайте в нашу телеграмм-группу Инфостарт