|
Обычные формы. СКД отбор по владельцу | ☑ | ||
---|---|---|---|---|
0
Скромный программер
29.11.21
✎
07:02
|
В общем, опишу проблему и решение на обычных формах, а то столкнулся и не нашел в интернете.
ПРОБЛЕМА: есть СКД с характеристиками номенклатуры, к которым подвязаны свойства характеристик и при отборе, когда слева указывается конкретное свойство, справа открывается справочник ЗначенияСвойствОбъектов без отбора по конкретному свойству, т.е. выводятся вообще все значения. РЕШЕНИЕ: создаем форму отчета и помещаем на него табличное поле с привязкой к отбору СКД. Находим нужную ячейку "Правое значение" (их там много и в моем случае - это вторая сверху - через отладчик найдете нужную) и открываем ее обработчик НачалоВыбора. В этом обработчике пишем вот этот код: Если ТипЗнч(ЭлементыФормы.Отбор.ТекущаяСтрока.ПравоеЗначение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") И Лев(ЭлементыФормы.Отбор.ТекущаяСтрока.ЛевоеЗначение,27) = "ХарактеристикаНоменклатуры." Тогда Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ Ссылка КАК Свойство |ИЗ ПланВидовХарактеристик.СвойстваОбъектов |ГДЕ НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_ХарактеристикиНоменклатуры) | И Наименование = &Наименование |"; Запрос.УстановитьПараметр("Наименование", Сред(ЭлементыФормы.Отбор.ТекущаяСтрока.ЛевоеЗначение,28)); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда Элемент.ВыборПоВладельцу = Выборка.Свойство; КонецЕсли; КонецЕсли; |
|||
1
ДенисЧ
29.11.21
✎
07:32
|
"Мой гений дарит вам"?
|
|||
2
osa1C
29.11.21
✎
07:34
|
>>> "их там много и в моем случае - это вторая сверху - через отладчик найдете нужную "
чет ржу, пошел искать в отладчике )))) |
|||
3
Скромный программер
29.11.21
✎
08:26
|
(1) Если можешь что-то эффективнее предложить, то давай. А если нет, то не порти воздух.
|
|||
4
asady
29.11.21
✎
08:51
|
(0) это известная шняга. Сам в свое время решал эту задачу.
Обязательно создай свою форму настроек - создай форму настроек по умолчанию. Нужно переопределить обработчик события выбор у поля Значение. Поищу код... |
|||
5
asady
29.11.21
✎
08:55
|
(4)+
В модуле формы "ФормаНастроек" пропиши код: Процедура ОтборПравоеЗначениеДляКраткогоОтображенияЭлементаНачалоВыбора(Элемент, СтандартнаяОбработка) Если ТипЗнч(Элемент.Значение) = Тип("СправочникСсылка.ЗначенияСвойствОбъектов") тогда СтандартнаяОбработка = Ложь; тСвойство = СтрЗаменить(""+ЭлементыФормы.Отбор.ТекущиеДанные.ЛевоеЗначение,"Номенклатура.",""); тСвойство = СтрЗаменить(тСвойство," (свойство)",""); тСвойство = СтрЗаменить(тСвойство,"[",""); тСвойство = СтрЗаменить(тСвойство,"]",""); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СвойстваОбъектов.Ссылка |ИЗ | ПланВидовХарактеристик.СвойстваОбъектов КАК СвойстваОбъектов |ГДЕ | СвойстваОбъектов.Наименование = &Наименование | И СвойстваОбъектов.НазначениеСвойства = ЗНАЧЕНИЕ(ПланВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Номенклатура)"; Запрос.УстановитьПараметр("Наименование",тСвойство); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ФормаВыбора = Справочники.ЗначенияСвойствОбъектов.ПолучитьФормуВыбора(); ФормаВыбора.Отбор.Владелец.Установить(Выборка.Ссылка); ФормаВыбора.ВладелецФормы = Элемент; ФормаВыбора.ОткрытьМодально(); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриОткрытии() ОбработкаНачалоВыбора = Новый Действие("ОтборПравоеЗначениеДляКраткогоОтображенияЭлементаНачалоВыбора"); ЭлементыФормы.Отбор.Колонки.ПравоеЗначениеДляКраткогоОтображенияЭлемента.ЭлементУправления.УстановитьДействие("НачалоВыбора",ОбработкаНачалоВыбора); КонецПроцедуры |
|||
6
Скромный программер
29.11.21
✎
10:23
|
(5) В твоем примере возни больше, а эффект тот же. И, кстати, суть примерна та же - даже запрос такой же (только у меня запрос к свойствам характеристик номенклатуры).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |