Использование предопределенных элементов
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
Действует для версии платформы 1С:Предприятие 8.3.3 и выше без режима совместимости с версией 8.2
1.1. В справочниках, планах счетов, планах видов характеристик и планах видов расчета имеется возможность создавать предопределенные элементы автоматически или программно.
1.2. В большинстве случаев, предопределенные элементы рекомендуется создавать автоматически, поскольку они постоянно нужны и требуется упростить обращение к этим элементам из кода.
Например, предопределенная страна Россия в справочнике Страны мира , предопределенные профиль групп доступа Администратор и т.п.
- в свойстве ОбновлениеПредопределенныхДанных справочника, плана счетов, плана видов характеристик или плана видов расчета должно быть установлено значение Авто (по умолчанию), а также не следует допускать программных вызовов метода УстановитьОбновлениеПредопределенныхДанных этих объектов для переключения этого режима.
- запретить удаление предопределенных элементов пользователями, выключив во всех ролях следующие права (по умолчанию выключены):
- ИнтерактивноеУдалениеПредопределенныхДанных
- ИнтерактивнаяПометкаУдаленияПредопределенныхДанных
- ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных
- ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных
Область применения (уточнение): управляемое приложение, обычное приложение.
1.3. Исключение составляют дочерние узлы РИБ, в котором предопределенные элементы автоматически не создаются (и не обновляются при изменении в метаданных), а должны быть переданы из главного узла вместе с изменениями конфигурации.
а) конфигурация должна обеспечивать загрузку сообщения обмена в подчиненный узел РИБ до выполнения другого прикладного кода, который обращается к получаемым из главного узла предопределенным элементам;
б) в прикладной логике загрузки данных из главного узла (обработчик события ПриПолученииДанныхОтГлавного , правила регистрации объектов) следует избегать обращений к предопределенным элементам, поскольку нет гарантии, что они уже были загружены из сообщения обмена;
в) код обработчиков обновления ИБ, который обрабатывает предопределенные элементы, не должен выполняться в подчиненных узлах РИБ:
Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда
// заполняем предопределенные элементы
// .
КонецЕсли;При использовании в конфигурации подсистемы «Обмен данными» Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше требования (а) и (б) снимаются.
1.4. Для таблиц с предопределенными элементами, которые не входят в состав плана обмена РИБ (и на которые не ссылаются другие таблицы, входящие в состав плана обмена РИБ) свойство ОбновлениеПредопределенныхДанных необходимо устанавливать в значение ОбновлятьАвтоматически .
Значение Авто в этом случае не подходит, так как для подчиненного узла Авто означает НеОбновлятьАвтоматически , то есть предопределенные элементы таблицы автоматически созданы не будут.
При включенном режиме совместимости с версией 8.3.3 также необходимо при первом запуске подчиненного узла РИБ (сразу после того, как была обновлена его конфигурация) устанавливать автоматическое обновление в данных с помощью вызова:
2. В некоторых случаях, предопределенные элементы не требуется создавать автоматически, если их наличие зависит от какого-либо условия: включенной функциональной опции, режима работы программы и т.п.
Например, те или иные предопределенные виды расчетов в плане видов расчета Начисления зависят от значений функциональных опций ИспользоватьУчетВремениСотрудниковВЧасах , ИспользоватьСдельныйЗаработок и др.
- в свойстве ОбновлениеПредопределенныхДанных справочника, плана счетов, плана видов характеристик или плана видов расчета нужно установить в значение «Не обновлять автоматически»
- предусмотреть код создания (и пометки недействительным) предопределенного элемента в зависимости от бизнес-логики, например:
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУчетВремениСотрудниковВЧасах») Тогда
НачислениеОбъект = ПланыВидовРасчета.Начисления.СоздатьВидРасчета();
НачислениеОбъект.ИмяПредопределенныхДанных = «ОкладПоЧасам»;
// .
НачислениеОбъект.Записать();
КонецЕсли;- учитывать в прикладном коде отсутствие предопределенных элементов в ИБ. В противном случае, при обращении к несуществующему предопределенному элементу из кода или текста запроса будет вызвано исключение:
При использовании в конфигурации Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше рекомендуется использовать функцию ПредопределенныйЭлемент общего модуля ОбщегоНазначения или ОбщегоНазначенияКлиент , которая возвращает Неопределено для несуществующих в ИБ предопределенных элементов:
Предопределенные элементы справочников 1С 8.3
У любого справочника 1С (кроме подчиненных) можно создавать предопределенный элемент или предопределенную группу этого справочника (если справочник иерархический). Предопределенные элементы справочника это элементы созданные разработчиком в конфигураторе, с которыми пользователь может работать. Пользователю уже не нужно самостоятельно создавать этот элемент справочника, он уже будет создан в базе по умолчанию при установке. Также разработчикам очень удобство работать с предопределенными элементами в том, что разработчик к ним может обращаться напрямую, используя менеджер справочника. В этой статье мы научимся работать с предопределенными элементами.
При разработке справочников, рекомендую, первым делом подумать будут ли предопределенные элементы у этих справочников, и создать их заранее, до того как этот справочник будет внедрен в опытную эксплуатацию.
К примеру, мы в нашей конфигурации для целей учета создали справочник Валюты, поскольку мы живем в Российской федерации, то валюта Рубль всегда будет в нашей конфигурации, которая используется на территории РФ. Поэтому наиболее логичнее её сделать в виде предопределенного элемента. Поэтому создадим для справочника Валюты предопределенный элемент Рубль. Для того, чтобы добавить предопределенный элемент необходимо выделить нужный справочник, вызвать контекстное меню и выбрать в этом меню команду «Открыть предопределенные данные».
Откроется список предопределенных элементов (и групп, если справочник иерархический), в котором можно добавлять новые элементы. Причем заметьте, при добавлении мы можем указать только наименование элемента и его код, если у справочника есть реквизиты, то мы эти реквизиты мы сможем заполнить только в пользовательском режиме.
Обращаю внимание на имя предопределенного элемента. Имя должно быть уникально в пределах этого справочника, и к нему применяются правила установки имен для объектов метаданных (отсутствие пробелов, спецсимволов кроме подчеркивания и т.д.). Пользователь не видит имени предопределенного элемента, он работает только с наименованием. С именем может работать разработчик, получая ссылку на конкретный предопределенный элемент, используя менеджер справочника.
Если справочник иерархический, то можно также создать и предопределенные группы, для этого в командной панели формы списка предопределенных элементов имеется команда «Добавить группу».
Если мы зайдем в форму списка справочника Страны в пользовательском режиме «1С: Предприятия», то обнаружим, что уже имеются группы и элементы с точкой внизу. Так платформа помечает предопределенные элементы и группы.
Замечу, что все реквизиты у предопределенных элементов присутствуют также как и у обычных, и в них можно записывать какие-либо значения.
Получить предопределенный элемент справочника 1С
Используя менеджер справочника, можно обратиться к предопределенному элементу. Делается это следующим образом.
ЭлементКитай = Справочники.Страны.Китай;
Обращаю Ваше внимание, что получить ссылку на предопределенный элемент можно только в серверном контексте. Чтобы получить ссылку на предопределенный элемент в клиентском контексте управляемой формы необходимо использовать метод ПредопределенноеЗначение, где в кавычках нужно указать путь к этому элементу.
ЭлементКитай = ПредопределенноеЗначение("Справочник.Страны.Китай");
Имейте в виду, что и при помощи метода ПредопределенноеЗначение и при помощи прямого обращения посредством менеджера объекта мы получим ссылку на элемент, с которой можем работать как с обычной ссылкой на элемент справочника: присваивать её какому-нибудь реквизиту, получать объект из этой ссылки и т.д.
Создать предопределенный элемент справочника 1С
Мы уже научились создавать предопределенные элементы справочника в конфигураторе, но можно ли создать предопределенный элемент программно? И да, и нет.
Мы можем из простого элемента сделать предопределенный, и наоборот предопределенный элемент сделать простым.
Для этих целей у справочников имеется стандартный реквизит ИмяПредопределенныхДанных.
Если мы получим ссылку на предопределенный элемент, то этот реквизит заполнен.
Если же мы возьмем какой-то не предопределенный элемент, то этот реквизит будет пустой.
Если мы этому реквизиту присвоим какое-нибудь имя (помня об уникальности имен предопределенных элементов в контексте конкретного справочника), то мы программно «создадим» предопределенный элемент, но только в том случае если это имя уже существует в списке предопределенных элементов справочника, которые были заданы в конфигураторе 1С!
Например, тот же элемент «Тунис» справочника «Страны» у нас простой.
В какой-нибудь обработке напишем код, в котором попробуем сделать из этого элемента предопределенный элемент.
&НаСервере Процедура СоздатьНаСервере() ЭлТунис = Справочники.Страны.НайтиПоНаименованию("Тунис"); ОбТунис = ЭлТунис.ПолучитьОбъект(); ОбТунис.ИмяПредопределенныхДанных = "Тунис"; ОбТунис.Записать(); КонецПроцедуры &НаКлиенте Процедура Создать(Команда) СоздатьНаСервере(); КонецПроцедуры
Если мы попытаемся его сейчас выполнить, то у нас возникнет ошибка «Предопределенный элемент не существует».
Такая ошибка возникла потому, что мы пытаемся указать имя предопределенного элемента, которого нет.
Если же мы у предопределенного элемента реквизиту ИмяПредопределенныхДанных присвоим пустую строку, то такой элемент станет простым, если же этому реквизиту обратно присвоим имя предопределенного элемента, то простой элемент станет предопределенным.
Сделаем на обработке две команды. Первая будет снимать предопределенность у элемента справочника с именем «Китай», а вторая устанавливать.
&НаСервере Процедура ОтсоединитьНаСервере() ЭлементКитай = Справочники.Страны.Китай; ОбЭлКитай = ЭлементКитай.ПолучитьОбъект(); ОбЭлКитай.ИмяПредопределенныхДанных = ""; ОбЭлКитай.Записать(); КонецПроцедуры &НаКлиенте Процедура Отсоединить(Команда) ОтсоединитьНаСервере(); КонецПроцедуры
Теперь обратно установим.
&НаСервере Процедура ПрисоединитьНаСервере() ЭлКитай = Справочники.Страны.НайтиПоНаименованию("Китай"); ОбЭлКитай = ЭлКитай.ПолучитьОбъект(); ОбЭлКитай.ИмяПредопределенныхДанных = "Китай"; ОбЭлКитай.Записать(); КонецПроцедуры &НаКлиенте Процедура Присоединить(Команда) ПрисоединитьНаСервере(); КонецПроцедуры
Заметьте, что имя предопределенного элемента может быть только из списка имен предопределенных элементов справочника.
У нас до снятия элемент «Китай» был предопределенным.
А после снятия это стал простой элемент.
Удалить предопределенный элемент справочника 1С
Начиная с платформы 1С 8.3 предопределенные элементы можно удалять в пользовательском режиме.
Если сейчас этот элемент удалить через стандартную обработку «Удаление помеченных объектов», то он исчезнет из базы.
Для того, чтобы пользователь мог удалить (поставить пометку на удаление) предопределенный элемент, хотя бы у одной роли, которая есть в профиле пользователя должно быть установлено соответствующее право.
Что делать, если мы ошиблись и хотим опять «вернуть» предопределенный элемент? Есть несколько способов. Но самый простой это создать новый элемент справочника в пользовательском режиме и присвоить ему имя удаленного предопределенного элемента, как мы это уже делали.
Остальные статьи по теме конфигурирования:
Более подробно и основательно работа со справочниками, документами и другими объектами метаданных дается в моей книге:
Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»
- Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника;
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Вступайте в мои группы:
3 Replies to “Предопределенные элементы справочников 1С 8.3”
Дотошный :
У любого справочника 1С можно создавать предопределенный элемент или предопределенную группу — если у справочника есть владелец, то создать предопределенный элемент нельзя.
Signum :
Спасибо, подправил!
Алексей :Автор. Вы морочите голову. Вы пишете, можно ли создать предопределённый программно. Отвечаете и Да и нет. Затем играетесь с реквизитом Предопределенный устанавливая его в значение ложь и обратно в истина. Где программное создание предопределенного элемента? Если нет, то так и пишите ЭТО НЕ ВОЗМОЖНО. И не надо будет разгадывать ваш витиеватый ребус в течение полутора часов. Вот за такие статьи я и не люблю 1С.
Как сделать элемент справочника предопределенным (конфигурация в режиме совместимости 8.2)
После обновления элемент справочника перестал быть предопределенным, как теперь связать его с предопределенным объектом конфигурации?
Объект.ИмяПредопределенныхДанных //поле объекта не обнаружено (видимо из-за режима совместимости)
Поле объекта «Предопределенный» доступно только для чтения.
Подскажите, как быть в данной ситуации?
По теме из базы знаний
- Автоматизированная проверка конфигураций… и пара слов о стандартах разработки
- Эволюция расширения конфигурации
- Изменение идентификатора ссылки предопределенного элемента справочника (плана счетов, ПВХ и т.д)
- Подсистема прав доступа (анализ ролей, отладка RLS, английский код, обычные и управляемые формы)
- Генератор кода предопределенного значения или что делать, если нет возможности добавить предопределенные значения
Найденные решения
10. davealone 165 08.01.20 19:22 Сейчас в теме(8) Если типовая на БСП должна быть обработка Поиск и удаление дублей
Если нет и для толстого клиента можно посмотреть https://its.1c.ru/db/metod8dev#content:3683:hdoc или похожие поискать
Там же увидите сколько у Вас ссылок на непредопределенный элемент — может данных много и не стоит менятьОстальные ответы
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
3. davealone 165 08.01.20 18:53 Сейчас в темеИмяПредопределенныхДанных доступно с 8.3.3 и в режиме совместимости ниже недоступно.
А сам предопределенный элемент в конфигураторе виден?
И не дубль ли это, при обновлении могло оказаться что УИД предопределенных элементов в старой и новой конфигурации отличается и тогда они задублируются4. alex-l19041 8 08.01.20 18:58 Сейчас в теме
сам предопределенный элемент в конфигураторе виден?
. а в режиме предприятия?
5. soulriwer 08.01.20 19:00 Сейчас в теме(3)Спасибо за ответ!
Элемент в конфигураторе есть, но его УИД теперь отличается от УИД-а элемента справочника! Дублей среди предопределенных элементов не вижу. Элемент справочника (Вычеты по НДФЛ) после обновления помечен на удаление, и значение рекизита Предопределенный = ЛожьКак я понимаю, следствием этого является неправильное начисление НДФЛ (примененные ранее вычеты по данному коду считаются как излишние и начисляются текущим месяцем)
7. davealone 165 08.01.20 19:06 Сейчас в теме
(5) ну значит в предприятии их у Вас два. Как вариант поиск и замену дублей сделать.
Странно что Вы не видите второго в предприятии.8. soulriwer 08.01.20 19:09 Сейчас в теме
(7)Извиняюсь дубль в предприятии есть, сразу не увидел. не могли бы Вы написать алгоритм в двух словах? Делать обработкой?
10. davealone 165 08.01.20 19:22 Сейчас в теме
(8) Если типовая на БСП должна быть обработка Поиск и удаление дублей
Если нет и для толстого клиента можно посмотреть https://its.1c.ru/db/metod8dev#content:3683:hdoc или похожие поискать
Там же увидите сколько у Вас ссылок на непредопределенный элемент — может данных много и не стоит менять6. user856012 13 08.01.20 19:05 Сейчас в теме
элемент справочника перестал быть предопределенным, как теперь связать его с предопределенным объектом конфигурации?
Может быть, вот эта разработка поможет?
9. soulriwer 08.01.20 19:10 Сейчас в теме
(6)у меня режим совместимости 8.2, работать не будет.
2. acces969 344 08.01.20 18:09 Сейчас в темеНе встречал такого, чтобы поле ИмяПредопределенныхДанных отсутствовало. В конфигурации предопределенные элементы справочника есть? Свойство «Обновление предопределенных данных» как выставлено?
11. soulriwer 08.01.20 19:31 Сейчас в теме
Нашел на ИТС обработку Поиск и удаление значений, пробую ей на копии. Ссылок много (все начисления зарплаты за все года и т.д.), а если не менять тогда что?
12. davealone 165 08.01.20 23:25 Сейчас в теме
(11) Как вариант на копии попробовать сравнением накатить предопределенный со старой копии cf, может и прокатит
13. soulriwer 09.01.20 00:15 Сейчас в теме
(12)Спасибо большое за помощь! Заменил ссылки ссылками на новый предопределенный элемент обработкой (также пришлось скопировать почему-то частично незаполненные реквизиты со старого элемента) пока вроде все ок)
Код Икс Пи ☆ Центр автоматизации, сопровождения и поддержки
При реализации алгоритмов разработчики часто опираются на определенные данные – элементы справочников, планов счетов, планов видов расчета и т.д.
Во встроенном языке существуют методы для поиска данных, например, НайтиПоКоду() или НайтиПоНаименованию().
Однако алгоритмы, опирающиеся на код или наименование, зачастую являются ненадежными.
Поскольку в пользовательском режиме код или наименование элемента справочника могут быть изменены, что может привести к неработоспособности алгоритмов.
Именно для решения этой проблемы и предназначены предопределенные данные – данные, созданные в конфигураторе, обратиться к которым возможно по имени, не прибегая к предварительному поиску элемента.
Таким образом, у предопределенных данных есть две “стороны”: во-первых, существует список предопределенных элементов, созданный в конфигураторе, а, во-вторых, для данных информационной базы указывается, является ли конкретный элемент предопределенным.
Предопределенные элементы могут быть созданы у:
- справочников;
- планов счетов;
- планов видов характеристик;
- планов видов расчета.
В статье рассмотрены новшества, касающиеся предопределенных данных на платформе 8.3, а также особенности работы с ними в распределенных базах (как центральных, так и периферийных) и в информационных базах в режиме разделения данных.
Пиктограмма в списке изменилась:
Чтобы связать предопределенный элемент с новой записью, нужно присвоить свойству ИмяПредопределенныхДанных имя предопределенного элемента:
&НаКлиенте Процедура Привязать(Команда) ПривязатьНаСервере(); КонецПроцедуры &НаСервереБезКонтекста Процедура ПривязатьНаСервере() НайденнаяСсылка = Справочники.Организации.НайтиПоНаименованию(“ООО “”Товары”””); ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект(); ОбъектДанных.ИмяПредопределенныхДанных = “ОсновнаяОрганизация”; ОбъектДанных.Записать(); КонецПроцедуры
Теперь с пиктограммой предопределенного элемента выводится другой элемент справочника:
Запрос = Новый Запрос; Запрос.УстановитьПараметр(“ИмяПредопределенныхДанных”, ИмяПредопределенныхДанных); Запрос.Текст = “ВЫБРАТЬ | Организации.Ссылка, | Организации.Наименование, | Организации.Код |ИЗ | Справочник.Организации КАК Организации |ГДЕ | Организации.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных”; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = Выборка.Наименование; Сообщение.Сообщить(); КонецЕсли;
Если параметр запроса ИмяПредопределенныхДанных принимает значение “ОсновнаяОрганизация”, запрос выполняется без ошибок.
Если используется любое другое значение, не указанное в конфигураторе, то во время выполнения произойдет исключение:
ОбъектДанных= Метаданные.Справочники.Организации; ТекстЗапроса = “ |ВЫБРАТЬ | ИмяОбъекта.Ссылка |ИЗ | “ + ОбъектДанных.ПолноеИмя() + ” КАК ИмяОбъекта | |ГДЕ | ИмяОбъекта.Предопределенный; Запрос = Новый Запрос(ТекстЗапроса); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ИмяПредопределенного = Справочники[ОбъектДанных.Имя].ПолучитьИмяПредопределенного (Выборка.Ссылка); Сообщить(ИмяПредопределенного); КонецЦикла;
Получение списка предопределенных элементов, заданных в метаданных, при помощи встроенного языка – невозможно.
Однако начиная с платформы 8.3.3, метод ПолучитьИмяПредопределенного() является устаревшим и поддерживается для совместимости, поэтому даже в Синтакс-помощнике платформы 8.3.4 он не отображается.
В платформе 8.3 разрешено помечать предопределенные данные на удаление и производить удаление предопределенных данных. Если же удаление предопределенных элементов в разрабатываемой конфигурации недопустимо, то следует настроить права доступа.
Теперь в платформе присутствуют новые права доступа, определяющие возможность редактирования предопределенных данных:
- ИнтерактивноеУдалениеПредопределенныхДанных,
- ИнтерактивнаяПометкаУдаленияПредопределенныхДанных,
- ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных,
- ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных.
Однако “интерактивные” права на просмотр и редактирование стандартных реквизитов Предопределенный и ИмяПредопределенныхДанных можно установить по отдельности:
Для корректного функционирования системы необходимо, чтобы предопределенные элементы не только были созданы в конфигураторе, но и в данных информационной базы существовали связанные с ними элементы.
Для указания стратегии создания или изменения предопределенных данных было реализовано системное перечисление ОбновлениеПредопределенныхДанных, содержащее следующие значения:
- Авто – необходимость создания предопределенных элементов и обновление существующих будет определяться системой автоматически;
- НеОбновлятьАвтоматически – не будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений. В случае отсутствия элемента данных, связанного с предопределенным элементом, будет сгенерировано исключение при попытке обращения к нему;
- ОбновлятьАвтоматически – будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений.
Чтобы принять решение, нужно ли создавать и обновлять предопределенные данные, система последовательно анализирует следующие значения:
- значение, установленное для объекта в данных;
- значение, установленное для объекта метаданных в конфигураторе;
- значение, установленное в целом для информационной базы;
- вид информационной базы – центральная (либо не распределенная база) или периферийная база.
Обратите внимание на первые два пункта. При некотором внешнем сходстве формулировок между этими пунктами есть принципиальная разница: второе значение устанавливается разработчиком для объекта метаданных в конфигураторе, а первое хранится в данных информационной базы.
Подробнее будет рассмотрено ниже.
Такое большое количество анализируемых значений было реализовано для возможности полноценно управлять созданием и обновлением предопределенных данных.
Например, в периферийной базе предопределенные данные не должны создаваться автоматически, а в случае отключения базы от РИБа нельзя допустить автоматического создания элементов.
Кроме того, разработчик в зависимости от логики прикладного решения должен иметь возможность управлять процессом создания предопределенных элементов.
Теперь рассмотрим последовательность действий, которые выполняет система, чтобы определить, нужно ли создавать или обновлять предопределенные данные.
1. Если для объекта метаданных в информационной базе (т.е. в данных) установлен режим обновления, отличный от Авто, то используется это значение.
Получить и установить значение этого свойства для каждого объекта метаданных в пользовательском режиме можно с помощью методов ПолучитьОбновлениеПредопределенныхДанных() и
УстановитьОбновлениеПредопределенныхДанных().Эти методы доступны у объектов типа СправочникМенеджер, ПланСчетовМенеджер, ПланВидовХарактеристикМенеджер, ПланВидовРасчетаМенеджер.
Следует учитывать, что метод УстановитьОбновлениеПредопределенныхДанных() невозможно использовать во время фоновой реструктуризации базы.
2. Иначе если для объекта метаданных в конфигурации установлен режим обновления, отличный от Авто, то используется это значение.
3. Иначе если для информационной базы установлен режим обновления, отличный от Авто, то используется это значение.
Получить и установить значение этого свойства для каждого объекта метаданных в пользовательском режиме можно с помощью методов ПолучитьОбновлениеПредопределенныхДанныхИнформационнойБазы() и УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы().
4. Иначе анализируется вид узла распределенной базы. Если это периферийный узел, то предопределенные данные не будут обновлены (соответствует значению НеОбновлятьАвтоматически).
Если проверка выполняется для центрального узла распределенной базы или для базы, не являющейся распределенной, обновление предопределенных данных будет выполнено (соответствует значению ОбновлятьАвтоматически).
Если база находится в режиме совместимости “Версия 8.3.3”, то алгоритм определения необходимости обновления предопределенных данных выглядит немного по-другому.
Обновление не будет производиться:
- если в метаданных или в данных установлено НеОбновлятьАвтоматически;
- если в метаданных или в данных установлено Авто и текущий узел является периферийным.
В противном случае предопределенные данные будут обновлены.
Создание в информационной базе данных, связанных с предопределенными, может быть выполнено следующими способами:
1. При реструктуризации информационной базы в случае, когда разрешено автоматическое создание и обновление предопределенных данных, а также предопределенные данные ранее создавались в этой области данных или информационной базе.
2. При первом обращении к таблице с данными объекта конфигурации. Создание предопределенных элементов будет выполняться при условии, что их создание не запрещено.
3. С помощью кода на встроенном языке, в котором заполняется значение свойства ИмяПредопределенныхДанных. Этот способ можно использовать, если автоматическое создание предопределенных элементов запрещено в свойствах объектов конфигурации.
Обновление данных, связанных с предопределенными, будет выполняться, если:
- разрешено автоматическое обновление предопределенных данных;
- предопределенные данные связаны с данными информационной базы;
- предопределенные данные изменены в конфигураторе.
Во всех остальных случаях информация о предопределенных элементах из конфигуратора не будет перенесена в информационную базу.
Если в конфигураторе удалить предопределенный элемент, то будут выполнены следующие действия:
- элемент данных, связанный с предопределенным элементом, будет помечен на удаление;
- в списке субконто элемента плана счетов будут удалены соответствующие записи;
- в списках ведущих, базовых и вытесняющих видов расчета будут удалены соответствующие записи.
Установим для справочника Организации в конфигураторе свойство ОбновлениеПредопределенныхДанных в НеОбновлятьАвтоматически и удалим предопределенный элемент ОсновнаяОрганизация.
В пользовательском режиме у элемента справочника, связанного с предопределенным, значение свойства ИмяПредопределенныхДанных стало равным #708c7031-c7bd-45d4-a8c9-65b2fecfde62, где символы после знака “#” – это уникальный идентификатор удаленного элемента метаданных.
При использовании распределенной информационной базы предопределенные элементы из конфигурации передаются вместе с сообщением, содержащим изменения конфигурации.
А элементы данных, связанные с предопределенными, регистрируются в планах обмена так же, как и обычные данные.
Автоматического создания предопределенных данных в периферийной базе не происходит.
В распределенной базе иногда могут возникать ошибки, которые исправляются после отключения от РИБа, загрузки в периферийную базу конфигурации центральной базы и дальнейшего подключения к распределенной базе.
При работе на платформе 8.3 следует учитывать следующую особенность.
База, у которой главный узел стал не установлен (базу отключили от РИБа), не является периферийной, поэтому при запуске этой базы в пользовательском режиме может произойти обновление предопределенных данных согласно алгоритму, описанному выше.
Чтобы не допустить такого поведения, можно использовать метод глобального контекста УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы() или использовать параметр командной строки в пакетном режиме запуска конфигуратора /SetPredefinedDataUpdate, который предназначен для указания режимов обновления предопределенных данных.
Этот параметр может принимать одно из трех значений:
- UpdateAutomatically – при реструктуризации информационной базы будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений;
- DoNotUpdateAutomatically – при реструктуризации информационной базы не будет выполняться автоматическое создание новых предопределенных элементов и обновление их значений;
- Auto – фактическое значение вычисляется автоматически. Для главного узла информационной базы значение будет равно UpdateAutomatically, для периферийного узла информационной базы будет равно DoNotUpdateAutomatically.
Командная строка запуска конфигуратора с этим параметром будет выглядеть следующим образом:
“C:\Program Files\1cv8\8.3.4.437\bin\1cv8.exe DESIGNER /F”ПутьКБазе” /N”Администратор” /P”Пароль” /SetPredefinedDataUpdate -DoNotUpdateAutomatically”
Таким образом возможно задавать признак обновления предопределенных данных, когда информационная база отключается от РИБ, например, для восстановления работоспособности.
Так же можно поступить в случае, если с помощью обмена без использования РИБ взаимодействуют две конфигурации, где предопределенные данные задаются в одной базе, а в другую они должны попасть после обмена.
Для информационной базы, где создаются предопределенные элементы, следует использовать значение UpdateAutomatically, а для второй информационной базы – DoNotUpdateAutomatically.
В платформе 8.3 для объектов конфигурации, которые могут содержать предопределенные данные (справочники, планы счетов, планы видов характеристик, планы видов расчета), реализована возможность устанавливать свойство ИмяПредопределенныхДанных в значение специального вида, состоящее из символа “#” и текстового представления уникального идентификатора.
Таким образом можно создавать обработки загрузки предопределенных данных из файла.
В платформе 8.2.14 появился механизм разделения данных. При использовании разделенной базы предопределенные элементы создавали ряд ограничений.
Так, было невозможно использовать предопределенные данные для объектов конфигурации, входящих в состав разделителя в режиме “Независимо и совместно”.
Теперь в платформе 8.3 предопределенные данные можно использовать для объектов, входящих в состав любых разделителей.
Ссылки на предопределенные элементы более не являются одинаковыми, в том числе и в различных областях (даже для объектов, входящих в состав разделителя в режиме Независимо).
Например, рассмотрим предопределенный элемент ОсновнаяОрганизация в справочнике Организации.
Пусть в базе есть две области: с кодами 01 и 02.
Значит, уникальный идентификатор элемента данных, связанного с элементом ОсновнаяОрганизация в области с кодом 01, не будет равен уникальному идентификатору элемента данных, связанного с элементом ОсновнаяОрганизация в области 02.
Подведем итоги. Рассмотрим, для чего было внесено столько нововведений в работу с предопределенными данными.
Прежний вариант использования предопределенных элементов накладывал ограничения при работе в режиме разделенной информационной базы.
Так, невозможно было использовать предопределенные данные для объектов конфигурации, входящих в состав разделителя в режиме “Независимо и совместно”. Невозможно было связать существующий объект данных с предопределенными данными.
Один предопределенный элемент имел одинаковую ссылку во всех областях данных.
При обмене данными с использованием РИБа предопределенные данные передавались только с изменениями конфигурации прикладного решения. Управлять созданием и обновлением предопределенных данных было невозможно.
Таким образом, рассмотренные нововведения направлены на развитие возможностей платформы по работе в режиме разделенной информационной базы, что особенно актуально в рамках модели SaaS (“программы как сервис”), которую также называют работой “в облаке”.
You have no rights to post comments