Две СКД схемы в одном отчете, Просьба помочь с исправлением кода
На форме 2 переключателя – первый вариант и второй вариант, Суть проблемы – при формировании по первому варианту – все хорошо отчет формируеться все как надо при выборе на форме второго варианта
выдает ошибку “{Форма.ФормаОтчета(395)}: Ошибка при вызове метода контекста (Выполнить): Ошибка компоновки макета
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
по причине:
Ошибка компоновки макета
по причине:
Не установлено значение параметра “КонПериода””
если установить снова на первый пункт флаг то снова формирует все красиво
привожу код:
Перем предупр;
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода.УстановитьПериод(НачПер, ?(КонПер=’0001-01-01′, КонПер, КонецДня(КонПер)));
НастройкаПериода.РедактироватьКакИнтервал = Истина;
НастройкаПериода.РедактироватьКакПериод = Истина;
НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
Если НастройкаПериода.Редактировать() Тогда
НачПер = НастройкаПериода.ПолучитьДатуНачала();
КонПер = НастройкаПериода.ПолучитьДатуОкончания();
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии()
НачПер = НачалоДня(ТекущаяДата()-60*60*24);
КонПер = КонецДня(ТекущаяДата()-60*60*24);
КонецПроцедуры
процедура КнопкаСформироватьНажатие (Кнопка)
Если ФлагВыбораВидаОтчета = 1 Тогда
СреднееЗаПериод();
ИначеЕсли ФлагВыбораВидаОтчета = 2 Тогда
РучноеЗаПериод();
КонецЕсли;
конецпроцедуры
Процедура ВыложитьНаСайтСреднееЗаПериод(Подразд,ДокументРезультат,НачПериода,КонПериода) //Подразд,ДокументРезультат
вырезал дабы не хламить
КонецПроцедуры
Процедура ВыложитьНаСайтРучнаяЗаПериод(Подразд,ДокументРезультат,НачПериода,КонПериода)
вырезал дабы не хламить
КонецПроцедуры
Процедура СреднееЗаПериод()
НачПериода = НачалоДня(НачПер);
КонПериода = КонецДня(КонПер);
если СписокПодразделений.Количество() = 0 тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(“ФлагЗакрытия”,Истина);
Запрос.Текст = “ВЫБРАТЬ
|здесь он был просто сокращаю (работает 100%)
Запрос.УстановитьПараметр(“IS NULL”, );
Запрос.УстановитьПараметр(“истина”, истина );
Результат = Запрос.Выполнить();
ТЗ = Результат.Выгрузить();
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку(“Ссылка”;)); // ТЗ.ВыгрузитьКолонку(“Ссылка”;) – это массив значений из колонки “Ссылка”, а “ЗагрузитьЗначения” – загружает массив в список
СписокПодразделений = Список; // ограничим интерактивный выбор содержимым списка “Список”
конецесли;
ВхНачДатаТек = НачалоДня(НачПер);
ВхКонДатаТек = КонецДня(КонПер);
стрСписок = “”;
Для Каждого Значен из СписокПодразделений Цикл
СтрСписок= стрСписок + Число(Значен.Значение.Код)+ “,” ;
КонецЦикла;
СтрСписок=лев(стрСписок,СтрДлина(стрСписок)-1);
ТекстЗапроса=”
|здесь он был просто сокращаю (работает 100%)
ТЗСчетчикиСКЛЧас=SQL.SQLВыполнитьИнструкцию(Connection,ТекстЗапроса);
ТЗСчетчикиСКЛЧас.Колонки.Добавить(“Подразделение”;);
Для каждого стр Из ТЗСчетчикиСКЛЧас Цикл
стр.Подразделение=Справочники.Подразделения.НайтиПоКоду(Прав(“0000000000″+стр.НомерМагаза,9));
КонецЦикла;
Connection=0;
Для к = 0 по СписокПодразделений.Количество()-1 цикл
ЭлементСписка = СписокПодразделений.Получить(к);
Подразд = ЭлементСписка.Значение;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“НачПериода”;).Значение = НачПериода;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“НачПериода”;).Использование = Истина;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“КонПериода”;).Значение = КонПериода;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“КонПериода”;).Использование = Истина;
ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
элементотбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип(“ЭлементОтбораКомпоновкиДанных”;));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(“Подразделение”;);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; //это вариант для цикла – выше строку тогда комментриуем
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = Подразд; //это вариант для цикла – выше строку тогда комментриуем
СхемаКомпоновкиДанных = ОтчетОбъект.получитьмакет(“СреднееЗаПериодСКД”;);
Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
/////////////////////////////////////////////////////////////////////////////////////
ВнешниеНаборыДанных = Новый Структура; // инициализация внешних наборов данных
ВнешниеНаборыДанных.Вставить(“ТЗСчетчикиЧас”,ТЗСчетчикиСКЛЧас);
//////////////////////////////////////////////////////////////////////////////////////
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ДокументРезультат = Новый ТабличныйДокумент; // задаем название для определения нового окна
ДокументРезультат.Очистить();
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Для каждого Рисунок из ДокументРезультат.Рисунки Цикл
Рисунок.Ширина =300;
КонецЦикла;
ДокументРезультат.ОтображатьСетку = Ложь;
ДокументРезультат.Показать();
КонецЦикла;
КонецПроцедуры
Процедура РучноеЗаПериод()
НачПериода = НачалоДня(НачПер);
КонПериода = КонецДня(КонПер);
если СписокПодразделений.Количество() = 0 тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр(“ФлагЗакрытия”,Истина);
Запрос.Текст = “ВЫБРАТЬ
|здесь он был просто сокращаю (работает 100%)
Запрос.УстановитьПараметр(“IS NULL”, );
Запрос.УстановитьПараметр(“истина”, истина );
Результат = Запрос.Выполнить();
ТЗ = Результат.Выгрузить();
Список = Новый СписокЗначений;
Список.ЗагрузитьЗначения(ТЗ.ВыгрузитьКолонку(“Ссылка”;)); // ТЗ.ВыгрузитьКолонку(“Ссылка”;) – это массив значений из колонки “Ссылка”, а “ЗагрузитьЗначения” – загружает массив в список
СписокПодразделений = Список; // ограничим интерактивный выбор содержимым списка “Список”
конецесли;
ВхНачДатаТек = НачалоДня(НачПер);
ВхКонДатаТек = КонецДня(КонПер);
ТекстЗапроса=”
|здесь он был просто сокращаю (работает 100%)
ТЗСчетчикиСКЛТек=SQL.SQLВыполнитьИнструкцию(Connection,ТекстЗапроса);
ТЗСчетчикиСКЛТек.Колонки.Добавить(“МагазКакСправочникТек”;);
Для каждого стр Из ТЗСчетчикиСКЛТек Цикл
стр.МагазКакСправочникТек=Справочники.Подразделения.НайтиПоКоду(“0000000″+стр.НомерМагаза);
КонецЦикла;
ТЗСчетчикиСКЛТек.Свернуть(“МагазКакСправочникТек,День”,”ФактТрафикТек”;);
Connection=0;
Для к = 0 по СписокПодразделений.Количество()-1 цикл
ЭлементСписка = СписокПодразделений.Получить(к);
Подразд = ЭлементСписка.Значение;
СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет(“РучнаяЗаПериодСКД”;);
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“НачПериода”;).Значение = НачПериода;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“НачПериода”;).Использование = Истина;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“КонПериода”;).Значение = КонПериода;
ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(“КонПериода”;).Использование = Истина;
ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
элементотбора = ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип(“ЭлементОтбораКомпоновкиДанных”;));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(“Подразделение”;);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; //это вариант для цикла – выше строку тогда комментриуем
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = Подразд; //это вариант для цикла – выше строку тогда комментриуем
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
/////////////////////////////////////////////////////////////////////////////////////
ВнешниеНаборыДанных = Новый Структура; // инициализация внешних наборов данных
ВнешниеНаборыДанных.Вставить(“ТЗСчетчикиТек”,ТЗСчетчикиСКЛТек);
//////////////////////////////////////////////////////////////////////////////////////
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ДокументРезультат = Новый ТабличныйДокумент; // задаем название для определения нового окна
ДокументРезультат.Очистить();
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Для каждого Рисунок из ДокументРезультат.Рисунки Цикл
Рисунок.Ширина =300;
КонецЦикла;
ДокументРезультат.ОтображатьСетку = Ложь;
ДокументРезультат.Показать();
КонецЦикла;
КонецПроцедуры
на мисте подсказали
выход такой в каждой функции добавим
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет(“СреднееЗаПериодСКД”;);
ОтчетОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;