СКД ПолучитьИдентификаторПоОбъекту()

1. tyfmyl 14.12.15 14:02 Сейчас в теме
При открытии формы настроек, нужно скопировать пользовательские настройки в Настройки компоновщика. Я вообще думал, что это должно быть что-то вроде этого:
НастройкиКомпоновщика = Отчет.КомпоновщикНастроек.Настройки;
	Для Каждого ЭлементНастроек Из ЭлементыПользовательскихНастроек Цикл
		
		ИдентификаторНастройки = Настройки.ПолучитьИдентификаторПоОбъекту(ЭлементНастроек);
		Если ТипЗнч(ЭлементНастроек) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда 
			ЭлементОтбора = НастройкиКомпоновщика.Отбор.ПолучитьОбъектПоИдентификатору(ИдентификаторНастройки);
			Если НЕ ЭлементОтбора = Неопределено Тогда 
				
				ЗаполнитьЗначенияСвойств(ЭлементОтбора,ЭлементНастроек);
				
			КонецЕсли;
		КонецЕсли;
		
		Если ТипЗнч(ЭлементНастроек) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда 
			ЭлементЗначениеПараметра = НастройкиКомпоновщика.ПараметрыДанных.ПолучитьОбъектПоИдентификатору(ИдентификаторНастройки);
			Если НЕ ЭлементЗначениеПараметра = Неопределено Тогда 
				
				ЗаполнитьЗначенияСвойств(ЭлементЗначениеПараметра,ЭлементНастроек);
				
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;


Показать


Но я ошибся. Этот код не работает. Подскажите добрые люди как это в типовых делается?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. sommid 14.12.15 14:24 Сейчас в теме
(1) видимо, нужны, чтобы понять, что же это за быстрые настройки (отбор, сортировка и т.п.).
Я, например, использовал для установки отбора по номенклатуре.

//установим "быстрый" отбор по Номенклатуре, если это возможно
		
ОтборПоНоменклатуре = Неопределено;
ПользовательскийОтборПоНоменклатуре = Неопределено; //если Номенклатура явно выведена в быстрые отборы
ПользовательскийОтбор = Неопределено; //если Отбор выведен в быстрые отборы

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

//поиск ПользовательскийОтборПоНоменклатуре И ПользовательскийОтбор
Для Каждого ЭлементНастройки Из Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
	Если ЭлементНастройки.ИдентификаторПользовательскойНастройки = Отчет.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки Тогда
		ПользовательскийОтбор = ЭлементНастройки;
	ИначеЕсли ОтборПоНоменклатуре <> Неопределено И ЭлементНастройки.ИдентификаторПользовательскойНастройки = ОтборПоНоменклатуре.ИдентификаторПользовательскойНастройки Тогда
		ПользовательскийОтборПоНоменклатуре = ЭлементНастройки;
		Прервать;
	КонецЕсли;
КонецЦикла;
Показать
2. tyfmyl 14.12.15 14:09 Сейчас в теме
Вообще работает простой способ
КомпоновщикНастроек.ЗагрузитьНастройки(КомпоновщикНастроек.ПолучитьНастройки())

, но хотелось бы понять зачем нужны эти идентификаторы вообще, если я не могу по заданному объекту в пользовательских настройках получить идентификатор и по нему найти объект в настройках компоновщика и обратно.
4. SagittariusA 28.10.20 11:34 Сейчас в теме
Касаемоего этой части кода:

ЭлементЗначениеПараметра = НастройкиКомпоновщика.ПараметрыДанных.ПолучитьОбъектПоИдентификатору(ИдентификаторНастройки);


Для получения параметра данных (Тип: ЗначениеПараметраКомпоновкиДанных) можно использовать следующее:

 
ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("ИмяИскомогоПараметра");
ЭлементЗначениеПараметра = НастройкиКомпоновщика.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки) 


В итоге вы получите один из элементов (Тип: ЗначениеПараметраНастроекКомпоновкиДанных) коллекции "Элементы" (Тип: КоллекцияЗначенийПараметровКомпоновкиДанных) которая принадлежит параметрам данных (Тип: ЗначенияПараметровДанныхКомпоновкиДанных)

(2)
Прикрепленные файлы:
Оставьте свое сообщение

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