Механизм взаимодействия отчетов

Материал из MediaWiki
Перейти к:навигация, поиск

Назад


Соглашения по взаимодействию отчетов использующих СКД

  • Механизм определения отчета и варианта для расшировки.
    • Идентификатор отчета, который будет вызываться для расшифровки, и его идентификатор его варианта должны быть помещены в недоступные для пользователя параметры схемы компоновки данных (располагаются на вкладке Параметры в форме СКД) ОтчетРасшифровки и ВариантРасшифровки. Последовательность выбора варианта вызываемого отчета следующая:
      • Используется вариант с идентификатором, который совпадает со значением параметра ВариантРасшифровки, в случае, если такой параметр существует и существует вариант отчета с соответствующим идентификатором.
      • Используется вариант отчета, идентификатор которого равен идентификатору варианта вызывающего отчета.(Т.е. если вариант отчета имеет идентификатор ПоДокументам то вариант в вызываемом отчете тоже будет ПоДокументам)
      • Если ни первый, ни второй варианты не найдены - используется вариант с идентификатором Основной.
    • Оба параметра должны быть недоступны для пользователя (ограничение доступности в настройках параметра на вкладке Параметры) и использование Всегда (Если необходимо, чтобы вызываемый отчет выбирал вариант с таким же идентификатором как и вызывающий, то параметр ВариантРасшифровки можно не указывать)
  • Идентификаторы полей отбора и параметров данных должны совпадать. Т.е. если в вызывающем отчете используется параметр СуммыРазрешены то и вызываемом отчете он должен называться СуммыРазрешены (подразумевается, что он может быть использован в вызываемом отчете).
  • В отчетах, которые используют данные регистра РасчетыСКонтрагентамиВСВ должны пристутствовать:
    • обязательный параметр ЭтоАдминистратор булевского типа со значением по умолчанию Ложь
    • обязательный параметр Контрагенты типа СправочникСсылка.КонтрагентныВСВ,СправочникСсылка.СотрудникиВСВ и установленным флагом доступен список
    • в источнике-запросе необходимо:
      • В случае, когда Контрагент является измерением указать условие для параметров таблицы регистра:
Контрагент В (&Контрагенты) ИЛИ
	Контрагент В (&РазрешенныеСотрудники)
	ИЛИ &ЭтоАдминистратор
      • В случае, когда Контрагент не является измерением регистра алалогичные условия необходимо задавать в условиях запроса. Например:
ФактическаяСебестоимостьДоговораВСВОстатки.Договор.Контрагент.Контрагент В (&Контрагенты)
	ИЛИ ФактическаяСебестоимостьДоговораВСВОстатки.Договор.Контрагент.Контрагент В (&РазрешенныеСотрудники)
	ИЛИ &ЭтоАдминистратор
    • Оба параметра должны быть недоступны для пользователя (ограничение доступности в настройках параметра на вкладке Параметры) и использование Всегда
      Если
  • Для определения промежутка времени должны использоваться следующие соглашения:
    • Период - для стандартного периода
    • НачалоПериода - для параметра, в котором передается начало периода
    • КонецПериода - для параметра, в котором передается конец периода

Примечание: если передается Период как стандартный период, то будут сгенерированы НачалоПериода" и КонецПериода", если в параметре установлены атрибуты ДатаНачала и ДатаКонца соответственно

  • В отчетах, которые используют данные регистра РасчетыСПерсоналомВСВ должны пристутствовать:
    • обязательный параметр ЭтоАдминистратор булевского типа со значением по умолчанию Ложь
    • обязательный параметр РазрешенныеСотрудники типа СправочникСсылка.СотрудникиВСВ,СправочникСсылка.СотрудникиВСВ и установленным флагом доступен список
    • в источнике-запросе необходимо указать параметры для таблицы регистра:
Сотрудник В (&РазрешенныеСотрудники)
				ИЛИ &ЭтоАдминистратор

Оба параметра должны быть недоступны для пользователя (ограничение доступности в настройках параметра на вкладке Параметры) и использование Всегда

Оформление отчетов

  • Если есть необходимость запоминать уровень группировки, до которого должны быть свернуты группировки отчета, нужно добавить в параметры схемы компоновки данных параметр УровеньГруппировки.
  • Если есть необходимость фиксировать строки в отчете- нужно добавить в параметры схемы компоновки данных параметр ЗафиксироватьСлева и в качестве значения указать количество строк, которые должны быть зафиксированы слева.

Алгоритм добавления нового отчета на СКД

  • В модуле объекта отчета прописать код:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОбработкаОтчетовВСВ.СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки, КомпоновщикНастроек,СхемаКомпоновкиДанных)
	
КонецПроцедуры

Если необходима дополнительная обработка настроек, то вместо кода выше вставляем:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	КомпоновщикМакет = Новый КомпоновщикМакетаКомпоновкиДанных;
	
	НастройкиКомпоновщика = КомпоновщикНастроек.ПолучитьНастройки();
	
	ОбработкаОтчетовВСВ.УстановитьОграниченияБезопасности(НастройкиКомпоновщика);
	
	Макет = КомпоновщикМакет.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновщика,ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(Макет,,ДанныеРасшифровки,Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	ОбработкаОтчетовВСВ.УстановитьУровеньГруппировки(Макет,ДокументРезультат);
	
КонецПроцедуры

  • Создание макета отчета
    • Настройка табличного поля
      • Переходим на закладку Макеты в схеме компоновки данных
      • В табличном поле в столбик заполняем все идентификаторы полей из настроек (вкладка Выбранные поля)
      • По правой кнопке мыши для каждой ячейки редактируем свойства ячейки и устанавливаем свойство Заполнение в значение Параметр. В поле Параметр должен появиться идентификатор параметра, который записан в ячейке.
      • В свойствах ячейки в поле Параметр расшифровки указываем имя параметра Расшифровка
    • Настройка расшифровки для макета
      • Для каждого поля настроек отчета добавляем макет в табличное поле путем нажатия на зеленый плюс и выбора пункта меню Добавить макет поля
      • Нажимаем кнопку выбора в колонке область. Кнопки с ячейке колонки выбора станут невидимыми.
      • Одинарным щелчком мыши выделяем соответствующую ячейку табличного поля макета и нажимаем клавишу Enter
      • В колонке Область должен появитья текст с адресом ячейки типа R21C
      • В левой нижней таблице должна появиться соответствующая запись с именем параметра и выражением
      • В левой нижней левой таблице двойной клик или Enter на строке Расшифровка в колонке Выражение. Должна появиться кнопка выбора
      • По нажатии кнопки выбора заполняем список расшифровки
        • Выбираем основное действие Расшифровать
        • Добавляем строку
        • Выбираем поле
        • Копируем выделенный текст и вставляем в колонку Выражение
        • Обязательно добавляем параметр ОтчетРасшифровки. Иначе при формировании расшифровки получим ошибку "Не удалось получить настройки отчета расшифровки"

На этом настройка макета закончена (Это один из возможных вариантов настройки расшифровки. Другие варианты здесь.)

  • Настройка Формы отчета
    • Если необходимо просто вызвать расшифровочный отчет, то в модуле формы отчета вставляем сл. код:
&НаКлиенте 
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПараметрыОтчета = ОбработкаОтчетовВСВ.СоздатьПараметрыОтчета(Отчет.КомпоновщикНастроек,Расшифровка,ДанныеРасшифровки,КлючТекущегоВарианта);
	
	Если ПараметрыОтчета.Свойство("ОтчетРасшифровки") Тогда
		Форма = ПолучитьФорму("Отчет."+ПараметрыОтчета.ОтчетРасшифровки+".Форма",ПараметрыОтчета,ЭтаФорма,Истина); 
		Форма.Открыть();
	Иначе
		СтандартнаяОбработка = Истина;
	КонецЕсли;
	
КонецПроцедуры

В случае, когда мы будем модифицировать каким либо образом код, вместо кода выше вставляем код в обработчик Обработка расшифровки:

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Данные = ОбработкаОтчетовВСВ.ПолучитьДанныеРасшифровки(Расшифровка,Отчет.КомпоновщикНастроек,ДанныеРасшифровки);
	НастройкиОтчета = ОбработкаОтчетовВСВ.ПолучитьНастройкиОтчета(Данные,КлючТекущегоВарианта); 
	Если НастройкиОтчета = Неопределено Тогда
		ВызватьИсключение СерверВСВ.ПолучитьСообщениеПоКлючу("НеУдалосьПолучитьНастройкиОтчетаРасшифровки");
	КонецЕсли;
	ОбработкаОтчетовВСВ.ЗаполнитьНастройкиОтчетаИПараметрыДанных(Данные,НастройкиОтчета);

	ПараметрыОтчета = Новый Структура("СформироватьПриОткрытии,Вариант",Истина,НастройкиОтчета);
	Форма = ПолучитьФорму("Отчет.ИдентификатовВызываемогоОтчета.Форма",ПараметрыОтчета,ЭтаФорма);
	Форма.Открыть();

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

    • В форме устанавливаем соответствующий обработчик

Ошибки

  • Появляение сообщения "Не удалось получить настройки отчета расшифровки" означает, что
  1. В схеме не указан параметр ОтчетРасшифровки
  2. Параметр ОтчетРасшифровки имеется но не инициализирован, или отключен, или не установлен признак использования Всегда
  3. Расшифровка поля, на котором была вызвана расшифровка не содержит параметр ОтчетРасшифровки, либо для данного поля не задан макет. Такая ситуация может возникнуть также из за того, что в ранее рабочем отчете изменили наименование поля, а в макете нет.
  • Не отображается остаток, или оборот, хотя документы делают соответствующие движения - Возможно при задании макета поля для данного поля макет был указан, но соответствующая ячейка не была заполнена именем параметра

Соглашения по взаимодействию отчетов написаных без использования СКД

Алгоритм добавления в систему отчета не использующего СКД следующий:

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

Вместо Идентификаторы параметров перечисленные через запятую передаем список идентификаторов, разделенных запятой

  • В модуль объекта вызываемого отчета вставляем код, который формирует вывод информации в отчет. Шаблон процедуры компоновки:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	//Заменить на реальный список параметров
	Ключи = "Список идентификаторов параметров запроса разделенных запятыми";
	
	//Заменить текст запроса на реальный текст запроса
	ТекстЗапроса = "Текст запроса";
				   
	
	Параметры = ОбработкаОтчетовВСВ.ПолучитьПараметрыДанных(КомпоновщикНастроек);
	
	//Дальше идет обработка параметров запроса
	
	РезультатЗапроса = ОбработкаОтчетовВСВ.ВыполнитьЗапросОтчета(ТекстЗапроса,Ключи,Параметры);

	//Обработка результата запроса и вывод в ДокументРезультат
        //При формировании списка расшифровки необходимо добавлять параметры с префиксом ПараметрДанных_
        //Например: ПараметрДанных_ДатаНачала

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

Если дополнительная проверка параметров необязательна шаблон будет следующим:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	//Заменить на реальный список параметров
	Ключи = "Список идентификаторов параметров запроса разделенных запятыми";
	
	//Заменить текст запроса на реальный текст запроса
	ТекстЗапроса = "Текст запроса";
	
	РезультатЗапроса = ОбработкаОтчетовВСВ.ВыполнитьЗапросОтчета(ТекстЗапроса,Ключи,КомпоновщикНастроек);

	//Обработка результата запроса и вывод в ДокументРезультат

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


Назад