Получить значение из КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных

1. n_spb 21.07.18 10:14 Сейчас в теме
Как программно получить значение из КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных. Нужно получить значение параметра организация, левое значение неопределено а в правом значении может быть не только организация но и список организаций. Как найти в этой коллекции нужное значение?
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. spacecraft 21.07.18 11:14 Сейчас в теме
(1) сначала из просто настроек находите идентификатор. И уже по нему в пользовательских настройках получаете значение настройки.
triviumfan; +1 Ответить
6. n_spb 23.07.18 13:51 Сейчас в теме
(3) Посмотрите пожалуйста, правильно ли я понял?
ОргПроверка = Новый ПолеКомпоновкиДанных("Организация");
Для каждого СтрНастроек Из КомпоновщикНастроекКД.Настройки.Отбор.Элементы Цикл
    Если СтрНастроек.ЛевоеЗначение = ОргПроверка Тогда 
        ИдентификаторОрганизации = СтрНастроек.ИдентификаторПользовательскойНастройки;
    КонецЕсли;    
КонецЦикла;
ВыбранноеЗначениеОрганизации = КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторОрганизации);
7. spacecraft 23.07.18 14:15 Сейчас в теме
(6) типо того. Только желательно прерывать цикл после найденного элемента и проверять на Неопределено после цикла.
8. n_spb 24.07.18 08:00 Сейчас в теме
(7) Так?
ОргПроверка = Новый ПолеКомпоновкиДанных("Организация");
           Для каждого СтрНастроек Из КомпоновщикНастроекКД.Настройки.Отбор.Элементы Цикл  
                Если СтрНастроек.ЛевоеЗначение = ОргПроверка Тогда 
                 ИдентификаторОрганизации = СтрНастроек.ИдентификаторПользовательскойНастройки;
                 Прервать;
                КонецЕсли;    
            КонецЦикла;
             Если НЕ ИдентификаторОрганизации = Неопределено Тогда
                   //....
            КонецЕсли;   
Показать
9. spacecraft 24.07.18 08:38 Сейчас в теме
10. n_spb 24.07.18 10:33 Сейчас в теме
(9) Понял, спасибо за помощь.
4. Leon75 21.07.18 12:45 Сейчас в теме
(1) Сразу не посмотрел скриншот, потому что на телефоне.
Думал действительно параметр, а тут элемент отбора.

Индексы элементов меняются?

CписокЗначенийСправочникОрганизации = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Получить(11).ПравоеЗначение;
Если ТипЗнч(CписокЗначенийСправочникОрганизации) = Тип("СписокЗначений") Тогда
...
Иначе /// ИначеЕсли ТипЗнч(CписокЗначенийСправочникОрганизации) = Тип("СправочникСсылка.Организации")
....
КонецЕсли;

P.S. Хотя если пользователь воспользуется "Изменить вариант", то по * пойдет и индекс и идентификатор.
2. Leon75 21.07.18 10:59 Сейчас в теме
Через Параметр = КомпоновщикНастроек.ПараметрыДанных.Элементы.Найти("Параметр");
Не отрабатывает?
5. VmvLer 23.07.18 09:18 Сейчас в теме
Функция ПолучитьПараметрКомпоновки(ПараметрИмя, Компоновщик, ПроверятьИспользование = Истина, СообщитьОбОшибке = Истина) Экспорт
	
	ПараметрПоле = Новый ПараметрКомпоновкиДанных(ПараметрИмя);
	ПараметрКд   = Неопределено;
	
	НастройкиКомпоновки = Компоновщик.ПолучитьНастройки();
	
	Для каждого ЗнчПараметраНастроекКд Из НастройкиКомпоновки.ПараметрыДанных.Элементы Цикл
		Если ЗнчПараметраНастроекКд.Параметр = ПараметрПоле
			И ТипЗнч(ЗнчПараметраНастроекКд) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
			Если ПроверятьИспользование Тогда
				Если ЗнчПараметраНастроекКд.Использование Тогда
					ПараметрКд = ЗнчПараметраНастроекКд;
				КонецЕсли;
			Иначе	
				ПараметрКд = ЗнчПараметраНастроекКд;
			КонецЕсли;
			Прервать;
		КонецЕсли;                                                      
	КонецЦикла;
	
	Если ПараметрКд = Неопределено И СообщитьОбОшибке Тогда

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

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


// Пример использования


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	// Проверка "критичных" пользовтельских параметров СКД. 
	ПараметрКд = ПолучитьПараметрКомпоновкиПользовательскихНастроек("Периодичность", КомпоновщикНастроек, Истина); // ПроверятьИспользование = Истина
	Если НЕ ПараметрКд = Неопределено Тогда
		Если ПараметрКд.Значение = Неопределено Тогда
			ПараметрКд.Значение = Перечисления.Периодичность.ПустаяСсылка();
		КонецЕсли;
	КонецЕсли;
	
	// Проверка инициализации обязательных параметров. Разработчик мог выключить или убрать эти параметры. 
	ПараметрКд = ПолучитьПараметрКомпоновки("ПериодОтчета", КомпоновщикНастроек, Истина, Истина);   // ПроверятьИспользование = Истина, СообщитьОбОшибке = Истина 
	Если ПараметрКд = Неопределено Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	ПериодОтчета = ПараметрКд.Значение;
	
	ПараметрКд = ПолучитьПараметрКомпоновки("Периодичность", КомпоновщикНастроек, Истина, Истина);   
	Если ПараметрКд = Неопределено Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	Периодичность = ПараметрКд.Значение;
	Если Периодичность = Неопределено Тогда
		ТекстСообщения = "Подтвердите выбор параметра ""Периодичность""" +
		Символы.ПС + "При последнем выборе значение не было установлено корректно!";
		
		Сообщение = Новый СообщениеПользователю();
		Сообщение.Текст = ТекстСообщения;
		Сообщение.УстановитьДанные(ЭтотОбъект);
		Сообщение.Сообщить();
		
		Отказ = Истина;
		Возврат;
		
	КонецЕсли;
	
КонецПроцедуры
Показать
11. sokol_6630 3 13.05.20 14:04 Сейчас в теме
12. fixin 4253 31.05.22 15:22 Сейчас в теме
Спасибо за наводку.
Написал функцию, которая по полю компоновки возвращает пользовательскую настройку отбора:
&НаКлиенте
Функция НайтиПользовательскуюНастройку(ИскПоле) Экспорт
	Для каждого ЭлКД Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
		Если ЭлКД.ЛевоеЗначение = ИскПоле Тогда 
			ИдентификаторЭл = ЭлКД.ИдентификаторПользовательскойНастройки;
			Эл = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторЭл);
			Возврат Эл;
		КонецЕсли;    
	КонецЦикла;
КонецФункции
Показать
Оставьте свое сообщение

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