Имя: Пароль:
1C
1С v8
Обычные формы. СКД отбор по владельцу
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) В твоем примере возни больше, а эффект тот же. И, кстати, суть примерна та же - даже запрос такой же (только у меня запрос к свойствам характеристик номенклатуры).
2 + 2 = 3.9999999999999999999999999999999...