Только что удалил предопределённый элемент из пользовательского режима
Есть справочник. У него есть предопределённые элементы. Всё это крутилось на 8.2-ой платформе. Потом я конвертнул конфу на 8.3-ю последнею. Потом случайно нажал Del на предопределённом элементе. Он пометился на удаление. А потом вообще удалил через удаление помеченных.
И что делать теперь?
(2) Режим совместимости не отключать и не ставить её выше 8.3.2.
Это оказывается известный баг. Типа, при конвертации могут быть установлены лишние права "Интерактивное удаление предопределённых" и т. п.
Обмен данными. Предопределенные данные.
—-
Реализована возможность указывать признак обновления предопределенных данных в целом для информационной базы с помощью встроенного языка или ключей командной строки. В режиме «1С:Предприятие» режим обновления предопределенных данных дополнительно анализирует признак, установленный в целом для информационной базы (дополнительно к признаку, установленному для объектов конфигурации и признаку, установленному в данных и вида информационной базы: центральная/не распределенная информационная база или периферийная информационная база).
Реализованы методы глобального контекста УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы() и ПолучитьОбновлениеПредопределенныхДанныхИнформационнойБазы().
Реализованы параметр командной строки пакетного режима запуска конфигуратора /SetPredefinedDataUpdate.
Восстановление предопределенных элементов справочников
Многим пользователям свойственно ковыряться и доставлять себе хлопоты. Например, удаляя предопределенные элементы справочников. Например группу Архив в спр. Номенклатуры, статьи ДДС и т.д. Обходят защиту и..
Напоминаю, их можно переименовать, можно игнорировать, но удалять нельзя.
Выглядят они в справочниках, как иконки с шариками:
Если это всё таки произошло (элемент удалён), то посыпятся ошибки и их (элементы) нужно восстановить.
Для этого зайдите в Меню Сервис- Выбор обработки — Обработки данных — Встроенные — "..для восстановления" — Восстановление предопределенных элементов:
Для закрепления результата, возможно понадобится перезапустить программу.
Предопределенные элементы справочников 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С можно создавать предопределенный элемент или предопределенную группу — если у справочника есть владелец, то создать предопределенный элемент нельзя.
1С восстановить предопределенный элемент
При работе с предопределенными данными могут встречаться следующие ошибки:
- Попытка обратиться к предопределенному элементу приводит к ошибке "Предопределенный элемент отсутствует в данных". Возможные причины появления такой ошибки:
- Это периферийный узел и предопределенные данные из центрального узла еще не загружены.
- Область информационной базы инициализирована, когда обновление предопределенных данных отключено на уровне информационной базы или на уровне проблемного объекта метаданных.
- Предопределенные данные удалены.
- У предопределенных данных очистили значение реквизита "ИмяПредопределенныхДанных".
Анализ причин ошибок при работе с предопределенными данными и способы их устранения.
Во всех случаях должна быть включена запись событий в журнал регистрации с уровнем "Информация".
Отсутствие предопределенных элементов в данных
Необходимо в журнале регистрации выполнить отбор по проблемному объекту метаданных и следующим событиям:
- Данные:
- Изменение предопределенных данных,
- Удаление предопределенных данных,
- Установка инициализации предопределенных данных,
По событиям в списке можно понять, почему предопределенный элемент не обнаружен.
Если в журнале имеется события " Данные. Изменение предопределенных данных ", у которых новое имя предопределенных данных – пустая строка. Это значит, что пользователь или код на встроенном языке очистил имя предопределенных данных, сделав элемент не предопределенным. Для восстановления элемента достаточно вернуть свойству ИмяПредопределенныхДанных старое значение. Желательно доработать конфигурацию таким образом, чтобы не допустить повторение такой ситуации: изменить права, модифицировать код на встроенном языке.
Если в конфигурации есть событие " Данные. Удаление предопределенных данных ", то это означает, что предопределенные данные удалены пользователем или из встроенного языка. Для исправления необходимо создать недостающий предопределенный элемент. Изменить конфигурацию таким образом, чтобы не допускать удаления используемых предопределенных данных.
Если в журнале имеется событие " Данные. Установка инициализации предопределенных данных ", в которых установлен признак инициализации предопределенных данных, то это означает, что из встроенного языка был установлен признак инициализации предопределенных данных, а предопределенные элементы не созданы (все или частично). Для исправления необходимо модифицировать конфигурацию, чтобы создавались все предопределенные данные, либо не было обращений к отсутствующим данным.
Если в журнале имеется событие " ИнформационнаяБаза. Обновление предопределенных данных ", в котором есть комментарий "Обновление предопределенных данных отключено". Это означает, что в базе данных на уровне ИБ, узла или объекта метаданных отключено автоматическое обновление предопределенных данных. В таком случае платформа не выполняет реструктуризацию предопределенных данных. Для выяснения источника проблемы необходимо:
- Убедиться, что это не периферийный узел. В периферийном узле предопределенные данные загружаются из центрального узла. Поэтому в логике работы конфигурации необходимо предусмотреть возможность загрузки изменений из центрального узла до работы с предопределенными данными из кода конфигурации.
- Проанализировать события " ИнформационнаяБаза. Установка обновления предопределенных данных ", в которых установлено отключение обновления предопределенных данных. Если перед обновлением конфигурации было отключено обновление предопределенных данных, то необходимо восстановить автоматическое обновление предопределенных данных с помощью метода " УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы ", если отключено для всей ИБ, или метода " УстановитьОбновлениеПредопределенныхДанных ", если отключено для конкретного объекта метаданных. Изменить конфигурацию таким образом, чтобы не допустить повторения этой ситуации. Недостающие предопределенные данные необходимо создать, для корректной работы или изменить конфигурацию таким образом, чтобы не было обращений к этим метаданным.
- Проверить конфигурацию. Возможно для объекта метаданных установлено свойство ОбновлениеПредопределенныхДанных в значение НеОбновлятьАвтоматически . В таком случае необходимо исправить ошибку в конфигурации.
Дублирование предопределенных данных.
Дубли могут возникать только в режиме загрузки данных (ОбменДанными.Загрузка = Истина). В этом случае контроль уникальности предопределенных будет отключен.
Если в журнале регистрации есть записи " Данные. Добавление предопределенных данных ", значение ИмяПредопределенныхДанных у которых приводит к дублю. Это означает, что дубли предопределенных данных созданы из встроенного языка, например, были загружены при обмене данными.
Если в журнале регистрации есть записи " Данные. Изменение предопределенных данных ", значение НовоеИмяПредопределенныхДанных у которых приводит к дублю. Это означает, что дубли предопределенных данных созданы пользователем или из встроенного языка, например, были загружены при обмене данными или в форме элемента некорректно установлен режим загрузки и пользователь указал дублирующее имя.
В этих случаях для исправления ошибки необходимо определить, какой элемент является корректным (например, определив ссылки на него) и ненужный элемент сделать обычным (не предопределенным, очистив поле ИмяПредопределенныхДанных ). Обязательно перед удалением элемента проверьте необходимость заменить ссылки с удаляемого предопределенного элемента на корректную ссылку.
Рекомендации по работе с предопределенными данными
Если вы не планируете самостоятельно управлять предопределенными данными и ожидаете, что они всегда есть в базе данных, то вам следует:
- Ограничить права доступа на предопределенные данные таким образом, чтобы было невозможно их удалять или очищать свойство ИмяПредопределенныхДанных .
- Избегать модификации предопределенных данных в привилегированном режиме.
- Избегать модификации в режиме загрузки данных, когда свойство " ОбменДанными.Загрузка " установлено в " Истина ".
- Не отключать автоматическое обновление предопределенных данных.
Необходимо помнить, что в периферийном узле все предопределенные данные не создаются платформой, а приходят из центрального узла. Поэтому при разработке конфигураций, работающих в РИБ, следует обязательно анализировать как будет выполняться обновление данных при первом запуске, чтобы не обращаться к новым предопределенным данным до их загрузки из центрального узла.
Восстановить предопределенный элемент.
С некоторых пор в 1с предопределенные элементы могут быть удалёны и заново созданы в режиме "Предприятие". Идентифицируется предопределенный элемент ИменемПредопределенныхДанных. Тут надо понимать, что предопределенный элемент в конфигураторе это объект метаданных. Как элемент он создается принятием изменений. Если предопределенный элемент ошибочно был удален из справочника, то его можно воссоздать исполнив во такой код:
Пример:
элем = Справочники . Валюты . СоздатьЭлемент ( ) ;
элем . Наименование = "Рубли" ;
элем . ИмяПредопределенныхДанных = "Руб" ;
элем . Записать ( ) ;
Разумеется предопределенный элемент с именем "Руб" должен существовать в конфигурации.
ВосстановлениеПредопределенныхЭлементов
//<
//Если вы хотите создать предопределенные данные средствами платформы, то менять конфигурацию не нужно. Можно использовать примерно такой код:
//Нужно понимать, что этот код сработает для справочника "СправочникПример" у которого в данных нет предопределенных элементов, и у которого в метаданных есть предопределенный элемент с именем "Предопределенный".
//>
// Принудительно включаем автообновление предопределенных данных на уровне данных
Справочники . СправочникПример . УстановитьОбновлениеПредопределенныхДанных ( ОбновлениеПредопределенныхДанных . ОбновлятьАвтоматически );
// Сбрасываем признак, что предопределенные данные инициализированы
Справочники . СправочникПример . УстановитьИнициализациюПредопределенныхДанных (Ложь);
// первое обращение к таблице справочника к предопределенному элементу
Значение = Справочники . СправочникПример . Предопределенный ;
// Возвращаем автообновление предопределенных данных в исходное состояние
Справочники . СправочникПример . УстановитьОбновлениеПредопределенныхДанных ( ОбновлениеПредопределенныхДанных . Авто );