Имя: Пароль:
1C
 
СКД, БСП 3.1 Задать свои предопределенные значения отбора по умолчанию в "ФормеОтчета"
0 bvb
 
29.10.24
20:16
Добрый вечер

Хочу в форме отчета установить программно список для значение отбора для КомпоновщикНастроек.Настройки.Отбор.Элементы

Подскажите на какой из предопределенных процедур в ФормеОтчета это нужно сделать ?

Варианты :
"ПриСозданииНаСервере"
"ПередЗагрузкойНастроекВКомпоновщик"
"ПослеЗагрузкиНастроекВКомпоновщик"
"ПередЗагрузкойВариантаНаСервере"
"ПриЗагрузкеВариантаНаСервере"
"ПриЗагрузкеПользовательскихНастроекНаСервере"
"ПередЗаполнениемПанелиБыстрыхНастроек"
"ПослеЗаполненияПанелиБыстрыхНастроек"
"ПриОпределенииПараметровВыбора"
"ПриОпределенииИспользуемыхТаблиц"
"ПриОпределенииСвойствЭлементовФормыНастроек"
"ПриОпределенииОсновныхПолей"
"ПередФормированиемОтчета"




Пробовал на :
ПриЗагрузкеВариантаНаСервере
ПриЗагрузкеПользовательскихНастроекНаСервере
1 Волшебник
 
29.10.24
20:17
на какой?

может "в какой?"
2 Franchiser
 
29.10.24
20:25
Процедура ИнициализацияОтчета()

    КомпоновщикНастроек.Настройки.Отбор.Элементы ...
    
КонецПроцедуры

ИнициализацияОтчета();
3 bvb
 
06.11.24
11:00
(2) Нет такой процедуры ИнициализацияОтчета есть ИнициализироватьОтчет.
Приеняют когда нужно вызвать отчет из вне с преднастройками.
4 bvb
 
06.11.24
11:07
Я наверное неточно сформулировал исходную задачу...

В схеме есть отбор по контрагенту. Нужно использовать список значений. Его нужно предзаполнить. Список получается сложно ( запросом). Мне нужно чтобы сам отбор не использовался (галка не стояла), но список был заполнен на уровне метаданных

Я пробовал заполнять :
КомпоновщикНастроек.Настройки.Отбор.Элементы
и
Форма.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы

ничего не получается
5 rozer76
 
06.11.24
11:53
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
    Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;
КонецПроцедуры

Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт
    
    КомпоновщикНастроекФормы = Форма.Отчет.КомпоновщикНастроек;
    
    //тут настраивай параметры и отборы и они "перекроют" пользовательские настройки, например этот параметр
    //НастроитьПериодПоУмолчанию(КомпоновщикНастроекФормы, "ПериодОтчета");
        
КонецПроцедуры

подробнее тут https://infostart.ru/1c/articles/2112355/
6 bvb
 
06.11.24
12:18
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт
    
    КомпоновщикНастроекФормы = Форма.Отчет.КомпоновщикНастроек;
    ЗадатьСписокМаркетплейсов (КомпоновщикНастроекФормы.Настройки);
                
КонецПроцедур

Процедура ЗадатьСписокМаркетплейсов (Настройки)
    
    СпМаркетПлейсов = Новый СписокЗначений;
    СпМаркетПлейсов.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("ООО ""ИНТЕРНЕТ РЕШЕНИЯ""",ИСТИНА));
    СпМаркетПлейсов.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("МегаМаркет",ИСТИНА));    
    СпМаркетПлейсов.Добавить(Справочники.Контрагенты.НайтиПоНаименованию("ВАЙЛДБЕРРИЗ",ИСТИНА));    
    
    УстановитьЗначениеОтбора(Настройки, "Контрагент", СпМаркетПлейсов, ВидСравненияКомпоновкиДанных.ВСписке, ИСТИНА);
    
КонецПроцедуры    

Процедура УстановитьЗначениеОтбора(Настройки, НазваниеОтбора, ЗначениеОтбора, ВидСравнения, Использование = ИСТИНА) Экспорт
    
    Для  Каждого Элемент ИЗ   Настройки.Отбор.Элементы Цикл
        
        Если  Строка(Элемент.ЛевоеЗначение) = НазваниеОтбора Тогда
            
            Элемент.ВидСравнения   = ВидСравнения;
            Элемент.ПравоеЗначение = ЗначениеОтбора ;
            Элемент.Использование  = Использование;
            
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры
7 bvb
 
06.11.24
12:19
Форма.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы

Коллекция элементов отбора заполняется. Но в форме по кнопке "настройки" искомого списка нет
8 Franchiser
 
06.11.24
14:16
(3) добавь
9 rozer76
 
06.11.24
14:44
(7) зачем так? У тебя же есть БСП. Пробуй через КомпоновкаДанныхКлиентСервер.ДобавитьОтбор
и передай КомпоновщикНастроек (он там сам разбирает что в него передали это или Настройки) и покури с параметром ВПользовательскиеНастройки
10 bvb
 
14.11.24
13:47
(9) В УНФ 3.0 в модуле КомпоновкаДанныхКлиентСервер нет ДобавитьОтбор
11 bvb
 
14.11.24
13:55
Посмотрел https://infostart.ru/1c/articles/2112355/

Сделал в ПриСозданииНаСервере

СпМаркетПлейсов = Новый СписокЗначений;

Форма.ФормаПараметры.Отбор.Вставить("Контрагент", СпМаркетПлейсов);


Но есть 3 Но :
1. В данной реализации програмно включать / выключать отбор нельзя. Мне нужно чтобы значения отбора были заполненно, но  сам отбор по умолчанию был выключен. А так он включен по умолчанию

2. Поле отбора пропало из быстрых настроек формы

3. Доступ к изменению отбора есть только в режиме РАСШИРЕННОй настройки
12 SleepyHead
 
14.11.24
15:47
(0) Попробуй через ОбщегоНазначенияКлиентСервер

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

ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Организация", ВидСравненияКомпоновкиДанных.Равно, РеквизитыСобытия.Организация);
		
ОтчетШР.СкомпоноватьРезультат(Таб);
13 rozer76
 
14.11.24
17:30
(10) дарю )

Подробности

// Добавляет отбор в коллекцию отборов компоновщика или группы отборов
//
// Параметры:
//    ЭлементСтруктуры - КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных - элемент структуры компоновки данных.
//    Поле - Строка - имя поля, по которому добавляется отбор.
//    Значение - Произвольный - значение отбора компоновки данных.
//    ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнений КД (по умолчанию: Неопределено).
//    Использование - Булево - признак использования отбора (по умолчанию: Истина).
//    ДополнительныеПараметры - Структура - Структура со свойствами:
//        *ВПользовательскиеНастройки - Булево - признак добавления в пользовательские настройки компоновки данных (по умолчанию: ложь).
//        *ЗаменятьСуществующий - Булево - признак полной замены существующего отбора по полю (по умолчанию: истина).
//
// Возвращаемое значение:
//    ЭлементОтбораКомпоновкиДанных - добавленный отбор.
//
Функция ДобавитьОтбор(ЭлементСтруктуры, Знач Поле, Значение = Неопределено, ВидСравнения = Неопределено, Использование = Истина, ДополнительныеПараметры = Неопределено) Экспорт
        
    Если ДополнительныеПараметры = Неопределено Тогда
        ДополнительныеПараметры = Новый Структура("ВПользовательскиеНастройки, ЗаменятьСуществующий", Ложь, Истина);
    Иначе
        Если Не ДополнительныеПараметры.Свойство("ВПользовательскиеНастройки") Тогда
            ДополнительныеПараметры.Вставить("ВПользовательскиеНастройки", Ложь);
        КонецЕсли;
        Если Не ДополнительныеПараметры.Свойство("ЗаменятьСуществующий") Тогда
            ДополнительныеПараметры.Вставить("ЗаменятьСуществующий", Истина);
        КонецЕсли;
    КонецЕсли;
    
    Если ТипЗнч(Поле) = Тип("Строка") Тогда
        Поле = Новый ПолеКомпоновкиДанных(Поле);
    КонецЕсли;
    
    Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
        Отбор = ЭлементСтруктуры.Настройки.Отбор;
        
        Если ДополнительныеПараметры.ВПользовательскиеНастройки Тогда
            Для Каждого ЭлементНастройки Из ЭлементСтруктуры.ПользовательскиеНастройки.Элементы Цикл
                Если ЭлементНастройки.ИдентификаторПользовательскойНастройки = ЭлементСтруктуры.Настройки.Отбор.ИдентификаторПользовательскойНастройки Тогда
                    Отбор = ЭлементНастройки;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        
    ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиКомпоновкиДанных") Тогда
        Отбор = ЭлементСтруктуры.Отбор;
    Иначе
        Отбор = ЭлементСтруктуры;
    КонецЕсли;
    
    Если ВидСравнения = Неопределено Тогда
        ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    КонецЕсли;
    
    ЭлементОтбора = Неопределено;
    Если ДополнительныеПараметры.ЗаменятьСуществующий Тогда
        Для каждого Элемент Из Отбор.Элементы Цикл
            
            Если ТипЗнч(Элемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
                Продолжить;
            КонецЕсли;
            
            Если Элемент.ЛевоеЗначение = Поле Тогда
                ЭлементОтбора = Элемент;
            КонецЕсли;
            
        КонецЦикла;
    КонецЕсли;
    
    Если ЭлементОтбора = Неопределено Тогда
        ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    КонецЕсли;
    ЭлементОтбора.Использование        = Использование;
    ЭлементОтбора.ЛевоеЗначение        = Поле;
    ЭлементОтбора.ВидСравнения        = ВидСравнения;
    ЭлементОтбора.ПравоеЗначение    = Значение;
    
    Возврат ЭлементОтбора;
    
КонецФункции

14 Jackman
 
14.11.24
20:10
(0) А почему именно через отбор, может лучше через скрытый параметр сделать? В него передать значение, а в запросе написать условие с этим параметром.
15 bvb
 
15.11.24
13:15
(13) Спасибо большое. А как она вызывается?
или ее просто вставлять в модуль объекта и она вызовется как при СозданииНаСервере ?  

(14)  Мне нужно что бы за пользователем сохранилась возможность редактировать и включать / выключать данный отбор.