Особливості визначених елементів об'єктів метаданих під час роботи з вимкненим режимом сумісності
Для деяких об'єктів метаданих у платформі "1С:Підприємство 8" є можливість задавати в конфігурації визначені елементи, для яких в інформаційній базі автоматично створюватимуться об'єкти із заданими значеннями. У цій статті розглядаються деякі особливості їх реалізації та роботи з ними.Загальні відомості. Робота з роздільниками
Для деяких об'єктів метаданих у платформі "1С:Підприємство 8" є можливість задавати в конфігурації визначені елементи, для яких в інформаційній базі автоматично створюватимуться об'єкти із заданими значеннями. У цій статті розглядаються деякі особливості їх реалізації та роботи з ними.
Загальні відомості
Об'єкти даних мають властивість ИмяПредопределенныхДанных, за допомогою якої можна керувати їх зв'язком із метаданими. Об'єкти, у яких цю властивість заповнено, є визначеними.
Ця властивість може набувати таких значень:
- Ім'я визначеного елемента з метаданих.
- Порожнє значення.
- Спеціальне ім'я для ідентифікації проблемних об'єктів. Спеціальне ім'я починається із символу #. Його можна встановити лише в режимі завантаження обміну даними. Режим завантаження потрібно вмикати до призначення спеціального імені визначеного.
Якщо об'єкту даних встановити порожнє значення властивості, то він стане звичайним, не визначеним, об'єктом.
Якщо об'єкту встановити ім'я визначеного елемента з метаданих, то він стане визначеним елементом, пов'язаним із метаданими. У межах однієї області інформаційної бази допускається використання лише одного об'єкта даних, пов'язаного з конкретним визначеним елементом метаданих.
У режимі завантаження унікальність визначеного елемента в межах області інформаційної бази не перевіряється.
Спеціальне ім'я визначеного є особливістю, якої слід уникати. Таке ім'я визначених даних характерне для видалених із метаданих визначених елементів, за вимкненого автоматичного оновлення визначених.
Визначені елементи можна редагувати, видаляти, позначати на видалення. Є спеціальні права для керування обмеженнями на видалення визначених.
Розглянемо такий приклад. У деякій інформаційній базі в плані рахунків є елемент даних із кодом А. У певний момент вирішили додати визначений елемент А з кодом А. Під час реструктуризації в базі даних його буде створено, але наявні посилання посилатимуться на об'єкт даних, що існував раніше. Виконавши таку послідовність команд, можна зробити наявний об'єкт визначеним:
ПланыСчетов.ПланСчетовПример.А.ПолучитьОбъект().Удалить(); Посилання = ПланыСчетов.ПланСчетовПример.НайтиПоКоду("А"); Если НЕ Ссылка.Пустая() Тогда Объект = Ссылка.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = "А"; Объект.Записать(); КонецЕсли;
У результаті під час звернення до визначеного елемента А буде повернено об'єкт даних А, що існував раніше.
Властивість ИмяПредопределенныхДанных доступна в запитах (поле вибору та в умовах), у формах, таблицях тощо. Ця властивість має особливості сортування: сортування виконується за внутрішнім ключем, а не за рядком.
Робота з роздільниками
Визначені елементи можуть використовуватися в інформаційних базах, що мають спільні реквізити, які розділяють інформаційну базу в режимі Независимо або Независимо и совместно.
Розглянемо роботу з визначеними елементами за різних режимів розділення на прикладі довідника.
Варіант 1. Спільний реквізит розділяє інформаційну базу в режимі Независимо. Під час отримання посилання на визначений елемент виконується запит до даних таблиці. Тому перед отриманням посилання на визначений елемент необхідно, щоб у сеансі було встановлено значення та ввімкнено використання реквізиту, який є роздільником. Під час звернення до даних таблиці визначені елементи буде створено, за винятком випадків:
- Визначені елементи вже були створені (ініціалізовані) раніше.
- Вимкнено автоматичне оновлення визначених даних.
Варіант 2. Спільний реквізит розділяє інформаційну базу в режимі Независимо и совместно, використання реквізиту вимкнено в поточному сеансі роботи. У разі спроби отримати посилання на визначений елемент викликається виняток. Під час перегляду даних буде відображено всі наявні записи таблиці. Незалежно від поточного режиму оновлення визначених даних визначені дані не створюватимуться, навіть якщо їх немає.
Варіант 3. Спільний реквізит розділяє інформаційну базу в режимі Независимо и совместно, використання реквізиту ввімкнено в поточному сеансі роботи. У разі спроби отримати посилання на визначений елемент буде повернено посилання на визначений елемент із поточної області даних. Якщо запитуване посилання відсутнє (наприклад, видалене користувачем), то викликається виняток. Під час звернення до даних таблиці визначені елементи буде створено, за винятком випадків:
- Визначені елементи вже були створені (ініціалізовані) раніше.
- Вимкнено автоматичне оновлення визначених даних.
Внутрішній ідентифікатор
Визначені елементи мають унікальний ідентифікатор. Унікальність ідентифікатора перевіряється в межах незалежних областей інформаційної бази даних, аналогічно до інших об'єктів даних.
Зв'язок визначеного елемента з метаданими здійснюється через властивість ИмяПредопределенныхДанных.
Оновлення конфігурації бази даних
У разі вимкнення режиму сумісності 8.3.2 або нижче:
- Змінюється структура таблиць. Додаються нові службові таблиці. Це потребує монопольного доступу до інформаційної бази
- Наявні визначені елементи модифікуються, внутрішні ідентифікатори не змінюються. Такі елементи можуть безболісно бути повернені до режиму сумісності 8.3.2 або нижче.
- Вмикаються нові можливості для роботи з визначеними елементами.
За будь-якого оновлення конфігурації з вимкненим режимом сумісності (ці дії виконуються лише якщо режим оновлення визначених елементів потребує оновлення визначених даних):
- Створюються нові визначені елементи, які було додано відносно конфігурації бази даних. Наприклад: Якщо в конфігурації бази даних є визначений елемент з ім'ям А і додали визначений елемент з ім'ям Б, у конфігурації буде створено визначений елемент з ім'ям Б. Визначений елемент з ім'ям А не буде створено, навіть якщо він був видалений користувачем із даних. Визначені елементи створюються лише в тих областях, які були ініціалізовані: або користувач уже звертався до визначених даних із цієї області, або за допомогою спеціального методу мови ИнициализироватьПредопределенныеДанные().
- Видалені відносно конфігурації бази даних визначені елементи позначаються на видалення та в них скидається ознака визначеного. Наприклад: у конфігурації бази даних є елементи А і Б, а в конфігурації видалено елемент Б. У даних під час реструктуризації об'єкти даних, пов'язані з елементом Б (якщо вони є), буде позначено на видалення і в нього буде скинуто ознаку визначеного. Властивість ИмяПредопределенныхДанных буде порожньою.
- Модифіковані в конфігурації визначені елементи модифікуються в даних, якщо вони не редагувалися користувачем.
У разі ввімкнення режиму сумісності:
- Змінюється структура таблиць. Видаляються службові таблиці. Це потребує монопольного доступу до ІБ
- Наявні визначені елементи перевіряються на можливість повернення до режиму сумісності 8.3.2 або нижче. Якщо повернення неможливе — у конфігураторі виводиться відповідне попередження. Несумісні визначені елементи буде позначено на видалення і буде скинуто ознаку визначеного елемента. Відсутні визначені елементи буде створено.
- Вимикаються нові можливості для роботи з визначеними елементами.
Поведінка ідентифікаторів визначених елементів під час копіювання та об'єднання конфігурацій
На відміну від ідентифікаторів об'єктів метаданих, ідентифікатори визначених елементів під час копіювання не змінюються. Отже, два різні об'єкти метаданих можуть мати визначені елементи з однаковими ідентифікаторами.
Тепер розглянемо, як описані принципи впливають на поведінку визначених елементів у різних механізмах платформи "1С:Підприємство 8".
Об'єднання конфігурацій
Під час об'єднання конфігурацій зіставлення між визначеними елементами виконується лише за ідентифікатором, а не за ім'ям або кодом. Це слід враховувати під час вибору правила об'єднання властивості Предопределенные данные.
Розглянемо таку ситуацію. Ви розробляєте конфігурацію та встановлюєте її у замовника. У процесі налаштування виникає потреба в терміновому доопрацюванні, зокрема додаванні визначеного елемента. Потім у своїй основній конфігурації, що розробляється, ви "синхронізуєте" зміни, додаючи такий самий елемент, здійснюєте ще якісь доопрацювання та приносите нову версію до замовника.
Якщо під час виконання об'єднання конфігурацій залишити правило за замовчуванням — Взять из конфигурации поставщика, то в результаті залишиться лише "ваша" версія елемента. Під час виконання оновлення конфігурації інформаційної бази, як було описано вище, буде створено новий об'єкт, а старий позначено на видалення.
Однак на старий об'єкт можуть бути створені посилання в інших об'єктах. Для виправлення цієї ситуації слід знайти всі посилання в базі даних на "старий" об'єкт. Це можна зробити за допомогою команди Пошук посилань на об'єкти або в процесі контролю, під час виконання команди Видалення позначених об'єктів. Знайдені посилання слід виправити на посилання на "новий" об'єкт, після чого "старий" видалити.
Якщо посилань багато, а подальші об'єднання з іншою конфігурацією не передбачаються (в описуваному сценарії це не так, але, можливо, ви просто хочете одноразово додати до конфігурації деякі об'єкти з іншої), можна вчинити інакше. Під час об'єднання для визначених даних встановити правило Объединять с приоритетом... (пріоритет впливатиме на порядок і місце в ієрархії визначених елементів з однаковим ідентифікатором). Після виконання об'єднання в конфігурації будуть присутні обидва елементи, і старий, і новий. Новий можна видалити (до виконання оновлення конфігурації бази даних). Головне — лише не переплутати їх. Для цього перед порівнянням / об'єднанням можна в основній конфігурації тимчасово перейменувати елемент, а потім повернути назад. За такого алгоритму визначені елементи конфігурації з файлу, які не мають аналогів, буде додано, а "конфліктні" — ні.
Нарешті, слід нагадати, що якщо з файлової конфігурації нові визначені дані додавати не потрібно, то для властивості Предопределенные данные можна вимкнути позначку (прапорець) об'єднання. При цьому об'єднання конфігурацій загалом буде виконано, а визначені дані залишаться старими.
Однак відмінності у визначених даних не завжди призводять до подібних проблем. Розглянемо інший можливий сценарій. Ви вивантажуєте конфігурацію у файл, потім редагуєте її десь осторонь, наприклад, удома. У процесі редагування додаються нові визначені елементи і, можливо, видаляються або редагуються наявні. Потім виконується об'єднання нової версії з оригінальною конфігурацією. У цьому разі можна залишити правило об'єднання Взять из файла. Як уже зазначалося, у процесі переміщення між різними конфігураціями ідентифікатори елементів не змінюються, і всі старі елементи повернуться зі своїми оригінальними ідентифікаторами.
Режими оновлення визначених даних
З метою зручнішої організації обміну визначеними даними реалізовано механізм керування режимами оновлення визначених даних. Режим оновлення визначених задається окремо для кожного об'єкта метаданих.
Режим оновлення можна задати:
- У метаданих, за допомогою властивості ОбновлениеПредопределенныхДанных.
- У даних, за допомогою методу УстановитьОбновлениеПредопределенныхДанных.
Підсумкове значення, яке визначатиме необхідність створювати визначені дані під час реструктуризації, за першого звернення до таблиці або під час ініціалізації визначених даних інформаційної бази, обчислюється за такими правилами:
- Спочатку значення Авто у метаданих і в даних замінюються на ОбновлятьАвтоматически у центральному вузлі та на НеОбновлятьАвтоматически у периферійних вузлах.
- Потім за умовою <Значення в даних> І <Значення в метаданих> визначається необхідність оновлювати визначені.
Приклад 1:
Конфігурація центрального вузла:
Значення в метаданих — ОбновлятьАвтоматически.
Значення в даних — Авто.
Значення в даних замінюється на ОбновлятьАвтоматически.
ОбновлятьАвтоматически І ОбновлятьАвтоматически = ОбновлятьАвтоматически.
Отже, для цього об'єкта метаданих виконуватиметься автоматичне оновлення визначених даних.
Приклад 2:
Конфігурація периферійного вузла:
Значення в метаданих — Авто.
Значення в даних — ОбновлятьАвтоматически.
Значення в метаданих замінюється на НеОбновлятьАвтоматически.
НеОбновлятьАвтоматически І ОбновлятьАвтоматически = НеОбновлятьАвтоматически.
Отже, для цього об'єкта метаданих не виконуватиметься автоматичне оновлення визначених.
Ці режими дають змогу встановити додаткові правила для зручного обміну визначеними даними.
Якщо підсумковий режим дорівнює ОбновлятьАвтоматически :
- Визначені елементи обробляються під час реструктуризації.
- Визначені елементи створюються під час першого звернення до таблиці, якщо їх не було створено до цього.
- Визначені елементи створюються під час виклику методу ИнициализироватьПредопределенныеДанные(), якщо їх не було створено до цього.
Якщо підсумковий режим дорівнює НеОбновлятьАвтоматически :
- Визначені елементи не обробляються під час реструктуризації
- Визначені елементи не створюються під час першого звернення до таблиці.
- Визначені елементи не створюються під час виклику методу ИнициализироватьПредопределенныеДанные.
Обмін даними
Визначені об'єкти даних передаються аналогічно до інших об'єктів даних.
Розглянемо такий сценарій. В обміні беруть участь дві інформаційні бази, що мають незалежні (різні) конфігурації. У цих конфігураціях є довідники, між якими встановлено зв'язок. В обох конфігураціях ми додали визначений елемент, що має ідентичне ім'я. У конфігурації 1 оновлення визначених для цих довідників виконується автоматично, а в конфігурації 2 автоматичне оновлення визначених не виконується. Під час оновлення конфігурації (за першого звернення або під час ініціалізації інформаційної бази) визначені елементи буде створено в конфігурації 1 і не буде створено в конфігурації 2. Після формування пакета обміну з конфігурації 1 до конфігурації 2 визначені елементи передаються разом з іншими об'єктами даних і автоматично пов'язуються за ім'ям визначеного.