Доброго времени суток. Столкнулся с такой проблемой: нужно отрыть один внешний отчет через другой с передачей нужных параметров из первого. Как это можно реализовать правильно на обычных формах?
ИначеЕсли ВнешняяРасшифровкаАнализЦенКонтрагентов Тогда
Если НЕ Расшифровка.Свойство("Номенклатура") Тогда
Возврат;
КонецЕсли;
ВнешнийОтчет = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Анализ цен");
Если ВнешнийОтчет.Пустая() Тогда
Предупреждение("В справочнике ""Внешние отчеты"" не найден отчет с наименованием ""Анализ цен""");
Иначе
ДвоичныеДанные = ВнешнийОтчет.ХранилищеВнешнейОбработки.Получить();
ИмяФайла = ПолучитьИмяВременногоФайла("epf");
ДвоичныеДанные.Записать(ИмяФайла);
ОтчетАнализЦен = ВнешниеОтчеты.Создать(ИмяФайла, Ложь);
НачалоПериода = ОтчетАнализЦен.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаОтчета"));
Номенклатура = ОтчетАнализЦен.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Номенклатура"));
Форма = ОтчетАнализЦен.ПолучитьФорму();
Если НачалоПериода <> Неопределено Тогда
Если ТипЗнч(НачалоПериода.Значение) = Тип("СтандартнаяДатаНачала") Тогда
НачалоПериода.Значение.Дата = НачалоДня(ТекущаяДата() - 60*60*24*90);
НачалоПериода.Использование = Истина;
КонецЕсли;
КонецЕсли;
Если Номенклатура <> Неопределено Тогда
Номенклатура.Значение = Расшифровка.Номенклатура;
Номенклатура.Использование = Истина;
КонецЕсли;
Форма.ОбновитьОтчет();
Форма.Открыть();
УдалитьФайлы(ИмяФайла);
Возврат;
КонецЕсли;
(1) через механизм "временного хранилища" точно можно
ht tp://1s-portal.ru/index.php/stati/common-questions/27-project/110-vremennoe-hranilishe-v-1s-82.html
Параметры СКД передаются как Отбор в ПраметрахФормы. Не знаю, поможет тебе этот пример или нет. Но на управляемых я бы так сделал. Должно +- также и на обычном.
НачалоПериода = ОтчетАнализЦен.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаОтчета"));
Номенклатура = ОтчетАнализЦен.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Номенклатура"));
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Номенклатура);
Отбор.Вставить("НачалоПериода ", НачалоПериода);
ПараметрыФормы = Новый Структура("Отбор,СформироватьПриОткрытии", Отбор, Истина);
ОткрытьФорму("ВнешнийОтчет."+ИмяФайла+".Форма",ПараметрыФормы,,Истина);
(6)мне нужно чтобы по выбраной номенклатуре отрывался другой отчет АнализЦен этой номенклатуры с настройками группировок и полей пользователя + передача параметра КонецПериода во второй отчет как НаДату
Да несколько вариантов есть:
- можешь сделать прикольно через хранилище настроек :
ОбщиНастройкиПользователя = Новый Структура;
ОбщиНастройкиПользователя.Вставить("ТвойПараметр", ТвоеЗначение);
ХранилищеОбщихНастроек.Сохранить("ВнешниеОтчеты", "ДляМоегоОтчета123", ОбщиНастройкиПользователя);
А во внешнем отчете проверить есть ли такая настройка в системе и получить её если есть:
ОбщиНастройкиПользователя = ХранилищеОбщихНастроек.Загрузить("ВнешниеОтчеты", "ДляМоегоОтчета123");
Если Не ОбщиНастройкиПользователя = Неопределено Тогда
ЛюбимыйКлуб = ОбщиНастройкиПользователя.ЛюбимыйКлуб;
КонецЕсли;
Ну это не самый правильный вариант конечно, но будет работать точно:)
Значение расшифровки - поле для передачи параметров из отчета
Дальше используем элементы внешней формы.
Если ТипЗнч(ЗначениеРасшифровки) = Тип("СправочникСсылка.Номенклатура") Тогда
попытка
ВнешняяФорма = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Отчет по по номенклатуре");
ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ВнешняяФорма.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
Форма.ЭлементыФормы.номенклатура.значение = ЗначениеРасшифровки;
Форма.ЭлементыФормы.ФлПроверитьПлатежи.значение = ПроверитьПлатежи;
Форма.Открыть();
исключение
сообщить("Не удалось открыть Отчет по номенклатуре!");
КонецПопытки;
КонецЕсли;