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