Имя: Пароль:
1C
 
Не могу выполнить отчет с отборами из общей команды
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
Как вне контекста отчета преобразовать "ДанныеФормыСтруктура" в объект, чтобы не было ошибки "Нельзя изменять поле, содержащее объект данных формы"?
Объект отчета мне нужен чтобы получить СхемуКомпоновки.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn