Если для дополнительного отчета создать форму отчета, то при добавлении его в Избранное может выходить ошибка.
Это связано с тем, что не корректно формируется НавигационнаяСсылка для клиентской формы отчета. В общей форме отчета НавигационнаяСсылка формируется при создании на сервере.
ВАЖНО!!! Дополнительный отчет должен быть добавлен в справочник ДополнительныеОтчетыИОбработки.
Есть 2 варианта формирования навигационной ссылки:
1) установить свойство формы АвтоНавигационнаяСсылка = Истина (по умолчанию). В этом случае надо добавить формирование навигационной ссылки в событии ОбработкаПолученияНавигационнойСсылки, при этом установив СтандартнаяОбработка = Ложь;
Минус:
При нажатии на "Звезду" она не окрашивается в желтый цвет, хотя в Избранное добавляется
Плюс:
Можно формировать разные названия для добавления в Избранное
2) установить свойство формы АвтоНавигационнаяСсылка = Ложь и формировать НавигационнаяСсылка при создании на сервере, как это сделано в общей форме.
Минус:
Название в Избранном соответствует представлению варианта. Надо сделать его информативным, чтобы не потерять в куче "Основной"
Плюс:
Загорается желтым "Звезда" при открытии отчета и добавление в Избранное.
Примеры:
Вариант 1:
&НаКлиенте
Процедура ОбработкаПолученияНавигационнойСсылки(Ключ, Представление, НавигационнаяСсылка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЗаполнитьНавигационнуюСсылку(НавигационнаяСсылка);
КонецПроцедуры
#Область НавигационнаяСсылкаОтчета
&НаСервере
Процедура ЗаполнитьНавигационнуюСсылку(НавигационнаяСсылка)
ИмяОтчета = РеквизитФормыВЗначение("Отчет").Метаданные().Имя;
СсылкаНаОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОтчета);
Если Не ЗначениеЗаполнено(СсылкаНаОтчет) Тогда
Возврат ;
КонецЕсли;
ВариантСсылка = Неопределено;
Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет, КлючТекущегоВарианта);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВариантСсылка = Выборка.ВариантСсылка;
КонецЦикла;
Если ВариантСсылка = Неопределено Тогда
Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВариантСсылка = Выборка.ВариантСсылка;
КонецЦикла;
КонецЕсли;
НавигационнаяСсылка = "";
Если ВариантСсылка <> Неопределено Тогда
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ВариантСсылка);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВариантОтчетаПоСсылкеИКлючу(ОтчетСсылка, КлючВарианта = Неопределено)
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ВариантыОтчетов.Ссылка КАК ВариантСсылка,
| ВариантыОтчетов.Представление КАК Наименование,
| ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров,
| ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка,
| ВЫБОР
| КОГДА ВариантыОтчетов.Пользовательский
| ТОГДА ЕСТЬNULL(ВариантыОтчетов.Родитель.КлючВарианта, НЕОПРЕДЕЛЕНО)
| ИНАЧЕ ВариантыОтчетов.КлючВарианта
| КОНЕЦ КАК КлючПредопределенногоВарианта,
| ВариантыОтчетов.Пользовательский КАК Пользовательский,
| ВариантыОтчетов.ТипОтчета
|ИЗ
| Справочник.ВариантыОтчетов КАК ВариантыОтчетов
|ГДЕ
| ВариантыОтчетов.Отчет = &Отчет";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Отчет", ОтчетСсылка);
Если КлючВарианта <> Неопределено Тогда
ТекстЗапроса = ТекстЗапроса + " И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; // @Query-part1
Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта);
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Возврат Запрос;
КонецФункции
#КонецОбласти
Вариант 2:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// ...
//Формируем навигационную ссылку, чтобы была возможность добавлять в избранное
//представление варианта отчет лучше сделать более подробным, чтобы оно не потярялось среди "Основной" в избранном
ЗаполнитьНавигационнуюСсылку();
КонецПроцедуры
#Область НавигационнаяСсылкаОтчета
&НаСервере
Процедура ЗаполнитьНавигационнуюСсылку()
ИмяОтчета = РеквизитФормыВЗначение("Отчет").Метаданные().Имя;
СсылкаНаОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОтчета);
Если Не ЗначениеЗаполнено(СсылкаНаОтчет) Тогда
Возврат ;
КонецЕсли;
ВариантСсылка = Неопределено;
Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет, КлючТекущегоВарианта);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВариантСсылка = Выборка.ВариантСсылка;
КонецЦикла;
Если ВариантСсылка = Неопределено Тогда
Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВариантСсылка = Выборка.ВариантСсылка;
КонецЦикла;
КонецЕсли;
НавигационнаяСсылка = "";
Если ВариантСсылка <> Неопределено Тогда
НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ВариантСсылка);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВариантОтчетаПоСсылкеИКлючу(ОтчетСсылка, КлючВарианта = Неопределено)
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ВариантыОтчетов.Ссылка КАК ВариантСсылка,
| ВариантыОтчетов.Представление КАК Наименование,
| ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров,
| ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка,
| ВЫБОР
| КОГДА ВариантыОтчетов.Пользовательский
| ТОГДА ЕСТЬNULL(ВариантыОтчетов.Родитель.КлючВарианта, НЕОПРЕДЕЛЕНО)
| ИНАЧЕ ВариантыОтчетов.КлючВарианта
| КОНЕЦ КАК КлючПредопределенногоВарианта,
| ВариантыОтчетов.Пользовательский КАК Пользовательский,
| ВариантыОтчетов.ТипОтчета
|ИЗ
| Справочник.ВариантыОтчетов КАК ВариантыОтчетов
|ГДЕ
| ВариантыОтчетов.Отчет = &Отчет";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Отчет", ОтчетСсылка);
Если КлючВарианта <> Неопределено Тогда
ТекстЗапроса = ТекстЗапроса + " И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; // @Query-part1
Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта);
КонецЕсли;
Запрос.Текст = ТекстЗапроса;
Возврат Запрос;
КонецФункции
#КонецОбласти
|