|
Один отчет и несколько СКД | ☑ | ||
---|---|---|---|---|
0
Demetres
12.05.15
✎
15:55
|
Добрый день! Проблема с подменой основной СКД. В модуле объекта при ПриКомпоновкеРезультата меняю макет и вывожу в табличный документ результат, но при этом на почему-то не работает расшифровка и не выводятся параметры, список отборов появляется, но значения не привязаны к данным. Помогите разобраться.
///////////////////////////////// Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) Если Расшифровка Тогда СтандартнаяОбработка = Ложь; СформироватьОтчетРасшифрока(ДокументРезультат, ДанныеРасшифровки); КонецЕсли; КонецПроцедуры Функция СформироватьОтчетРасшифрока(ДокументРезультат, ДанныеРасшифровки) Макет = Отчеты.ОСВСКД.ПолучитьМакет("Макет1"); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Макет)); КомпоновщикНастроек.ЗагрузитьНастройки(Макет.НастройкиПоУмолчанию); КомпоновщикНастроек.Восстановить(); НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Попытка МакетКомпоновки = КомпоновщикМакета.Выполнить(Макет, НастройкиСКД, ДанныеРасшифровки); Исключение Текст = ОписаниеОшибки(); КонецПопытки; ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.ОтображатьПроцентВывода = Истина; ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); Возврат ДокументРезультат; КонецФункции ///////////////////////////////// |
|||
1
Demetres
12.05.15
✎
16:05
|
Вверх, очень актуально
|
|||
2
Demetres
12.05.15
✎
16:18
|
Может не понятно проблему описал?
|
|||
3
Demetres
12.05.15
✎
16:20
|
Или пример есть у кого?
|
|||
4
Demetres
12.05.15
✎
16:36
|
Ребята в 1С кто-то разбирается?
|
|||
5
Demetres
12.05.15
✎
16:53
|
Если вдруг у кого идеи будут пишите я тут
|
|||
6
DrShad
12.05.15
✎
16:54
|
да какие тут идеи? пиши обработку расшифровки
|
|||
7
Demetres
12.05.15
✎
17:01
|
(6) Так а почему автоматом не работает? Почему отборы отображаются, а значения их не типизированы, и параметры не отображаются? Значит что-то не то делаю, помогите если разбираетесь в СКД.
|
|||
8
Demetres
12.05.15
✎
17:02
|
(6) Стандартная расшифровка там контекстное меню и пункт открыть для ссылочных типов а тут все пусто получается
|
|||
9
DrShad
12.05.15
✎
17:05
|
ну ты же подменил основную схему
|
|||
10
Demetres
12.05.15
✎
17:08
|
(9) А ДанныеРасшифровки я везде заполняю, должно же работать.
И почему только отборы отображаются а параметры нет? |
|||
11
DrShad
12.05.15
✎
17:12
|
у тя данные расшифровки вообще из другой схемы и как оно их должно обработать?
|
|||
12
Demetres
12.05.15
✎
17:14
|
(11) Так получается что отчет можно сформировать только по основной СКД?
|
|||
13
Demetres
12.05.15
✎
17:16
|
(11) ... что бы и расшифровка работала и отборы с параметрами заполнялись нормально?
|
|||
14
Demetres
12.05.15
✎
17:37
|
Чтобы параметры и отборы правильно работали нужно писать так:
НовУникальныйИдентификатор = Новый УникальныйИдентификатор; АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(Макет, НовУникальныйИдентификатор); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(Макет.НастройкиПоУмолчанию); А с расшифровкой так и не разобрался пока |
|||
15
Гёдза
12.05.15
✎
17:42
|
тебе придется перехватывать расшифровку, ибо она привязывается к скд по умолчанию
|
|||
16
Demetres
12.05.15
✎
17:44
|
Понятно. Ладно дома почитаю умных книжек, напишу потом что получилось
|
|||
17
Demetres
12.05.15
✎
17:44
|
Понятно. Дома почитаю умных книжек, напишу потом что получилось
|
|||
18
Demetres
12.05.15
✎
17:44
|
Все спасибо
|
|||
19
Demetres
12.05.15
✎
17:44
|
Всем спасибо :)
|
|||
20
Барматолог
12.05.15
✎
17:54
|
чо спасибо то, вопрос то не решил.
ТЫ не указал - УП или обычное. А это важно, т.к. с УП ты соснешь тунца. |
|||
21
Demetres
12.05.15
✎
20:19
|
(20) Дык никого в теме не было.
Да это УП, и почему не взлетит? |
|||
22
mistеr
12.05.15
✎
20:27
|
(0) Насчет отборов - КомпоновщикНастроек наверное нужно инициализировать при смене схемы, не только при расшифровке.
|
|||
23
Demetres
12.05.15
✎
20:34
|
(22) чтобы отборы и параметры корректно отображались сделал в посте (14) писал, но расшифровка стандартная так и не появилась. Как её получить ума не приложу. Сижу курс по компоновке смотрю.
|
|||
24
Demetres
12.05.15
✎
20:41
|
Если у кого есть мысли по этому поводу, буду признателен, вопрос актуален.
|
|||
25
Demetres
12.05.15
✎
21:06
|
Стандартная расшифровка заработала, вот вариант кода где работают и отборы и расшифровка:
////////////////////// Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) Если Расшифровка Тогда СтандартнаяОбработка = Ложь; СформироватьОтчетРасшифрока(ДокументРезультат, ДанныеРасшифровки); КонецЕсли; КонецПроцедуры Функция СформироватьОтчетРасшифрока(ДокументРезультат, ДанныеРасшифровки) СхемаКомпоновкиДанных = Отчеты.ОСКВД.ПолучитьМакет("Макет1"); НовУникальныйИдентификатор = Новый УникальныйИдентификатор; АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, НовУникальныйИдентификатор); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); КомпоновщикНастроек.Восстановить(); НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Попытка МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД, ДанныеРасшифровки); Исключение Текст = ОписаниеОшибки(); КонецПопытки; ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.ОтображатьПроцентВывода = Истина; ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); Возврат ДокументРезультат; КонецФункции ////////////////////// |
|||
26
Demetres
12.05.15
✎
22:50
|
А вот полный код:
////////////////////////////////////////////////// //Модуль формы отчета &НаКлиенте Процедура ОткрытьОтчет(Команда) ПараметрыОтчета = Новый Структура; ПараметрыСтр = Новый Структура("ЗнчНаименование", "Дима"); Отборы = Новый Структура("Ссылка", ПредопределенноеЗначение("Справочник.Контагенты.Кормалитон")); ОтборСтр = Новый Структура("Параметры, Отборы", ПараметрыСтр, Отборы); ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина); ПараметрыОтчета.Вставить("Расшифровка", Истина); ПараметрыОтчета.Вставить("ОтборыИПараметры", ОтборСтр); ОткрытьФорму("Отчет.ОСКВД.ФормаОбъекта", ПараметрыОтчета, ЭтаФорма); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Параметры.Свойство("Расшифровка", Отчет.Расшифровка); Параметры.Свойство("ОтборыИПараметры", Отчет.ОтборыИПараметры); КонецПроцедуры ////////////////////////////////////////////////// //Модуль оъекта Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) Если Расшифровка Тогда СтандартнаяОбработка = Ложь; СформироватьОтчетРасшифрока(ДокументРезультат, ДанныеРасшифровки); КонецЕсли; КонецПроцедуры Функция СформироватьОтчетРасшифрока(ДокументРезультат, ДанныеРасшифровки) СхемаКомпоновкиДанных = Отчеты.ОСКВД.ПолучитьМакет("Макет1"); НовУникальныйИдентификатор = Новый УникальныйИдентификатор; АдресСхемыКомпоновкиДанных = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, НовУникальныйИдентификатор); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКомпоновкиДанных)); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); КомпоновщикНастроек.Восстановить(); НастройкиСКД = КомпоновщикНастроек.ПолучитьНастройки(); // Заполнить параметры и отборы в настройке ЗаполнитьНастройкуПараметрыИОтбор(НастройкиСКД); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; Попытка МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД, ДанныеРасшифровки); Исключение Текст = ОписаниеОшибки(); КонецПопытки; ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.ОтображатьПроцентВывода = Истина; ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина); Возврат ДокументРезультат; КонецФункции Процедура ЗаполнитьНастройкуПараметрыИОтбор(НастройкиСКД) Если ТипЗнч(ОтборыИПараметры) = Тип("Структура") Тогда Если ОтборыИПараметры.Свойство("Отборы") Тогда Для Каждого ЭлементОтбора Из ОтборыИПараметры.Отборы Цикл ТекПолеКомпановкиДанных = Новый ПолеКомпоновкиДанных(ЭлементОтбора.Ключ); Для Каждого ТекЭлемОтбора Из НастройкиСКД.Отбор.Элементы Цикл Если ТекЭлемОтбора.ЛевоеЗначение = ТекПолеКомпановкиДанных Тогда ТекЭлемОтбора.ПравоеЗначение = ЭлементОтбора.Значение; ТекЭлемОтбора.Использование = Истина; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; Если ОтборыИПараметры.Свойство("Параметры") Тогда Для Каждого ЭлементОтбора Из ОтборыИПараметры.Параметры Цикл ТекПолеКомпановкиДанных = Новый ПараметрКомпоновкиДанных(ЭлементОтбора.Ключ); Для Каждого ТекЭлемПарам Из НастройкиСКД.ПараметрыДанных.Элементы Цикл Если ТекЭлемПарам.Параметр = ТекПолеКомпановкиДанных Тогда ТекЭлемПарам.Значение = ЭлементОтбора.Значение; ТекЭлемПарам.Использование = Истина; Прервать; КонецЕсли; КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры ////////////////////////////////////////////////// Всем спасибо за внимание, может кому-то пригодится. |
|||
27
ЧеловекДуши
13.05.15
✎
08:05
|
(26) Благодарствую :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |