Имя: Пароль:
1C
1С v8
Получение данных из отбора построителя отчета
0 Mr Man
 
14.01.16
17:48
УПП 1.3. Есть справочник ИсточникиДанныхДляРасчетовБюджетирования. Как получить данные из вкладки "Отборы"?

По ходу хранение этих отборов реализовано через построитель отчета. Как его получить данные из него, шагая по элементам справочника?
1 Mr Man
 
15.01.16
13:14
Может кому то пригодится, решил так:

Если НЕ ЭлСпр.ЭтоГруппа Тогда
            СохраненнаяНастройка = ЭлСпр.НастройкиПостроителя.Получить();            
            
            ПостроительОтчета = Новый ПостроительОтчета();
            ПостроительОтчета.Текст="ВЫБРАТЬ
            |    СУММА(ТаблицаРегистра.СуммаОборот) КАК СуммаОборот,
            |    СУММА(ТаблицаРегистра.СуммаУпрОборот) КАК СуммаУпрОборот
            |{ВЫБРАТЬ
            |    ТаблицаРегистра.БанковскийСчетКасса.* КАК БанковскийСчетКасса,
            |    ТаблицаРегистра.ВидДенежныхСредств.* КАК ВидДенежныхСредств,
            |    ТаблицаРегистра.ПриходРасход.* КАК ПриходРасход,
            |    ТаблицаРегистра.СтатьяДвиженияДенежныхСредств.* КАК СтатьяДвиженияДенежныхСредств,
            |    ТаблицаРегистра.ДокументДвижения.* КАК ДокументДвижения,
            |    ТаблицаРегистра.Контрагент.* КАК Контрагент,
            |    ТаблицаРегистра.ДоговорКонтрагента.* КАК ДоговорКонтрагента,
            |    ТаблицаРегистра.Сделка.* КАК Сделка,
            |    ТаблицаРегистра.Проект.* КАК Проект,
            |    ТаблицаРегистра.ДокументПланированияПлатежа.* КАК ДокументПланированияПлатежа,
            |    ТаблицаРегистра.ДокументРасчетовСКонтрагентом.* КАК ДокументРасчетовСКонтрагентом,
            |    ТаблицаРегистра.Организация.* КАК Организация,
            |    ТаблицаРегистра.Период}
            |ИЗ
            |    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПериода, &КонецПериода, День, ) КАК ТаблицаРегистра
            |{ГДЕ
            |    ТаблицаРегистра.БанковскийСчетКасса.* КАК БанковскийСчетКасса,
            |    ТаблицаРегистра.ВидДенежныхСредств.* КАК ВидДенежныхСредств,
            |    ТаблицаРегистра.ПриходРасход.* КАК ПриходРасход,
            |    ТаблицаРегистра.СтатьяДвиженияДенежныхСредств.* КАК СтатьяДвиженияДенежныхСредств,
            |    ТаблицаРегистра.ДокументДвижения.* КАК ДокументДвижения,
            |    ТаблицаРегистра.Контрагент.* КАК Контрагент,
            |    ТаблицаРегистра.ДоговорКонтрагента.* КАК ДоговорКонтрагента,
            |    ТаблицаРегистра.Сделка.* КАК Сделка,
            |    ТаблицаРегистра.Проект.* КАК Проект,
            |    ТаблицаРегистра.ДокументПланированияПлатежа.* КАК ДокументПланированияПлатежа,
            |    ТаблицаРегистра.ДокументРасчетовСКонтрагентом.* КАК ДокументРасчетовСКонтрагентом,
            |    ТаблицаРегистра.Организация.* КАК Организация,
            |    ТаблицаРегистра.Период}";
            
            
            ПостроительОтчета.ЗаполнитьНастройки();
            ПостроительОтчета.УстановитьНастройки(СохраненнаяНастройка.НастройкиПостроителя,Истина,Ложь,Истина,Истина);
            
            //находим поле СтатьяДвиженияДенежныхСредств++
            ПерезаписьВХран = Ложь;
            Если ПостроительОтчета.Отбор.Количество() <> 0 Тогда
                Для каждого СТрОтбора Из ПостроительОтчета.Отбор Цикл
                    Если  ТипЗнч(СТрОтбора.Значение) = Тип("СправочникСсылка.СтатьиДвиженияДенежныхСредств") Тогда
                        Если ЗначениеЗаполнено(СТрОтбора.Значение.Код) Тогда                                  
                            прав = Сред(СТрОтбора.Значение.Код,2,СтрДлина(СТрОтбора.Значение.Код));
                            КодНовРод = ?(найти("0123456789",Сред(СТрОтбора.Значение.Код,1,1))> 0, НовСимвДляЦ + прав,  НовСимвДляБ + прав);
                        Иначе
                            КодНовРод = "";
                        КонецЕсли;
                        
                        НайдСпр_Статей = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду(КодНовРод);
                        
                        СТрОтбора.Значение = ?(НайдСпр_Статей = Справочники.СтатьиДвиженияДенежныхСредств.ПустаяСсылка(),СТрОтбора.Значение, НайдСпр_Статей);
                        ПерезаписьВХран = Истина;
                    КонецЕсли;
                КонецЦикла;                                   
            
            КонецЕсли;
            //находим поле СтатьяДвиженияДенежныхСредств++--
        
            Если ПерезаписьВХран Тогда
                СтруктураНастройки=Новый Структура;
                СтруктураНастройки.Вставить("НастройкиПостроителя",ПостроительОтчета.ПолучитьНастройки(Истина,Ложь,Истина,Истина));
                
                СтруктураНастройки.Вставить("ПараметрыПостроителя",ПостроительОтчета.Параметры);
                ХранилищеДанных  = Новый ХранилищеЗначения(СтруктураНастройки);
                ЭлСпр.НастройкиПостроителя=ХранилищеДанных;
            КонецЕсли;
        
        //СтатьяДвиженияДенежныхСредств--
    КонецЕсли;
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой