Предопределенные данные

image_pdfimage_print

Печать (Ctrl+P)
Предопределенные данные – это элементы прикладных объектов, которые создаются в конфигураторе и обращение к которым возможно по имени, без предварительного поиска. Предопределенные данные имеет смысл создавать в том случае, если какой-либо элемент данных будет нужен постоянно и требуется упростить обращение к этому элементу из программного кода. Например, в справочнике Товары можно завести предопределенный элемент Услуга, обращение к которому будет выглядеть следующим образом: Справочники.Товары.Услуга. Предопределенными могут быть как элементы, так и группы элементов. Группы можно создавать в тех случаях, когда предопределенные элементы создаются в иерархических объектах, например в иерархическом справочнике. Предопределенные данные могут быть созданы:
● для справочников ,
● планов счетов ,
● планов видов характеристик ,
● планов видов расчета .
После создания предопределенного элемента в конфигураторе, возможность создания или обновления связанного с ним элемента данных определяется несколькими параметрами:
● Значение свойства объекта в информационной базе. Получить и установить значение этого свойства можно в режиме «1С:Предприятие» с помощью методов ПолучитьОбновлениеПредопределенныхДанных() и УстановитьОбновлениеПредопределенныхДанных();
● Значение свойства объекта конфигурации ОбновлениеПредопределенныхДанных. Устанавливается в конфигураторе;
● Значение, установленное для всей информационной базы. Получить и установить значение этого свойства можно в режиме «1С:Предприятие» с помощью методов ПолучитьОбновлениеПредопределенныхДанныхИнформационнойБазы() и
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы();
● Вид узла распределенной информационной базы . Значение этого параметра определяется автоматически:
● Для корневого узла и не распределенной информационной базы                принимает значение Обновлять автоматически;
● Для подчиненного узла распределенной информационной базы –              Не обновлять автоматически.
Каждый вышеописанный параметр может принимать одно из следующих значений (кроме параметра, описывающего вид узла распределенной информационной базы):
● Не обновлять автоматически – в этом случае система не выполняет создание или обновление элемента данных при создании или изменении предопределенных данных. Следует понимать, что если для объекта конфигурации установлено такое , то при обращении к предопределенным данным может генерироваться исключение, т. к. отсутствует элемент данных, связанный с предопределенным элементом;
● Обновлять автоматически – в этом случае система автоматически создаст (или обновит существующие) элементы данных для новых (или измененных) предопределенных данных;
● Авто – система автоматически определяет необходимость выполнения обновления.
Выполняемое действие (обновлять или не обновлять) определяется последовательным анализом вышеперечисленных параметров (в указанном порядке) до тех пор, пока не будет обнаружено значение, отличное от значения Авто. Это значение и будет определять возможность создания или обновления предопределенных элементов.
Связь элемента данных и элемента предопределенных данных осуществляется с помощью свойства ИмяПредопределенныхДанных. С помощью этого свойства имеется возможность выполнять следующие действия:
● Связывать элемент предопределенных данных с элементов данных. Для этого следует присвоить свойству ИмяПредопределенныхДанных имя предопределенного элемента данных, который надо связать с данными:

ЭлементСсылка = Справочник.Товары.НайтиПоНаименованию(“Услуга доставки”);
Объект = ЭлементСсылка.ПолучитьОбъект();
Объект.ИмяПредопределенныхДанных = “Услуга”;
Объект.Записать();

В результате этой операции, предопределенному элементу Услуга справочника Товары будет сопоставлен элемент данных с именем Услуга доставки.
При записи объекта проверяется, что в информационной базе не существует другого элемента данных с именем предопределенных данных, установленного в значение, с которым записывается элемент данных.
● «Отключить» элемент данных от элемента предопределенных данных. Для этого необходимо присвоить свойству ИмяПредопределенныхДанных
пустую строку и записать элемент:

Объект = Справочник.Товары.Услуга.ПолучитьОбъект();
Объект.ИмяПредопределенныхДанных = “”;
Объект.Записать();
Если попробовать обратиться к предопределенному элементу Справочник.Товары.Услуга после выполнения вышеприведенного примера, то будет сгенерировано исключение.
Таким образом, процесс смены элемента данных, связанного с предопределенными данными, выполняется в два этапа:
● Выполняется «отключение» существующего элемента данных от предопределенного элемента;
● Выполняется связывание нового элемента данных с предопределенным элементом.
Создание элементов данных, связанных с предопределенными данными, может быть выполнено одним из трех способов:
● Автоматически, во время реструктуризации информационной базы. Это происходит в следующем случае:
● Разрешено автоматическое создание и обновление предопределенных данных;
● Предопределенные данные ранее создавались в данной области данных или информационной базе.
● Автоматически, при первом обращении к таблице, хранящей данных объекта конфигурации. Создание предопределенных элементов в этом случае
будет выполняться при условии, что создание предопределенных элементов не запрещено.
● С помощью встроенного языка, указав свойство ИмяПредопределенныхДанных при создании элемента данных. Этот способ можно использовать, если
автоматическое создание предопределенных элементов запрещено в свойствах объектов конфигурации.
Обновление данных, связанных с предопределенными, будет выполняться в том случае, если разрешено автоматическое обновление предопределенных данных, предопределенные данные связаны с реальными данными и предопределенные данные изменены в конфигураторе. Во всех остальных случаях информация, введенная в конфигураторе, не будет перенесена в информационную базу.
Изменение порядка следования предопределенных элементов в предопределенных табличных частях плана счетов и плана видов расчета обрабатывается в связанных данных, т. е. порядок элементов в данных будет таким же, каким он задан в метаданных. Данные, введенные пользователем (не предопределенные) будут располагаться после предопределенных.

Если в конфигураторе выполнено удаление элемента предопределенных данных, то будет выполнено следующее:
● Элемент данных, связанный с элементом предопределенных данных, будет помечен на удаление.
● В списке субконто элемента плана счетов будут удалены соответствующие записи.
● В списках ведущих, базовых и вытесняющих видов расчета будут удалены соответствующие записи.
Для принудительного создания элементов предопределенных данных (для справочников, планов видов характеристик, планов видов расчетов и планов счетов) следует воспользоваться методом ИнициализироватьПредопределенныеДанные(). Вызов этого метода выполнит принудительное создание элементов предопределенных данных при выполнении следующих условий:
● Предопределенные элементы ранее не создавались в текущей области данных.
● Обновление предопределенных данных настроено таким образом, что создание и обновление предопределенных данных должно выполняться.
Если указанные условия не выполняются – создание предопределенных элементов не выполняется.
Если в прикладном решении отключено автоматическое обновление предопределенных данных, то удаление предопределенного элемента приводит к изменению в связанном объекте данных (если таковой есть). Значение свойства ИмяПредопределенныхДанных заменяется значением #xxxxxxxx-xxxxxxxx-
xxxx-xxxxxxxxxxxx, где xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx – это уникальный идентификатор удаленного элемента метаданных.
Если требуется получить список предопределенных элементов для объекта конфигурации, то сделать это можно с помощью метода
ПолучитьИменаПредопределенных().
Пример получения списка предопределенных:

Список = Метаданные.Справочники.Товары.ПолучитьИменаПредопределенных();

Если метод вернул пустой массив, значит, у объекта конфигурации отсутствуют предопределенные значения. В противном случае можно, например, для
каждого предопределенного элемента выполнить проверку наличия связанного элемента в данных.

Работа в распределенной информационной базе

При работе в режиме распределенной информационной базы вместе с конфигурацией передаются предопределенные элементы. Собственно элементы данных, связанные с предопределенными данными, передаются обычным образом, с помощью плана обмена. При этом автоматическое создание предопределенных данных в периферийной информационной базе не произойдет, подробное описание причины см. здесь.
ВНИМАНИЕ! Если данные, связанные с предопределенными элементами, оказались получены в подчиненном узле раньше, чем конфигурация со связанными предопределенными элементами, то автоматического «связывания» данных и предопределенных данных не произойдет. Для этого потребуется повторно выгрузить из центральной в периферийную информационную базу нужные элементы данных.
Если начальный образ периферийной информационной базы создается до того, как с главной информационной базой начали работать, можно воспользоваться специальным методом ИнициализацияПредопределенныхДанных() для создания предопределенных элементов, чтобы они автоматически попали в периферийную информационную базу. Метод надо вызывать до того, как выполнено создание начального образа.
При отмене назначения главного узла (например, для выполнения каких-либо специальных действий), следует учитывать следующий момент: при
определении необходимости создания или обновления предопределенных элементов такая информационная база не будет считаться периферийной. В связи с этим, при первом запуске такой информационной базы в режиме «1С:Предприятие», режим создания или обновления предопределенных элементов может быть определен как Обновлять автоматически. Чтобы избежать этого, можно воспользоваться параметром командной
строки /SetPredefinedDataUpdate (или использовать метод глобального контекста
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы()).
Этим же способом можно воспользоваться в том случае, если используется универсальный механизм обмена данными между информационными базами
с подобными, но не идентичными типовыми решениями, и необходимо сделать одну информационную базу ведущей (в части предопределенных данных). Для информационной базы, где необходимо создавать предопределенные элементы, следует указать значение Создавать автоматически, а для другой информационной базы – Не создавать автоматически. При этом связь элемента конфигурации и объекта данных будет выполняться по имени предопределенного элемента.
Также при использовании универсального механизма обмена данными следует учитывать следующие особенности:
● При записи объекта данных, который в базе-источнике является предопределенным, система проверяет наличие такого же имени предопределенных данных в типообразующем объекте конфигурации. Если такое имя есть – объект будет загружен без изменений. Если такого имени нет – в объекте при загрузке будет очищено свойство ИмяПредопределенныхДанных.

Например, выполняется универсальный обмен данными между одинаковыми информационными базами. В каждой информационной базе существует
справочник Номенклатура. В каждой информационной базе в этом справочнике содержится предопределенный элемент Услуга. Ссылки на эти объекты данных разные.
Тогда при загрузке произойдет следующее: система обнаружит наличие в базе-приемнике предопределенный элемент Услуга и выполнит загрузку с сохранением свойства ИмяПредопределенногоЭлемента. Это будет возможно в том случае, если перед записью элемента свойство ОбменДанными.Загрузка  установлено в значение Истина. В противном случае будет вызвано исключение.
Однако при попытке обратиться в базе-приемнике к предопределенному элементу Услуга, произойдет ошибка, т. к. в системе не может быть двух объектов, связанных с одинаковым предопределенным элементом.
Не следует допускать возникновения такой ситуации. Прикладной разработчик должен самостоятельно обрабатывать попытку загрузки объекта данных с дублирующим именем предопределенных данных.
● При записи объекта данных, у которого имя предопределенных данных ссылается на удаленный элемент (имеет вид #xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), то такой элемент будет записан в любом случае. Однако система не позволит записать два объекта,
ссылающиеся на один удаленный предопределенный элемент (с одинаковым значением имени предопределенных данных), кроме как в случае, когда перед записью элемента свойство ОбменДанными.Загрузка установлено в значение Истина.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *