Механизм взаимодействия отчетов
Содержание
Соглашения по взаимодействию отчетов использующих СКД
- Механизм определения отчета и варианта для расшировки.
- Идентификатор отчета, который будет вызываться для расшифровки, и его идентификатор его варианта должны быть помещены в недоступные для пользователя параметры схемы компоновки данных (располагаются на вкладке Параметры в форме СКД) ОтчетРасшифровки и ВариантРасшифровки. Последовательность выбора варианта вызываемого отчета следующая:
- Используется вариант с идентификатором, который совпадает со значением параметра ВариантРасшифровки, в случае, если такой параметр существует и существует вариант отчета с соответствующим идентификатором.
- Используется вариант отчета, идентификатор которого равен идентификатору варианта вызывающего отчета.(Т.е. если вариант отчета имеет идентификатор ПоДокументам то вариант в вызываемом отчете тоже будет ПоДокументам)
- Если ни первый, ни второй варианты не найдены - используется вариант с идентификатором Основной.
- Оба параметра должны быть недоступны для пользователя (ограничение доступности в настройках параметра на вкладке Параметры) и использование Всегда (Если необходимо, чтобы вызываемый отчет выбирал вариант с таким же идентификатором как и вызывающий, то параметр ВариантРасшифровки можно не указывать)
- Идентификатор отчета, который будет вызываться для расшифровки, и его идентификатор его варианта должны быть помещены в недоступные для пользователя параметры схемы компоновки данных (располагаются на вкладке Параметры в форме СКД) ОтчетРасшифровки и ВариантРасшифровки. Последовательность выбора варианта вызываемого отчета следующая:
- Идентификаторы полей отбора и параметров данных должны совпадать. Т.е. если в вызывающем отчете используется параметр СуммыРазрешены то и вызываемом отчете он должен называться СуммыРазрешены (подразумевается, что он может быть использован в вызываемом отчете).
- В отчетах, которые используют данные регистра РасчетыСКонтрагентамиВСВ должны пристутствовать:
- обязательный параметр ЭтоАдминистратор булевского типа со значением по умолчанию Ложь
- обязательный параметр Контрагенты типа СправочникСсылка.КонтрагентныВСВ,СправочникСсылка.СотрудникиВСВ и установленным флагом доступен список
- в источнике-запросе необходимо:
- В случае, когда Контрагент является измерением указать условие для параметров таблицы регистра:
Контрагент В (&Контрагенты) ИЛИ Контрагент В (&РазрешенныеСотрудники) ИЛИ &ЭтоАдминистратор
- В случае, когда Контрагент не является измерением регистра алалогичные условия необходимо задавать в условиях запроса. Например:
ФактическаяСебестоимостьДоговораВСВОстатки.Договор.Контрагент.Контрагент В (&Контрагенты) ИЛИ ФактическаяСебестоимостьДоговораВСВОстатки.Договор.Контрагент.Контрагент В (&РазрешенныеСотрудники) ИЛИ &ЭтоАдминистратор
- Оба параметра должны быть недоступны для пользователя (ограничение доступности в настройках параметра на вкладке Параметры) и использование Всегда
Если
- Оба параметра должны быть недоступны для пользователя (ограничение доступности в настройках параметра на вкладке Параметры) и использование Всегда
- Для определения промежутка времени должны использоваться следующие соглашения:
- Период - для стандартного периода
- НачалоПериода - для параметра, в котором передается начало периода
- КонецПериода - для параметра, в котором передается конец периода
Примечание: если передается Период как стандартный период, то будут сгенерированы НачалоПериода" и КонецПериода", если в параметре установлены атрибуты ДатаНачала и ДатаКонца соответственно
- В отчетах, которые используют данные регистра РасчетыСПерсоналомВСВ должны пристутствовать:
- обязательный параметр ЭтоАдминистратор булевского типа со значением по умолчанию Ложь
- обязательный параметр РазрешенныеСотрудники типа СправочникСсылка.СотрудникиВСВ,СправочникСсылка.СотрудникиВСВ и установленным флагом доступен список
- в источнике-запросе необходимо указать параметры для таблицы регистра:
Сотрудник В (&РазрешенныеСотрудники) ИЛИ &ЭтоАдминистратор
Оба параметра должны быть недоступны для пользователя (ограничение доступности в настройках параметра на вкладке Параметры) и использование Всегда
Оформление отчетов
- Если есть необходимость запоминать уровень группировки, до которого должны быть свернуты группировки отчета, нужно добавить в параметры схемы компоновки данных параметр УровеньГруппировки.
- Если есть необходимость фиксировать строки в отчете- нужно добавить в параметры схемы компоновки данных параметр ЗафиксироватьСлева и в качестве значения указать количество строк, которые должны быть зафиксированы слева.
Алгоритм добавления нового отчета на СКД
- В модуле объекта отчета прописать код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОбработкаОтчетовВСВ.СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки, КомпоновщикНастроек,СхемаКомпоновкиДанных) КонецПроцедуры
Если необходима дополнительная обработка настроек, то вместо кода выше вставляем:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных; НастройкиКомпоновщика = КомпоновщикНастроек.ПолучитьНастройки(); ОбработкаОтчетовВСВ.УстановитьОграниченияБезопасности(НастройкиКомпоновщика); Макет = КомпоновщикМакет.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика,ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(Макет,,ДанныеРасшифровки,Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); ОбработкаОтчетовВСВ.УстановитьУровеньГруппировки(Макет,ДокументРезультат); КонецПроцедуры
- Создание макета отчета
- Настройка табличного поля
- Переходим на закладку Макеты в схеме компоновки данных
- В табличном поле в столбик заполняем все идентификаторы полей из настроек (вкладка Выбранные поля)
- По правой кнопке мыши для каждой ячейки редактируем свойства ячейки и устанавливаем свойство Заполнение в значение Параметр. В поле Параметр должен появиться идентификатор параметра, который записан в ячейке.
- В свойствах ячейки в поле Параметр расшифровки указываем имя параметра Расшифровка
- Настройка расшифровки для макета
- Для каждого поля настроек отчета добавляем макет в табличное поле путем нажатия на зеленый плюс и выбора пункта меню Добавить макет поля
- Нажимаем кнопку выбора в колонке область. Кнопки с ячейке колонки выбора станут невидимыми.
- Одинарным щелчком мыши выделяем соответствующую ячейку табличного поля макета и нажимаем клавишу Enter
- В колонке Область должен появитья текст с адресом ячейки типа R21C
- В левой нижней таблице должна появиться соответствующая запись с именем параметра и выражением
- В левой нижней левой таблице двойной клик или Enter на строке Расшифровка в колонке Выражение. Должна появиться кнопка выбора
- По нажатии кнопки выбора заполняем список расшифровки
- Выбираем основное действие Расшифровать
- Добавляем строку
- Выбираем поле
- Копируем выделенный текст и вставляем в колонку Выражение
- Обязательно добавляем параметр ОтчетРасшифровки. Иначе при формировании расшифровки получим ошибку "Не удалось получить настройки отчета расшифровки"
- Настройка табличного поля
На этом настройка макета закончена (Это один из возможных вариантов настройки расшифровки. Другие варианты здесь.)
- Настройка Формы отчета
- Если необходимо просто вызвать расшифровочный отчет, то в модуле формы отчета вставляем сл. код:
&НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыОтчета = ОбработкаОтчетовВСВ.СоздатьПараметрыОтчета(Отчет.КомпоновщикНастроек,Расшифровка,ДанныеРасшифровки,КлючТекущегоВарианта); Если ПараметрыОтчета.Свойство("ОтчетРасшифровки") Тогда Форма = ПолучитьФорму("Отчет."+ПараметрыОтчета.ОтчетРасшифровки+".Форма",ПараметрыОтчета,ЭтаФорма,Истина); Форма.Открыть(); Иначе СтандартнаяОбработка = Истина; КонецЕсли; КонецПроцедуры
В случае, когда мы будем модифицировать каким либо образом код, вместо кода выше вставляем код в обработчик Обработка расшифровки:
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Данные = ОбработкаОтчетовВСВ.ПолучитьДанныеРасшифровки(Расшифровка,Отчет.КомпоновщикНастроек,ДанныеРасшифровки);
НастройкиОтчета = ОбработкаОтчетовВСВ.ПолучитьНастройкиОтчета(Данные,КлючТекущегоВарианта);
Если НастройкиОтчета = Неопределено Тогда
ВызватьИсключение СерверВСВ.ПолучитьСообщениеПоКлючу("НеУдалосьПолучитьНастройкиОтчетаРасшифровки");
КонецЕсли;
ОбработкаОтчетовВСВ.ЗаполнитьНастройкиОтчетаИПараметрыДанных(Данные,НастройкиОтчета);
ПараметрыОтчета = Новый Структура("СформироватьПриОткрытии,Вариант",Истина,НастройкиОтчета);
Форма = ПолучитьФорму("Отчет.ИдентификатовВызываемогоОтчета.Форма",ПараметрыОтчета,ЭтаФорма);
Форма.Открыть();
КонецПроцедуры
- В форме устанавливаем соответствующий обработчик
Ошибки
- Появляение сообщения "Не удалось получить настройки отчета расшифровки" означает, что
- В схеме не указан параметр ОтчетРасшифровки
- Параметр ОтчетРасшифровки имеется но не инициализирован, или отключен, или не установлен признак использования Всегда
- Расшифровка поля, на котором была вызвана расшифровка не содержит параметр ОтчетРасшифровки, либо для данного поля не задан макет. Такая ситуация может возникнуть также из за того, что в ранее рабочем отчете изменили наименование поля, а в макете нет.
- Не отображается остаток, или оборот, хотя документы делают соответствующие движения - Возможно при задании макета поля для данного поля макет был указан, но соответствующая ячейка не была заполнена именем параметра
Соглашения по взаимодействию отчетов написаных без использования СКД
Алгоритм добавления в систему отчета не использующего СКД следующий:
- Добавляем отчет в дереве объектов.
- Задаем для него подсистему и, если нужно, функциональные опции.
- Создаем основную схему компоновки данных
- В ней прописываем на вкладке Параметры все параметры и отборы нового отчета с типами, соответствующими отборам и параметрам запроса, который будет формировать данные для отчета расшифровки
- На вкладке Настройки для каждого параметра (нижняя вкладка Параметры) устанавливаем флаг Включать в пользовательские настройки
- В модуле формы вызывающего отчета прописываем: (для того, что бы не выскочила ошибка "Переменная не определена", в реквизиты формы добавляем реквизит "ДанныеРасшифорвки", с типом строка)
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыОтчета = ОбработкаОтчетовВСВ.СоздатьПараметрыОтчета(Отчет.КомпоновщикНастроек,Расшифровка,ДанныеРасшифровки,КлючТекущегоВарианта,Истина,
"Идентификаторы параметров перечисленные через запятую");
Если ПараметрыОтчета.Свойство("ОтчетРасшифровки") Тогда
Форма = ПолучитьФорму("Отчет."+ПараметрыОтчета.ОтчетРасшифровки+".Форма",ПараметрыОтчета,ЭтаФорма,Истина);
Форма.Открыть();
Иначе
СтандартнаяОбработка = Истина;
КонецЕсли;
КонецПроцедуры
Вместо Идентификаторы параметров перечисленные через запятую передаем список идентификаторов, разделенных запятой
- В модуль объекта вызываемого отчета вставляем код, который формирует вывод информации в отчет. Шаблон процедуры компоновки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//Заменить на реальный список параметров
Ключи = "Список идентификаторов параметров запроса разделенных запятыми";
//Заменить текст запроса на реальный текст запроса
ТекстЗапроса = "Текст запроса";
Параметры = ОбработкаОтчетовВСВ.ПолучитьПараметрыДанных(КомпоновщикНастроек);
//Дальше идет обработка параметров запроса
РезультатЗапроса = ОбработкаОтчетовВСВ.ВыполнитьЗапросОтчета(ТекстЗапроса,Ключи,Параметры);
//Обработка результата запроса и вывод в ДокументРезультат
//При формировании списка расшифровки необходимо добавлять параметры с префиксом ПараметрДанных_
//Например: ПараметрДанных_ДатаНачала
КонецПроцедуры
Если дополнительная проверка параметров необязательна шаблон будет следующим:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//Заменить на реальный список параметров
Ключи = "Список идентификаторов параметров запроса разделенных запятыми";
//Заменить текст запроса на реальный текст запроса
ТекстЗапроса = "Текст запроса";
РезультатЗапроса = ОбработкаОтчетовВСВ.ВыполнитьЗапросОтчета(ТекстЗапроса,Ключи,КомпоновщикНастроек);
//Обработка результата запроса и вывод в ДокументРезультат
КонецПроцедуры