Имя: Пароль:
1C
1С v8
Установить программный отбор номенклатуры в скидках УТ
0 noffkj
 
04.08.20
15:28
Необходимо программно установить отбор в скидках.
Сам отбор я сделал.

                Настройки = Схема.НастройкиПоУмолчанию;
                КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
                КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
                КомпоновщикНастроекДанных.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
                
                ДоступноеПоле = КомпоновщикНастроекДанных.Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Номенклатура"));
                ЭлементОтбора = КомпоновщикНастроекДанных.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                
                ЭлементОтбора.ЛевоеЗначение = ДоступноеПоле.Поле;
                ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
                ЭлементОтбора.ПравоеЗначение = СтрРезультатПоиска.ГруппаТовараСсылка;;
                ЭлементОтбора.Использование = Истина;

Но куда его записывать в элменте справочника СкидкиНаценки так и не нашел.
Может кто сталкивался. Подскажите.
1 noffkj
 
04.08.20
15:51
УТ 11.4
2 ks_83
 
04.08.20
15:54
ХранилищеНастроекКомпоновкиДанных
3 noffkj
 
04.08.20
16:37
Пробовал.
не работает
Хранилище = Новый ХранилищеЗначения(КомпоновщикНастроекДанных.ПолучитьНастройки());
Скидка.ХранилищеНастроекКомпоновкиДанных = Хранилище;
4 noffkj
 
04.08.20
16:37
Есть такое решение на инфостарте
Для Каждого Строка Из Объект.ТаблСкидок Цикл
        
        ФормаЗаписи = ПолучитьФорму("Справочник.СкидкиНаценки.Форма.ФормаЭлемента");
        
          СтруктураСвойств = Новый Структура; // Структура содержит значения тех реквизитов, которые нужно заполнить на форме нового документа, но которых нет в документе-источнике
          СтруктураСвойств.Вставить("Наименование",""+Строка.Поставщик + " - " +Строка.Соглашение+ ", " +Строка.Скидка+ "%, " +Строка.Группа+ "/" +Строка.Код1+ "/" +Строка.Код2+ "/" +Строка.Код3);
          СтруктураСвойств.Вставить("ЗначениеСкидкиНаценки", Строка.Скидка);
          СтруктураСвойств.Вставить("ВариантОтбораНоменклатуры", ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.ОтборКомпоновкиДанных"));
          
            
          
        
          ФормаЗаписи.Элементы.ОтборПредставление.Видимость = (ФормаЗаписи.Объект.ВариантОтбораНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.ОтборКомпоновкиДанных"));
          
        ЭлементОтбора = ФормаЗаписи.КомпоновщикНастроекОтборПоНоменклатуре.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
        ЭлементОтбора.Использование = Истина;
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.ПравоеЗначение = "цколыотаьб";
        
         СтруктураСвойств.Вставить("КомпоновщикНастроекОтборПоНоменклатуре", ЭлементОтбора);
        
        
        
        ЗаполнитьЗначенияСвойств(ФормаЗаписи.Объект,СтруктураСвойств,"Наименование,ЗначениеСкидкиНаценки,ВариантОтбораНоменклатуры",);
        ФормаЗаписи.Открыть();


    КонецЦикла;
5 noffkj
 
04.08.20
16:57
нет идей?
6 noffkj
 
04.08.20
17:53
И так. Пришлось сделать через жопу.

Сделал скидку руками в режиме предприятие. Далее получил ее отбор. В структуре заменил отбор на созданный программно.

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    СкидкиНаценки.Ссылка КАК Ссылка,
                   |    СкидкиНаценки.ХранилищеНастроекКомпоновкиДанных КАК Хранилище
                   |ИЗ
                   |    Справочник.СкидкиНаценки КАК СкидкиНаценки
                   |ГДЕ
                   |    СкидкиНаценки.Ссылка = &Ссылка";
    Запрос.УстановитьПараметр("Ссылка",Объект.РабочаяСкидка);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Жопа = Выборка.Хранилище.Получить();    
    КонецЦикла;

Настройки = Схема.НастройкиПоУмолчанию;
                КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
                КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
                КомпоновщикНастроекДанных.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
                
                ДоступноеПоле = КомпоновщикНастроекДанных.Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных("Номенклатура"));//.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Получить(0);
                ЭлементОтбора = КомпоновщикНастроекДанных.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                
                ЭлементОтбора.ЛевоеЗначение = ДоступноеПоле.Поле;
                ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии;
                ЭлементОтбора.ПравоеЗначение = СтрРезультатПоиска.ГруппаТовараСсылка;;
                ЭлементОтбора.Использование = Истина;
                
                Жопа.Запрос.Параметры.П_Кэшируется = СтрРезультатПоиска.ГруппаТовараСсылка;
                Жопа.ОтборПоНоменклатуре = КомпоновщикНастроекДанных.Настройки;
                Хранилище = Новый ХранилищеЗначения(Жопа);
                Скидка.ХранилищеНастроекКомпоновкиДанных = Хранилище;
                            
                Попытка
                    Скидка.Записать();
                Исключение
                    СообщениеПользователю = Новый СообщениеПользователю;
                    СообщениеПользователю.Текст = ОписаниеОшибки();
                    СообщениеПользователю.Сообщить();
                КонецПопытки;
Закон Брукера: Даже маленькая практика стоит большой теории.