Как добавить отбор в пользовательскую настройку отчета
Мне нужно было, чтобы в отчетах, где есть поле «Заказ покупателя» добавлять при открытии в пользовательскую настройку отбор по ответственному заказа покупателя. В пользовательскую настройку, чтобы этот отбор был виден пользователю в универсальной форме отчета:

Однако выяснилось, что если такого отбора изначально нет в настройках, то и добавить его нельзя, при попытке просто добавить в пользовательские настройки я получал ошибку: «Коллекция пользовательских настроек не может изменять свой состав, так как она связана с настройками компоновки данных».
Я наткнулся на статью на мисте, где рекомендовали добавлять в отбор по-другому:
ПользовательскийОтбор = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Список.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки); ЭлементОтбора = ПользовательскийОтбор.Элементы.Добавить();
Но увы, этот код не работал, потому что ИдентификаторПользовательскойНастройки был пустой строкой. Этот же метод рекомендовался и на инфостарте в подробной статье про пользовательские настройки.
Я попытался прочитать еще одну умную статью на инфостарте, но не одолел её.
И тут мне пришла в голову идея — добавить в отбор мое поле, может тогда оно появится в пользовательских настройках?
С первого раза не сработало, потому что я не задал идентификатор пользовательской настройки. Оказывается, если его задать, то отбор появится и в пользовательских настройках!
ИскПоле = Новый ПолеКомпоновкиДанных("ЗаказПокупателя.Ответственный"); Эл = Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Эл.ЛевоеЗначение = ИскПоле; Эл.Использование = ложь; //По умолчанию истина Эл.ИдентификаторПользовательскойНастройки = Строка(Новый УникальныйИдентификатор); //Обязательно, иначе не создастся Эл = НайтиПользовательскуюНастройку(ИскПоле); //Тут у нас гарантированно элемент отбора из пользовательской настройки &НаКлиенте Функция НайтиПользовательскуюНастройку(ИскПоле) Экспорт Для каждого ЭлКД Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл Если ЭлКД.ЛевоеЗначение = ИскПоле Тогда ИдентификаторЭл = ЭлКД.ИдентификаторПользовательскойНастройки; Эл = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторЭл); Возврат Эл; КонецЕсли; КонецЦикла; КонецФункции
Чудеса, да и только!
Среда: УНФ 1.6.27.167. Объем: 1.5 час.

Свежие комментарии