Предопределенные элементы в 1С 8.3

Курс

Предопределенные элементы

Предопределенные элементы — это элементы справочников, планов видов характеристик, планов счетов или планов видов расчета, которые создаются в конфигураторе.

Чтобы создать предопределенный элемент в справочнике нужно на закладке Прочее нажать на кнопку Предопределенные:

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

Или в дереве метаданных выбрать в контекстном меню пункт Открыть предопределенные данные:

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

В списке предопределенных данных можно добавлять новые элементы или группы (если справочник иерархический). При создании нужно указать имя предопределенного элемента:

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

В пользовательском режиме у предопределенного элемента отличается значок:

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

Основное предназначение предопределенных элементов это возможность обращаться к ним в алгоритмах на встроенном языке:

Связь с предопределенным элементом

В таблице справочника есть два стандартных реквизита: Предопределенный и ИмяПредопределенныхДанных. Если элемент предопределенный, то у него реквизит Предопределенный = Истина, а в реквизите ИмяПредопределенныхДанных находится имя предопределенного элемента из конфигуратора. Именно через реквизит ИмяПредопределенныхДанных выполняется связь предопределенного элемента в конфигураторе и элемента справочника в базе данных.

Для того чтобы элемент справочника перестал быть предопределенным, нужно в реквизит ИмяПредопределенныхДанных записать пустую строку:

После этого элемент «Доставка» будет отображаться с обычным значком:

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

Если сейчас в коде выполнить:

То мы получим ошибку «Предопределенный элемент отсутствует в данных», потому что на данный момент ни один из элементов справочника не связан с предопределенным элементом.

Чтобы исправить нужно у одного из элементов справочника заполнить реквизит ИмяПредопределенныхДанных. Например, сделаем это у бинокля:

Теперь бинокль отображается в списке с другим значком:

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

И если обратиться к предопределенному элементу Доставка, то будет получена ссылка на бинокль.

В одном справочнике не может быть более одного элемента с одним значением реквизита ИмяПредопределенныхДанных. Если попробовать присвоить реквизиту ИмяПредопределенныхДанных для элемента Доставка значение Доставка, то будет выброшено исключение «Предопределенный элемент не уникален».

Для получения списка всех предопределенных элементов можно воспользоваться методом ПолучитьИменаПредопределенных, который вернет массив строк со всеми именами предопределенных элементов:

Удаление предопределенного элемента

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

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

Восстановление предопределенных элементов

Может так случиться, что какой-то предопределенный элемент был случайно удален из базы в пользовательском режиме. А обращения к нему программно остались. Тогда будет возникать ошибка «Предопределенный элемент отсутствует в данных». Для восстановления предопределенных элементов можно выполнить следующий код:

Или нужно вручную связать уже имеющийся элемент через заполнение реквизита ИмяПредопределенныхДанных.

Предопределенное значение на клиенте

Для получения предопределенного элемента на клиенте нужно использовать функцию ПредопределенноеЗначение:

Также есть обратная функция ПолучитьПолноеИмяПредопределенногоЗначения, которая доступна как на клиенте, так и на сервере. Она возвращает полное имя предопределенного элемента по ссылке на предопределенный элемент:

Обновление предопределенных данных

На закладке Прочее есть настройка Обновление предопределенных данных:

Обновление предопределенных данных

Данная настройка может принимать 3 значения:

  • Авто
  • Обновлять автоматически
  • Не обновлять автоматически

Обновлять автоматически означает, что при создании нового предопределенного элемента в конфигураторе автоматически будет создан связанный элемент в справочнике.

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

При этом если предопределенный элемент был создан при настройке Обновлять автоматически, то у связанного с ним элемента справочника будет автоматически обновляться реквизит ИмяПредопределенныхДанных. То есть если изначально был создан предопределенный элемент с именем «Доставка» и для него автоматически был создан связанный элемент справочника, то если в конфигураторе переименовать предопределенный элемент в «ДоставкаТовара», то реквизит ИмяПредопределенныхДанных у связанного элемента обновится автоматически (даже если сейчас выбрано Не обновлять автоматически).

Авто означает, что используется системная настройка.

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

  1. Сначала проверяется настройка для таблицы базы данных. Если она не равна Авто, то используется именно она. Если равна Авто, то переходим на следующий шаг.
  2. Теперь проверяется настройка для объекта метаданных в конфигураторе. Принцип тот же.
  3. На последнем шаге проверяется настройка для всей информационной базы.
  4. Если и она равна Авто, то еще учитывается является ли данная база периферийным узлом распределенной информационной базы. Если да, то используется Не обновлять автоматически. Иначе Обновлять автоматически.

Для установки данной настройки для таблицы базы данных используется метод УстановитьОбновлениеПредопределенныхДанных:

Теперь обновление предопределенных данных не будет выполняться автоматически, даже если на закладке Прочее указать Обновлять автоматически (так как приоритет у настройки для таблицы базы данных).

Если и для таблицы и на закладке Прочее указать Авто, то можно выполнить настройку для всей информационной базы. Это делается с помощью метода УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы:

Также есть метод ИнициализироватьПредопределенныеДанные с помощью которого можно создать все предопределенные данные для всех объектов метаданных. Но для объекта метаданных должен быть установлен признак, что предопределенные данные еще не были инициализированы. Это выполняется методом УстановитьИнициализациюПредопределенныхДанных менеджера справочника.

Например, изначально было установлена настройка Обновление предопределенных данных = Не обновлять автоматически. В конфигураторе было создано несколько предопределенных элементов. В самом справочнике они не были созданы. Для того чтобы создать их автоматически нужно:

  • Удалить все предопределенные элементы из справочника, если они есть.
  • Установить признак инициализации предопределенных данных для данного справочника в Ложь
  • Вызвать метод ИнициализироватьПредопределенныеДанные

Если при вызове ИнициализироватьПредопределенныеДанные в справочнике уже есть предопределенные элементы, то будет выброшено исключение «Необходимо удалить предопределенные данные».


Подписывайтесь на группу ВКонтакте , где я публикую ссылки на новые статьи с данного сайта, а также интересные материалы с других ресурсов по программированию в 1С
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Используя этот сайт, Вы даете согласие на использование cookies. На данном этапе Вы можете отказаться от использования cookies, настроив необходимые параметры в своем браузере.
ok