Добрый день.

Помогите сломал голову.

Есть отчёт внешний (не подключен как внешний, открывается через файл-открыть).

У него есть СКД по умолчанию.
Есть вторая СКД.

Как из первой СКД по умолчанию - обратиться в качестве расшифровки ко второй?

Как обработать расшифровку в курсе, а вот как открыть вторую СКД из этого же отчета не сталкивался :( и не нагугливается...

Вариант с двумя отчетами - не подходит и подключать к базе нельзя отчёт :(
---
```1c
    СхемаКомпоновкиДанныхРасшифровка = ПолучитьМакет("СхемаРасшифровка");

    НастройкиРасшифровка = СхемаКомпоновкиДанныхРасшифровка.НастройкиПоУмолчанию;

    КомпоновщикНастроекРасшифровка = Новый КомпоновщикНастроекКомпоновкиДанных;

    ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанныхРасшифровка);

    КомпоновщикНастроекРасшифровка.Инициализировать(ИсточникДоступныхНастроек);

    ДанныеРасшифровкиРасшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;

    КомпоновщикМакетаРасшифровка = Новый КомпоновщикМакетаКомпоновкиДанных;

    МакетКомпоновкиРасшифровка = КомпоновщикМакетаРасшифровка.Выполнить(СхемаКомпоновкиДанныхРасшифровка, НастройкиРасшифровка, ДанныеРасшифровкиРасшифровка);

    ПроцессорКомпоновкиДанныхРасшифровка = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанныхРасшифровка.Инициализировать(МакетКомпоновкиРасшифровка, , ДанныеРасшифровкиРасшифровка);

    ФормаПечати = ПолучитьФорму("ФормаРасшифровки");
    Результат = ФормаПечати.ЭлементыФормы.ТаблицаРасшифровки;
    Результат.Очистить();

    ФормаПечати.ДанныеРасшифровки = ДанныеРасшифровкиРасшифровка;

    ПроцессорВыводаРасшифровка = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВыводаРасшифровка.УстановитьДокумент(Результат);

    ПроцессорВыводаРасшифровка.Вывести(ПроцессорКомпоновкиДанныхРасшифровка);

    ФормаПечати.Открыть();
```

Не помню только почему, но форму для расшифровки делал свою
---
спасибо (1SM отдал вам) код натолкнул на верную мысль :) я понял, что вы делали на обычных формах, по этому просто для тех кому интересно и кто набредёт через гугл

В форме отчёта от куда вызывается расшифровка:

```1c
    &НаКлиенте
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)

    Если КлючТекущегоВарианта = "Основной" Тогда

    СтандартнаяОбработка = ЛОЖЬ;

    сРасшифровки = ОбработкиРасшифровкуНаСервере(Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры);

    Если сРасшифровки.Материал <> Неопределено Тогда

    Если сРасшифровки.РасшифровкаОстатка Тогда
    СтрПараметры = Новый Структура;
    СтрПараметры.Вставить("Дата", ТекущаяДата());
    СтрПараметры.Вставить("Номенклатура", сРасшифровки.Материал);
    ОткрытьФорму("ВнешнийОтчет.МойОтчёт.Форма.ФормаРасшиврокаОстаткиСерии",СтрПараметры);
    Иначе
    Возврат;
    КонецЕсли;
    КонецЕсли;

    КонецЕсли;

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

    &НаСервере
    Функция ОбработкиРасшифровкуНаСервере(Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)

    сРасшифровки = Новый Структура;

    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    РасшифровкаОстатка = Данные.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "Остаток";
    РасшифровкаЗатребовано = Данные.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "Затребовано";

    сРасшифровки.Вставить("РасшифровкаОстатка",РасшифровкаОстатка);
    сРасшифровки.Вставить("РасшифровкаЗатребовано",РасшифровкаЗатребовано);

    Если РасшифровкаОстатка ИЛИ РасшифровкаЗатребовано Тогда

    МассивИменТекущихПолей = Новый Массив();
    МассивИменТекущихПолей.Добавить("Дефицит");
    МассивИменТекущихПолей.Добавить("Затребовано");
    МассивИменТекущихПолей.Добавить("Остаток");

    ЗначениеНужногоПоляВСтроке = ПолучитьЗначениеПоляВСтрокеНаСервере(Расшифровка,МассивИменТекущихПолей,"Материалы");
    сРасшифровки.Вставить("Материал",ЗначениеНужногоПоляВСтроке);

    КонецЕсли;

    Возврат сРасшифровки;

    КонецФункции

    //Эта функция с инфостарта кстати
    &НаСервере
    Функция ПолучитьЗначениеПоляВСтрокеНаСервере(Расшифровка, ИменаТекущихПолей, ИмяНужногоПоля, НужноеПолеСлева = Истина)
    ДанныеОтчета = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    ПолеРасшифровки = ДанныеОтчета.Элементы.Получить(Расшифровка).ПолучитьПоля()[0];
    Если Не ПолеРасшифровки = Неопределено Тогда
    Если Не ИменаТекущихПолей.Найти (ПолеРасшифровки.Поле) = Неопределено Тогда
    // поиск нужного поля в направлении, которое указано в НужноеПолеСлева
    ШагПоискаРасшифровки = ?(НужноеПолеСлева, -1, 1);
    КоличествоПолейОтчета = ДанныеОтчета.Элементы.Количество();
    СчетчикРасшифровки = Расшифровка + ШагПоискаРасшифровки;
    ПоказательВыходаЗаПределыТекущихПолей = Ложь;
    Пока СчетчикРасшифровки >= 0 И СчетчикРасшифровки < КоличествоПолейОтчета Цикл
    ЭлементРасшифровки = ДанныеОтчета.Элементы.Получить(СчетчикРасшифровки);
    Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
    ПолеРасшифровки = ЭлементРасшифровки.ПолучитьПоля()[0];
    Если ПолеРасшифровки.Поле = ИмяНужногоПоля Тогда
    Возврат ПолеРасшифровки.Значение;
    Иначе
    Если ИменаТекущихПолей.Найти (ПолеРасшифровки.Поле) = Неопределено Тогда
    ПоказательВыходаЗаПределыТекущихПолей = Истина;
    Иначе
    Если ПоказательВыходаЗаПределыТекущихПолей Тогда Возврат Неопределено КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Возврат Неопределено;
    КонецЕсли;
    СчетчикРасшифровки = СчетчикРасшифровки + ШагПоискаРасшифровки;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    Возврат Неопределено;
    КонецФункции
```

А затем в форме произвольной разместил табличный документ и код модуля:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ДатаОстатков = Параметры.Дата;
    Номенклатура = Параметры.Номенклатура;
    КонецПроцедуры

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    СформироватьОтчёт();
    КонецПроцедуры

    &НаСервере
    Процедура СформироватьОтчёт()

    СхемаКомпоновкиДанных = РеквизитФормыВЗначение("Объект").ПолучитьМакет("РасшифровкаОстаткиСерии");

    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

    //Установка компактного макета
    МакетОформления = "ОформлениеОтчетовБежевый";
    БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметрВывода(Настройки, "МакетОформления", МакетОформления);

    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(
    Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

    //Установка параметров
    Настройки = КомпоновщикНастроек.Настройки;
    Параметр = Настройки.ПараметрыДанных.Элементы.Найти("Дата");
    Параметр.Значение = ДатаОстатков;
    Параметр.Использование = Истина;
    Параметр = Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура");
    Параметр.Значение = Номенклатура;
    Параметр.Использование = Истина;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
    Настройки,ДанныеРасшифровки,,
    Тип("ГенераторМакетаКомпоновкиДанных"));

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    Результат = Новый ТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

Всё отлично взлетело на внешнем отчёте - который успешно работает и через файл-открыт :)
---
посмотри как в типовой УТ реализована расшифровка у Отчета Остатки и доступность товара, так как раз через расшифровку открывает еще один отчет
---
Был бы он встроенный и через другой отчёт это понятно, делал, знаю. А здесь открывается через файл-открыть. И содержит в себе же вторую СКД.
---
почитайте https://forum.infostart.ru/forum9/topic193109/ может подойдет...
---
вот еще https://wiki.programstore.ru/postobrabotka-otcheta-skd/
---
```1c
    СхемаКомпоновкиДанныхРасшифровка = ПолучитьМакет("СхемаРасшифровка");

    НастройкиРасшифровка = СхемаКомпоновкиДанныхРасшифровка.НастройкиПоУмолчанию;

    КомпоновщикНастроекРасшифровка = Новый КомпоновщикНастроекКомпоновкиДанных;

    ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанныхРасшифровка);

    КомпоновщикНастроекРасшифровка.Инициализировать(ИсточникДоступныхНастроек);

    ДанныеРасшифровкиРасшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;

    КомпоновщикМакетаРасшифровка = Новый КомпоновщикМакетаКомпоновкиДанных;

    МакетКомпоновкиРасшифровка = КомпоновщикМакетаРасшифровка.Выполнить(СхемаКомпоновкиДанныхРасшифровка, НастройкиРасшифровка, ДанныеРасшифровкиРасшифровка);

    ПроцессорКомпоновкиДанныхРасшифровка = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанныхРасшифровка.Инициализировать(МакетКомпоновкиРасшифровка, , ДанныеРасшифровкиРасшифровка);

    ФормаПечати = ПолучитьФорму("ФормаРасшифровки");
    Результат = ФормаПечати.ЭлементыФормы.ТаблицаРасшифровки;
    Результат.Очистить();

    ФормаПечати.ДанныеРасшифровки = ДанныеРасшифровкиРасшифровка;

    ПроцессорВыводаРасшифровка = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВыводаРасшифровка.УстановитьДокумент(Результат);

    ПроцессорВыводаРасшифровка.Вывести(ПроцессорКомпоновкиДанныхРасшифровка);

    ФормаПечати.Открыть();
```

Не помню только почему, но форму для расшифровки делал свою
---
спасибо (1SM отдал вам) код натолкнул на верную мысль :) я понял, что вы делали на обычных формах, по этому просто для тех кому интересно и кто набредёт через гугл

В форме отчёта от куда вызывается расшифровка:

```1c
    &НаКлиенте
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)

    Если КлючТекущегоВарианта = "Основной" Тогда

    СтандартнаяОбработка = ЛОЖЬ;

    сРасшифровки = ОбработкиРасшифровкуНаСервере(Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры);

    Если сРасшифровки.Материал <> Неопределено Тогда

    Если сРасшифровки.РасшифровкаОстатка Тогда
    СтрПараметры = Новый Структура;
    СтрПараметры.Вставить("Дата", ТекущаяДата());
    СтрПараметры.Вставить("Номенклатура", сРасшифровки.Материал);
    ОткрытьФорму("ВнешнийОтчет.МойОтчёт.Форма.ФормаРасшиврокаОстаткиСерии",СтрПараметры);
    Иначе
    Возврат;
    КонецЕсли;
    КонецЕсли;

    КонецЕсли;

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

    &НаСервере
    Функция ОбработкиРасшифровкуНаСервере(Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)

    сРасшифровки = Новый Структура;

    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    РасшифровкаОстатка = Данные.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "Остаток";
    РасшифровкаЗатребовано = Данные.Элементы[Расшифровка].ПолучитьПоля()[0].Поле = "Затребовано";

    сРасшифровки.Вставить("РасшифровкаОстатка",РасшифровкаОстатка);
    сРасшифровки.Вставить("РасшифровкаЗатребовано",РасшифровкаЗатребовано);

    Если РасшифровкаОстатка ИЛИ РасшифровкаЗатребовано Тогда

    МассивИменТекущихПолей = Новый Массив();
    МассивИменТекущихПолей.Добавить("Дефицит");
    МассивИменТекущихПолей.Добавить("Затребовано");
    МассивИменТекущихПолей.Добавить("Остаток");

    ЗначениеНужногоПоляВСтроке = ПолучитьЗначениеПоляВСтрокеНаСервере(Расшифровка,МассивИменТекущихПолей,"Материалы");
    сРасшифровки.Вставить("Материал",ЗначениеНужногоПоляВСтроке);

    КонецЕсли;

    Возврат сРасшифровки;

    КонецФункции

    //Эта функция с инфостарта кстати
    &НаСервере
    Функция ПолучитьЗначениеПоляВСтрокеНаСервере(Расшифровка, ИменаТекущихПолей, ИмяНужногоПоля, НужноеПолеСлева = Истина)
    ДанныеОтчета = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
    ПолеРасшифровки = ДанныеОтчета.Элементы.Получить(Расшифровка).ПолучитьПоля()[0];
    Если Не ПолеРасшифровки = Неопределено Тогда
    Если Не ИменаТекущихПолей.Найти (ПолеРасшифровки.Поле) = Неопределено Тогда
    // поиск нужного поля в направлении, которое указано в НужноеПолеСлева
    ШагПоискаРасшифровки = ?(НужноеПолеСлева, -1, 1);
    КоличествоПолейОтчета = ДанныеОтчета.Элементы.Количество();
    СчетчикРасшифровки = Расшифровка + ШагПоискаРасшифровки;
    ПоказательВыходаЗаПределыТекущихПолей = Ложь;
    Пока СчетчикРасшифровки >= 0 И СчетчикРасшифровки < КоличествоПолейОтчета Цикл
    ЭлементРасшифровки = ДанныеОтчета.Элементы.Получить(СчетчикРасшифровки);
    Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
    ПолеРасшифровки = ЭлементРасшифровки.ПолучитьПоля()[0];
    Если ПолеРасшифровки.Поле = ИмяНужногоПоля Тогда
    Возврат ПолеРасшифровки.Значение;
    Иначе
    Если ИменаТекущихПолей.Найти (ПолеРасшифровки.Поле) = Неопределено Тогда
    ПоказательВыходаЗаПределыТекущихПолей = Истина;
    Иначе
    Если ПоказательВыходаЗаПределыТекущихПолей Тогда Возврат Неопределено КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    Иначе
    Возврат Неопределено;
    КонецЕсли;
    СчетчикРасшифровки = СчетчикРасшифровки + ШагПоискаРасшифровки;
    КонецЦикла;
    КонецЕсли;
    КонецЕсли;
    Возврат Неопределено;
    КонецФункции
```

А затем в форме произвольной разместил табличный документ и код модуля:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ДатаОстатков = Параметры.Дата;
    Номенклатура = Параметры.Номенклатура;
    КонецПроцедуры

    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    СформироватьОтчёт();
    КонецПроцедуры

    &НаСервере
    Процедура СформироватьОтчёт()

    СхемаКомпоновкиДанных = РеквизитФормыВЗначение("Объект").ПолучитьМакет("РасшифровкаОстаткиСерии");

    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

    //Установка компактного макета
    МакетОформления = "ОформлениеОтчетовБежевый";
    БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметрВывода(Настройки, "МакетОформления", МакетОформления);

    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    КомпоновщикНастроек.Инициализировать(
    Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

    //Установка параметров
    Настройки = КомпоновщикНастроек.Настройки;
    Параметр = Настройки.ПараметрыДанных.Элементы.Найти("Дата");
    Параметр.Значение = ДатаОстатков;
    Параметр.Использование = Истина;
    Параметр = Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура");
    Параметр.Значение = Номенклатура;
    Параметр.Использование = Истина;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
    Настройки,ДанныеРасшифровки,,
    Тип("ГенераторМакетаКомпоновкиДанных"));

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    Результат = Новый ТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

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

Всё отлично взлетело на внешнем отчёте - который успешно работает и через файл-открыт :)
---
Если в 2х словах и УФ, то подключаем внешний файл отчета - точно также как это делается для доп отчетов. Это раз.
Два - выполняем отчет со второй схемой. Примерно так https://wiki.programstore.ru/neskolko-sxem-dannyx-v-odnom-otchete-skd/

Это не рецепт, а направление движения. Все это разбирали в нашем курсе по СКД https://learn.programstore.ru/video_kurs_skd
---
Возможно ваше решение тоже имеет место быть, не проверял :) Курс дело хорошее
---
Вместо 2й формы можно использовать типовую общую "форма отчета" ??