Получить значение из КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных
Как программно получить значение из КоллекцияЭлементовПользовательскихНастроекКомпоновкиДанных. Нужно получить значение параметра организация, левое значение неопределено а в правом значении может быть не только организация но и список организаций. Как найти в этой коллекции нужное значение?
Прикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Посмотрите пожалуйста, правильно ли я понял?
ОргПроверка = Новый ПолеКомпоновкиДанных("Организация");
Для каждого СтрНастроек Из КомпоновщикНастроекКД.Настройки.Отбор.Элементы Цикл
Если СтрНастроек.ЛевоеЗначение = ОргПроверка Тогда
ИдентификаторОрганизации = СтрНастроек.ИдентификаторПользовательскойНастройки;
КонецЕсли;
КонецЦикла;
ВыбранноеЗначениеОрганизации = КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторОрганизации);
(7) Так?
ОргПроверка = Новый ПолеКомпоновкиДанных("Организация");
Для каждого СтрНастроек Из КомпоновщикНастроекКД.Настройки.Отбор.Элементы Цикл
Если СтрНастроек.ЛевоеЗначение = ОргПроверка Тогда
ИдентификаторОрганизации = СтрНастроек.ИдентификаторПользовательскойНастройки;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ИдентификаторОрганизации = Неопределено Тогда
//....
КонецЕсли;
Показать
(1) Сразу не посмотрел скриншот, потому что на телефоне.
Думал действительно параметр, а тут элемент отбора.
Индексы элементов меняются?
CписокЗначенийСправочникОрганизации = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Получить(11).ПравоеЗначение;
Если ТипЗнч(CписокЗначенийСправочникОрганизации) = Тип("СписокЗначений") Тогда
...
Иначе /// ИначеЕсли ТипЗнч(CписокЗначенийСправочникОрганизации) = Тип("СправочникСсылка.Организации")
....
КонецЕсли;
P.S. Хотя если пользователь воспользуется "Изменить вариант", то по * пойдет и индекс и идентификатор.
Думал действительно параметр, а тут элемент отбора.
Индексы элементов меняются?
CписокЗначенийСправочникОрганизации = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Получить(11).ПравоеЗначение;
Если ТипЗнч(CписокЗначенийСправочникОрганизации) = Тип("СписокЗначений") Тогда
...
Иначе /// ИначеЕсли ТипЗнч(CписокЗначенийСправочникОрганизации) = Тип("СправочникСсылка.Организации")
....
КонецЕсли;
P.S. Хотя если пользователь воспользуется "Изменить вариант", то по * пойдет и индекс и идентификатор.
Функция ПолучитьПараметрКомпоновки(ПараметрИмя, Компоновщик, ПроверятьИспользование = Истина, СообщитьОбОшибке = Истина) Экспорт
ПараметрПоле = Новый ПараметрКомпоновкиДанных(ПараметрИмя);
ПараметрКд = Неопределено;
НастройкиКомпоновки = Компоновщик.ПолучитьНастройки();
Для каждого ЗнчПараметраНастроекКд Из НастройкиКомпоновки.ПараметрыДанных.Элементы Цикл
Если ЗнчПараметраНастроекКд.Параметр = ПараметрПоле
И ТипЗнч(ЗнчПараметраНастроекКд) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Если ПроверятьИспользование Тогда
Если ЗнчПараметраНастроекКд.Использование Тогда
ПараметрКд = ЗнчПараметраНастроекКд;
КонецЕсли;
Иначе
ПараметрКд = ЗнчПараметраНастроекКд;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Если ПараметрКд = Неопределено И СообщитьОбОшибке Тогда
ТекстСообщения = "В настройки выбранного варианта отчета не включен параметр " +""""+ПараметрИмя+""""+
Символы.ПС + "Включите указанный параметр в настройках или обратитесь к разработчику!";
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ТекстСообщения;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецЕсли;
Возврат ПараметрКд;
КонецФункции
Функция ПолучитьПараметрКомпоновкиПользовательскихНастроек(ПараметрИмя, Компоновщик, ПроверятьИспользование = Истина) Экспорт
ПараметрПоле = Новый ПараметрКомпоновкиДанных(ПараметрИмя);
ПараметрКд = Неопределено;
НастройкиКомпоновки = Компоновщик.ПользовательскиеНастройки;
// При поиске параметра отбора пишем новую функцию и заменеям
// "ЗначениеПараметраНастроекКомпоновкиДанных" на "ЭлементОтбораКомпоновкиДанных"
// ПараметрИмя может быть составным например "Номенклатура.Марка"
Для каждого ЗнчПараметраНастроекКд Из НастройкиКомпоновки.Элементы Цикл
Если ЗнчПараметраНастроекКд.Параметр = ПараметрПоле
И ТипЗнч(ЗнчПараметраНастроекКд) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Если ПроверятьИспользование Тогда
Если ЗнчПараметраНастроекКд.Использование Тогда
ПараметрКд = ЗнчПараметраНастроекКд;
КонецЕсли;
Иначе
ПараметрКд = ЗнчПараметраНастроекКд;
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ПараметрКд;
КонецФункции
// Пример использования
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
// Проверка "критичных" пользовтельских параметров СКД.
ПараметрКд = ПолучитьПараметрКомпоновкиПользовательскихНастроек("Периодичность", КомпоновщикНастроек, Истина); // ПроверятьИспользование = Истина
Если НЕ ПараметрКд = Неопределено Тогда
Если ПараметрКд.Значение = Неопределено Тогда
ПараметрКд.Значение = Перечисления.Периодичность.ПустаяСсылка();
КонецЕсли;
КонецЕсли;
// Проверка инициализации обязательных параметров. Разработчик мог выключить или убрать эти параметры.
ПараметрКд = ПолучитьПараметрКомпоновки("ПериодОтчета", КомпоновщикНастроек, Истина, Истина); // ПроверятьИспользование = Истина, СообщитьОбОшибке = Истина
Если ПараметрКд = Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ПериодОтчета = ПараметрКд.Значение;
ПараметрКд = ПолучитьПараметрКомпоновки("Периодичность", КомпоновщикНастроек, Истина, Истина);
Если ПараметрКд = Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Периодичность = ПараметрКд.Значение;
Если Периодичность = Неопределено Тогда
ТекстСообщения = "Подтвердите выбор параметра ""Периодичность""" +
Символы.ПС + "При последнем выборе значение не было установлено корректно!";
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = ТекстСообщения;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
Показать
Спасибо за наводку.
Написал функцию, которая по полю компоновки возвращает пользовательскую настройку отбора:
Написал функцию, которая по полю компоновки возвращает пользовательскую настройку отбора:
&НаКлиенте
Функция НайтиПользовательскуюНастройку(ИскПоле) Экспорт
Для каждого ЭлКД Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлКД.ЛевоеЗначение = ИскПоле Тогда
ИдентификаторЭл = ЭлКД.ИдентификаторПользовательскойНастройки;
Эл = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторЭл);
Возврат Эл;
КонецЕсли;
КонецЦикла;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот