Имя: Пароль:
1C
1С v8
СКД: Не работает расшифровка при программном выводе
,
0 LevelUP
 
16.09.11
10:26
Скармливаю ТаблицуЗначений СКД. Программно заполняю доступные поля и структуру группировок. Вывожу в табличное поле. Все выводится нормально, но не работает стандартная расшифровка.
Оно пользователю вроде и не надо, но мне интересно что нужно сделать чтоб заработала? Раньше выводил программно и все работало, правда там не было программного заполнения полей, да и источник данных был запрос, а не таблица.
1 lubja
 
16.09.11
10:30
я писала что-то типа

   Перем ВыполненноеДействие;
   СтандартнаяОбработка = Ложь;
   ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
   
   ДоступныеДействия = Новый Массив;      // заполняем доступные действия, если параметр не указан, то будут доступны все действия
   ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
   ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
   
   //НастройкиРасшифровки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия);
   НастройкиРасшифровки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие);
   
   Если НастройкиРасшифровки <> Неопределено Тогда
       
       КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиРасшифровки);
       
       ОбновитьОтчет();
       
   КонецЕсли;
2 fisher
 
16.09.11
10:34
(0) Вроде стандартная расшифровка сама работает только ежели в объекте "Отчет" интегрированную СКД юзать. В других случаях обработчик надо тулить.
3 LevelUP
 
16.09.11
10:35
(1) ну это перехват стандартной вроде. Мне интересно почему сама стандартная не открывается
4 LevelUP
 
16.09.11
10:36
(2) а ну вот и ответ
5 fisher
 
16.09.11
11:14
(3) Это, скорее, как раз и есть стандартная расшифровка. Просто объект "Отчет" подобный обработчик сам неявно навешивает.
6 LevelUP
 
16.09.11
11:25
Странное дело, у меня в процедуру назначенную событию ОбработкаРасшифровки ТП вообще не заходит, как будто за этими ячейками и нет ничего. Может я добавляя поля их не типизировал должным образом, или еще что.
7 LevelUP
 
16.09.11
11:42
+6 убрал вообще программное заполнение полей и группировок, все настроил вручную в самом макете компановки. Все равно не заходит в ОбработкуРасшифровки. Может дело в настройках ТП, но сколько нибудь подходящего свойства у него не нашел.
8 GANR
 
16.09.11
11:57
В режиме тонкого клиента расшифровку универсального отчета я сделал так:

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

   КонецЕсли;
КонецПроцедуры

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

&НаСервере
Функция СохранитьНастройкиНовойФормы()
   
   ПараметрыОтчета = Новый Структура;
   ПараметрыОтчета.Вставить("ГруппировкиСтрок",                ГруппировкиСтрок.Выгрузить());
   ПараметрыОтчета.Вставить("ГруппировкиКолонок",                ГруппировкиКолонок.Выгрузить());
   ПараметрыОтчета.Вставить("РесурсыОтчета",                    РесурсыОтчета.Выгрузить());
   ПараметрыОтчета.Вставить("ИдентификаторПараметраРегистра",    ИдентификаторПараметраРегистра);
   ПараметрыОтчета.Вставить("НКД_Расшифровки",                    НКД_Расшифровки);
   ПараметрыОтчета.Вставить("Период",                            Период);
   ПараметрыОтчета.Вставить("Периодичность",                    Периодичность);
   Разрез = "";
   Структура = НКД_Расшифровки.Структура[0];
   Попытка
       Разрез = Структура.Строки[0].ПоляГруппировки.Элементы[0].Поле;
   Исключение
   КонецПопытки;
   Попытка
       Разрез = ?(Разрез = "", Структура.ПоляГруппировки.Элементы[0].Поле, Разрез);
   Исключение
   КонецПопытки;
   ПараметрыОтчета.Вставить("Разрез",    Строка(Разрез));
   
   Возврат ПоместитьВоВременноеХранилище(ПараметрыОтчета);
   
КонецФункции
9 LevelUP
 
16.09.11
12:00
(8)у меня не заходит в эту процедуру
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
и клиент кстати обычный
10 fisher
 
16.09.11
12:04
(9) При программной компоновке данные расшифровки не забыл указать?
11 LevelUP
 
16.09.11
12:09
>>При программной компоновке данные расшифровки не забыл указать?

Вот мой код уже без программной настройки полей. Может действительно что-то не указал.

ВнешниеНаборыДанных = Новый Структура;
       ВнешниеНаборыДанных.Вставить("Таблицка",тт1);
       СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
       КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
       
       КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
       МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки);
       
       ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
       ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
       ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,ДанныеРасшифровки);
       
       ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
       ПроцессорВывода.УстановитьДокумент(докк);
       
       КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
       
       ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
12 fisher
 
16.09.11
12:18
КомпоновщикМакетаКомпоновкиДанных (DataCompositionTemplateComposer)
Выполнить (Execute)
Синтаксис:
Выполнить(<Схема>, <Настройки>, <ДанныеРасшифровки>, <МакетОформления>, <ТипГенератора>, <ПроверятьДоступностьПолей>, <ПараметрыФункциональныхОпций>)
Параметры:
<ДанныеРасшифровки> (необязательный)
Тип: ДанныеРасшифровкиКомпоновкиДанных. Содержит переменную, в которую будут помещены данные расшифровки. Если параметр не указан, расшифровка заполняться не будет.
13 GenV
 
16.09.11
12:20
(11) ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; - убил расшифровку
14 LevelUP
 
16.09.11
12:31
(12)Да действительно проморгал. Спасибо!
15 fisher
 
16.09.11
12:32
(14) Ты это в отчете делаешь? Тогда всё на порядок проще можно сделать.
16 LevelUP
 
16.09.11
12:33
(15) да в отчете. Что именно проще?
17 Defender aka LINN
 
16.09.11
12:39
(16) гугли СП на тему "СкомпоноватьРезультат"
18 fisher
 
16.09.11
12:50
(16) Соврал, не на порядок. Но... Как-то так:
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("Таблицка",тт1);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(докк);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

(17) Ему надо внешние источники данных подключить.
19 fisher
 
16.09.11
12:52
Расширение формы отчета уже имеет свойство "ДанныеРасшифровки", а у отчета есть свойство "СхемаКомпоновкиДанных", связанное с интегрированным компоновщиком настроек.
20 LevelUP
 
16.09.11
12:57
(18) а если схем несколько и настройки у них разные? В свойстве "СхемаКомпоновкиДанных" будет сидеть только основная.
21 fisher
 
16.09.11
13:02
(20) Тогда не канает, ессно. При нескольких схемах преимущества использования отчета практически к нулю сводятся. Хоть обработкой выводи.
22 Defender aka LINN
 
16.09.11
13:07
(18) Тогда хуже. Но в типовых есть функция, которая все выводит.