<

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

Войти
  1. noffkj

    04-08-2020 15:28

    Необходимо программно установить отбор в скидках.
    Сам отбор я сделал.

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

    Но куда его записывать в элменте справочника СкидкиНаценки так и не нашел.
    Может кто сталкивался. Подскажите.

  2. noffkj

    04-08-2020 15:51

    УТ 11.4

  3. ks_83

    04-08-2020 15:54

    ХранилищеНастроекКомпоновкиДанных

  4. noffkj

    04-08-2020 16:37

    Пробовал.
    не работает
    Хранилище = Новый ХранилищеЗначения(КомпоновщикНастроекДанных.ПолучитьНастройки());
    Скидка.ХранилищеНастроекКомпоновкиДанных = Хранилище;

  5. noffkj

    04-08-2020 16:37

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


        КонецЦикла;

  6. noffkj

    04-08-2020 16:57

    нет идей?

  7. noffkj

    04-08-2020 17:53

    И так. Пришлось сделать через жопу.

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

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

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