1С 8.3 Скопировать настройки СКД - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

1С 8.3 Скопировать настройки СКД

Данные > Примеры кода 1С > 1С 8.3 Схема компоновки данных (СКД)
С помощью этих функций можно скопировать однотипные коллекции элементов настроек компоновки, например, загрузить в компоновщик ранее сохраненные в XML настройки или, наборот, выгрузить в XML (см. примеры в комментариях). Функции рекомендуется разместить в клиент-серверном общем модуле.
Источник: https://fastcode.im/Templates/9323/funkcii-kopirovaniya-nastroek-komponovki-dannx
Функции копирования настроек компоновки данных (пример от Sokolin D.A.) в 1С 8.3:
// СкопироватьЭлементыНастроекКомпоновкиДанных  —  копирует однотипные коллекции элементов настроек Компоновки Данных
//
// Параметры:
// КоллекцияПриемник —  приемник,коллекция элементов Компоновки Данных, того же типа, что и источник
// КоллекцияИсточник — источник, любая коллекция элементов Компоновки Данных
// ОчищатьПриемник — Булево — при значении Истина (по умолчанию) предварительно очищается коллекция приемник
//
// Пример:
//А.
//    ЗаписьXML = Новый ЗаписьXML;
//    ЗаписьXML.УстановитьСтроку();
//    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, НастройкиОтбора , "Filter", "http://v8.1c.ru/8.1/data-composition-system/settings");
//  УсловияСопоставленияДокументовXML = ЗаписьXML.Закрыть();
//  ......
//    ЧтениеXML = Новый ЧтениеXML;
//    ЧтениеXML.УстановитьСтроку(УсловияСопоставленияДокументовXML);
//    НастройкиОтбораДокументов = СериализаторXDTO.ПрочитатьXML(ЧтениеXML, Тип("ОтборКомпоновкиДанных"));
//      СкопироватьЭлементыНастроекКомпоновкиДанных(КомпоновщикНастроек.Настройки.Отбор, НастройкиОтбораДокументов, Истина);
//
//Б.
//    СкопироватьЭлементыНастроекКомпоновкиДанных(ОтчетОбъект.КомпоновщикНастроек.Настройки.Порядок, Настройки.Порядок, Истина);
Процедура СкопироватьЭлементыНастроекКомпоновкиДанных(Знач КоллекцияПриемник, Знач КоллекцияИсточник, Знач ОчищатьПриемник = Истина) Экспорт

   Если ТипЗнч(КоллекцияИсточник) = Тип("УсловноеОформлениеКомпоновкиДанных")
       Или ТипЗнч(КоллекцияИсточник) = Тип("ВариантыПользовательскогоПоляВыборКомпоновкиДанных")
       Или ТипЗнч(КоллекцияИсточник) = Тип("ОформляемыеПоляКомпоновкиДанных")
       Или ТипЗнч(КоллекцияИсточник) = Тип("ЗначенияПараметровДанныхКомпоновкиДанных") Тогда
       СоздаватьПоТипу = Ложь;
   Иначе
       СоздаватьПоТипу = Истина;
   КонецЕсли;

   ПриемникЭлементов = КоллекцияПриемник.Элементы;
   Если ОчищатьПриемник Тогда
       ПриемникЭлементов.Очистить();
   КонецЕсли;
   ИсточникЭлементов = КоллекцияИсточник.Элементы;

   Для Каждого ЭлементИсточник Из ИсточникЭлементов Цикл

       Если ТипЗнч(ЭлементИсточник) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда
           Индекс = ИсточникЭлементов.Индекс(ЭлементИсточник);                            // Элементы порядка добавляем в начало

           ЭлементПриемник = ПриемникЭлементов.Вставить(Индекс, ТипЗнч(ЭлементИсточник));
       Иначе
           Если СоздаватьПоТипу Тогда
               ЭлементПриемник = ПриемникЭлементов.Добавить(ТипЗнч(ЭлементИсточник));
           Иначе
               ЭлементПриемник = ПриемникЭлементов.Добавить();
           КонецЕсли;
       КонецЕсли;

       ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник);

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

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

   КонецЦикла;

КонецПроцедуры

// ЗаполнитьЭлементыНастроекКомпоновкиДанных  —  копирует однотипные коллекции значений параметров настроек Компоновки Данных
//
// Параметры:
// ПриемникЗначения — приемник, коллекция однотипная с источником
// ИсточникЗначения —  источник, любая коллекция значений параметров настроек Компоновки Данных
// ПредыдущийУровень —  — предыдущий уровень в иерархии приемника
//
Процедура ЗаполнитьЭлементыНастроекКомпоновкиДанных(Знач ПриемникЗначения, Знач ИсточникЗначения, Знач ПредыдущийУровень = Неопределено) Экспорт

   Если ТипЗнч(ПриемникЗначения) = Тип("КоллекцияЗначенийПараметровКомпоновкиДанных") Тогда
       КоллекцияЗначений = ИсточникЗначения;
   Иначе
       КоллекцияЗначений = ИсточникЗначения.Элементы;
   КонецЕсли;

   Для Каждого ЭлементИсточник Из КоллекцияЗначений Цикл
       Если ПредыдущийУровень = Неопределено Тогда
           ЭлементПриемник = ПриемникЗначения.НайтиЗначениеПараметра(ЭлементИсточник.Параметр);
       Иначе
           ЭлементПриемник = ПредыдущийУровень.НайтиЗначениеПараметра(ЭлементИсточник.Параметр);
       КонецЕсли;
       Если ЭлементПриемник = Неопределено Тогда
           Продолжить;
       КонецЕсли;
       ЗаполнитьЗначенияСвойств(ЭлементПриемник, ЭлементИсточник);
       Если ТипЗнч(ЭлементИсточник) = Тип("ЗначениеПараметраКомпоновкиДанных") Тогда
           Если ЭлементИсточник.ЗначенияВложенныхПараметров.Количество() <> 0 Тогда
               ЗаполнитьЭлементыНастроекКомпоновкиДанных(ЭлементПриемник.ЗначенияВложенныхПараметров, ЭлементИсточник.ЗначенияВложенныхПараметров, ПриемникЗначения);
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;

КонецПроцедуры
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 08.04.2024
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому