Имя: Пароль:
1C
 
При открытии отчета СКД программно заменить вариант отчета
0 r2d24
 
15.04.26
15:25
Есть встроенный отчет СКД.
Есть разные сохраненные пользовательские настройки.
Для одной группы пользователей, нужно сделать так, что бы загружался определенный вариант (со временем он может меняться, но должен быть один)

Пробовал такой вариант, но при открытии отчета, вариант не меняется

    СписокВариантов = ХранилищеВариантовОтчетов.ПолучитьСписок("Отчет.НовыйОтчет");
    Для Каждого ЭлементСписка Из СписокВариантов Цикл
        ИмяВарианта = ЭлементСписка.Представление;
        КлючВарианта = ЭлементСписка.Значение; // может быть GUID или строка
        //Настройки = ХранилищеВариантовОтчетов.Загрузить("Отчет.НовыйОтчет", КлючВарианта);    
        Настройки = ХранилищеВариантовОтчетов.Выбрать(новый Структура("ИмяВарианта,КлючВарианта", ИмяВарианта, КлючВарианта));
        
        Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    КонецЦикла;
1 spiller26
 
15.04.26
15:42
(0)
    ВариантНастроек_Дополнительный = СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Дополнительный");
    Если НЕ ВариантНастроек_Дополнительный = Неопределено Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(ВариантНастроек_Дополнительный.Настройки);
    КонецЕсли;
2 spiller26
 
15.04.26
15:44
(1) Вот полный

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    ТекстЗапроса = СформироватьТекстЗапроса();

    СтандартнаяОбработка = Ложь;

    //1. Получаем схему компоновки данных
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    //2. Получаем схему компоновки данных
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСКД");
    //3. Меняем запрос в наборе данных
    СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса;
    
    //3.1 Меняем заголово и представление в поле "Ссылка"
    ПолеНабораДанных_Ссылка = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Найти("Ссылка");
    Если НЕ ПолеНабораДанных_Ссылка = Неопределено Тогда
        ПолеНабораДанных_Ссылка.Заголовок = "Организация (ИНН)";
        ПолеНабораДанных_Ссылка.ВыражениеПредставления = "Наименование + "", ИНН (""+ ИНН + "")""";
    КонецЕсли;
    //3.2 Меняем вариант настроек
    ВариантНастроек_Дополнительный = СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Дополнительный");
    Если НЕ ВариантНастроек_Дополнительный = Неопределено Тогда
        КомпоновщикНастроек.ЗагрузитьНастройки(ВариантНастроек_Дополнительный.Настройки);
    КонецЕсли;
    
    //4. готовим макет
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    //5. исполняем макет
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки);
    //6. выводим результат
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    

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

Функция СформироватьТекстЗапроса()
    
    ТекстЗапроса =
    "ВЫБРАТЬ
    |    Организации.Ссылка КАК Ссылка,
    |    Организации.Наименование КАК Наименование,
    |    Организации.ИНН КАК ИНН,
    |    100 КАК ПолеДляРесурса
    |ИЗ
    |    Справочник.Организации КАК Организации";
    
    Возврат ТекстЗапроса;
    
КонецФункции
3 r2d24
 
15.04.26
16:00
(2)Это же при формировании отчета
У меня задача, что бы при открытии отчета, установился вариант отчета
4 SleepyHead
 
гуру
15.04.26
16:02
(0) Форма отчета своя? Пробуй УстановитьТекущийВариант(ИмяКлючаВарианта)
5 r2d24
 
15.04.26
16:03
(1) Мой вариант хранится не в варианте отчета, а в хранилище вариантов отчета

Настройки есть, но в компановщик не загружаются
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

В процедуре формы "ПриСоздании"
6 r2d24
 
15.04.26
16:09
(4) форма своя. Но конфигурация почти самописная и БСП нет.
А функция УстановитьТекущийВариант обращается к справочнику варианты отчетов, который не используется в конфигурации
7 SleepyHead
 
гуру
15.04.26
16:21
(6) Странно, в документации такого не видел.
И у меня такое не проявлялось.

Ага, прочитал, ты пользуешься хранилищем вариантов отчетов.. Смотри, куда он указывает.
8 spiller26
 
15.04.26
16:36
(5) Так ты его вытаскиваешь (Вариант отчета) или не знаешь как вытащить?
9 r2d24
 
15.04.26
16:37
(8) Получается, что не знаю как вытащить вариант их хранилища вариантов
10 spiller26
 
15.04.26
16:46
(9) вот как-то так.

ИмяОтчета = "Отчет." + "ИмяТвоегоОтчета";
СписокВариантовОтчета = ХранилищеВариантовОтчетов.ПолучитьСписок(ИмяОтчета);
Для Каждого Вариант Из СписокВариантовОтчета Цикл
    КлючВарианта =  Вариант.Значение;
    ВариантОтчета = ХранилищеВариантовОтчетов.Загрузить(ИмяОтчета, КлючВарианта);
КонецЦикла;
11 spiller26
 
15.04.26
16:53
Без БСП трудновато вам будет если честно.
А так бы расширением сделали вариант и не парились с этим всем.
12 toypaul
 
гуру
15.04.26
17:58
Рекомендую изучить события, которые вызываются в форме отчета. Если ты это сделал в при создании, то затем может быть событие загрузки варианта, а потом еще событие загрузки польз. настроек
13 toypaul
 
гуру
15.04.26
17:59
Если не хочется разбираться, то все это можно "бахнуть" в ПриОткрытии. Некрасиво, но если читать СП по этим событиям хочется натыкать в морду лица разработчикам.
14 toypaul
 
гуру
15.04.26
18:01
Вот кто ФормаОтчета делал в БСП - этот чувак явно постиг дзен в СКД. Если его найдешь, он все расскажет :)
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.