Имя: Пароль:
1C
 
Как вставить отбор программно с компоновщиком настроек?
,
0 Мисти
 
31.03.19
13:59
Из документа нужно открыть отчет и передать туда параметр.
Беда в том, что это не реквизит отчета, а он задан где-то в глубине компоновщика.
Открыть его можно через пользовательскиеНастройки, а вот как туда засунуть что-то программно - не пойму.
Реквизиты отчета (такие тоже есть) прекрасно заполнились.
1 Мисти
 
31.03.19
14:00
ПараметрыОтчета = Новый Структура("Период,Бюджет,Сценарий,СценарийЭталон");
    ПараметрыФормы = Новый Структура;
    ПараметрыОтчета.Период = Новый СтандартныйПериод(НачалоМесяца(Объект.Дата), КонецМесяца(Объект.Дата));
    ПараметрыОтчета.Бюджет = ПолучитьБюджетНаСервере();
    ПараметрыОтчета.Сценарий = Объект.СценарийФакт;
    ПараметрыОтчета.СценарийЭталон = Объект.СценарийПлан;
    
    ИмяОтчета = "бит_ПланФактныйАнализПоБюджету_ОстаткиПоСчетам";
    
    ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
    ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
    ПользовательскиеОтборы = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
    ПользовательскиеОтборы.ИдентификаторПользовательскойНастройки = "Отбор";
    
    ПараметрыФормы.Вставить("ЦФО",Объект.ЦФО);
    ПараметрыФормы.Вставить("ПользовательскиеНастройки");
    
    ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
    ПараметрыФормы.Вставить("ПользовательскиеНастройки",ПользовательскиеНастройки);
    ЗаполнитьПользовательскиеНастройкиОтчета(ИмяОтчета,ПараметрыОтчета,ПараметрыФормы.ПользовательскиеНастройки);
    ОткрытьФорму("Отчет." + ИмяОтчета + ".ФормаОбъекта", ПараметрыФормы);
2 Мисти
 
31.03.19
14:01
Вот так - реквизиты отчета все попадают.
3 Мисти
 
31.03.19
14:03
В отчете в настройках можно руками добавить отбор, выбрать параметр и значение.
А как это изобразить программно?
4 Мисти
 
31.03.19
14:14
ПользовательскиеОтборы = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
вот такое попадается в типовых отчетах, только потом непонятно, как используется.
5 Мисти
 
31.03.19
16:27
Очень нужен совет!
6 Мисти
 
31.03.19
19:10
ау??
7 azernot
 
31.03.19
20:15
Вот пример, как добавить отбор по контрагенту "НужныйМнеКонтрагент"

ПользовательскиеОтборы = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));

НовыйЭлементОтбора = ПользовательскиеОтборы .Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовыйЭлементОтбора.ПравоеЗначение = НужныйМнеКонтрагент;
НовыйЭлементОтбора.Использование = Истина;
8 Мисти
 
01.04.19
01:14
спасибо, попробую!
9 Мисти
 
01.04.19
01:22
{Отчет.бит_ПланФактныйАнализПоБюджету_ОстаткиПоСчетам.Форма.ФормаОтчетаУправляемая.Форма(309)}: Ошибка при вызове метода контекста (Добавить)
        ПользовательскиеОтборы = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
по причине:
Коллекция пользовательских настроек не может изменять свой соста
10 azernot
 
01.04.19
10:11
Попробуйте так
    ПользовательскиеОтборы = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Отчет.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки);
11 Мисти
 
03.04.19
16:37
Для каждого Поле из ПользовательскиеОтборы.ДоступныеПоляОтбора.Элементы цикл
            Если Поле.Заголовок     = "ЦФО" Тогда
вот до этого докопалась.
Осталось чуть-чуть.
12 Мисти
 
03.04.19
16:39
ПользовательскиеОтборы = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Отчет.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки);
        НовыйЭлементОтбора = ПользовательскиеОтборы .Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЦФО");
        НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        НовыйЭлементОтбора.ПравоеЗначение = Параметры.ЦФО;
        НовыйЭлементОтбора.Использование = Истина;    
Вот так не сработало - не ругается, но и отбор не срабатывает!
13 Мисти
 
03.04.19
16:49
Может, его куда-то сохранить надо?
14 Мисти
 
03.04.19
16:53
Поля = СхемаКомпоновкиДанных.НаборыДанных["НаборДанных1"].Поля;
    
Для Каждого Поле Из Поля Цикл
        
    Если Поле.Заголовок     = "Организация" Тогда
        Поле.Заголовок = Поле.Заголовок + "_Аналитика";
        Прервать
    КонецЕсли;
        
КонецЦикла;
а вот сюда - нельзя куда-нибудь?
15 azernot
 
03.04.19
16:57
В открываемой форме отчёта, в настройках вы видите этот отбор?
16 azernot
 
03.04.19
17:06
(12) А вообще, покажите весь код, как вы получаете форму отчёта, как получаете его компоновщик настроек, как вы добавляете отбор, как открываете форму отчёта (и формируете его, если формируете)
17 Мисти
 
03.04.19
17:50
(15) не-а, пустой отбор, совсем.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) - вот сюда попробовала засунуть -
        НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЦФО");
        НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        НовыйЭлементОтбора.ПравоеЗначение = Кос_ЦФО;//Параметры.ЦФО;
        НовыйЭлементОтбора.Использование = Истина;    
не ругается, но и не отбирает.
18 Мисти
 
03.04.19
17:51
Всё стандартно, откуда-то украла
    СтандартнаяОбработка = Ложь;
    ПараметрыОтчета = Новый Структура("Период,Бюджет,Сценарий,СценарийЭталон");
    ПараметрыФормы = Новый Структура;
    ПараметрыОтчета.Период = Новый СтандартныйПериод(НачалоМесяца(Объект.Дата), КонецМесяца(Объект.Дата));
    ПараметрыОтчета.Бюджет = ПолучитьБюджетНаСервере();
    ПараметрыОтчета.Сценарий = Объект.СценарийФакт;
    ПараметрыОтчета.СценарийЭталон = Объект.СценарийПлан;
    
    ИмяОтчета = "бит_ПланФактныйАнализПоБюджету_ОстаткиПоСчетам";
    
    ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
    ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
    ПользовательскиеОтборы = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
    ПользовательскиеОтборы.ИдентификаторПользовательскойНастройки = "Отбор";
    
    ПараметрыФормы.Вставить("ЦФО",Объект.ЦФО);
    ПараметрыФормы.Вставить("ПользовательскиеНастройки");
    
    //ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
    ПараметрыФормы.Вставить("ПользовательскиеНастройки",ПользовательскиеНастройки);
    ЗаполнитьПользовательскиеНастройкиОтчета(ИмяОтчета,ПараметрыОтчета,ПараметрыФормы.ПользовательскиеНастройки);
    ОткрытьФорму("Отчет." + ИмяОтчета + ".ФормаОбъекта", ПараметрыФормы);
19 Мисти
 
03.04.19
17:52
В отчет всё кроме цфо попадает само, потому что это параметры отчета.
а ЦФО можно задать в отборе компоновки и туда - никак не могу засунуть!
20 Euguln
 
03.04.19
18:07
Скорее всего при открытии отчета инициализируется компоновщик и отбор убивает. Варианта 2.
1. Некошерный. Получить форму через "ПолучитьФорму()"и уже у неё установить отбор.
2. Кошерный. Исследовать форму отчета и узнать, как сделать так, чтобы отбор не очищался.
21 Мисти
 
03.04.19
18:17
А почему нельзя в компоновщик-то запихнуть?
Я уже реквизит такой добавила - чтобы с ним можно было в отчете хоть в модуле, хоть где.
Мне попроще!
Хоть бы и некошерный.
Через "получитьФолрму" - не понимаю, чем мне это поможет.

http://catalog.mista.ru/public/202741/ - вот такое нашла. Может, оно?
22 Euguln
 
03.04.19
18:22
ФормаОтчета    = ПолучитьФорму("Отчет.бит_ПланФактныйАнализПоБюджету_ОстаткиПоСчетам.ФормаОбъекта", ПараметрыФормы);
БухгалтерскиеОтчетыКлиентСервер.ДобавитьОтбор(ФормаОтчета.Отчет.КомпоновщикНастроек, "ЦФО", Кос_ЦФО, ВидСравненияКомпоновкиДанных.Равно);
ФормаОтчета.Открыть();
ФормаОтчета.СформироватьОтчетНаСервере();
23 Мисти
 
03.04.19
18:39
В форме отчета нет СформироватьОтчетНаСервере()!
24 singlych
 
03.04.19
19:36
(18) "ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;"
Их не создать надо, а достать из компоновщика настроек объекта отчета.

А тупо параметр формы Отбор передать не проканает?
25 Мисти
 
03.04.19
19:42
То, что в (18) - отлично работает, но для тех параметров, которые являются реквизитами отчета.
Теперь я открываю отчет, мой ЦФО туда передался и даже записался в созданный реквизит отчета.
Как его в пользовательский отбор существующего компоновщика засунуть?
26 azernot
 
04.04.19
10:14
(25) Значит где-то в форме открываемого отчёта чистится отбор компоновщика (или заново инициализируется) и в него заполняются только те отборы, которые являются реквизитами. Надо найти этот кусок кода
27 bootini
 
04.04.19
10:30
там их как-то выгружать надо, изменять, потом опять загружать, не помню уже дано делал.
28 Euguln
 
04.04.19
15:59
(23) Ну значит как-то по другому называется. Это же битовская поделка, там все через другое место.
29 Мисти
 
10.04.19
15:35
Для каждого ЭлементПользовательскихНастроек Из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
        Если ТипЗнч(ЭлементПользовательскихНастроек) = Тип("ОтборКомпоновкиДанных") Тогда
            НовыйЭлементОтбора = ЭлементПользовательскихНастроек.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЦФО");
            НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
            НовыйЭлементОтбора.ПравоеЗначение = Кос_ЦФО;//Справочники.Подразделения.НайтиПоНаименованию("ОАО Атлантика");
            НовыйЭлементОтбора.Использование = Истина;
        КонецЕсли;
    КонецЦикла;


Вот так! В модуле отчета!Процедура ПриКомпоновкеРезультата(
30 toypaul
 
гуру
10.04.19
15:41
если в самом отчете никаких выкрутасов с польз. настройками нет, то правильный подход такой

1. для ОткрытьФорму. сначала получаем польз. настройки отчета (не создаем новые). получаем через Отчеты.МойОтчет.КомпоновщикНастроек.ПользНастройки. эти настройки изменяем и передаем в параметры формы

2. для ПолучитьФорму несколько проще. просто настраиваем Форма.Отчет.КомпоновщикНастроек.ПользНастройки

все
31 Мисти
 
11.04.19
00:22
В самом отчете есть, в
том и была проблема.