Имя: Пароль:
1C
1С v8
Расшифровка СКД Управляемые Формы
,
0 newbling
 
01.06.15
09:18
Доброго времени суток.
Такая проблема. Программно формирую вывод отчёта с использованием СКД и не получается добавить расшифровку.
Код:

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

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

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); // после выполнения ДанныеРасшифровки почему-то имеют тип Строка
      
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); // естественно, ругается на несоответствие типов в данных расшифровки
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    
КонецПроцедуры
1 LordCMEPTb
 
01.06.15
09:25
В управляемых формах нет отображения данных расшифровки. Может быть в этой строке должен храниться адрес временного хранилища, где эти данные живут.
К слову спросить, а почему не использовать стандартную процедуру "ПриКомпоновкеРезультата" объекта?
2 Defender aka LINN
 
01.06.15
09:25
ПриКомпоновкеРезультата
3 newbling
 
01.06.15
09:41
хм, а как мне туда внешние наборы данных передать, они ж на форме живут.
4 LordCMEPTb
 
01.06.15
09:48
А сделать таблицы табличными частями и использовать их в модуле объекта не получится?
5 newbling
 
01.06.15
09:49
надо попробовать
6 Defender aka LINN
 
01.06.15
09:57
(3) они ж на форме живут
Угу. И передаешь ты их на клиенте, да?
7 newbling
 
01.06.15
10:07
(6) Я их уже сделал табличными частями как посоветовал LordCMEPTb. Вроде как передаются. Теперь осталось как-то подсунуть документ результат который мне нужен - ТабДок.
8 samozvanec
 
01.06.15
10:12
я обычно кладу все во временное хранилище, где надо - получаю. в чем загвоздка?
9 newbling
 
01.06.15
10:17
Есть поле табличного документа на форме - ТабДок. Хочу в него вывести результат. Если пытаюсь вывести просто в ДокументРезультат, то ничего не выводится.
На данный момент вот такое состояние кода:

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

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    //ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
      
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат); //ТабДок?
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
10 newbling
 
01.06.15
10:21
это всё при компоновке результата.
Да, временное хранилище - хорошая идея для таблиц.
11 samozvanec
 
01.06.15
10:23
(9) делаю похожим образом. после

мСхемаАдресВХ                = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных    , УникальныйИдентификатор);
    мРасшифровкаАдресВХ         = ПоместитьВоВременноеХранилище(ДанныеРасшифровки        , УникальныйИдентификатор);
    мВнешниеНаборыДанныхАдресВХ    = ПоместитьВоВременноеХранилище(ВнешниеНаборыДанных        , УникальныйИдентификатор);

в обработке расшифровки

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

        Если ВыполненноеДействие = "Регистратор" Тогда
            
            Настройки = ОбработкаРасшифровки.Расшифровать(Расшифровка, Новый ПолеКомпоновкиДанных("Регистратор"));
            
            ПараметрыОткрытия = Новый Структура("Схема, Настройки, Заголовок, ВнешниеНаборыДанных", СхемаКомпоновкиДанных, Настройки, "Расшифровка", ВнешниеНаборыДанных);
            ОткрытьФорму("ОбщаяФорма.ФормаПросмотраРасшифровкиОтчетовСКД", ПараметрыОткрытия, ЭтаФорма, ЭтаФорма);
            
        КонецЕсли;
        
    КонецЕсли;
12 newbling
 
01.06.15
10:36
(11) я запутался. Т.е. это НЕ через процедуру модуля объекта ПриКомпоновкеРезультата, а просто на форме как у меня было в (0) ?

Просто, на данный момент в (9) вроде как расшифровка передаётся, но я не могу вывести результат, видимо потому что не могу задать ДокументРезультат который мне нужно. А нужно мне табличное поле на форме - ТабДок.
13 LordCMEPTb
 
01.06.15
11:02
(11) А установлен признак, что ТабДок - это документ, в который нужно выводить данные?
В частности интересует свойство формы "РезультатОтчета"
14 LordCMEPTb
 
01.06.15
11:04
Ну а если табличное поле какое-то другое (не назначенное по умолчанию), то можно вызывать метод "СкомпоноватьРезультат", в котором определять собственный табличный документ.
15 samozvanec
 
01.06.15
11:29
(12) нет. я передаю необходимые данные в общую форму, там вывожу в табдок. точно так же можешь вывести и в свой табдок на форме отчета. ты же при формировании заполняешь и настройки, и схему, и внешние наборы. этого достаточно для вывода в любой табдок. я использую общую форму, потому что она универсальная, там своя обработка расшифровки, примитивная.
(14) это вообще обработка у меня, нет такого метода там. я не пользуюсь стандартными фишками, если знаю, что большую их часть мне придется прописывать вручную, и, соответственно, обходить.
16 newbling
 
01.06.15
11:33
(13) Вот в чём дело-то было! Спасибо большое! Ещё раз =)
17 samozvanec
 
01.06.15
11:36
(15) извиняюсь, конечно, за велосипед) но местами без них никак