diamond АШ Tlg

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

Устройство, использование предопределённых элементов на платформе 1С и развенчание популярных мифов

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

Справочник Организации
Предопредленный элемент

Сохраняем, запускаем тонкий клиент, и видим всё то, что вы так любите:

На клиенте

Миф №1: чтобы удалить предопределённый элемент нужно сперва удалить его из конфигурации

Да спокойно он удаляется из клиента, главное чтобы не было на него ссылок, убедитесь сами:

Удаление предопределённого 1
Удаление предопределённого 2
Удаление предопределённого 3
Удаление предопределённого 4

Как так-то? Потому что если изучить физическое строение справочника (как и других объектов ссылочного типа) то можно увидеть, что конфигуратор создает для ссылок на предопределённые элементы отдельную таблицу _REFSINF*, а то что мы видим в тонком клиенте - это основная таблица справочника. В неё по умолчанию добавлена самая обычная запись, но которая через поле ИмяПредопределенныхДанных ссылается на таблицу предопределенных. Таким образом, мироздание не нарушено и в клиентском режиме мы никак не удаляем объекты конфигурации - таблица предопределенных _REFSINF остается нетронутой, но использование предопределенных в программном коде будет приводить к ошибкам. После удаления консистентность базы данных никак нельзя считать нарушенной - с точки зрения платформы 1С всё остается в пределах допустимого.

Миф №2: при создании в конфигураторе предопределенный элемент появляется на клиенте автоматически

Чаще всего это именно так, но всё благодаря настройке по умолчанию, на которую мало кто обращает внимание:

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

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

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

Не обновлять автоматически 1
Не обновлять автоматически 2
Не обновлять автоматически 3

Миф №3: создать предопределённый элемент на клиенте нельзя

В основном смысле это конечно так - нельзя. Но если в конфигураторе эти элементы созданы, а в клиенте их нет, то тогда предопределённые элементы отлично создаются. Давайте создадим в клиентской сессии недостающий элемент ВтораяОрганизация, которую мы добавили в конфигураторе в главе выше. Для этого потребуется создать слегка модифицированную форму элемента справочника, добавив поле ИмяПредопределенныхДанных:

Выводим поле
Создаем новый
Создали новый

Как предопределенный элемент сделать обычным? (убрать шарик и предопределённость)

В продолжение эксперимента из главы выше, легко убираем предопределённость любого элемента справочника:

убрали предопределенность
убрали предопределенность

Заключение

Всё вышеописанное работает одинаково и на других ссылочных данных: планах счетов, планах видов характеристик.