Використання наперед визначених елементів
Діє для версії платформи 1С:Підприємство 8.3.3 і вище без режиму сумісності з версією 8.2
Діє для версії платформи 1С:Підприємство 8.3.3 і вище без режиму сумісності з версією 8.2
1.1. У довідниках, планах рахунків, планах видів характеристик і планах видів розрахунку є можливість створювати наперед визначені елементи автоматично або програмно.
1.2. У більшості випадків наперед визначені елементи рекомендується створювати автоматично, оскільки вони постійно потрібні та необхідно спростити звернення до цих елементів із коду.
Наприклад, наперед визначена країна Росія у довіднику Країни світу, наперед визначений профіль груп доступу Адміністратор тощо.
Для цього
- у властивості ОбновлениеПредопределенныхДанных довідника, плану рахунків, плану видів характеристик або плану видів розрахунку має бути встановлено значення Авто (за замовчуванням), а також не слід допускати програмних викликів методу УстановитьОбновлениеПредопределенныхДанных цих об’єктів для перемикання цього режиму.
- заборонити видалення наперед визначених елементів користувачами, вимкнувши в усіх ролях такі права (за замовчуванням вимкнені):
- ИнтерактивноеУдалениеПредопределенныхДанных
- ИнтерактивнаяПометкаУдаленияПредопределенныхДанных
- ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных
- ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных
1.3. Виняток становлять дочірні вузли РІБ, у яких наперед визначені елементи автоматично не створюються (і не оновлюються при зміні в метаданих), а мають бути передані з головного вузла разом зі змінами конфігурації.
При цьому:
а) конфігурація має забезпечувати завантаження повідомлення обміну в підпорядкований вузол РІБ до виконання іншого прикладного коду, який звертається до наперед визначених елементів, що надходять із головного вузла;
б) у прикладній логіці завантаження даних із головного вузла (обробник події ПриПолученииДанныхОтГлавного, правила реєстрації об’єктів) слід уникати звернень до наперед визначених елементів, оскільки немає гарантії, що їх уже було завантажено з повідомлення обміну;
в) код обробників оновлення ІБ, який обробляє наперед визначені елементи, не повинен виконуватися в підпорядкованих вузлах РІБ:
Якщо ПланыОбмена.ГлавныйУзел() = Неопределенно Тогда // заповнюємо наперед визначені елементи // ... КонецЕсли;
Під час використання в конфігурації підсистеми "Обмін даними" Бібліотеки стандартних підсистем (БСП) версії 2.1.4 і вище вимоги (а) і (б) скасовуються.
1.4. Для таблиць із наперед визначеними елементами, які не входять до складу плану обміну РІБ (і на які не посилаються інші таблиці, що входять до складу плану обміну РІБ), рекомендується встановлювати властивість ОбновлениеПредопределенныхДанных у значення ОбновлятьАвтоматически, а також під час першого запуску підпорядкованого вузла РІБ установлювати автоматичне оновлення в даних за допомогою виклику:
Справочники.<ИмяСправочника>.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.ОбновлятьАвтоматически);
2. У деяких випадках наперед визначені елементи не потрібно створювати автоматично, якщо їх наявність залежить від будь-якої умови: увімкненої функціональної опції, режиму роботи програми тощо.
Наприклад, ті чи інші наперед визначені види розрахунків у плані видів розрахунку Нарахування залежать від значень функціональних опцій ИспользоватьУчетВремениСотрудниковВЧасах, ИспользоватьСдельныйЗаработок та ін.
Для цього
- у властивості ОбновлениеПредопределенныхДанных довідника, плану рахунків, плану видів характеристик або плану видів розрахунку потрібно встановити значення "Не оновлювати автоматично"
- передбачити код створення (і позначення недійсним) наперед визначеного елемента залежно від бізнес-логіки, наприклад:
Если ПолучитьФункциональнуюОпцию("ИспользоватьУчетВремениСотрудниковВЧасах") Тогда НачислениеОбъект = ПланыВидовРасчета.Начисления.СоздатьВидРасчета(); НачислениеОбъект.ИмяПредопределенныхДанных = "ОкладПоЧасам"; // ... НачислениеОбъект.Записать(); КонецЕсли;
- враховувати в прикладному коді відсутність наперед визначених елементів в ІБ. Інакше під час звернення до неіснуючого наперед визначеного елемента з коду або тексту запиту буде викликано виняток:
... = ПланВидовРасчета.Начисления.ОкладПоЧасам; ... = ПредопределенноеЗначение("ПланВидовРасчета.Начисления.ОкладПоЧасам");
Під час використання в конфігурації Бібліотеки стандартних підсистем (БСП) версії 2.1.4 і вище рекомендується використовувати функцію ПредопределенныйЭлемент загального модуля ОбщегоНазначенияКлиентСервер, яка повертає Неопределено для наперед визначених елементів, що не існують в ІБ:
... = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("ПланВидовРасчета.Начисления.ОкладПоЧасам");