Вход | Регистрация
 

Как вставить отбор программно с компоновщиком настроек?

Как вставить отбор программно с компоновщиком настроек?
Я
   Мисти
 
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
ау??
   azernot
 
7 - 31.03.19 - 20:15
Вот пример, как добавить отбор по контрагенту "НужныйМнеКонтрагент"

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

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

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

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

            НовыйЭлементОтбора.Использование = Истина; 
        КонецЕсли; 
    КонецЦикла; 


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

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует