1С 8.2 УП : Как получить Имя предопределенного элемента справочника и его Код?
СправочникМенеджер.<Имя справочника>.ПолучитьИмяПредопределенного (CatalogManager.<Имя справочника>.GetPredefinedItemName)
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ПолучитьИмяПредопределенного (GetPredefinedItemName)
Синтаксис: Код 1C v 8.х
Параметры: <Ссылка> (обязательный)
Тип: СправочникСсылка. Ссылка на элемент, имя которого требуется получить.Возвращаемое значение:
Тип: Строка.
Описание: Получает имя предопределенного элемента. Если данный элемент не является предопределенным, то возвращается пустая строка.
Доступность: Сервер, толстый клиент, внешнее соединение.
Код 1C v 8.х
Код 1C v 8.х
Получить Код предопределенного элемента невозможно
Смотри тему: Получение кода предопределенного элемента
Предопределенные элементы справочников 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С можно создавать предопределенный элемент или предопределенную группу — если у справочника есть владелец, то создать предопределенный элемент нельзя.
Как использовать перечисление в форме справочника?
Чтобы обратиться к предопределенному значению перечисления на клиенте нужно использовать функцию ПредопределенноеЗначение(). Например:
Функция ПредопределенноеЗначение() позволяет получить ссылку на элемент из предопределенных данных, прикладных перечислений и точек бизнес-процессов.
Единственный параметр этой функции должен содержать полный путь к предопределенному значению, включая имя самого значения. Например,ПланСчетов.Основной.Счет41.
Синтаксис описания предопределенного значения следующий:
<Тип предопределенного значения>.<Имя объекта метаданных>.<Значение>.
Типом предопределенного значения может быть:
- Справочник;
- ПланВидовХарактеристик;
- ПланСчетов;
- ПланВидовРасчета;
- Перечисление
В качестве <Имя объекта метаданных> указывается имя объекта конфигурации, как оно задано в конфигураторе.
Для перечислений, определенных в конфигурации, <Значение> указывается как имя соответствующего объекта конфигурации типа ЗначениеПеречисления.
Для всех остальных типов предопределенных значений <Значение> указывается как имя предопределенного элемента данных, как оно указано в конфигураторе, или ПустаяСсылка для указания пустой ссылки.
Для точек маршрутов бизнес-процессов имя предопределенного значения имеет вид:
БизнесПроцесс.<Имя объекта метаданных>.ТочкаМаршрута.<Имя точки маршрута>.
Подробнее об использовании метода ПредопределенноеЗначение() можно прочитать в синтакс-помощнике: Глобальный контекст — Функции обращения к конфигурации:
Предопределенные данные
ЭлементСсылка = Справочник.Товары.НайтиПоНаименованию (“Услуга доставки”);
Объект = ЭлементСсылка.ПолучитьОбъект() ;
Объект.ИмяПредопределенныхДанных = “Услуга”;
Объект.Записать() ;
В результате этой операции, предопределенному элементу Услуга справочника Товары будет сопоставлен элемент данных с именем Услуга доставки.
При записи объекта проверяется, что в информационной базе не существует другого элемента данных с именем предопределенных данных, установленного в значение, с которым записывается элемент данных.
● «Отключить» элемент данных от элемента предопределенных данных. Для этого необходимо присвоить свойству ИмяПредопределенныхДанных
пустую строку и записать элемент:
Объект = Справочник.Товары.Услуга.ПолучитьОбъект ();
Объект.ИмяПредопределенныхДанных = “”;
Объект.Записать() ;
Если попробовать обратиться к предопределенному элементу Справочник.Товары.Услуга после выполнения вышеприведенного примера, то будет сгенерировано исключение.
Таким образом, процесс смены элемента данных, связанного с предопределенными данными, выполняется в два этапа:
● Выполняется «отключение» существующего элемента данных от предопределенного элемента;
● Выполняется связывание нового элемента данных с предопределенным элементом.
Создание элементов данных, связанных с предопределенными данными, может быть выполнено одним из трех способов:
● Автоматически, во время реструктуризации информационной базы. Это происходит в следующем случае:
● Разрешено автоматическое создание и обновление предопределенных данных;
● Предопределенные данные ранее создавались в данной области данных или информационной базе.
● Автоматически, при первом обращении к таблице, хранящей данных объекта конфигурации. Создание предопределенных элементов в этом случае
будет выполняться при условии, что создание предопределенных элементов не запрещено.
● С помощью встроенного языка, указав свойство ИмяПредопределенныхДанных при создании элемента данных. Этот способ можно использовать, если
автоматическое создание предопределенных элементов запрещено в свойствах объектов конфигурации.
Обновление данных, связанных с предопределенными, будет выполняться в том случае, если разрешено автоматическое обновление предопределенных данных, предопределенные данные связаны с реальными данными и предопределенные данные изменены в конфигураторе. Во всех остальных случаях информация, введенная в конфигураторе, не будет перенесена в информационную базу.
Изменение порядка следования предопределенных элементов в предопределенных табличных частях плана счетов и плана видов расчета обрабатывается в связанных данных, т. е. порядок элементов в данных будет таким же, каким он задан в метаданных. Данные, введенные пользователем (не предопределенные) будут располагаться после предопределенных.
Если в конфигураторе выполнено удаление элемента предопределенных данных, то будет выполнено следующее:
● Элемент данных, связанный с элементом предопределенных данных, будет помечен на удаление.
● В списке субконто элемента плана счетов будут удалены соответствующие записи.
● В списках ведущих, базовых и вытесняющих видов расчета будут удалены соответствующие записи.
Для принудительного создания элементов предопределенных данных (для справочников, планов видов характеристик, планов видов расчетов и планов счетов) следует воспользоваться методом ИнициализироватьПредопределенныеДанные(). Вызов этого метода выполнит принудительное создание элементов предопределенных данных при выполнении следующих условий:
● Предопределенные элементы ранее не создавались в текущей области данных.
● Обновление предопределенных данных настроено таким образом, что создание и обновление предопределенных данных должно выполняться.
Если указанные условия не выполняются – создание предопределенных элементов не выполняется.
Если в прикладном решении отключено автоматическое обновление предопределенных данных, то удаление предопределенного элемента приводит к изменению в связанном объекте данных (если таковой есть). Значение свойства ИмяПредопределенныхДанных заменяется значением #xxxxxxxx-xxxxxxxx-
xxxx-xxxxxxxxxxxx, где xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx – это уникальный идентификатор удаленного элемента метаданных.
Если требуется получить список предопределенных элементов для объекта конфигурации, то сделать это можно с помощью метода
ПолучитьИменаПредопределенных ().
Пример получения списка предопределенных:
Если метод вернул пустой массив, значит, у объекта конфигурации отсутствуют предопределенные значения. В противном случае можно, например, для
каждого предопределенного элемента выполнить проверку наличия связанного элемента в данных.
Работа в распределенной информационной базе
При работе в режиме распределенной информационной базы вместе с конфигурацией передаются предопределенные элементы. Собственно элементы данных, связанные с предопределенными данными, передаются обычным образом, с помощью плана обмена. При этом автоматическое создание предопределенных данных в периферийной информационной базе не произойдет, подробное описание причины см. здесь.
ВНИМАНИЕ! Если данные, связанные с предопределенными элементами, оказались получены в подчиненном узле раньше, чем конфигурация со связанными предопределенными элементами, то автоматического «связывания» данных и предопределенных данных не произойдет. Для этого потребуется повторно выгрузить из центральной в периферийную информационную базу нужные элементы данных.
Если начальный образ периферийной информационной базы создается до того, как с главной информационной базой начали работать, можно воспользоваться специальным методом ИнициализацияПредопределенныхДанных () для создания предопределенных элементов, чтобы они автоматически попали в периферийную информационную базу. Метод надо вызывать до того, как выполнено создание начального образа.
При отмене назначения главного узла (например, для выполнения каких-либо специальных действий), следует учитывать следующий момент: при
определении необходимости создания или обновления предопределенных элементов такая информационная база не будет считаться периферийной. В связи с этим, при первом запуске такой информационной базы в режиме «1С:Предприятие», режим создания или обновления предопределенных элементов может быть определен как Обновлять автоматически. Чтобы избежать этого, можно воспользоваться параметром командной
строки /SetPredefinedDataUpdate (или использовать метод глобального контекста
УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы ()).
Этим же способом можно воспользоваться в том случае, если используется универсальный механизм обмена данными между информационными базами
с подобными, но не идентичными типовыми решениями, и необходимо сделать одну информационную базу ведущей (в части предопределенных данных). Для информационной базы, где необходимо создавать предопределенные элементы, следует указать значение Создавать автоматически, а для другой информационной базы – Не создавать автоматически. При этом связь элемента конфигурации и объекта данных будет выполняться по имени предопределенного элемента.
Также при использовании универсального механизма обмена данными следует учитывать следующие особенности:
● При записи объекта данных, который в базе-источнике является предопределенным, система проверяет наличие такого же имени предопределенных данных в типообразующем объекте конфигурации. Если такое имя есть – объект будет загружен без изменений. Если такого имени нет – в объекте при загрузке будет очищено свойство ИмяПредопределенныхДанных.
Например, выполняется универсальный обмен данными между одинаковыми информационными базами. В каждой информационной базе существует
справочник Номенклатура. В каждой информационной базе в этом справочнике содержится предопределенный элемент Услуга. Ссылки на эти объекты данных разные.
Тогда при загрузке произойдет следующее: система обнаружит наличие в базе-приемнике предопределенный элемент Услуга и выполнит загрузку с сохранением свойства ИмяПредопределенногоЭлемента. Это будет возможно в том случае, если перед записью элемента свойство ОбменДанными.Загрузка установлено в значение Истина. В противном случае будет вызвано исключение.
Однако при попытке обратиться в базе-приемнике к предопределенному элементу Услуга, произойдет ошибка, т. к. в системе не может быть двух объектов, связанных с одинаковым предопределенным элементом.
Не следует допускать возникновения такой ситуации. Прикладной разработчик должен самостоятельно обрабатывать попытку загрузки объекта данных с дублирующим именем предопределенных данных.
● При записи объекта данных, у которого имя предопределенных данных ссылается на удаленный элемент (имеет вид #xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), то такой элемент будет записан в любом случае. Однако система не позволит записать два объекта,
ссылающиеся на один удаленный предопределенный элемент (с одинаковым значением имени предопределенных данных), кроме как в случае, когда перед записью элемента свойство ОбменДанными.Загрузка установлено в значение Истина .