Итак, расшифруем внешний отчет «МойОтчет» отчетом «Остатки и доступность».
Найдем общий модуль ОтчетыУТКлиентПереопределяемый и в нем процедуру ОбработкаРасшифровки. Расширяем ее с типом вызова «Вместо» или «Вместо с контролем». Если кто не пользуется расширениями, штош, снимайте модуль с поддержки и бесчинствуйте прямо в нем. В общем, не зависимо от того, расширяем мы модуль или нет, находим в процедуре ветвление в зависимости от имени отчета. Мне привычней добавлять код в конце и перед КонецЕсли я вношу свои коррективы:
ИначеЕсли ПолноеИмяОтчета = "ВнешнийОтчет.МойОтчет" Тогда
СтруктураРасшифровки = ОтчетыУТВызовСервераПереопределяемый.СформироватьДанныеРасшифровки_МойОтчет(Расшифровка, ЭтаФорма.ОтчетДанныеРасшифровки);
//Остатки и доступность
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("Имя", "Остатки");
ПараметрыОтчета.Вставить("Заголовок", НСтр("ru = 'Остатки и доступность товаров'"));
ПараметрыОтчета.Вставить("ИмяОтчета", "Отчет.ОстаткиИДоступностьТоваров");
//Параметры для открываемого отчета
ПоляРасшифровки = Новый Массив;
ПоляРасшифровки.Добавить("Номенклатура");
ПараметрыОтчета.Вставить("ПоляРасшифровки", ПоляРасшифровки);
СписокПараметров = Новый Массив;
СписокПараметров.Добавить("ДанныеОтчета");
ПараметрыОтчета.Вставить("СписокПараметров", СписокПараметров);
МенюОтчетов.Добавить(ПараметрыОтчета);
Основными параметрами здесь являются структура СтруктураРасшифровки и массив ПоляРасшифровки, который потом идет в структуру СписокПараметров и далее в ПараметрыОтчета. ПоляРасшифровки – это отборы для открывающегося отчета. Значения для отборов находятся в СтруктураРасшифровки. Как видно из кода, структура заполняется из моей функции СформироватьДанныеРасшифровки_МойОтчет. Для этого я расширил модуль ОтчетыУТВызовСервераПереопределяемый (Ну а вы, как и ранее, поступайте как знаете) и создал там свою функцию:
Функция СформироватьДанныеРасшифровки_МойОтчет(Расшифровка, АдресХранилища) Экспорт
ДанныеРасшифровки = ПолучитьИзВременногоХранилища(АдресХранилища); // ДанныеРасшифровкиКомпоновкиДанных -
СтруктураРасшифровки = Новый Структура;
ПолучитьЗначенияПолей(СтруктураРасшифровки, ДанныеРасшифровки.Элементы, Расшифровка);
Возврат СтруктураРасшифровки;
КонецФункции
Естественно, если в СтруктураРасшифровки не будет данных с ключом, как в ПоляРасшифровки, то отборы открываемого отчета не заполнятся.
Вот, собственно, и всё. При двойном клике на строке отчета появится пункт «Расшифровать другим отчетом» --> Название отчета. Возможно сделать расшифровку несколькими отчетами.
Решение проверено на платформе 8.3.22.2106, ERP 2.5.12.132. Учитывая названия изменяемых модулей, скорей всего этот метод будет работать и в УТ 11.
Доклад окончен.