|
СКД - подскажите как скопировать отбор из одного варианта в другой. | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
12.03.14
✎
14:47
|
Суть - надо первый вариант показать, а второй выгрузить в ТЗ.
В первом получаю список сотрудников во втором - список подразделений в которых эти сотрудники работают. Как далаю делаю в СКД два варианта первый настраиваю на вывод - и с ним работает пользователь как с нормальной СКД а второй - пользователь не видит - он нужен именно для спсика подразделений но на него надо наложить отборы которые пользователь настроит для первого варианта вот как скопировать отборы из первого варианта во второй? |
|||
1
RomaH
naïve
12.03.14
✎
14:48
|
вывод "на печать":
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; //Получаем схему из макета СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Из схемы возьмем настройки по умолчанию //Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных; КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); //КомпоновщикНастроекДанных.ЗагрузитьНастройки(Настройки); КомпоновщикНастроекДанных.ЗагрузитьНастройки(КомпоновщикНастроек.Настройки); КомпоновщикНастроекДанных.ЗагрузитьПользовательскиеНастройки(КомпоновщикНастроек.ПользовательскиеНастройки); Настройки = КомпоновщикНастроекДанных.ПолучитьНастройки(); //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); //Выполним компоновку с помощью процессора компоновки ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки); //Очищаем поле табличного документа ДокументРезультат.Очистить(); //Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); |
|||
2
RomaH
naïve
12.03.14
✎
14:49
|
дальше вроде должно быть:
КомпоновщикНастроекДанных .ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.Подразделения); |
|||
3
RomaH
naïve
12.03.14
✎
15:00
|
только рекурсивно обходя элементы отбора?
|
|||
4
ParinovS
12.03.14
✎
15:07
|
(3) только
|
|||
5
RomaH
naïve
12.03.14
✎
15:12
|
а кроме настрое, пользовательские настройки надо тоже копировать? или там отбора нет?
|
|||
6
vmv
12.03.14
✎
15:19
|
часть функционала перта и переписана, в общем модуле располагаем методы поддержки СКД
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Общий модуль: Add_СКД_КлиентСервер // Автор: vmv, 2013 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ... //--- Методы общего назначения: СКД копирование элементов настроек // // Add_СКД_КлиентСервер.СкопироватьЭлементыНастроекКд(ПриемникОтбор, ИсточникОтбор, Истина); // // Устанавливает параметры для любого Скд // Процедура СкопироватьЭлементыНастроекКд(ПриемникЗначения, ИсточникЗначения, ОчищатьПриемник = Истина) Экспорт Если ТипЗнч(ИсточникЗначения) = Тип("УсловноеОформлениеКомпоновкиДанных") ИЛИ ТипЗнч(ИсточникЗначения) = Тип("ВариантыПользовательскогоПоляВыборКомпоновкиДанных") ИЛИ ТипЗнч(ИсточникЗначения) = Тип("ОформляемыеПоляКомпоновкиДанных") ИЛИ ТипЗнч(ИсточникЗначения) = Тип("ЗначенияПараметровДанныхКомпоновкиДанных") Тогда СоздаватьПоТипу = Ложь; Иначе СоздаватьПоТипу = Истина; КонецЕсли; ПриемникЭлементов = ПриемникЗначения.Элементы; Если ОчищатьПриемник Тогда ПриемникЭлементов.Очистить(); КонецЕсли; ИсточникЭлементов = ИсточникЗначения.Элементы; Для каждого ЭлементИсточник Из ИсточникЭлементов Цикл Если ТипЗнч(ЭлементИсточник) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда Индекс = ИсточникЭлементов.Индекс(ЭлементИсточник); // Элементы порядка добавляем в начало ЭлементПриемник = ПриемникЭлементов.Вставить(Индекс, ТипЗнч(ЭлементИсточник)); Иначе Если СоздаватьПоТипу Тогда ЭлементПриемник = ПриемникЭлементов.Добавить(ТипЗнч(ЭлементИсточник)); Иначе ЭлементПриемник = ПриемникЭлементов.Добавить(); КонецЕсли; КонецЕсли; ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник); // В некоторых коллекциях необходимо заполнить другие коллекции Если ТипЗнч(ИсточникЭлементов) = Тип("КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных") Тогда СкопироватьЭлементыНастроекКд(ЭлементПриемник.Поля, ЭлементИсточник.Поля); СкопироватьЭлементыНастроекКд(ЭлементПриемник.Отбор, ЭлементИсточник.Отбор); ЗаполнитьЭлементыНастроекКд(ЭлементПриемник.Оформление, ЭлементИсточник.Оформление); ИначеЕсли ТипЗнч(ИсточникЭлементов) = Тип("КоллекцияВариантовПользовательскогоПоляВыборКомпоновкиДанных") Тогда СкопироватьЭлементыНастроекКд(ЭлементПриемник.Отбор, ЭлементИсточник.Отбор); КонецЕсли; // В некоторых элементах коллекции необходимо заполнить другие коллекции Если ТипЗнч(ЭлементИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда СкопироватьЭлементыНастроекКд(ЭлементПриемник, ЭлементИсточник); ИначеЕсли ТипЗнч(ЭлементИсточник) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда СкопироватьЭлементыНастроекКд(ЭлементПриемник, ЭлементИсточник); ИначеЕсли ТипЗнч(ЭлементИсточник) = Тип("ПользовательскоеПолеВыборКомпоновкиДанных") Тогда СкопироватьЭлементыНастроекКд(ЭлементПриемник.Варианты, ЭлементИсточник.Варианты); ИначеЕсли ТипЗнч(ЭлементИсточник) = Тип("ПользовательскоеПолеВыражениеКомпоновкиДанных") Тогда ЭлементПриемник.УстановитьВыражениеДетальныхЗаписей (ЭлементИсточник.ПолучитьВыражениеДетальныхЗаписей()); ЭлементПриемник.УстановитьВыражениеИтоговыхЗаписей(ЭлементИсточник.ПолучитьВыражениеИтоговыхЗаписей()); ЭлементПриемник.УстановитьПредставлениеВыраженияДетальныхЗаписей(ЭлементИсточник.ПолучитьПредставлениеВыраженияДетальныхЗаписей ()); ЭлементПриемник.УстановитьПредставлениеВыраженияИтоговыхЗаписей(ЭлементИсточник.ПолучитьПредставлениеВыраженияИтоговыхЗаписей ()); КонецЕсли; КонецЦикла; КонецПроцедуры // // Add_СКД_КлиентСервер.ЗаполнитьЭлементыНастроекКд(ПриемникЗначения, ИсточникЗначения, Ложь, Истина); // // Устанавливает параметры для любого Скд // Процедура ЗаполнитьЭлементыНастроекКд(ПриемникЗначения, ИсточникЗначения, ПервыйУровень = Неопределено) Экспорт Если ТипЗнч(ПриемникЗначения) = Тип("КоллекцияЗначенийПараметровКомпоновкиДанных") Тогда КоллекцияЗначений = ИсточникЗначения; Иначе КоллекцияЗначений = ИсточникЗначения.Элементы; КонецЕсли; Для каждого ЭлементИсточник Из КоллекцияЗначений Цикл Если ПервыйУровень = Неопределено Тогда ЭлементПриемник = ПриемникЗначения.НайтиЗначениеПараметра(ЭлементИсточник.Параметр); Иначе ЭлементПриемник = ПервыйУровень.НайтиЗначениеПараметра(ЭлементИсточник.Параметр); КонецЕсли; Если ЭлементПриемник = Неопределено Тогда Продолжить; КонецЕсли; ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник); Если ТипЗнч(ЭлементИсточник) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда Если ЭлементИсточник.ЗначенияВложенныхПараметров.Количество() <> 0 Тогда ЗаполнитьЭлементыНастроекКд(ЭлементПриемник.ЗначенияВложенныхПараметров, ЭлементИсточник.ЗначенияВложенныхПараметров, ПриемникЗначения); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры .... Пример вызова //5. Копируем ПорядокКомпоновкиДанных В Приемник(ОтчетОбъект.КомпоновщикНастроек.Настройки.Порядок) из Источник(ДсЖурналПлатежей.Порядок) Add_СКД_КлиентСервер.СкопироватьЭлементыНастроекКд(ОтчетОбъект.КомпоновщикНастроек.Настройки.Порядок, ДсЖурналПлатежей.Порядок, Истина); //6. Копируем ОтборКомпоновкиДанных В Приемник(ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор) из Источник(ДсЖурналПлатежей.Отбор) Add_СКД_КлиентСервер.СкопироватьЭлементыНастроекКд(ОтчетОбъект.КомпоновщикНастроек.Настройки.Отбор, ДсЖурналПлатежей.Отбор, Истина); |
|||
7
RomaH
naïve
12.03.14
✎
15:33
|
а пользовательские настройки и фиксированные - тоже обходом копировать?
параметры и отборы интересуют |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |