Имя: Пароль:
1C
 
8.3 УФ. В обработке подвязать данные расшифровки к табличному документу
0 SeiOkami
 
08.09.17
09:30
Здравия!

Есть обработка на УФ. В ней есть две СКД, два компоновщика, два табличного поля результата. Добавляю два реквизита данных расшифровки.

Как можно их подвязать к табличным документам, чтобы платформа сама их обрабатывала так же, как обрабатывает в обычных отчётах. Можно это сделать без написания своего кода в обработке расшифровки?
1 SeiOkami
 
08.09.17
09:50
уп
2 Lexey_
 
08.09.17
09:53
(0) код показывай
3 SeiOkami
 
08.09.17
09:54
(2), код чего?
4 Lexey_
 
08.09.17
09:56
(3) формирования отчета(заполнения табличного документа)
5 SeiOkami
 
08.09.17
09:59
Стандартно всё. Очычное формирование скд, типа этого

    
    СхемаКомпоновкиДанных         = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки                     = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ДанныеРасшифровки             = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета             = Новый КомпоновщикМакетаКомпоновкиДанных;    
    МакетКомпоновки             = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанных"));
    ПроцессорКомпоновкиДанных     = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    
    Результат.Очистить();
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
6 Lexey_
 
08.09.17
10:04
(5) тут косяк ДанныеРасшифровки             = Новый ДанныеРасшифровкиКомпоновкиДанных;
7 Lexey_
 
08.09.17
10:07
(5) спрашиваешь  "Как можно реквизиты данных расшифровки подвязать к табличным документам", а сам эти реквизиты в коде не используешь
8 SeiOkami
 
08.09.17
10:19
использую, это лишь пример
у меня есть реквизит с адресом данных расширофвки
и реквизит с результатом
когда клацаешь по полям отчёта, то выводится окно с индексом данных расширофвки
но сама расшифровка не срабатывает
потому что нужно либо писать код обработки расшифровки
либо как-то подвязать табличный документ с адресом данных расшифровки
9 Lexey_
 
08.09.17
10:21
(8) "использую, это лишь пример", а зачем ты пример выложил? Выложи код, который используешь
10 SeiOkami
 
08.09.17
10:44
просто там общий модуль вытягивать

АнализИзменений_Результат.Очистить();
    
    ДанныеРасшифровки    = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    МеханизмыСхемыКомпоновкиДанных.СкомпоноватьРезультат(АнализИзменений_Результат, АнализИзменений_АдресСхемы,
    АнализИзменений_КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки,
    Новый Структура("СтыкованныеДанные", СтыкованныеДанные.Выгрузить()));
    
    ПоместитьВоВременноеХранилище(ДанныеРасшифровки, АнализИзменений_ДанныеРасшифровки);
11 SeiOkami
 
08.09.17
10:44
// Выполняет схему компоновки данных в ТЗ, ДЗ или ТабДокумент.
//
// Параметры:
//  Результат                    - ТаблицаЗначений, ДеревоЗначений, ТабличныйДокумент    - Документ, в который будет осуществляться вывод.
//  СхемаИлиАдрес                - СхемаКомпоновкиДанных, Строка                            - СКД или Адрес на временное хранилище с СКД
//    НастройкиКомпоновкиДанных    - НастройкиКомпоновкиДанных                                - Настройки, которые необходимо выполнять. Если не заполнено, будут выполняться НастройкиПоУмолчанию
//    ДанныеРасшифровки            - ДанныеРасшифровкиКомпоновкиДанных, Ложь                - ДанныеРасшифровки. Если "Ложь", то расшифровка заполняться не будет. (Именно Ложь, потому что стандартное свойство ДанныеРасшифровки может принимать значение Неопределено)
//    ВнешниеНаборыДанных            - Структура                                                - Внешние наборы даннных. Если имя набора совпадает с именем набора-запроса в СКД, то это набор оборачивается в набор-объект
//    ДополнительныеПараметры        - Структура                                                - содержит доп. параметры процедуры.
//
//        ДополнительныеПараметры
//            {ИмяКлюча}                                        { Тип.Вид:ПоУмолчанию }                            {Функциональное описание}
//            - МакетОформления                                - МакетОформленияКомпоновкиДанных                - Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных. Если не указан, будет использоваться макет оформления по умолчанию.
//            - ПроверятьДоступностьПолей                        - Булево:Истина                                    - Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
//            - ПараметрыФункциональныхОпций                    - Структура                                        - Содержит параметры функциональных опций, используемые при исполнении отчета.
//            - ВозможностьИспользованияВнешнихФункций        - Булево:Ложь                                    - Содержит параметры функциональных опций, используемые при исполнении отчета.
//            - СпособВосстановленияНастроекКомпоновкиДанных    - СпособВосстановленияНастроекКомпоновкиДанных    - Если указан, то настройки обрабатываются методом "Восстановить" компоновщика настроек
//            - ОбъектСтатистики                                - Справочник.ОбменыДанными                        - элемент справочника, для которого необходимо писать статистику выполнения в РС СтатистикаПроизводительности. Дополнительно пишется количество строк каждого набора данных
//
Процедура СкомпоноватьРезультат(Результат, СхемаИлиАдрес, Настройки = Неопределено,
    ДанныеРасшифровки = Ложь, ВнешниеНаборыДанных = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
    
    
    
    //Первоначальная настройка
    ИмяТекущегоМетода    = "СкомпоноватьРезультат";
    ДополнитьИзШаблона(ДополнительныеПараметры, ИмяТекущегоМетода);
    ПисатьСтатистику    = ДополнительныеПараметры.ОбъектСтатистики <> Неопределено;
    
    Если ПисатьСтатистику Тогда
        
        ДанныеСтатистики    = СтатистикаПроизводительности_НачалоВыполнения(ДополнительныеПараметры.ОбъектСтатистики, ИмяТекущегоМетода);
        
        ОписаниеВнешнихНаборовДанных    = Новый Структура;
        Для Каждого ВнешнийНаборДанных Из ВнешниеНаборыДанных Цикл
            
            ОписаниеВнешнихНаборовДанных.Вставить(ВнешнийНаборДанных.Ключ, Новый Структура("Количество"));
            
            ТипВнешнегоНабораДанных    = ТипЗнч(ВнешнийНаборДанных.Значение);
            Если ТипВнешнегоНабораДанных = Тип("ТаблицаЗначений")
                ИЛИ ТипВнешнегоНабораДанных = Тип("ДеревоЗначений")
                ИЛИ ТипВнешнегоНабораДанных = Тип("ВыборкаИзРезультатаЗапроса") Тогда
                ОписаниеВнешнихНаборовДанных[ВнешнийНаборДанных.Ключ].Количество    = ВнешнийНаборДанных.Значение.Количество();
            КонецЕсли;
            
        КонецЦикла;
        
        ДанныеСтатистики.СохраняемыеДанные.Вставить("ВнешниеНаборыДанных", ОписаниеВнешнихНаборовДанных);
        
    КонецЕсли;
    
    СхемаКомпоновкиДанных    = ?(ЭтоАдресВременногоХранилища(СхемаИлиАдрес), ПолучитьИзВременногоХранилища(СхемаИлиАдрес), СхемаИлиАдрес);
    Если Настройки = Неопределено Тогда
        ВыполняемыеНастройки    = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ИначеЕсли ТипЗнч(Настройки) = Тип("Строка") Тогда
        ВыполняемыеНастройки    = СхемаКомпоновкиДанных.ВариантыНастроек.Найти(Настройки);
        Если ВыполняемыеНастройки = Неопределено Тогда
            ВызватьИсключение "Не найден вариант настроек: " + Настройки;
        КонецЕсли;
        ВыполняемыеНастройки    = ВыполняемыеНастройки.Настройки;
    Иначе
        ВыполняемыеНастройки    = КопияЗначения(Настройки);
    КонецЕсли;
    
    Если ДополнительныеПараметры.СпособВосстановленияНастроекКомпоновкиДанных <> Неопределено Тогда
        КомпоновщикНастроек    = Новый КомпоновщикНастроекКомпоновкиДанных;
        КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
        КомпоновщикНастроек.ЗагрузитьНастройки(ВыполняемыеНастройки);
        КомпоновщикНастроек.Восстановить(ДополнительныеПараметры.СпособВосстановленияНастроекКомпоновкиДанных);
        ВыполняемыеНастройки    = КомпоновщикНастроек.ПолучитьНастройки();
    КонецЕсли;
    
    ТипГенератора                = ?(ТипЗнч(Результат) = Тип("ТаблицаЗначений") ИЛИ ТипЗнч(Результат) = Тип("ДеревоЗначений"),
    Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"), Тип("ГенераторМакетаКомпоновкиДанных"));
    
    
    
    //Компоновка
    КомпоновщикМакета             = Новый КомпоновщикМакетаКомпоновкиДанных;    
    
    Если ДанныеРасшифровки = Ложь Тогда        //Есть мнение, что если не передавать ДанныеРасшифровки, то будет быстрее (нужно будет провести эксперимент).
        МакетКомпоновки             = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ВыполняемыеНастройки, ,
        ДополнительныеПараметры.МакетОформления, ТипГенератора,
        ДополнительныеПараметры.ПроверятьДоступностьПолей, ДополнительныеПараметры.ПараметрыФункциональныхОпций);
        ПроцессорКомпоновкиДанных     = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,,
        ДополнительныеПараметры.ВозможностьИспользованияВнешнихФункций);
    Иначе
        МакетКомпоновки             = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ВыполняемыеНастройки, ДанныеРасшифровки,
        ДополнительныеПараметры.МакетОформления, ТипГенератора,
        ДополнительныеПараметры.ПроверятьДоступностьПолей, ДополнительныеПараметры.ПараметрыФункциональныхОпций);
        ПроцессорКомпоновкиДанных     = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных,
        ДанныеРасшифровки, ДополнительныеПараметры.ВозможностьИспользованияВнешнихФункций);
    КонецЕсли;
    
    
    
    //Вывод
    Если ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных") Тогда
        
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(Результат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
        
    Иначе
        
        Если Результат = Неопределено Тогда
            Результат    = Новый ТабличныйДокумент;
        КонецЕсли;
        
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
        ПроцессорВывода.УстановитьОбъект(Результат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
        
    КонецЕсли;
    
    Если ПисатьСтатистику Тогда
        СтатистикаПроизводительности_ОкончаниеВыполнения(ДанныеСтатистики);
    КонецЕсли;
    
КонецПроцедуры
12 SeiOkami
 
08.09.17
10:52
вопрос в том, можно ли как-то в самом редакторе формы подвязать к табличному документу реквизит с данными расшифровки

в форме отчёта есть свойство "данные расшифровки". Но это форма ОТЧЕТА, а у меня обработка. + У меня в обработке ДВА компоновщика, ДВА табличных поля результата и соответственно ДВА реквизита с расшифровкой
13 Lexey_
 
08.09.17
11:01
(10) ДанныеРасшифровки    = Новый ДанныеРасшифровкиКомпоновкиДанных;
не инициализируй новый объект, а используй существующий(один из твоих реквизитов)
14 DmitrO
 
08.09.17
11:08
В платформе нету никакой волшебной "подвязки табличного документа к адресу данных расшифровки", есть просто специальное поведение формы отчета где у формы отчета указание соответствующих реквизитов.

Соответственно, чтобы решить задачу надо просто написать код обработки расшифровки для каждого табличного документа и все.
15 SeiOkami
 
08.09.17
11:10
(13), в этом нет никакой проблемы. Данные нормально формируются и помещаются во ВХ
16 SeiOkami
 
08.09.17
11:11
(14), ок, надеялся, что всё-таки что-то волшебное есть. Спасибо
17 DmitrO
 
08.09.17
11:19
(16)примерно так:
&НаКлиенте
Процедура Результат1ОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки1, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет1));
    ОбработкаРасшифровки.ПоказатьВыборДействия(Новый ОписаниеОповещения("ВыборРасшифровки1", ЭтотОбъект, Расшифровка), Расшифровка, , , Истина);
    
КонецПроцедуры

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

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