Работа с элементом формы, связанным с отбором настроек компоновщика
Здравствуйте, уважаемые форумчане!
Возникла необходимость поместить на форму динамического списка справочника "Партнеры" в УТ контрол, позволяющий задавать отборы элементов списка по значениям дополнительных свойств. Каждая строка должна содержать дополнительное свойство, вид сравнения и значение отбора. Причем вызов команды "Настроить список" по кнопке "Еще" начальство не устраивает - хотят, чтобы на той же форме, где список, задавался и произвольный отбор по свойствам. Я решил, что для это цели подходит объект КомпоновщикНастроек.
Я вывел на форму списка контрол с путем "КомпоновщикНастроек.Настройки.Отбор".
И в него можно вносить строки, у которых поле "ЛевоеЗначение" соответствует реквизитам справочника "Партнеры", но есть необходимость ограничить набор полей отбора ТОЛЬКО дополнительными свойствами. И сделать это у меня никак не получается. Пытался задать событие ПередНачаломИзменения:
ТекущаяСтрока = Элемент.ТекущаяСтрока;
В переменной ТекущаяСтрока возвращается числовой параметр типа "ИдентификаторКомпоновкиДанных". По идее, хотелось бы прописать выбор из списка дополнительных свойств, результат которого после выбора проставить в поле "ЛевоеЗначение" редактируемой строки. Но как потом по этому идентификатору найти эту строку в отборе настроек компоновщика? Не нашел я такого поиска! пробовал по-другому: задать полю "ЛевоеЗначение" программно список выбора - тоже не получилось!
Может, кто-нибудь сталкивался с таким объектом - подскажите, пожалуйcта, возможно ли решить эту задачу?
Заранее благодарю
Возникла необходимость поместить на форму динамического списка справочника "Партнеры" в УТ контрол, позволяющий задавать отборы элементов списка по значениям дополнительных свойств. Каждая строка должна содержать дополнительное свойство, вид сравнения и значение отбора. Причем вызов команды "Настроить список" по кнопке "Еще" начальство не устраивает - хотят, чтобы на той же форме, где список, задавался и произвольный отбор по свойствам. Я решил, что для это цели подходит объект КомпоновщикНастроек.
Я вывел на форму списка контрол с путем "КомпоновщикНастроек.Настройки.Отбор".
И в него можно вносить строки, у которых поле "ЛевоеЗначение" соответствует реквизитам справочника "Партнеры", но есть необходимость ограничить набор полей отбора ТОЛЬКО дополнительными свойствами. И сделать это у меня никак не получается. Пытался задать событие ПередНачаломИзменения:
ТекущаяСтрока = Элемент.ТекущаяСтрока;
В переменной ТекущаяСтрока возвращается числовой параметр типа "ИдентификаторКомпоновкиДанных". По идее, хотелось бы прописать выбор из списка дополнительных свойств, результат которого после выбора проставить в поле "ЛевоеЗначение" редактируемой строки. Но как потом по этому идентификатору найти эту строку в отборе настроек компоновщика? Не нашел я такого поиска! пробовал по-другому: задать полю "ЛевоеЗначение" программно список выбора - тоже не получилось!
Может, кто-нибудь сталкивался с таким объектом - подскажите, пожалуйcта, возможно ли решить эту задачу?
Заранее благодарю
По теме из базы знаний
- Отборы в отчётах. Нюансы работы компоновщика настроек.
- Программное заполнение пользовательских параметров и отборов СКД
- Программная работа с настройками СКД
- Автоматизация импорта значений в отбор типовых отчетов конфигурации 1С: Бухгалтерия предприятия 3.0
- Отчеты с общей формой отчета. Типовые сценарии
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вот таким путем:
На контрол с путем "КомпоновщикНастроек.Настройки.Отбор" повесил событие ПередНачаломИзменения:
Для оптимизации можно при открытии формы получить список доп.реквизитов, чтобы не делать это каждый раз перед изменением строки
На контрол с путем "КомпоновщикНастроек.Настройки.Отбор" повесил событие ПередНачаломИзменения:
&НаКлиенте
Процедура КомпоновщикНастроекНастройкиОтборПередНачаломИзменения(Элемент, Отказ)
ИдентификаторКомпоновкиДанных = Элемент.ТекущаяСтрока;
Если ИдентификаторКомпоновкиДанных = Неопределено Тогда
Возврат;
КонецЕсли;
ИдентификаторКомпоновкиДанных = Элемент.ТекущаяСтрока;
Если ТекущаяКолонка.Имя = "КомпоновщикНастроекНастройкиОтборЛевоеЗначение" Тогда
Отказ = Истина;
СписокРеквизитов = ПолучитьСписокРеквизитов();
Если СписокРеквизитов.Количество() = 0 Тогда
Сообщить("Не обнаружены реквизиты!");
Возврат;
КонецЕсли;
//Запуск выбора реквизита
Пар = Новый Структура("ИдентификаторКомпоновкиДанных", ИдентификаторКомпоновкиДанных);
Оповещение = Новый ОписаниеОповещения("КомпоновщикНастроекНастройкиОтбор_ПослеВыбораРеквизита", ЭтотОбъект, Пар);
ПоказатьВыборИзСписка(Оповещение, СписокРеквизитовПортретаКлиента, Элемент);
КонецЕсли;
КонецПроцедуры
//Обработка выбора реквизита - изменение значения ЛевоеЗначение редактируемой строки
&НаКлиенте
Процедура КомпоновщикНастроекНастройкиОтбор_ПослеВыбораРеквизита(РезВыбора, Пар) Экспорт
Если РезВыбора = Неопределено Тогда
Возврат;
КонецЕсли;
ИмяРеквизита = РезВыбора.Значение;
ИдентификаторКомпоновкиДанных = Пар.ИдентификаторКомпоновкиДанных;
//Проблема была в этом - я никак не мог получить элемент отбора, соответствующий текущей строке отбора настроек компоновщика, пока не нашел в описании эту функцию
ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.ПолучитьОбъектПоИдентификатору(ИдентификаторКомпоновкиДанных);
Если ЭлементОтбора <> "Неопределено" Тогда
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяРеквизита);
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
//Получение наименований дополнительных реквизитов, преобразованных для последующего приведения к полю компоновки данных
&НаСервере
Функция ПолучитьСписокРеквизитов()
УстановитьПривилегированныйРежим(Истина);
НаборСвойствКлиенты = УправлениеСвойствами.НаборСвойствПоИмени("Справочник_Партнеры_Клиенты");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеРеквизиты.Свойство.Наименование КАК Наименование
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты
|ГДЕ
| НЕ ДополнительныеРеквизиты.Свойство.ПометкаУдаления
| И ДополнительныеРеквизиты.Ссылка = &НаборСвойствКлиенты
|";
Запрос.Параметры.Вставить("НаборСвойствКлиенты", НаборСвойствКлиенты);
Выборка = Запрос.Выполнить().Выбрать();
Рез = Новый СписокЗначений;
Пока Выборка.Следующий() Цикл
Рез.Добавить("Партнер.[" + Выборка.Наименование + "]");
КонецЦикла;
Возврат Рез;
КонецФункции
ПоказатьДля оптимизации можно при открытии формы получить список доп.реквизитов, чтобы не делать это каждый раз перед изменением строки
Прошу прощения, подправил запрос в функции ПолучитьСписокРеквизитов() - не все наименования воспринимались как поля компоновки данных:
"ВЫБРАТЬ
| ДополнительныеРеквизиты.Свойство КАК Свойство,
| ПРЕДСТАВЛЕНИЕ(ДополнительныеРеквизиты.Свойство) КАК Наименование
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты
|ГДЕ
| НЕ ДополнительныеРеквизиты.Свойство.ПометкаУдаления
| И ДополнительныеРеквизиты.Ссылка = &НаборСвойствКлиенты
|";
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот