Не применяются пользовательские настройки отчета СКД

1. scanner1980 266 13.02.24 16:26 Сейчас в теме
Здравствуйте.

Конфигурация: БИТ: Строительство (БИТ.ФИНАНС) КОРП, редакция 3.0
БСП 3.1.7.502

Не могу применить настройки СКД при программном вызове ПриКомпоновкеРезультата().
Настойки загружаются, но не применяются. Т.е. если программно вызвать отчет, он сформируется без настроек, нажимаешь сформировать и формируется с настройками.

Подскажите где ошибка.
Так же не заполняется параметр Период.

При компоновке результата заполняю пользовательские настройки.
Прикрепленные файлы:
РеестрПлатежейПФПример.epf
РеестрПлатежей_Пример.erf
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
10. kuzev 47 15.02.24 17:35 Сейчас в теме +5 $m
В Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
нужно добавить сам Отбор перед открытием формы отчета.

Пример создания УсловияОтбора и передачи ПараметрыОтчета в ОткрытьФорму:

ПользовательскиеНастройки = ПолучитьПользовательскиеНастройкиНаСервере(ОбъектыНазначенияМассив[0]);

ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОтчета.Вставить("КлючВарианта", "РеестрПлатежей");
ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);

УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("РеестрПлатежей", РеестрПлатежей);  // тут напишете откуда взять значение РеестрПлатежей. возможно из ПользовательскиеНастройки
УсловияОтбора.Вставить("Отбор2", Отбор2);  // тут еще какой-то отбор при необходимости
УсловияОтбора.Вставить("Отбор3", Отбор3);  // тут еще какой-то отбор при необходимости

ПараметрыОтчета.Вставить("Отбор", УсловияОтбора);    // добавляем Отбор в ПараметрыОтчета

// прочий код
...

ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыОтчета, ЭтаФорма);
Показать
14. kuzev 47 16.02.24 16:24 Сейчас в теме +5 $m
(12) Нужно изменить процедуру ОпределитьНастройкиФормы:
Процедура ОпределитьНастройкиФормы(Отчет, КлючВарианта, НастройкиОтчета) Экспорт   

	НастройкиОтчета.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;

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

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

КонецПроцедуры
Показать

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

КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kuzev 47 13.02.24 19:19 Сейчас в теме
(1) Опишите, как Вы пользуетесь отчетом. Предположим, что есть конфигурация или расширение_конфигурации. Вы добавляете этот отчет во внешние. Далее как "программно вызываете отчет"?
3. scanner1980 266 13.02.24 23:27 Сейчас в теме
(2) Вызов отчета простой, все параметры доступны в модуле ПриКомпоновкеРезультата.
&НаКлиенте
Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
 
	ПользовательскиеНастройки = ПолучитьПользовательскиеНастройкиНаСервере(ОбъектыНазначенияМассив[0]);
 
    ПараметрыОтчета = Новый Структура;
    ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
    ПараметрыОтчета.Вставить("КлючВарианта", "РеестрПлатежей");
    ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
	
	Отчет = ПолучитьСсылкуНаВнешнийОтчетНаСервере(); 
	
	Если не ЗначениеЗаполнено(Отчет) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю("Не найден основной отчет РеестрПлатежейДляКазначейства. Обратитесь к администратору."); 
		Возврат; 
	КонецЕсли;
	
	ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(Отчет);
	ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыОтчета, ЭтаФорма); 
	
КонецПроцедуры   

&НаСервереБезКонтекста
Функция ПолучитьСсылкуНаВнешнийОтчетНаСервере()
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ДополнительныеОтчетыИОбработки.Ссылка КАК Ссылка,
	|	ДополнительныеОтчетыИОбработки.ИмяОбъекта КАК ИмяОбъекта,
	|	ДополнительныеОтчетыИОбработки.Вид КАК Вид
	|ИЗ
	|	Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки
	|ГДЕ
	|	ДополнительныеОтчетыИОбработки.ИмяОбъекта = ""РеестрПлатежейДляКазначейства""
	|	И ДополнительныеОтчетыИОбработки.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет)
	|	И ДополнительныеОтчетыИОбработки.ПометкаУдаления = ЛОЖЬ
	|	И ДополнительныеОтчетыИОбработки.Публикация = ЗНАЧЕНИЕ(Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется)";
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка;
	Иначе
		Возврат Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка();
	КонецЕсли;

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

&НаСервереБезКонтекста
Функция ПолучитьПользовательскиеНастройкиНаСервере(Реестр)
	
	ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("РеестрПлатежей", Реестр);
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("Дата", Реестр.Дата);
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("Организация", Реестр.Организация);
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("ПериодПлана", Новый СтандартныйПериод(НачалоГода(Реестр.Дата), КонецГода(Реестр.Дата)));
	Возврат ПользовательскиеНастройки;    
	
КонецФункции
Показать
4. scanner1980 266 13.02.24 23:48 Сейчас в теме
(2) формирование отчета
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	// Получаем схему из макета
	СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	
	// Из схемы возьмем настройки по умолчанию
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();

	Программный = Ложь;
	Реестр = Документы.бит_РеестрПлатежей.ПустаяСсылка();
	Для каждого стр из КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства Цикл
		// Данный ключ есть только при программном вызове
		Если Стр.Ключ = "РеестрПлатежей" Тогда 
			Программный = Истина;
			Реестр = Стр.Значение;
			Прервать;
		КонецЕсли;
	КонецЦикла; 
	
	// Обычный отбор реестра
	Если не Программный Тогда
		Для каждого стр из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
			Если ТипЗнч(стр) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
				Если стр.Использование и ТипЗнч(стр.ПравоеЗначение) = Тип("ДокументСсылка.бит_РеестрПлатежей") Тогда
					Реестр = стр.ПравоеЗначение;
					Прервать;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;  
	
	ЗаполнитьПользовательскиеНастройки(Настройки);
	
	// Помещаем в переменную данные о расшифровке данных
	//ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	
	// Формируем макет, с помощью компоновщика макета
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	// Очищаем поле табличного документа
	ДокументРезультат.Очистить(); 
	
	ПараметрыДанных	= Настройки.ПараметрыДанных; 
	
	МассивКодовСчетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("60.01,60.02,76,66,58.03",","); 
	МассивСчетов = Новый Массив;
	Для каждого КодСчета из МассивКодовСчетов Цикл
		Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодСчета);
		Если ЗначениеЗаполнено(Счет) Тогда МассивСчетов.Добавить(Счет); КонецЕсли;
	КонецЦикла;
	
	ПараметрыДанных.УстановитьЗначениеПараметра("Счет", МассивСчетов); 
	
	// для отладки
	Реестр = Документы.бит_РеестрПлатежей.НайтиПоНомеру("РА0000016  ");
	Программный = Истина;
	
	// Параметры 
	Для каждого Элемент из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
		Если ТипЗнч(Элемент) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда 
			Если Строка(Элемент.Параметр) = "Дата" Тогда 
				Дата = Элемент.Значение;
				Если Программный Тогда ПараметрыДанных.УстановитьЗначениеПараметра("Дата", Дата); КонецЕсли;
			КонецЕсли;
			Если Строка(Элемент.Параметр) = "Организация" Тогда 
				Организация = Элемент.Значение; 
				Если Программный Тогда ПараметрыДанных.УстановитьЗначениеПараметра("Организация", Организация); КонецЕсли;
			КонецЕсли;
			Если Строка(Элемент.Параметр) = "ПериодПлана" Тогда 
				ПериодПлана = Элемент.Значение;
				Если Программный Тогда 
					ПараметрыДанных.УстановитьЗначениеПараметра("ПериодПлана", ПериодПлана);
				КонецЕсли;
			КонецЕсли;
		ИначеЕсли ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
			// Реестр
			Если Программный и ТипЗнч(Элемент.ПравоеЗначение) = Тип("ДокументСсылка.бит_РеестрПлатежей") Тогда
				Элемент.ПравоеЗначение = Реестр;
				Элемент.Использование = Истина;
				Для каждого НастройкаОтбора из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
					Если НастройкаОтбора.ИдентификаторПользовательскойНастройки = Элемент.ИдентификаторПользовательскойНастройки Тогда
						НастройкаОтбора.ПравоеЗначение = Реестр;
						НастройкаОтбора.Использование = Истина; 
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	// Передаем в макет компоновки схему, настройки и данные расшифровки
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
	
	// Выполним компоновку с помощью процессора компоновки
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
	
	// Выводим результат в табличный документ
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); 
	
КонецПроцедуры   

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

Процедура ОпределитьНастройкиФормы(Отчет, КлючВарианта, НастройкиОтчета) Экспорт

	Настройки.События.ПриСозданииНаСервере = Истина;
	
КонецПроцедуры

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

КонецПроцедуры
Показать
6. scanner1980 266 14.02.24 14:23 Сейчас в теме
(5) не срабатывает, т.е. настройки на форме появляются, но отчет формирует без учета данных настроек. Нажимаешь Сформировать и данные другие, те что нужны
7. vadim.semyonov.rzn 14.02.24 17:08 Сейчас в теме
(6) Попробуйте после изменения загрузить настройки в компоновщик в процедуре ПриКомпоновкеРезультата(). То есть, вслед за строкой ЗаполнитьПользовательскиеНастройки(Настройки); вставить КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);. В некоторых случаях у меня без этого измененные результирующие настройки не применялись.
11. scanner1980 266 15.02.24 17:42 Сейчас в теме
8. scanner1980 266 15.02.24 02:30 Сейчас в теме
(7) пробовал, не применяются. В отчете все заполнено, но срабатывают не сразу а только по кнопке Сформировать
9. DENSKR 15 15.02.24 07:20 Сейчас в теме
Попробуйте варианты:
// 1 — Создание экземпляра отчёта для выполнения
Отчет = Отчеты.ВашОтчет.Создать();
////////////////////////////////////////////////////////////­////////////////////////
// 2 — Получение объекта НастройкиКомпоновкиДанных для установки настроек (разные варианты)
////////////////////////////////////////////////////////////­////////////////////////
// Так: если устраивают типовые настройки существующего варианта отчёта:
НастройкиКомпоновкиДанных = Отчет.СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Основной").Настройки;

// Или так: если нужные настройки сохранены через
// "Форма отчёта —> Ещё -> Прочее -> Изменить вариант отчёта -> Ещё -> Сохранить настройки"
// в XML формат и вынесены в файл:
//ЧтениеXML = Новый ЧтениеXML;
//ЧтениеXML.ОткрытьФайл("C:\Temp\123.xml");
//НастройкиКомпоновкиДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

// Или так: если нужные настройки сохранены через
// "Форма отчёта —> Ещё -> Прочее -> Изменить вариант отчёта -> Ещё -> Сохранить настройки"
// в XML формат и вынесены, например, в текстовый макет
//СтрокаXML = Обработки.МояОбработка.ПолучитьМакет("ВашОтчет_Настройки").ПолучитьТекст();
//ЧтениеXML = Новый ЧтениеXML;
//ЧтениеXML.УстановитьСтроку(СтрокаXML);
//НастройкиКомпоновкиДанных = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

////////////////////////////////////////////////////////////­////////////////////////
// 3 — установка параметров и отборов настройки компоновки данных
////////////////////////////////////////////////////////////­////////////////////////
ЗначениеПараметра 				= НастройкиКомпоновкиДанных.ПараметрыВывода.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Title"));
ЗначениеПараметра.Значение		= "Ваш отчет";
ЗначениеПараметра.Использование = Истина;
// Пример установки параметров
ПараметрНачалоПериода = НастройкиКомпоновкиДанных.ПараметрыДанных.Элементы.Найти("НачалоПериода");
ПараметрНачалоПериода.Использование = Истина;
ПараметрНачалоПериода.Значение = Дата(1980,01,01); //

ПараметрКонецПериода = НастройкиКомпоновкиДанных.ПараметрыДанных.Элементы.Найти("КонецПериода");
ПараметрКонецПериода.Использование = Истина;
ПараметрКонецПериода.Значение = Дата(3999,12,31); //


// Пример установки отбора
ОтборОрганизация = НастройкиКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборОрганизация.Использование = Истина;
ОтборОрганизация.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Организация");
ОтборОрганизация.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборОрганизация.ПравоеЗначение = Справочники.Организации.НайтиПоКоду("00-000001");

// Пример установки отбора
ОтборКонтаргент = НастройкиКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборКонтаргент.Использование = Истина;
ОтборКонтаргент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
ОтборКонтаргент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборКонтаргент.ПравоеЗначение = Справочники.Контрагенты.НайтиПоКоду("00-000001");
// пример установки отбора
//ОтборАртикулНоменклатуры = НастройкиКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
//ОтборАртикулНоменклатуры.Использование = Истина;
//ОтборАртикулНоменклатуры.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура.Артикул");
//ОтборАртикулНоменклатуры.ВидСравнения = ВидСравненияКомпоновкиДанных.НачинаетсяС;
//ОтборАртикулНоменклатуры.ПравоеЗначение = "А";

////////////////////////////////////////////////////////////­////////////////////////
// 4 — передача настроек в отчёт и формирование
////////////////////////////////////////////////////////////­////////////////////////

Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновкиДанных);
Отчет.СкомпоноватьРезультат(Новый ТабличныйДокумент);
Показать


Дополнительно еще можно посмотреть в:
// Процедура записывает параметр пользовательской настройки на сервере
//
// ИмяПараметра - текстовый идентификатор параметра
// ЗначениеПараметра - значение параметра для записи
//
&НаСервере
Процедура УстановитьПараметрНаСервере(ИмяПараметра, ЗначениеПараметра)
	
	НастройкаКомпоновки	= Отчет.КомпоновщикНастроек.Настройки;
	НайденнаяНастройка	= НастройкаКомпоновки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
	
	Если НЕ НайденнаяНастройка = Неопределено Тогда
		
		ЭлементПользовательскойНастройки = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(НайденнаяНастройка.ИдентификаторПользовательскойНастройки);
		ЭлементПользовательскойНастройки.Использование = Истина;
		ЭлементПользовательскойНастройки.Значение = ЗначениеПараметра;
		
	КонецЕсли;
		
КонецПроцедуры //УстановитьПараметрНаСервере()

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

// Функция создает, заполняет и возращает соответствие элементов отбора настройки компоновки данных и их идентификаторов
//
&НаСервере
Функция ПолучитьСоответствиеЭлементовОтбораНастроекКомпоновкиНаСерве­ре()
	
	СоответствиеОтбораКомпоновки = Новый Соответствие();
	
	ОтборКомпоновки	= Отчет.КомпоновщикНастроек.Настройки.Отбор;
	Для каждого ЭлементОтбораКомпоновки Из ОтборКомпоновки.Элементы Цикл
		
		СоответствиеОтбораКомпоновки.Вставить(ЭлементОтбораКомпоновки.ЛевоеЗначение, ЭлементОтбораКомпоновки.ИдентификаторПользовательскойНастройки);
		
	КонецЦикла;
	
	Возврат СоответствиеОтбораКомпоновки;
	
КонецФункции
Показать
10. kuzev 47 15.02.24 17:35 Сейчас в теме +5 $m
В Процедура Печать(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
нужно добавить сам Отбор перед открытием формы отчета.

Пример создания УсловияОтбора и передачи ПараметрыОтчета в ОткрытьФорму:

ПользовательскиеНастройки = ПолучитьПользовательскиеНастройкиНаСервере(ОбъектыНазначенияМассив[0]);

ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОтчета.Вставить("КлючВарианта", "РеестрПлатежей");
ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);

УсловияОтбора = Новый Структура;
УсловияОтбора.Вставить("РеестрПлатежей", РеестрПлатежей);  // тут напишете откуда взять значение РеестрПлатежей. возможно из ПользовательскиеНастройки
УсловияОтбора.Вставить("Отбор2", Отбор2);  // тут еще какой-то отбор при необходимости
УсловияОтбора.Вставить("Отбор3", Отбор3);  // тут еще какой-то отбор при необходимости

ПараметрыОтчета.Вставить("Отбор", УсловияОтбора);    // добавляем Отбор в ПараметрыОтчета

// прочий код
...

ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыОтчета, ЭтаФорма);
Показать
12. scanner1980 266 15.02.24 18:50 Сейчас в теме
Остался один момент. Пользовательский период заполняется, но не показывается на форме.
Прикрепленные файлы:
14. kuzev 47 16.02.24 16:24 Сейчас в теме +5 $m
(12) Нужно изменить процедуру ОпределитьНастройкиФормы:
Процедура ОпределитьНастройкиФормы(Отчет, КлючВарианта, НастройкиОтчета) Экспорт   

	НастройкиОтчета.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;

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

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

КонецПроцедуры
Показать

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

КонецПроцедуры
Показать
15. scanner1980 266 16.02.24 16:25 Сейчас в теме
(14) Спасибо, отлично работает
13. scanner1980 266 16.02.24 09:06 Сейчас в теме
Выложил обработки которые можно открывать в обычной бухгалтерии или другой конфигурации где Есть Справочник.ДоговорыКонтрагентов.Дата

Подключаем 2 отчета печатаем из справочника договоры контрагентов
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот