Имя: Пароль:
1C
1С v8
Открыть отчет на СКД с отбором программно.
0 unknown181538
 
14.09.14
22:31
Была ветка Программно добавить отбор в отчет на СКД . Но когда я вернулся к проблеме, утонула в архив.
Короче, мне нужно открыть отчет с отбором. Весь код ниже, включая закомменченный не работает. Кто-нибудь может подсказать, как правильно?
Отчет на шаблоне типового отчета. Обычные формы.


    ОтчетПоСобытиям = Отчеты.ОтчетПоСобытиямХанза.Создать();
    
    // КОД ОТ КУБА!
     ЭлементыОтбора = Новый Соответствие;
    Для Каждого ЭлементОтбора Из ОтчетПоСобытиям.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
        Если Тип(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
            ЭлементыОтбора.Вставить(ЭлементОтбора.ЛевоеЗначение, ЭлементОтбора);
        КонецЕсли;
    КонецЦикла;
    
    //Устанавливаем отбор по полю МоёПоле1

    ЭлементОтбора = ЭлементыОтбора.Получить(Новый ПолеКомпоновкиДанных("Контрагент"));
    Если ЭлементОтбора = Неопределено Тогда
        //Отбора по полю МоёПоле ещё нет, добавляем строку отбора

        ЭлементОтбора = ОтчетПоСобытиям.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
    КонецЕсли;
    ЭлементОтбора.ВидСравнения        = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение    = Плательщик;
    ЭлементОтбора.Использование        = Истина;
    // -- КОД ОТ КУБА
    
//ТиповыеОтчеты.ДобавитьОтбор(ОтчетПоСобытиям.КомпоновщикНастроек,"Контрагент",Плательщик,ВидСравненияКомпоновкиДанных.Равно,Истина);        
Форма = ОтчетПоСобытиям.ПолучитьФорму();        
Форма.Открыть();        
//ТиповыеОтчеты.ДобавитьОтбор(ОтчетПоСобытиям.КомпоновщикНастроек,"Контрагент",Плательщик,ВидСравненияКомпоновкиДанных.Равно,Истина);        
        
//НовыйЭлементОтбора = ОтчетПоСобытиям.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));        
        
//ПолеОтбора = Новый ПолеКомпоновкиДанных("Контрагент");        
//НовыйЭлементОтбора.ЛевоеЗначение  = ПолеОтбора;        
//НовыйЭлементОтбора.Использование  = Истина;        
//НовыйЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;        
//НовыйЭлементОтбора.ПравоеЗначение = Плательщик;        
        
//НовОтбор = Форма.КомпоновщикНастроекПользователя.Настройки.Отбор.Добавить();        
//   ПолеОтбора = Новый ПолеКомпоновкиДанных("Контрагент");        
//   НовОтбор.ЛевоеЗначение  = ПолеОтбора;        
//   НовОтбор.Использование  = Истина;        
//   НовОтбор.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;        
//   НовОтбор.ПравоеЗначение = Плательщик;        
Форма.ОбновитьОтчет();
1 Defender aka LINN
 
14.09.14
22:42
(0) Кому-нибудь приходило в голову, что при открытии формы может какой-нибудь код выполняться?
2 unknown181538
 
14.09.14
22:51
(1) Учитывая, что это шаблон типового отчета, то конечно...
Возможно, что мой вопрос лишен смысла, т.к. иного выхода, кроме как разбираться, что там понаписано, нет.
Но вдруг, кто-то действительно с этим сталкивался.
3 unknown181538
 
14.09.14
23:04
(0) Разобрался. Если кому вдруг будет надо:

ОтчетПоСобытиям = Отчеты.ОтчетПоСобытиямХанза.Создать();
Форма = ОтчетПоСобытиям.ПолучитьФорму();    
Форма.ОбновлениеОтображения(); // ВОТ ЭТА СТРОКА ДОЛЖНА БЫТЬ ДО ОТБОРА

     ЭлементыОтбора = Новый Соответствие;
    Для Каждого ЭлементОтбора Из Форма.КомпоновщикНастроекПользователя.Настройки.Отбор.Элементы Цикл // ОТБОР УСТАНОВИЛ ДЛЯ КОМПОНОВЩИКА - РЕКВИЗИТА ФОРМЫ
        Если Тип(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
            ЭлементыОтбора.Вставить(ЭлементОтбора.ЛевоеЗначение, ЭлементОтбора);
        КонецЕсли;
    КонецЦикла;
    
    //Устанавливаем отбор по полю МоёПоле1

    ЭлементОтбора = ЭлементыОтбора.Получить(Новый ПолеКомпоновкиДанных("Контрагент"));
    Если ЭлементОтбора = Неопределено Тогда
        //Отбора по полю МоёПоле ещё нет, добавляем строку отбора

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