Имя: Пароль:
1C
1С v8
СКД. Как передать для расшифровки "ВнешниеНаборыДанных"?
0 arsik
 
гуру
30.05.22
16:37
Собираю данные для отчета отдельно в ТЗ.
Если открываю отчет через Файл - Открыть. Все замечательно все работает. Но как только помещаю отчет в "Дополнительные отчеты и обработки" расшифровка перестает работать. Данные из хранилища пусты.
>ПолучитьИзВременногоХранилища(ДанныеРасшифровки.Настройки.ДополнительныеСвойства.АдресВнешнегоНабораДанных);

Я так понимаю, что отчет делается в режиме фонового задания и данные в хранилище формируются из под фонового задания.
Как правильно передать данные?

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

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

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровки);
ДокументРезультат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
1 toypaul
 
гуру
31.05.22
08:34
В СП к методу ПоместитьВоВременноеХранилище написано как можно получить данные из ФЗ.
Но не понятно как это можно тут применить.
По логике работы отчета он при каждом запуске должен заново получать все данные для формирования. В том числе эту ТЗ. Надо передавать не адрес хранилища, а параметры для формирования этой ТЗ
2 Выпрь
 
31.05.22
08:42
Адрес привязан к форме?
3 arsik
 
гуру
31.05.22
09:00
(1) Зачем? Это расшифровка текущего сформированного отчета по какой ни будь группировке. Зачем мне выбирать данные снова?
(2) Нет. Формы то нет. Отчет это просто СКД + ПриКомпоновкеРезультата()

Сделал через параметр СКД. В него сохраняю данные. Но мне кажется это как то некрасиво.
Если ЭтоРасшифровка Тогда
    ВнешниеНаборыДанных = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(ДанныеРасшифровки.Настройки,"НаборДанных").Значение.Получить();
иначе
    ВнешниеНаборыДанных = Новый Структура("тзРезультат", ПолучитьТЗРезультат());
    КомпоновкаДанныхКлиентСервер.УстановитьПараметр(ДанныеРасшифровки.Настройки,"НаборДанных",Новый ХранилищеЗначения(ВнешниеНаборыДанных));
    ДанныеРасшифровки.Настройки.ДополнительныеСвойства.Вставить("ЭтоРасшифровка", Истина);
КонецЕсли;
4 Выпрь
 
31.05.22
09:26
(3) Без привязке к форме данные живут только до конца вызова
5 СвинТуз
 
31.05.22
09:31
(0)
Свойства отчета правильно настроены?
Программист всегда исправляет последнюю ошибку.