Две СКД схемы в одном отчете, Просьба помочь с исправлением кода

1 отзывFavoriteLoadingВ закладки

На форме 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;
КонецЦикла;

ДокументРезультат.ОтображатьСетку = Ложь;

ДокументРезультат.Показать();

КонецЦикла;

КонецПроцедуры

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Один комментарий

  1. на мисте подсказали
    выход такой в каждой функции добавим
    СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет(“СреднееЗаПериодСКД”;);
    ОтчетОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;

Оставить комментарий

RSSКомментарии в RSS

Авторизация

Логин:
Пароль:
Регистрация

Архивы

Закладки

  • Your favorites will be here.