Как Перебрать ХранилищеВариантовНастроек?
Собсна сабж. Есть БП30 со множеством внешних отчетов со множеством сохраненных пользовательских настроек ВАРИАНТОВ этих отчетов. При обновлении конфы они любят пропасть. Хотелось бы их выдернуть. Но как?
В справочнике "СохраненныеНастройки" этих настроек нет.
На регистре "НастройкиВариантовОтчетов" тоже.
Судя по прочитанному в интернетах, без явного указания хранилища, они должны быть в хранилище ХранилищеВариантовНастроек.
Но вот беда. Я нигде не нашёл как его можно обойти.
У него есть метод .Загрузить() Которому надо явно указать ключ объекта и ключ настройки.
А взять их, похоже, собственно, негде...
Не, можно, конечно, попробовать руками из самой базы повыдёргивать, но хотелось бы как-нить попрощще.
В справочнике "СохраненныеНастройки" этих настроек нет.
На регистре "НастройкиВариантовОтчетов" тоже.
Судя по прочитанному в интернетах, без явного указания хранилища, они должны быть в хранилище ХранилищеВариантовНастроек.
Но вот беда. Я нигде не нашёл как его можно обойти.
У него есть метод .Загрузить() Которому надо явно указать ключ объекта и ключ настройки.
А взять их, похоже, собственно, негде...
Не, можно, конечно, попробовать руками из самой базы повыдёргивать, но хотелось бы как-нить попрощще.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(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].Представление);
//ХПНО_НовыйКлючОбъекта = Строка(Новый УникальныйИдентификатор);
ХранилищеПользовательскихНастроекОтчетов.Сохранить(ХПНО_КлючОбъекта, ХПНО_КлючНастроек, ХПНО_ВариантНастроек, ХПНО_ТекОписание, ПолеВводаПриемник); //--- так тоже работает или не работает, хзю, короче
КонецЕсли;
КонецЦикла;
ПроанализироватьВариантыНаСервере();
КонецПроцедуры
Показать
(3)
ХВО_Выборка = ХранилищеВариантовОтчетов.Выбрать(ХВО_Отбор);
не работает, если в конфе явно указано хранилище вариантов отчетов.
Метод не обнаружен.
Это почти мой случай. В текущей бухе оно явно задано.
К счастью, обнаружились, что конфа которую я обновляю, достаточно древняя и там хранилище вариантов ещё не задано. Но это всё же моё везение.
Вопрос про ситуацию, когда момент установки параметра успешно просохачен и .Выбрать() уже не работает.
ХВО_Выборка = ХранилищеВариантовОтчетов.Выбрать(ХВО_Отбор);
не работает, если в конфе явно указано хранилище вариантов отчетов.
Метод не обнаружен.
Это почти мой случай. В текущей бухе оно явно задано.
К счастью, обнаружились, что конфа которую я обновляю, достаточно древняя и там хранилище вариантов ещё не задано. Но это всё же моё везение.
Вопрос про ситуацию, когда момент установки параметра успешно просохачен и .Выбрать() уже не работает.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот