Версия для печати темы (https://pro1c.org.ua/index.php?s=6928e2a6ecccd7419912994587e78e5d&showtopic=46139)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Отбор "В списке" в отчете СКД

Автор: Constantus 08.06.18, 14:08

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

В отчете СКД имеется отбор по виду договоров. Вид договоров в Перечислениях.

На форму отчета СКД повесил поле выбора и при открытии заполнил его:

    ЭлементыФормы.ВыборЗначения.СписокВыбора.Очистить();
     ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(0, "Равно");
     ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(1, "В списке");
     ЭлементыФормы.ВыборЗначения.Значение = 0;


Далее, при выборе "Равно", всё срабатывает, но если выбираю "В списке", то выдает ошибку

Код при изменении:

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

КонецПроцедуры


Ошибка:
Ошибка при установке значения атрибута контекста (ВидСравнения)
            Эл.ВидСравнения        = Выборы;//ВидСравненияКомпоновкиДанных.Равно;
по причине:
Несоответствие типов



Как правильно в СКД поставить отбор по списку (перечислению нескольких значений)?

Автор: alex1c 08.06.18, 14:35

Цитата(Constantus @ 08.06.18, 14:08) *
    Если ВыборЗначения = 0 Тогда
        Выборы = ВидСравненияКомпоновкиДанных.Равно;
    ИначеЕсли ВыборЗначения = 0 Тогда
        Выборы = ВидСравненияКомпоновкиДанных.ВСписке;
    КонецЕсли;

В обоих вариантах ВыборЗначения = 0. Внимательнее....

Автор: Constantus 08.06.18, 14:42

alex1c @ Сегодня, 17:35 * ,

Спасибо, исправил, но это не помогло, все равно производится отбор по одному значению, требуется, чтобы появилось окно с подбором и кнопкой "Подбор", чтобы список сформировать, как это делается в стандартных отчетах при выборе "В списке"

Как этого добится?

Автор: sava1 08.06.18, 14:47

создаем форму, выносим на форму табличное поле, данные - компоновщик.Отбор

Автор: Constantus 08.06.18, 16:14

Дал полю "ВидДоговора" тип "СписокЗначений"

Теперь выбор "В списке" сработал.

Но если выбираю значение "Равно", то выдает ошибку исполнения.

Я так понимаю, что при выборе "Равно", нужно изменить тип значений с "СписокЗначений" на Ссылку на нужный справочник справочник.

Как можно программно изменять тип значений?

Сделал такие махинации:

Процедура ВидДоговораПриИзменении(Элемент)

    
    Если ВыборЗначения = 1 Тогда
        Выборы = ВидСравненияКомпоновкиДанных.ВСписке;
    ИначеЕсли ВыборЗначения = 0 Тогда
        Выборы = ВидСравненияКомпоновкиДанных.Равно;
    КонецЕсли;    
    
    Для каждого Эл Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
        Если Эл.Представление = Элемент.Имя Тогда
            //Эл.Использование     = ЗначениеЗаполнено(ВидДоговора);
            Эл.ВидСравнения        = Выборы;//ВидСравненияКомпоновкиДанных.ВСписке;
            Эл.ПравоеЗначение    = ВидДоговора;
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры


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

КонецПроцедуры


Процедура ВидДоговораНачалоВыбора(Элемент, СтандартнаяОбработка)
    // Вставить содержимое обработчика.
    
        Если ВыборЗначения = 1 Тогда
        ТипК = Новый ОписаниеТипов("СписокЗначений");
        ЭлементыФормы.ВидДоговора.Значение = ТипК.ПривестиЗначение(Элемент);
    ИначеЕсли ВыборЗначения = 0 Тогда
        ТипК = Новый ОписаниеТипов("СправочникСсылка.ВидыДоговоровПоГК");
        ЭлементыФормы.ВидДоговора.Значение = ТипК.ПривестиЗначение(Элемент);
    КонецЕсли;    
КонецПроцедуры


В результате, если выбираешь "Равно", то отчет срабатывает. Если открываешь в списке, то окно подбора по списку открывается, но пустое, т.е. без возможности выбора.
Что-то я не дотягиваю, но что?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua