Как Перебрать ХранилищеВариантовНастроек?

1. slicem 11 24.03.25 12:23 Сейчас в теме
Собсна сабж. Есть БП30 со множеством внешних отчетов со множеством сохраненных пользовательских настроек ВАРИАНТОВ этих отчетов. При обновлении конфы они любят пропасть. Хотелось бы их выдернуть. Но как?

В справочнике "СохраненныеНастройки" этих настроек нет.
На регистре "НастройкиВариантовОтчетов" тоже.

Судя по прочитанному в интернетах, без явного указания хранилища, они должны быть в хранилище ХранилищеВариантовНастроек.
Но вот беда. Я нигде не нашёл как его можно обойти.
У него есть метод .Загрузить() Которому надо явно указать ключ объекта и ключ настройки.
А взять их, похоже, собственно, негде...
Не, можно, конечно, попробовать руками из самой базы повыдёргивать, но хотелось бы как-нить попрощще.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user-z99999 78 24.03.25 12:34 Сейчас в теме
(1) e1cib/list/РегистрСведений.НастройкиВариантовОтчетов
3. Tommy82 65 24.03.25 13:38 Сейчас в теме
(1)
&НаСервере
Процедура ПроанализироватьВариантыНаСервере()
	
	Объект.ВариантыОтчетаИсточник.Очистить();
	Объект.ВариантыОтчетаПриемник.Очистить();
	Объект.НастройкиОтчетаИсточник.Очистить();
	Объект.НастройкиОтчетаПриемник.Очистить();
	
	ПараметрыОтбора	=	Новый Структура;
	ПараметрыОтбора.Вставить("Отметка",	Истина);
	
	МассивСтрок	=	Объект.Отчеты.НайтиСтроки(ПараметрыОтбора);
	
	Если МассивСтрок.Количество() > 1 Тогда
		Сообщить("Выбрано больше одной строки");
		Возврат;
	ИначеЕсли МассивСтрок.Количество() = 0 Тогда
		Сообщить("Ничего не выбрано");
		Возврат;
	КонецЕсли;
	
	ОтчетНаименование	=	МассивСтрок[0].ОтчетНаименование;//Остатки и обороты склада
	ОтчетИмя			=	МассивСтрок[0].ОтчетИмя;//ОстаткиИОборотыСклада
	
	ТекОтчетОбъектМетаданных	=	Метаданные.Отчеты.Найти(МассивСтрок[0].ОтчетИмя);
	
	ПолеВводаНаименованиеОтчета	=	"Отчет." + ОтчетИмя;//Отчет.ОстаткиИОборотыСклада
	
	//ИСТОЧНИК
	
	ПолеВводаИсточник	=	СокрЛП(Объект.ПользовательИсточник.Код);
	
	//ИСТОЧНИК Найденные Варианты

	ХВО_Отбор	=	Новый Структура;
	ХВО_Отбор.Вставить("КлючОбъекта",	ПолеВводаНаименованиеОтчета);
	ХВО_Отбор.Вставить("Пользователь",	ПолеВводаИсточник);
	
	ХВО_Выборка	=	ХранилищеВариантовОтчетов.Выбрать(ХВО_Отбор);
	
	Пока ХВО_Выборка.Следующий() Цикл
		ТекСтр				=	Объект.ВариантыОтчетаИсточник.Добавить();
		ТекСтр.Вариант		=	ХВО_Выборка.Представление;
		ТекСтр.КлючНастроек	=	ХВО_Выборка.КлючНастроек;
		ТекСтр.КлючОбъекта	=	ХВО_Выборка.КлючОбъекта;
		//Сообщить(ХВО_Выборка.Представление);
	КонецЦикла;
	
	Объект.ВариантыОтчетаИсточник.Сортировать("Вариант Возр");
	
	//ИСТОЧНИК Найденные настройки

	ХПНО_Отбор	=	Новый Структура;
	ХПНО_Отбор.Вставить("Пользователь",	ПолеВводаИсточник);		
	ХПНО_Выборка	=	ХранилищеПользовательскихНастроекОтчетов.Выбрать(ХПНО_Отбор);
	
	Пока ХПНО_Выборка.Следующий() Цикл
		Если СтрНачинаетсяС(ХПНО_Выборка.КлючОбъекта, ПолеВводаНаименованиеОтчета) Тогда
			ТекСтр				=	Объект.НастройкиОтчетаИсточник.Добавить();
			ТекСтр.Настройка	=	ХПНО_Выборка.Представление;		
			ТекСтр.КлючНастроек	=	ХПНО_Выборка.КлючНастроек;
			ТекСтр.КлючОбъекта	=	ХПНО_Выборка.КлючОбъекта;
		КонецЕсли;
		//Сообщить(ХПНО_Выборка.Представление);
	КонецЦикла;
	
	Объект.НастройкиОтчетаИсточник.Сортировать("Настройка Возр");
	
	//ПРИЕМНИК
	
	ПолеВводаПриемник	=	СокрЛП(Объект.ПользовательПриемник.Код);

	//ПРИЕМНИК Найденные Варианты

	ХВО_Отбор	=	Новый Структура;
	ХВО_Отбор.Вставить("КлючОбъекта",	ПолеВводаНаименованиеОтчета);
	ХВО_Отбор.Вставить("Пользователь",	ПолеВводаПриемник);
	
	ХВО_Выборка	=	ХранилищеВариантовОтчетов.Выбрать(ХВО_Отбор);
	
	Пока ХВО_Выборка.Следующий() Цикл
		ТекСтр			=	Объект.ВариантыОтчетаПриемник.Добавить();
		ТекСтр.Вариант	=	ХВО_Выборка.Представление;
		ТекСтр.КлючНастроек	=	ХВО_Выборка.КлючНастроек;
		ТекСтр.КлючОбъекта	=	ХВО_Выборка.КлючОбъекта;		
		//Сообщить(ХВО_Выборка.Представление);
	КонецЦикла;
	
	Объект.ВариантыОтчетаПриемник.Сортировать("Вариант Возр");
	
	//ПРИЕМНИК Найденные настройки	
	
	ХПНО_Отбор	=	Новый Структура;
	ХПНО_Отбор.Вставить("Пользователь",	ПолеВводаПриемник);		
	ХПНО_Выборка	=	ХранилищеПользовательскихНастроекОтчетов.Выбрать(ХПНО_Отбор);
	
	Пока ХПНО_Выборка.Следующий() Цикл
		Если СтрНачинаетсяС(ХПНО_Выборка.КлючОбъекта, ПолеВводаНаименованиеОтчета) Тогда
			ТекСтр				=	Объект.НастройкиОтчетаПриемник.Добавить();
			ТекСтр.Настройка	=	ХПНО_Выборка.Представление;
			ТекСтр.КлючНастроек	=	ХПНО_Выборка.КлючНастроек;
			ТекСтр.КлючОбъекта	=	ХПНО_Выборка.КлючОбъекта;
		КонецЕсли;
		//Сообщить(ХПНО_Выборка.Представление);
	КонецЦикла;
	
	Объект.НастройкиОтчетаПриемник.Сортировать("Настройка Возр");
	
	//ХВО_Источник	=	ХранилищеВариантовОтчетов.ПолучитьСписок(ПолеВводаНаименованиеОтчета,	ПолеВводаИсточник); 
	//ХВО_Приемник	=	ХранилищеВариантовОтчетов.ПолучитьСписок(ПолеВводаНаименованиеОтчета,	ПолеВводаПриемник); 
	////
	//ХПНО_Источник	=	ХранилищеПользовательскихНастроекОтчетов.ПолучитьСписок(ПолеВводаНаименованиеОтчета+ "/44e00e91-2f90-4de2-9d4b-7f5077bc22fe", ПолеВводаИсточник);
	//
	//ХПНО_Приемник	=	ХранилищеПользовательскихНастроекОтчетов.ПолучитьСписок(ПолеВводаНаименованиеОтчета+ "/44e00e91-2f90-4de2-9d4b-7f5077bc22fe", ПолеВводаПриемник);
	
КонецПроцедуры
Показать


&НаСервере
Процедура СкопироватьНаСервере()
	
	ПараметрыОтбора	=	Новый Структура;
	ПараметрыОтбора.Вставить("Отметка",	Истина);
	
	МассивСтрок	=	Объект.НастройкиОтчетаИсточник.НайтиСтроки(ПараметрыОтбора);
	
	Если МассивСтрок.Количество() > 1 Тогда
		Сообщить("Выбрано больше одной строки");
		Возврат;
	ИначеЕсли МассивСтрок.Количество() = 0 Тогда
		Сообщить("Ничего не выбрано");
		Возврат;
	КонецЕсли;
	
	ПолеВводаИсточник	=	СокрЛП(Объект.ПользовательИсточник.Код);

	ПолеВводаПриемник	=	СокрЛП(Объект.ПользовательПриемник.Код);
	
	
	
	//ХВО_СписокВариантов	=	ХранилищеВариантовОтчетов.ПолучитьСписок(ПолеВводаНаименованиеОтчета,	ПолеВводаИсточник); 

	//ХВО_СписокВариантов	=	ХранилищеВариантовОтчетов.ПолучитьСписок("Отчет.ОстаткиИОборотыСклада", "Худяков Дмитрий");
	//ХВО_ТекОписание		=	ХранилищеВариантовОтчетов.ПолучитьОписание(ПолеВводаНаименованиеОтчета,	ХВО_СписокВариантов[0].Значение,	ПолеВводаИсточник);
	//ХВО_КлючНастроек	=	ХВО_ТекОписание.КлючНастроек;	//112dec8d-651d-45f1-8172-cf1acabfd800
	//ХВО_КлючОбъекта		=	ХВО_ТекОписание.КлючОбъекта;	//Отчет.ОтчетПоПоступлениям
	//ХВО_Представление	=	ХВО_ТекОписание.Представление;	//Вариант Космодром-ГАЗ
	//ХВО_Пользователь	=	ХВО_ТекОписание.Пользователь;	//Степанова Татьяна
	
	////НастройкиКомпоновкиДанных
	//ХВО_ВариантНастроек	=	ХранилищеВариантовОтчетов.Загрузить(ХВО_КлючОбъекта,	ХВО_КлючНастроек,	ХВО_ТекОписание,	ХВО_Пользователь);		
	//
	//ХранилищеВариантовОтчетов.УстановитьОписание(ХВО_КлючОбъекта, ХВО_КлючНастроек, ХВО_ТекОписание, ХВО_Пользователь);
	//
	////ХВО_ОН = Новый ОписаниеНастроек;
	////ХВО_ОН.Представление	=	сокрЛП(ХВО_СписокВариантов[0].Представление);
	//
	////ХранилищеВариантовОтчетов.Сохранить(ХВО_КлючОбъекта, ХВО_КлючНастроек, ХВО_ВариантНастроек, ХВО_ОН, ПолеВводаПриемник);
	//
	//ХранилищеВариантовОтчетов.Сохранить(ХВО_КлючОбъекта, ХВО_КлючНастроек, ХВО_ВариантНастроек, ХВО_ТекОписание, ПолеВводаПриемник);

	
	Для Каждого НОИ	ИЗ	Объект.НастройкиОтчетаИсточник Цикл
		Если НОИ.Отметка	Тогда
			
			ПолеВводаНаименованиеОтчета	=	Лев(НОИ.КлючОбъекта, СтрДлина(НОИ.КлючОбъекта) - 37);
			
			НекоеЗначение	=	Прав(НОИ.КлючОбъекта, 36);
			
			//ХВО
			
			ХВО_СписокВариантов	=	ХранилищеВариантовОтчетов.ПолучитьСписок(ПолеВводаНаименованиеОтчета,	ПолеВводаИсточник);
			
			ХВО_ТекОписание		=	ХранилищеВариантовОтчетов.ПолучитьОписание(ПолеВводаНаименованиеОтчета,	НекоеЗначение,	ПолеВводаИсточник);
			ХВО_КлючНастроек	=	ХВО_ТекОписание.КлючНастроек;	//112dec8d-651d-45f1-8172-cf1acabfd800
			ХВО_КлючОбъекта		=	ХВО_ТекОписание.КлючОбъекта;	//Отчет.ОтчетПоПоступлениям
			ХВО_Представление	=	ХВО_ТекОписание.Представление;	//Вариант Космодром-ГАЗ
			ХВО_Пользователь	=	ХВО_ТекОписание.Пользователь;	//Степанова Татьяна
			
			//НастройкиКомпоновкиДанных
			ХВО_ВариантНастроек	=	ХранилищеВариантовОтчетов.Загрузить(ХВО_КлючОбъекта,	ХВО_КлючНастроек,	ХВО_ТекОписание,	ХВО_Пользователь);		
			
			ХранилищеВариантовОтчетов.УстановитьОписание(ХВО_КлючОбъекта, ХВО_КлючНастроек, ХВО_ТекОписание, ХВО_Пользователь);
			
			//ХВО_ОН = Новый ОписаниеНастроек;
			//ХВО_ОН.Представление	=	сокрЛП(ХВО_СписокВариантов[0].Представление);
			
			//ХранилищеВариантовОтчетов.Сохранить(ХВО_КлючОбъекта, ХВО_КлючНастроек, ХВО_ВариантНастроек, ХВО_ОН, ПолеВводаПриемник);
			
			ХранилищеВариантовОтчетов.Сохранить(ХВО_КлючОбъекта, ХВО_КлючНастроек, ХВО_ВариантНастроек, ХВО_ТекОписание, ПолеВводаПриемник);
			
			//ХПНО
			
			ХПНО_КлючОбъекта		=	ХВО_КлючОбъекта + "/" + ХВО_КлючНастроек;
			ХПНО_СписокВариантов	=	ХранилищеПользовательскихНастроекОтчетов.ПолучитьСписок(ХПНО_КлючОбъекта,	ПолеВводаИсточник); 
			
			ХПНО_ТекОписание		=	ХранилищеПользовательскихНастроекОтчетов.ПолучитьОписание(ХПНО_КлючОбъекта,	ХПНО_СписокВариантов[0].Значение,	ПолеВводаИсточник);

			ХПНО_КлючНастроек		=	ХПНО_ТекОписание.КлючНастроек;	//112dec8d-651d-45f1-8172-cf1acabfd800
			ХПНО_КлючОбъекта		=	ХПНО_ТекОписание.КлючОбъекта;	//Отчет.ОтчетПоПоступлениям
			ХПНО_Представление		=	ХПНО_ТекОписание.Представление;	//Вариант Космодром-ГАЗ
			ХПНО_Пользователь		=	ХПНО_ТекОписание.Пользователь;	//Степанова Татьяна
			
			//ПользовательскиеНастройкиКомпоновкиДанных
			ХПНО_ВариантНастроек	=	ХранилищеПользовательскихНастроекОтчетов.Загрузить(ХПНО_КлючОбъекта,	ХПНО_КлючНастроек,	ХПНО_ТекОписание,	ХПНО_Пользователь);		
			
			ХранилищеПользовательскихНастроекОтчетов.УстановитьОписание(ХПНО_КлючОбъекта, ХПНО_КлючНастроек, ХПНО_ТекОписание, ХПНО_Пользователь);
			
			ХПНО_ОН = Новый ОписаниеНастроек;
			ХПНО_ОН.Представление	=	сокрЛП(ХПНО_СписокВариантов[0].Представление);
			
			//ХПНО_НовыйКлючОбъекта		=	Строка(Новый УникальныйИдентификатор);
			
			ХранилищеПользовательскихНастроекОтчетов.Сохранить(ХПНО_КлючОбъекта, ХПНО_КлючНастроек, ХПНО_ВариантНастроек, ХПНО_ТекОписание, ПолеВводаПриемник);	//--- так тоже работает или не работает, хзю, короче			
			
		КонецЕсли;
	КонецЦикла;
	
	ПроанализироватьВариантыНаСервере();
	
КонецПроцедуры
Показать
4. slicem 11 25.03.25 09:13 Сейчас в теме
(3)
ХВО_Выборка = ХранилищеВариантовОтчетов.Выбрать(ХВО_Отбор);

не работает, если в конфе явно указано хранилище вариантов отчетов.
Метод не обнаружен.
Это почти мой случай. В текущей бухе оно явно задано.
К счастью, обнаружились, что конфа которую я обновляю, достаточно древняя и там хранилище вариантов ещё не задано. Но это всё же моё везение.

Вопрос про ситуацию, когда момент установки параметра успешно просохачен и .Выбрать() уже не работает.
Оставьте свое сообщение

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