Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Установить программный отбор номенклатуры в скидках УТ

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

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

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

          СтруктураСвойств.Вставить("Наименование",""+Строка.Поставщик + " - " +Строка.Соглашение+ ", " +Строка.Скидка+ "%, " +Строка.Группа+ "/" +Строка.Код1+ "/" +Строка.Код2+ "/" +Строка.Код3);
          СтруктураСвойств.Вставить("ЗначениеСкидкиНаценки", Строка.Скидка);
          СтруктураСвойств.Вставить("ВариантОтбораНоменклатуры", ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.ОтборКомпоновкиДанных"));
          
            
          
         
          ФормаЗаписи.Элементы.ОтборПредставление.Видимость = (ФормаЗаписи.Объект.ВариантОтбораНоменклатуры = ПредопределенноеЗначение("Перечисление.ВариантыОтбораНоменклатурыДляРасчетаСкидокНаценок.ОтборКомпоновкиДанных"));
          
        ЭлементОтбора = ФормаЗаписи.КомпоновщикНастроекОтборПоНоменклатуре.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
        ЭлементОтбора.Использование = Истина;
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.ПравоеЗначение = "цколыотаьб";
        
         СтруктураСвойств.Вставить("КомпоновщикНастроекОтборПоНоменклатуре", ЭлементОтбора);
        
        
        
        ЗаполнитьЗначенияСвойств(ФормаЗаписи.Объект,СтруктураСвойств,"Наименование,ЗначениеСкидкиНаценки,ВариантОтбораНоменклатуры",);
        ФормаЗаписи.Открыть();


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

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

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.