![]() |
|
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(Действие, ПараметрДействия, Расшифровка) Экспорт Если Действие=ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет или Действие=Неопределено Тогда ИначеЕсли Действие=ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда ПоказатьЗначение(, ПараметрДействия); //ИначеЕсли ... КонецЕсли; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |