|
Не могу выполнить отчет с отборами из общей команды | ☑ | ||
---|---|---|---|---|
0
zsergey
31.08.17
✎
07:27
|
Всем привет!
Нужна ваша помощь. Суть такая: нужно из документа сформировать отчет "Анализ субконто" с определенными параметрами и отбором. Схема у отчета не предопределенная, т.е. компонуется программно, иначе бы не парился и сделал бы по учебнику: https://its.1c.ru/db/metod8dev#content:3585:hdoc Делал так: 1. Создал общую команду для нужных документов. Обработчик следующий: &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) //Вставить содержимое обработчика. //ПараметрыФормы = Новый Структура("", ); //ОткрытьФорму("ОбщаяФорма.", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка); //Анализ субконто Форма = ПараметрыВыполненияКоманды.Источник; ДокСсылка = Форма.Объект.Ссылка; //Получаю форму ПараметрыФормы = Новый Структура("СформироватьПриОткрытии", Истина); ФормаОтчета = ПолучитьФорму("Отчет.АнализСубконто.ФормаОбъекта", ПараметрыФормы); //Параметры для отчета Параметры = ПодготовитьПараметрыДляОтчета(ДокСсылка); //Устанавливаем параметры ФормаОтчета.Отчет.Организация = Параметры.Организация; ФормаОтчета.Отчет.НачалоПериода = Параметры.НачалоПериода; ФормаОтчета.Отчет.КонецПериода = Параметры.КонецПериода; СписокВидовСубконто = Новый СписокЗначений; СписокВидовСубконто.Добавить(ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты")); СписокВидовСубконто.Добавить(ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры")); ФормаОтчета.Отчет.СписокВидовСубконто = СписокВидовСубконто; //Устанавливаем отборы в настройках компоновщика //сначало отборы устанавливал здесь, но потом передумал //Настройки = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки; //Отборы = Настройки.Отбор; //Отборы.Элементы.Очистить(); //... //затираем пользовательские настройки НовыеПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; ФормаОтчета.Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройки); //Устанавливаем группировки ФормаОтчета.Отчет.Группировка.Очистить(); НоваяГруппировка = ФормаОтчета.Отчет.Группировка.Добавить(); НоваяГруппировка.Использование=Истина; НоваяГруппировка.Поле="Контрагент"; НоваяГруппировка.Представление="Контрагент"; УстановитьНастройкиВариантаОтчета(ФормаОтчета.Отчет, Параметры); // ОткрытьФорму(ФормаОтчета); КонецПроцедуры 2. Вроде все нормально, отчет открывается с нужными параметры (период, организация, субконто), а вот с отборами (по виду субконто "Контрагент", которого я беру из документа) возникла проблема. Не захотел он устанавливаться. Начал разбираться. Выяснил, что уже в в самом отчете перед формированием происходит инициализация компоновщика настроек и настройки берутся не у отчета, а из вариантаНастроек схемы !!!. Короче вот типовой код: Процедура ИнициализацияКомпоновщикаНастроек(Форма, ОрганизацияИзменилась = Ложь, ИмяВариантаНастроек = "") Экспорт ...... Настройки = Схема.ВариантыНастроек[ИмяВариантаНастроек].Настройки; Форма.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки); Форма.СхемаКомпоновкиДанных = ПоместитьВоВременноеХранилище(Схема, Форма.УникальныйИдентификатор); Форма.Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Форма.СхемаКомпоновкиДанных)); ...... КонецПроцедуры из этого выходит, что те отборы, которые я устанавливал в команде, тупо игнорируются. Попробывал записать настройки в ВариантНастройки схемы. Сделал так: &НаСервере Процедура УстановитьНастройкиВариантаОтчета(Отчет, Параметры) //Настройки компоновки ОтчетОбъект = ДанныеФормыВЗначение(Отчет,Тип("ОтчетОбъект.АнализСубконто")); СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("СхемаКомпоновкиДанных"); ИмяВариантаНастроек = "АнализСубконто"; НастройкиОтбора = СхемаКомпоновкиДанных.ВариантыНастроек[ИмяВариантаНастроек].Настройки; Отборы = НастройкиОтбора.Отбор; Отборы.Элементы.Очистить(); ОтборКонтрагент = Отборы.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборДоговор = Отборы.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборКонтрагент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент"); ОтборДоговор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Договор"); Если НЕ ЗначениеЗаполнено(Параметры.Контрагент) Тогда ОтборКонтрагент.Использование = Ложь; Иначе ОтборКонтрагент.Использование = Истина; ОтборКонтрагент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборКонтрагент.ПравоеЗначение = Параметры.Контрагент; КонецЕсли; Если НЕ ЗначениеЗаполнено(Параметры.Договор) Тогда ОтборДоговор.Использование = Ложь; Иначе ОтборДоговор.Использование = Истина; ОтборДоговор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборДоговор.ПравоеЗначение = Параметры.Договор; КонецЕсли; ЗначениеВДанныеФормы(ОтчетОбъект, Отчет); КонецПроцедуры Но как только возвращаюсь на клиента, выходит ошибка "Нельзя изменять поле, содержащее объект данных формы". Теперь думаю, как решить проблему с отборами. Не париться, и заглушить в отчете загрузку настроек из ВариантаНастроек? Как-то не совсем правильно ... |
|||
1
zsergey
31.08.17
✎
10:46
|
Как вне контекста отчета преобразовать "ДанныеФормыСтруктура" в объект, чтобы не было ошибки "Нельзя изменять поле, содержащее объект данных формы"?
Объект отчета мне нужен чтобы получить СхемуКомпоновки. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |