Имя: Пароль:
1C
1С v8
программные группировки в ОСВ по счету БП 3.0
0 happysan
 
28.03.16
22:34
Командой вызываю ОСВ по счету из формы документа, но не удаётся настроить группировки - контрагенты и договоры, кто-нибудь в курсе как реализовать? БП 3.0.

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

&НаКлиенте
Процедура гк_ОСВпоСчету76(Команда)
    
    ПользовательскиеНастройкиКомпоновкиДанных = Новый ПользовательскиеНастройкиКомпоновкиДанных;
    ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("Счет"          , ПредопределенноеЗначение("ПланСчетов.Хозрасчетный.РасчетыСРазнымиДебиторамиИКредиторами"));
    ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("НачалоПериода" , НачалоКвартала(Объект.Дата));
    ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("КонецПериода"  , КонецКвартала(Объект.Дата));
    ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("Организация"   , Объект.Организация);
    ПользовательскиеНастройкиКомпоновкиДанных.ДополнительныеСвойства.Вставить("ПоСубсчетам"   , Истина);
    
    НовыйОтбор                                        = ПользовательскиеНастройкиКомпоновкиДанных.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
    НовыйОтбор.ИдентификаторПользовательскойНастройки = "Отбор";    
    ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"Субконто1", Объект.Контрагент);
    ЗаполнитьЭлементОтбораКомпоновкиДанных(НовыйОтбор,Истина,ВидСравненияКомпоновкиДанных.Равно,"Субконто2", Объект.ДоговорКонтрагента);
    
    НастройкиРасшифровки = Новый Структура;
    НастройкиРасшифровки.Вставить("ОборотноСальдоваяВедомостьПоСчету", ПользовательскиеНастройкиКомпоновкиДанных);
    
    УсловияОтбора = Новый Структура();
    УсловияОтбора.Вставить("НастройкиРасшифровки", НастройкиРасшифровки);
    
    ОбщиеНастройки = Новый Структура();
    ОбщиеНастройки.Вставить("Объект"              , УсловияОтбора);
    ОбщиеНастройки.Вставить("НастройкиРасшифровки", НастройкиРасшифровки);
    
    АдресХранилища = ПоместитьВоВременноеХранилище(ОбщиеНастройки, Новый УникальныйИдентификатор);
    
    ЗаполнятьТиповыеНастройки = Новый Структура;
    ЗаполнятьТиповыеНастройки.Вставить("Отбор"          , Ложь);
    ЗаполнятьТиповыеНастройки.Вставить("Группировка"     , Ложь);
    ЗаполнятьТиповыеНастройки.Вставить("ВыводимыеДанные", Истина);
    ЗаполнятьТиповыеНастройки.Вставить("Показатели"     , Истина);
    
    ПараметрыОтчета = Новый Структура;
    ПараметрыОтчета.Вставить("ВидРасшифровки"         , 1);
    ПараметрыОтчета.Вставить("АдресНастроек"          , АдресХранилища);
    ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
    ПараметрыОтчета.Вставить("ИДРасшифровки"          , "ОборотноСальдоваяВедомостьПоСчету");
    ПараметрыОтчета.Вставить("РежимРасшифровки"       , Истина);
    ПараметрыОтчета.Вставить("ЗаполняемыеНастройки"   , ЗаполнятьТиповыеНастройки);
    
    ОткрытьФорму("Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма.ФормаОтчета", ПараметрыОтчета, ЭтаФорма);    
    
КонецПроцедуры
1 DrShad
 
28.03.16
23:17
Сфрормируй обычный отчет и при компоновке результата смотри коллекции элементов настроек
2 Armando
 
28.03.16
23:43
3 happysan
 
29.03.16
07:13
Говорят же: "Утро вечера мудренее!". Придумал более короткий путь:
&НаСервере
Процедура Команда1НаСервере(ОбъектФормы)
    
    ОСВОбъект = ДанныеФормыВЗначение(ОбъектФормы, Тип("ОтчетОбъект.ОборотноСальдоваяВедомостьПоСчету"));
    ОСВОбъект.НачалоПериода = ТекущаяДата();
    ОСВОбъект.КонецПериода = ТекущаяДата();
    ЗначениеВДанныеФормы(ОСВОбъект, ОбъектФормы);
    
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
    
    ФормаОСВ = ПолучитьФорму("Отчет.ОборотноСальдоваяВедомостьПоСчету.ФормаОбъекта");
    ОбъектФормы = ФормаОСВ.Отчет;
    
    Команда1НаСервере(ОбъектФормы);
    
    КопироватьДанныеФормы(ОбъектФормы, ФормаОСВ.Отчет);

    ФормаОСВ.Модифицированность = Истина;
    ФормаОСВ.Открыть();
    
КонецПроцедуры
4 happysan
 
29.03.16
07:14
Здесь можно в коде заполнять и таб.часть отчета "Группировка", "Отбор" и т.д.
5 happysan
 
29.03.16
07:14
Всем спасибо за участие!
6 happysan
 
29.03.16
08:01
(4) На счёт таб.части "Отборы" - её нет)
7 happysan
 
29.03.16
08:11
(6) Но с отборами вышел из положения примерно так:
    ОСВОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы[1].Использование = Истина;
    ОСВОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы[1].ПравоеЗначение = Контрагент;
8 happysan
 
29.03.16
09:19
Но только если очищать отборы, то отладчиком вижу, что они очистились, но при запуске ОСВ запоминаются пользовательские последние настройки, то есть не удаётся пока их очистить.
9 happysan
 
29.03.16
15:54
Вот результат:

&НаКлиенте
Процедура ОСВпоСчету76(Команда)

    ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;

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

    ПараметрыФормы = Новый Структура();
    ПараметрыФормы.Вставить("ВидРасшифровки", 2);
    ПараметрыФормы.Вставить("ИДРасшифровки", "ОборотноСальдоваяВедомостьПоСчету");
    ПараметрыФормы.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
    ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
    ПараметрыФормы.Вставить("ЗаполняемыеНастройки", Новый Структура("ВыводимыеДанные, Группировка, Отбор, Показатели", Истина, Истина, Истина, Ложь));

    ФормаОСВ = ПолучитьФорму("Отчет.ОборотноСальдоваяВедомостьПоСчету.Форма", ПараметрыФормы, ЭтаФорма, Истина);

    ОбъектФормы = ФормаОСВ.Отчет;
    
    ЗаполнениеНастроекОСВНаСервере(ОбъектФормы);    
    
    КопироватьДанныеФормы(ОбъектФормы, ФормаОСВ.Отчет);

    ФормаОСВ.Открыть();
    
    СписокДоговоров = ПолучитьСписокДоговоров();

    ФормаОСВ.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы[2].Использование = Истина;
    ФормаОСВ.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ФормаОСВ.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ПравоеЗначение = СписокДоговоров;     
    
    ФормаОСВ.СформироватьОтчетНаСервере();

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

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

&НаСервере
Функция ПолучитьСписокДоговоров()
    
    ОбъектЗНЗ = РеквизитФормыВЗначение("Объект");
    СписокДоговоров = Новый СписокЗначений;
    ТЗ = ОбъектЗНЗ.гк_Расшифровка.Выгрузить(, "Субконто2");
    ТЗ.Свернуть("Субконто2");
    СписокДоговоров.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку("Субконто2"));
    
    Возврат СписокДоговоров;
    
КонецФункции
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший