Имя: Пароль:
1C
1С v8
Управляемые формы открыть отчет с отбором
0 Midzgun
 
06.03.14
06:24
Добрый день, коллеги!
Есть УТ 11.1.2.22. Платформа 8.2.19.76.
Нужно открыть из документа отчет и программно в нем установить отбор по номенклатуре из табличной части документа. Отчет на СКД. С обычными формами было все просто. Получаем объект отчета и лезем в компоновщик настроек -> настройки. А с управляемыми как? Там же используется метод ОткрытьФорму. Как потом получить ссылку на компоновщик настроек отчета?
Заранее благодарен за помощь.
1 Любопытная
 
06.03.14
06:33
в параметрах указываешь отбор.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    //Вставить содержимое обработчика.
    УсловияОтбора = новый Структура();
    УсловияОтбора.Вставить("Контрагент",ПараметрКоманды);
    ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);
    ОткрытьФорму("Отчет.СписокЗадачПоКонтрагенту.Форма", ПараметрыФормы,
    ПараметрыВыполненияКоманды.Источник,
    ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры

Примерно так
2 Midzgun
 
06.03.14
08:18
(1) Попробовал так:
ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ДопОтчетДинамика);
            СхемаКомпоновкиДанных = ПолучитьМакетДинамика();

            КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
            КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
            КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

            сткОтбор = Новый Структура("Номенклатура", СписокНоменклатуры);
               сткПараметры = Новый Структура("Отбор, СформироватьПриОткрытии, ПользовательскиеНастройки", сткОтбор, Истина, КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки);
            ОткрытьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", сткПараметры, ЭтаФорма);

Но тогда пользовательский отбор не функционирует. Когда пользователь пытается по номенклатуре отборать - получаем ошибку: "Невозможно применить фиксированные настройки. Пересекаются элементы отбора". А как бы оставить пользователю возможность менять отбор?
3 Midzgun
 
06.03.14
08:39
Ура, товарищи!!! Получилось! Нужно было просто в настройки компоновки залезть, а отбор не передавать в параметрах. Вот так сделал:

ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ДопОтчетДинамика);
            СхемаКомпоновкиДанных = ПолучитьМакетДинамика();
            НастройкиКомпоновки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
                        
            // ищем искомый отбор
            Флаг = Ложь;
            инд = 0;
            ЭлементыОтбора = НастройкиКомпоновки.Отбор.Элементы;
            МаксИнд =  ЭлементыОтбора.Количество() - 1;
            Пока Не Флаг Цикл
                ЭлОтбора = ЭлементыОтбора[инд];
                Если ЭлОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура")
                    Или инд = МаксИнд Тогда
                    Флаг = Истина;
                КонецЕсли;
                инд = инд + 1;
            КонецЦикла;
            Если Инд = МаксИнд Тогда                          
                ЭлОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                ЭлОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
                ЭлОтбора.Использование = Истина;
                ЭлОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
            КонецЕсли;
            ЭлОтбора.ПравоеЗначение = СписокНоменклатуры;

КомпоновщикНастроекКомпоновкиДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
            КомпоновщикНастроекКомпоновкиДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
            КомпоновщикНастроекКомпоновкиДанных.ЗагрузитьНастройки(НастройкиКомпоновки);

            //сткОтбор = Новый Структура("Номенклатура", СписокНоменклатуры);
               сткПараметры = Новый Структура("Отбор, СформироватьПриОткрытии, ПользовательскиеНастройки", , Истина, КомпоновщикНастроекКомпоновкиДанных.ПользовательскиеНастройки);
            ОткрытьФорму("ВнешнийОтчет."+ ИмяОбработки +".Форма", сткПараметры, ЭтаФорма);