Параметры выбора для поля СКД

1. ipoloskov 162 23.10.19 15:12 Сейчас в теме
В отчете на СКД в качестве отбора выступает поле с типом "Справочник.ЗначенияСвойствОбъектов"
У этого справочника есть владелец - ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения. Как мне сделать, чтобы при выборе значения отбора, значения выбирались только по заданному ПВХ.ДополнительныеРеквизитыИСведения?

Делал так:
Добавил параметр ПВХ_НомерСертификата, Выражение = "мт_ОпределенныеЭлементыСправочников.Характеристика_НомерСертификата()", Использовать = "Всегда"
Для поля НомерСертификата, по которому мне надо делать отбор в отчете, прописал Параметры отбора.Связи параметров выбора = "Отбор.Владелец: ПараметрыДанных.ПВХ_НомерСертификата".

Не работает. При выборе значения НомерСертификата открывается весь справочник ЗначенияСвойствОбъектов
acanta; +1
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
11. ipoloskov 162 23.10.19 18:03 Сейчас в теме +0.1 $m
Нашел. В модуле объекта нужно прописать функции:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
	
	Настройки.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
	
КонецПроцедуры

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

Функция ПутьКДаннымЭлементаФормыЗначенияОтбора(ИмяПоляКомпоновкиДанных)
	
	ПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных(ИмяПоляКомпоновкиДанных);
	
	Для Каждого Элемент Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
		Если Элемент.ЛевоеЗначение = ПолеКомпоновкиДанных Тогда
			ИдентификаторПользовательскойНастройки = Элемент.ИдентификаторПользовательскойНастройки;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если ИдентификаторПользовательскойНастройки = Неопределено Тогда
		возврат Неопределено;
	КонецЕсли;
	
	ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
	Для Индекс = 0 По ПользовательскиеНастройки.Количество()-1 Цикл
		Если ПользовательскиеНастройки[Индекс].ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда
			возврат "Отчет.КомпоновщикНастроек.ПользовательскиеНастройки["+Формат(Индекс, "ЧДЦ=0; ЧГ=")+"].Значение";
		КонецЕсли;
	КонецЦикла;
	
	возврат Неопределено;
	
КонецФункции

Показать

В Схеме компоновки данных никаких отборов делать не надо
MikaPikina; ReDvAlL; +2
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. THEBESTolo4b 10 23.10.19 15:39 Сейчас в теме
(1)
отчете на СКД в качестве отбора выступает поле с типом "Справочник.ЗначенияСвойствОбъектов"
У этого справочника есть владелец - ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения. Как мне сделать, чтобы при выборе значения отбора, значения выбирались только по заданному ПВХ.ДополнительныеРеквизитыИСведения?
можно отчет посмотреть
+
2. VmvLer 23.10.19 15:16 Сейчас в теме
без картинки напрягать извилины?
+
3. SGordon1 23.10.19 15:35 Сейчас в теме
в скд привязывали характеристики?
+
5. ipoloskov 162 23.10.19 15:49 Сейчас в теме
(3) это не характеристики объекта СКД. Это реквизиты табличной части документа с типом СправочникСсылка.ЗначенияСвойствОбъекта

Попробовал программно установить ПараметрыВыбора в модуле объекта:
	ПоляСКД = СхемаКомпоновкиДанных.НаборыДанных.Получить(0).Поля;
	
	Поле_НомерСертификатаПроизводителя = ПоляСКД.Найти("НомерСертификатаПроизводителя");
	ПараметрыРедактирования = Поле_НомерСертификатаПроизводителя.ПараметрыРедактирования;
	Массив = Новый Массив;
	Массив.Добавить(Новый ПараметрВыбора("Отбор.Владелец", мт_ОпределенныеЭлементыСправочников.Характеристика_НомерСертификата())); 
	ПараметрыВыбора = Новый ФиксированныйМассив(Массив);
	ПараметрыРедактирования.УстановитьЗначениеПараметра("ПараметрыВыбора", ПараметрыВыбора);
Показать

Не работает. ПараметрыВыбора устанавливаются, но в момент открытия формы выбора справочника ЗначенияСвойствОбъекта, их там нет.
+
7. toypaul 63 23.10.19 15:55 Сейчас в теме
(5) смысла нет делать это в модуле документа. если делать, то делать нужно в форме. но это не так просто
+
8. AlexandrSmith 69 23.10.19 16:08 Сейчас в теме
(5) Проверьте в какой последовательности вы вставляете, может вы потом обнуляете поле где-нибудь пересозданием объекта.
+
6. toypaul 63 23.10.19 15:53 Сейчас в теме
обсуждали недавно с коллегой эту проблему. буквально пару дней назад.

оказалось, что параметр владелец должен быть обязательно использован в пользовательской настройке.

если сделать так - работает.

чтобы убрать его (сделать невидимым) третий параметр в польз. настройке ставим Недоступный. костыль, но вроде работает
+
9. user-z99999 67 23.10.19 16:09 Сейчас в теме
(6)
В СКД где запрос написан. Там вверху у поля настраивался Владелец.
+
10. ipoloskov 162 23.10.19 16:16 Сейчас в теме
(6) можно поподробнее?
параметр владелец должен быть обязательно использован в пользовательской настройке
+
11. ipoloskov 162 23.10.19 18:03 Сейчас в теме +0.1 $m
Нашел. В модуле объекта нужно прописать функции:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
	
	Настройки.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
	
КонецПроцедуры

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

Функция ПутьКДаннымЭлементаФормыЗначенияОтбора(ИмяПоляКомпоновкиДанных)
	
	ПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных(ИмяПоляКомпоновкиДанных);
	
	Для Каждого Элемент Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
		Если Элемент.ЛевоеЗначение = ПолеКомпоновкиДанных Тогда
			ИдентификаторПользовательскойНастройки = Элемент.ИдентификаторПользовательскойНастройки;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если ИдентификаторПользовательскойНастройки = Неопределено Тогда
		возврат Неопределено;
	КонецЕсли;
	
	ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
	Для Индекс = 0 По ПользовательскиеНастройки.Количество()-1 Цикл
		Если ПользовательскиеНастройки[Индекс].ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда
			возврат "Отчет.КомпоновщикНастроек.ПользовательскиеНастройки["+Формат(Индекс, "ЧДЦ=0; ЧГ=")+"].Значение";
		КонецЕсли;
	КонецЦикла;
	
	возврат Неопределено;
	
КонецФункции

Показать

В Схеме компоновки данных никаких отборов делать не надо
MikaPikina; ReDvAlL; +2
12. ipoloskov 162 23.10.19 20:04 Сейчас в теме
(11) Дополнение:
Если отчет встраивается в расширение, дополнительно нужно:
1) включить его в подсистему "ПодключаемыеОтчетыИОбработки"
2) В модуле менеджера прописать код
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

Процедура ПриОпределенииНастроек(Настройки) Экспорт
	
	Настройки.ОпределитьНастройкиФормы = Истина;
	
КонецПроцедуры	

#КонецЕсли
Показать
+
13. Pryanishnikov_Vladimir 12.04.21 14:51 Сейчас в теме
(11)

Можно было покороче:

&НаСервере
Процедура ПриОткрытииНаСервере()
	
	Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ЦветСвойство", 
	ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Цвет_e113e5260dfa4207bfc6eb7f196ddc96"));
	Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("РазмерСвойство", 
	ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Размер_532b07e53fca47ca9877a3ac46b843c4"));
	Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("СтильСвойство", 
	ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "Стиль_c6091bdffae042d8b74820904d6c4d6b"));  
	
КонецПроцедуры
Показать


В параметрах редактирования вкладка Наборы данных соответсвующих полей установить связи параметров выбора:
Отбор.Владелец: ПараметрыДанных.[ВашПараметр]
Unl0gisch; +1
Внимание! Тема сдана в архив

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