Приветствую Вас ГостьПятница, 14.11.2025, 18:11

Каталог статей


Ошибка при добавление в Избранное

Если для дополнительного отчета создать форму отчета, то при добавлении его в Избранное может выходить ошибка.

Это связано с тем, что не корректно формируется НавигационнаяСсылка для клиентской формы отчета. В общей форме отчета НавигационнаяСсылка формируется при создании на сервере.

ВАЖНО!!! Дополнительный отчет должен быть добавлен в справочник ДополнительныеОтчетыИОбработки.

Есть 2 варианта формирования навигационной ссылки:

1) установить свойство формы АвтоНавигационнаяСсылка = Истина (по умолчанию). В этом случае надо добавить формирование навигационной ссылки в событии ОбработкаПолученияНавигационнойСсылки, при этом установив СтандартнаяОбработка = Ложь;

Минус:

При нажатии на "Звезду" она не окрашивается в желтый цвет, хотя в Избранное добавляется

Плюс:

Можно формировать разные названия для добавления в Избранное

2) установить свойство формы АвтоНавигационнаяСсылка = Ложь и формировать НавигационнаяСсылка при создании на сервере, как это сделано в общей форме.

Минус:

Название в Избранном соответствует представлению варианта. Надо сделать его информативным, чтобы не потерять в куче "Основной"

Плюс:

Загорается желтым "Звезда" при открытии отчета и добавление в Избранное.

Примеры:

Вариант 1:

&НаКлиенте
Процедура ОбработкаПолученияНавигационнойСсылки(Ключ, Представление, НавигационнаяСсылка, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    ЗаполнитьНавигационнуюСсылку(НавигационнаяСсылка);
КонецПроцедуры 

#Область НавигационнаяСсылкаОтчета

&НаСервере
Процедура ЗаполнитьНавигационнуюСсылку(НавигационнаяСсылка)

    ИмяОтчета = РеквизитФормыВЗначение("Отчет").Метаданные().Имя;
    СсылкаНаОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОтчета);
    Если Не ЗначениеЗаполнено(СсылкаНаОтчет) Тогда
        Возврат ;
    КонецЕсли;
    
    ВариантСсылка = Неопределено;
    Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет, КлючТекущегоВарианта);

    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ВариантСсылка = Выборка.ВариантСсылка;
    КонецЦикла;
    
    Если ВариантСсылка = Неопределено Тогда
        
        Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет);

        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл        
            ВариантСсылка = Выборка.ВариантСсылка;
        КонецЦикла;
        
    КонецЕсли;
    
    НавигационнаяСсылка = "";    
    Если ВариантСсылка <> Неопределено Тогда
        НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ВариантСсылка);
    КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Функция ВариантОтчетаПоСсылкеИКлючу(ОтчетСсылка, КлючВарианта = Неопределено)

    ТекстЗапроса =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
 | ВариантыОтчетов.Ссылка КАК ВариантСсылка,
 | ВариантыОтчетов.Представление КАК Наименование,
 | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров,
 | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка,
 | ВЫБОР
 | КОГДА ВариантыОтчетов.Пользовательский
 | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Родитель.КлючВарианта, НЕОПРЕДЕЛЕНО)
 | ИНАЧЕ ВариантыОтчетов.КлючВарианта
 | КОНЕЦ КАК КлючПредопределенногоВарианта,
 | ВариантыОтчетов.Пользовательский КАК Пользовательский,
 | ВариантыОтчетов.ТипОтчета
 |ИЗ
 | Справочник.ВариантыОтчетов КАК ВариантыОтчетов
 |ГДЕ
 | ВариантыОтчетов.Отчет = &Отчет";

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Отчет", ОтчетСсылка);

    Если КлючВарианта <> Неопределено Тогда
        ТекстЗапроса = ТекстЗапроса + " И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; // @Query-part1
        Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта);
    КонецЕсли;

    Запрос.Текст = ТекстЗапроса;

    Возврат Запрос;

КонецФункции

#КонецОбласти

Вариант 2:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // ...
    
    //Формируем навигационную ссылку, чтобы была возможность добавлять в избранное
    //представление варианта отчет лучше сделать более подробным, чтобы оно не потярялось среди "Основной" в избранном
    ЗаполнитьНавигационнуюСсылку();
    
КонецПроцедуры

#Область НавигационнаяСсылкаОтчета

&НаСервере
Процедура ЗаполнитьНавигационнуюСсылку()

    ИмяОтчета = РеквизитФормыВЗначение("Отчет").Метаданные().Имя;
    СсылкаНаОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОтчета);
    Если Не ЗначениеЗаполнено(СсылкаНаОтчет) Тогда
        Возврат ;
    КонецЕсли;
    
    ВариантСсылка = Неопределено;
    Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет, КлючТекущегоВарианта);

    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ВариантСсылка = Выборка.ВариантСсылка;
    КонецЦикла;
    
    Если ВариантСсылка = Неопределено Тогда
        
        Запрос = ВариантОтчетаПоСсылкеИКлючу(СсылкаНаОтчет);

        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл        
            ВариантСсылка = Выборка.ВариантСсылка;
        КонецЦикла;
        
    КонецЕсли;
    
    НавигационнаяСсылка = "";    
    Если ВариантСсылка <> Неопределено Тогда
        НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(ВариантСсылка);
    КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Функция ВариантОтчетаПоСсылкеИКлючу(ОтчетСсылка, КлючВарианта = Неопределено)

    ТекстЗапроса =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
 | ВариантыОтчетов.Ссылка КАК ВариантСсылка,
 | ВариантыОтчетов.Представление КАК Наименование,
 | ВариантыОтчетов.ПредопределенныйВариант.КлючЗамеров КАК КлючЗамеров,
 | ВариантыОтчетов.ПредопределенныйВариант КАК ПредопределенныйСсылка,
 | ВЫБОР
 | КОГДА ВариантыОтчетов.Пользовательский
 | ТОГДА ЕСТЬNULL(ВариантыОтчетов.Родитель.КлючВарианта, НЕОПРЕДЕЛЕНО)
 | ИНАЧЕ ВариантыОтчетов.КлючВарианта
 | КОНЕЦ КАК КлючПредопределенногоВарианта,
 | ВариантыОтчетов.Пользовательский КАК Пользовательский,
 | ВариантыОтчетов.ТипОтчета
 |ИЗ
 | Справочник.ВариантыОтчетов КАК ВариантыОтчетов
 |ГДЕ
 | ВариантыОтчетов.Отчет = &Отчет";

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Отчет", ОтчетСсылка);

    Если КлючВарианта <> Неопределено Тогда
        ТекстЗапроса = ТекстЗапроса + " И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; // @Query-part1
        Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта);
    КонецЕсли;

    Запрос.Текст = ТекстЗапроса;

    Возврат Запрос;

КонецФункции

#КонецОбласти
Категория: Формы | Добавил: leshic (17.10.2025)
Просмотров: 8 | Рейтинг: 0.0/0
Всего комментариев: 0
Вход на сайт
Поиск
Категории раздела
СКД [52]
Регистры [7]
Формы [50]
Администрирование [53]
Запросы [11]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [57]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0