Групове редагування метаданих
Потреба в груповому редагуванні часто обговорювалося і обговорюється серед фахівців, щільно працюють із великими змінами. Деякі концептуальні зміни, що вносяться в конфігурації, вимагають наявності певних реквізитів в об'єктах метаданих. Обійти це можна звичайно за допомогою плану видів характеристик, ну тут повно підводних каменів. Подане рішення дозволяє працювати з будь-яким складом об'єктів метаданих (додавати, змінювати, видаляти і копіювати). Рішення тестувалося на платформі 8.1.7. клієнт серверної версії. Реалізація представленої тут концепції можлива і на платформі 8.0, проте через те, що в 8.1 були переглянуті деякі принципи зберігання опису метаданих, було обрано реалізацію саме на 8.1.
Отже почнемо
Спочатку короткий лікнеп після того, як зберігаються описи метаданих. Всі описи метаданихбази даних зберігаються в таблиці Config, зміни внесені до конфігурації конфігуратором (зміни можна вносити також за допомогою Enterprise Integrator) зберігаються в таблиці ConfigSave. Після оновлення конфігурації запису з таблиці ConfigSave замінюють записи з таблиці Config.
Структура обох таблиць однакова. В якості ключа представлено поле FileName в цьому полі зберігається унікальний ідентифікатор об'єкта метаданих (у даному випадку це може бути як прикладний об'єкт, так і деякі властивості цього об'єкта, такі як Макети і Форми).
Нас у цьому випадку цікавитимуть записи таблиці Config, в яких описані реквізити, табличні частини та інші властивості метаданих. У формі об'єктів конфігурації дані записи матимуть ім'я«Метадані» і будуть підпорядковані безпосередньо об'єкту конфігурації (опис метадані існують також дляформ але крім назви та версій форм вони містять мало цікавого).

У версії 8.0 всі записи з ім'ям«Метадані» (опис метаданих), всіх!! Об'єктів метаданих були об'єднані в одну (metadata)-ця запис була найбільшою в конфігурації, що й ускладнювало її редагування.
Цілі
Для зміни метаданих об'єкта конфігурації достатньо:
редагувати запис опису метаданих;
змінити версію об'єкта конфігурації та всієї конфігурації (використовується запис Versions);
Подивимося, що містить запис записи метаданих.
Структура запис схожа на файл Xml де замість роздільників <> роздільники <> Елементи, що містили набір однотипних об'єктів, містять прапорний ідентифікатор (45е46cbc-3…… або будь-який інший), після якого перерахована кількість об'єктів в елементі (22).

На малюнку зображено один із 22, елемент набору записів, який характеризує реквізити об'єктів метаданих. Цей блок тексту є внутрішнє значення реквізиту метаданих. (Шкода, що об'єкти метаданих не серіалізуються, інакше ймовірно даний блок тексту можна було б отримати, використовуючи наступну конструкцію ЗначенняВрядокВнутр(Метадані.Документи.АВСКласифікація.Реквізити.Коментар)) . Змінюючи склад елементів, що містяться в блоці, ми змінюємо склад реквізитів метаданих або їх властивості, якщо змінюємо значення елементів блоку.
Загальний підхід
Після того, як ми визначилися з цілями, поговоримо про поточну реалізацію.
Не так складно отримати (прочитати внутрішнє значення елементів метаданих), як їх відредагувати з урахуванням вимог. Enterprise Integrator пропонує наступне універсальне рішення.

Внутрішнє уявлення можна як структури значень, містять списки значень. У списках значень поміщаються однотипні об'єкти елементів, на чолі яких стоїть прапорний ідентифікатор, за цим прапоровим ідентифікатором і визначаються, яка властивість об'єктів метаданих перерахована в списку (таблиця відповідностей,Прапорний ідентифікатор-Властивість знаходиться На об'єктів). Список значень, властивостей об'єктів метаданих, формується таким чином, щоб при його зворотному поданні в рядкове уявлення, було отриманотаке ж рядкове значення елемента, як і до перетворення.
У рамках цієї стратегії для зміни реквізитів метаданих об'єктів потрібно виконати наступний алгоритм.

Розібрати об'єкт метаданих і сформувати структуру, скопіювати один із елементів структуриі змінити його, після чоговихідне значення елемента структури тазмінене перетворюється на рядкові уявлення. Отримані строкові уявлення заміняться одне на інше у поданні об'єкта метаданих.
Структура якості
Що робити з набором властивостей більш менш зрозуміло. На цьому можна було б зупинитися, якби нам потрібно тільки видаляти елементи наборів властивостей об'єктів метаданих. Однак це, швидше за все, робити в груповій обробці і не доведеться. Велику необхідність мають такі групові дії з об'єктами метаданих як додавання або зміна, і для того, щоб здійснювати ці операції, необхідно розібрати внутрішню структуру елемента набору властивостей об'єкта метаданих.

На малюнку представлено реквізит документа. Багато властивостей метаданих (реквізити) різних типів прикладних об'єктів різні іотже внутрішнє уявлення цих властивостей крім деяких полів(UNID,Ім'я, Синонім,Коментар[,Тип]) різні. Постійною структурою будь-якого реквізиту об'єкта метаданих є не затінені елементи, структура затінених елементів може змінюватися в залежності від:
- типу прикладного об'єкта;
- значення якості;
- в рамках одного елемента від значення додаткових властивостей об'єкта метаданих в цілому, наприклад для довідника (ієрархічний, не ієрархічний), для регістра відомостей (підпорядкований або не підпорядкований реєстратору) і т.п.


Ім'я
Значення(для перших 2 малюнків)
Ім'я
Синонім
Коментар
Тип
Об'єкти = ОтриматиОб'єктиМетаданих ( Елемент . Значення . ОтриматиТекст ());
Якщо Об'єкти. Властивість ("Реквізити")
Новий Склад Об'єктів = Об'єкти. Реквізити. Копіювати ();
Для кожного Властивість з НовийСкладОб'єктів Цикл
МД = Об'єкт Метаданих (Властивість. Значення);
МД. UNID.Значення =Новий УнікальнийІдентифікатор;
МД. Коментар.Значення = МД. Коментар. Значення + "Ei;" ;
Об'єкт Метаданих ( ). [Ключ].Значення =;
МД. UNID.Значення =
тому що у структурі зберігається елемент списку значень.
Копіювання елементів
Ну тепер ми впритул підійшли до найскладнішого.
Спробуємо перефразувати крилату фразу.
«Для того щоб щось кудись вставити потрібно щось і десь скопіювати?»
Ось для того, щоб визначити це «щось» і «десь», потрібно визначиться з джерелом. Джерелом може бути будь-який об'єкт конфігурації з необхіднимнабором параметрів, тобто джерелом для вставки елемента в реквізити документа, довідника, і т.д. може бути будь-який вимір або ресурс,можливо і зворотний, проте вимір містить більше властивостей ніж наприклад реквізит (Ведуче, Заборона незаповнених значень), тому при додаванні ці властивості приймуть таке ж значення, як і перший елемент колекції, яку додається новий елемент. Відрізняються ці елементи (перший елемент колекції і елемент, що додається) будуть лише елементами постійної структури об'єктів метаданих (див. вище не затінені елементи).

На малюнку зображено результат копіювання реквізиту табличної частини документа у вимірі регістра відомостей.
Однак, для більшої надійності рекомендується копіювати реквізити одного типу. Це збільшить швидкість копіювання реквізитів та компенсує можливі колізії.
Для того щоб визначити ті реквізити які копіюватимемо необхідно у формі «Об'єкти конфігурації» вибрати в дереві об'єктів джерело (прикладний об'єкт, що містить потрібні реквізити). Для кожного прикладного об'єкта існують у таблиці Config запис без закінчення (див. Формат унікального ідентифікатора) у цих записах, як було зазначено вище, і зберігається опис властивостей метаданих прикладного об'єкта. Після відкриття цього запису у формі «Вбудованої мови», у правій частині цієї форми буде сформованооглядач об'єкта – дерево значень, сформоване на основі внутрішнього представлення властивостей метаданих, будується на основі прапорових ідентифікаторів, перелічених у налаштуваннях Параметри – Об'єкти конфігурації – Оглядач об'єктів, колонки цього дерева містять усі доступні властивості елемента колекції (поки це Unid, Ім'я, Синонім, Коментар та Тип). Саме в браузеріоб'єктів потрібно вибрати необхідні елементи властивостей та передати їх у форму "Конструктор запитів" для групової обробки, вибравши пункт контекстного меню в браузері об'єкта.
У результати запиту конструктора також передається дерево конфігурації саме по ньому ми можемо визначити, які прикладні об'єкти нам потрібно додати обрані властивості.
Як згадувалося на самому початку, нас цікавить лише метадані прикладних об'єктів, тому відзначимотільки ці рядки в результатах запиту, для потрібних (редагованих) об'єктів. Це досить просто зробити ще кількість редагованих реквізитів не велика… Але ми затіяли всю цю «кашу» не для того, щоб «тупо» сидіти і вибирати 200 елементів, наприклад довідників у дереві значень. Оскільки редагувати тексти модулів або форми в наше завдання зараз не входить, то здебільшого нам необхідні лише внутрішні ідентифікатори певних прикладних об'єктів. Отримати відповідністьПовне Ім'я -Unid можна за допомогою шаблону «Метадані» Дії – Шаблони –Метадані (перебір) у формі «Конструктор запиту» . Даний шаблон являє собою такий вираз вбудованою мовою:
Результат =Новий ТаблицяЗначень;
Результат. Колонки. Додати ("Ім'я");
Результат. Колонки. Додати ("FileName");
ДлякожногоОб'єктзДовідники.ТипВсіПосилання().Типи()Цикл
//Для кожного Об'єкт з Параметри. Типи МД. Типи () Цикл // Вибрані типи
//Для кожного Об'єкт З Метадані. Обробки Цикл // не посилальнітипи
Мета =? (ТипЗнч (Об'єкт) = Тип ("Об'єктМетаданих"), Об'єкт, Метадані. Знайти ПоТипу (Об'єкт));
Якщо Не Мета = Невизначено Тоді
Новий Рядок = Результат . Додати ();
Новий Рядок . Ім'я = Мета. Повне ім'я ();
Новий Рядок . FileName = Отримати Ідентифікатор МД (Мета); // отримуємо ідентифікатор НАЙГОЛОВНІШЕ
Результат. Сортувати ("Ім'я Возр");
//ОновитиВерсіїЗміннихМетаданих(Параметри.ЗміненіМД) ; //Реєстрація версій для змінених метаданих, використовується після групової обробки
і дозволяє визначити внутрішній унікальний ідентифікатор:
для всіх об'єктів одного типу (Довідників або Документів чи ….)-використовуючи в заголовку циклу наступну конструкцію .ТипВсіПосилання().Типи() ;
для об'єктів різних типів нудні типи необхідно вказати в параметрі «ТипиМД» - використовуючи в заголовку циклу наступну конструкціюДлякожногоОб'єктзПараметри.ТипиМД.Типи() Цикл ;
Для всіх об'єктів не посилання типу (обробок, звітів) засобами перебору об'єктів метаданих
Замінюючи заголовок циклу, ми можемо отримати набір будь-яких прикладних об'єктів. Також додатковий відбір можна поставити в тілі циклу або поле виконання шаблону в результат вибрати лише потрібні рядки. Після виконання шаблону ми отримаємо мінімальний набір даних, необхідний для групового редагування реквізитів.