Использование предопределенных элементов
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
Действует для версии платформы 1С:Предприятие 8.3.3 и выше без режима совместимости с версией 8.2
1.1. В справочниках, планах счетов, планах видов характеристик и планах видов расчета имеется возможность создавать предопределенные элементы автоматически или программно.
1.2. В большинстве случаев, предопределенные элементы рекомендуется создавать автоматически, поскольку они постоянно нужны и требуется упростить обращение к этим элементам из кода.
Например, предопределенная страна Россия в справочнике Страны мира , предопределенные профиль групп доступа Администратор и т.п.
- в свойстве ОбновлениеПредопределенныхДанных справочника, плана счетов, плана видов характеристик или плана видов расчета должно быть установлено значение Авто (по умолчанию), а также не следует допускать программных вызовов метода УстановитьОбновлениеПредопределенныхДанных этих объектов для переключения этого режима.
- запретить удаление предопределенных элементов пользователями, выключив во всех ролях следующие права (по умолчанию выключены):
- ИнтерактивноеУдалениеПредопределенныхДанных
- ИнтерактивнаяПометкаУдаленияПредопределенныхДанных
- ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных
- ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных
Область применения (уточнение): управляемое приложение, обычное приложение.
1.3. Исключение составляют дочерние узлы РИБ, в котором предопределенные элементы автоматически не создаются (и не обновляются при изменении в метаданных), а должны быть переданы из главного узла вместе с изменениями конфигурации.
а) конфигурация должна обеспечивать загрузку сообщения обмена в подчиненный узел РИБ до выполнения другого прикладного кода, который обращается к получаемым из главного узла предопределенным элементам;
б) в прикладной логике загрузки данных из главного узла (обработчик события ПриПолученииДанныхОтГлавного , правила регистрации объектов) следует избегать обращений к предопределенным элементам, поскольку нет гарантии, что они уже были загружены из сообщения обмена;
в) код обработчиков обновления ИБ, который обрабатывает предопределенные элементы, не должен выполняться в подчиненных узлах РИБ:
Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда
// заполняем предопределенные элементы
// .
КонецЕсли;При использовании в конфигурации подсистемы «Обмен данными» Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше требования (а) и (б) снимаются.
1.4. Для таблиц с предопределенными элементами, которые не входят в состав плана обмена РИБ (и на которые не ссылаются другие таблицы, входящие в состав плана обмена РИБ) свойство ОбновлениеПредопределенныхДанных необходимо устанавливать в значение ОбновлятьАвтоматически .
Значение Авто в этом случае не подходит, так как для подчиненного узла Авто означает НеОбновлятьАвтоматически , то есть предопределенные элементы таблицы автоматически созданы не будут.
При включенном режиме совместимости с версией 8.3.3 также необходимо при первом запуске подчиненного узла РИБ (сразу после того, как была обновлена его конфигурация) устанавливать автоматическое обновление в данных с помощью вызова:
2. В некоторых случаях, предопределенные элементы не требуется создавать автоматически, если их наличие зависит от какого-либо условия: включенной функциональной опции, режима работы программы и т.п.
Например, те или иные предопределенные виды расчетов в плане видов расчета Начисления зависят от значений функциональных опций ИспользоватьУчетВремениСотрудниковВЧасах , ИспользоватьСдельныйЗаработок и др.
- в свойстве ОбновлениеПредопределенныхДанных справочника, плана счетов, плана видов характеристик или плана видов расчета нужно установить в значение «Не обновлять автоматически»
- предусмотреть код создания (и пометки недействительным) предопределенного элемента в зависимости от бизнес-логики, например:
Если ПолучитьФункциональнуюОпцию(«ИспользоватьУчетВремениСотрудниковВЧасах») Тогда
НачислениеОбъект = ПланыВидовРасчета.Начисления.СоздатьВидРасчета();
НачислениеОбъект.ИмяПредопределенныхДанных = «ОкладПоЧасам»;
// .
НачислениеОбъект.Записать();
КонецЕсли;- учитывать в прикладном коде отсутствие предопределенных элементов в ИБ. В противном случае, при обращении к несуществующему предопределенному элементу из кода или текста запроса будет вызвано исключение:
При использовании в конфигурации Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше рекомендуется использовать функцию ПредопределенныйЭлемент общего модуля ОбщегоНазначения или ОбщегоНазначенияКлиент , которая возвращает Неопределено для несуществующих в ИБ предопределенных элементов:
1С, что такое предопределенный элемент, как создать?
Предопределенный элемент в 1С — это запись справочника заранее созданная в конфигураторе. К предопределенным элементам можно обращаться программно, при этом не используя запросы к базе данных. Данные элементы помечены желтым кружком и их нежелательно редактировать в пользовательском режиме, их нельзя удалить.
Пример создания предопределенного элемента:
Допустим нам необходимо, чтобы в базе изначально присутствовал объект справочника «Договор», а именно «Договор подряда».
- Заходим в конфигуратор;
- Открываем справочник договоры -> Прочее -> Предопределенные
- Нажимаем кнопку «Создать» (зеленый круг с плюсом), затем заполняем «Имя», без пробелов.
- Обновляем базу;
- Затем в пользовательском режиме открываем справочник «Договоры». Видим, что уже есть 1 элемент справочника, созданный нами в конфигураторе. Договор помечен желтым кружком, что говорит нам о том, что он предопределенный.
Пример программного обращения к предопределенному элементу
Создадим обработку, с формой, на форму выведем кнопку. При нажатии на кнопку организуем вывод сообщения с наименованием договора созданного в конфигураторе.
Пример процедуры:
&НаСервере Процедура СообщитьНаименованиеПредопределенногоЭлементаНаСервере() // Пример обращения с помощью встроенного языка Сообщить(Справочники.Договоры.ДоговорПодряда); Сообщить(Справочники.Договоры.ДоговорПодряда.Наименование); Сообщить(Справочники.Договоры.ДоговорПодряда.Код); КонецПроцедуры
Пример использования предопределенных элементов в СКД
- Данные элементы мы можем использовать при отборе, в схеме компоновки данных. Создадим отчет СКД, с текстом запроса:
ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК Ссылка, ЗаказПокупателя.ВерсияДанных КАК ВерсияДанных, ЗаказПокупателя.ПометкаУдаления КАК ПометкаУдаления, ЗаказПокупателя.Номер КАК Номер, ЗаказПокупателя.Дата КАК Дата, ЗаказПокупателя.Проведен КАК Проведен, ЗаказПокупателя.Контрагент КАК Контрагент, ЗаказПокупателя.Договор КАК Договор ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя
- Далее в форме СКД переходим на вкладку Настройки -> Отбор -> Договор, переместить в правую область -> Выбрать «Договор подряда» из доступных значений;
- Результат запроса будет отфильтрован по договору подряда.
Предопределенные элементы в 1С
В этой статье речь пойдет о предопределенных элементах, которые можно создать в платформе 1С:Предприятие 8.
Для чего нужны предопределенные элементы
Ответ на этот вопрос вполне очевиден — для того, чтобы разработчик в коде мог обратиться к таким элементам надежным способом, т.к. поиск по коду или по наименованию не является надежным. Захардкодить поиск по уникальному идентификатору элемента в код — также не является хорошим тоном.
Куда можно добавить
Предопределенные элементы могут быть созданы у:
- справочников;
- планов счетов;
- планов видов характеристик;
- планов видов расчета.
Предопределенные элементы не могут быть у подчиненного справочника, т.е. если справочник имеет хотя бы одного владельца, то в него не могут быть добавлены предопределенные элементы. И наоборот, если справочник, имеет хотя бы один предопределенный элемент — его нельзя сделать подчиненным.

Рис. 1. Добавление предопределенных элементов невозможно

Это очень важная особенность про которую стоит помнить. Как-то у меня на проекте была задача создать подчиненный справочник, а в последствии встала задача добавить в него предопределенные элементы — пришлось все переделывать. Такое поведение платформы не очевидно, но вполне логично, т.к. в нормальных условиях у элемента подчиненного справочника свойство Владелец всегда указано, а при добавлении предопределенного элемента в конфигураторе мы можем лишь указать его имя, код и наименование.
В платформе 8.3 появилась возможность удалять предопределенные элементы в режиме 1С:Предприятие, ровно как и связывать существующие, задав им имена. В связи с этим в было добавлено системное перечисление ОбновлениеПредопределенныхДанных, содержащее следующие значения:
- Авто;
- НеОбновлятьАвтоматически – предопределенные элементы не создаются в БД;
- ОбновлятьАвтоматически – предопределенные элементы будут созданы.
При удалении предопределенного элемента в режиме Конфигуратор, связанная с ним запись в базе данных будет помечена на удаление если для справочника свойство ОбновлениеПредопределенныхДанных = ОбновлятьАвтоматически.

Рассмотрим свойство ИмяПредопределенныхДанных. Оно служит для связи записи в базе данных элементом предопределенных данных, заданным в конфигурации. Таким образом имеется возможность связать существующие записи в БД с элементами предопределенных данных, например, следующим кодом:
ЭлементСсылка = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Производитель"); Объект = ЭлементСсылка.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = "Производитель"; Объект.Записать();
А также можно «отвязать» элемент в базе данных от предопределенного элемента.
Получить список предопределенных элементов данных можно обратившись к метаданным, следующим образом:
Список = Метаданные.ПланыВидовХарактеристик.СвойстваОбъектов.ПолучитьИменаПредопределенных();
Работа с предопределенными элементами справочников в 1С

Предопределенный элемент в 1С – это уже готовый элемент справочника, с которым можно работать в режиме предприятия. Для примера возьмем справочник «Подразделения» или «Склады» (в других конфигурациях он может называться «Структурные единицы»).
Когда мы только заполняем базу данными и заходим в справочники, то видим, что там уже есть один элемент. И этот элемент необходимо будет подправить под Ваши требования.
Предопределенный элемент в 1С – это та самая «Ваша запись» в этом справочнике, но наперед созданная разработчиками купленного Вами программного продукта. Потому и лучше всего использовать эти элементы для работы в программе.На скриншоте Вы видите, как выглядит предопределенный элемент в 1С. Его легко узнать по особенной картинке записи.
2. Польза для разработчиков от предопределенных элементов в 1С
Итак, какая же польза разработчикам от этих от предопределенных элементов в 1С? Скажу Вам, как разработчик, огромная польза. Использование этих элементов улучшает качество формы кода в 1С и позволяет ускорить его выполнение.
К примеру, возьмем запись в регистр сведений «Цены номенклатуры». И нам необходимо записать в этот регистр цену по определенному виду цен. Данная задача не займет много времени, но необходимо учесть, что чем лучше Вы напишите свой код, тем быстрее он выполнится, и тем меньше пользователь будет волноваться о результате. Итак, вот наш код:
ЗаписьЦеныНоменклатуры = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписей(); ЗаписьЦеныНоменклатуры.Номенклатура = ВашаНоменклатура; ЗаписьЦеныНоменклатуры.ВидЦены = Справочники.ВидыЦен.Закупочная; ЗаписьЦеныНоменклатуры.Цена = ВашаЦена; ЗаписьЦеныНоменклатуры.Записать();
Приведенный мною пример один из самых простых вариантов использования предопределенных элементов в 1С.
Как Вы видите, обращение к предопределенному элементу в 1С происходит просто «Справочники.ВидыЦен.Закупочная». Это и весь код обращения к нему.
Но такое работает только, когда предприятие использует обычные формы кода в 1С или когда в управляемой форме код в 1С выполняется на сервере. В этом случае этот код будет работать отлично.
На «клиенте» нужно немного по-другому писать обращение к элементу. Вот так: «ПредопределенноеЗначение(«Справочник.ВидыЦен.Закупочная»)». Если использовать именно такую форму кода в 1С, он будет корректно выполняться. В ином случае, просто будет выдаваться сообщение об ошибке и будет прекращено выполнение Вашего кода.
Вариантов использования предопределенных элементов в 1С масса. Например, на обычных формах они могут еще использоваться как дополнительные значения настроек пользователя или как дополнительное право для работы с документом, справочником.
В управляемых формах уже отошли от дополнительных прав и настроек, поэтому в них Вы такого функционала не увидите. Но зато появился новый функционал и доступ к нему дают как раз эти элементы. К примеру, предопределенный элемент в 1С используется для того чтобы знать, какие справочники имеют право работать с дополнительными реквизитами объектов в 1С.
Еще один момент хочу сказать, предопределенные элементы в 1С есть не только у справочников, но и в некоторых других объектах конфигурации в 1С.
Предопределенные элементы в 1С – это чудесный инструмент, который нам помогает очень быстро и качественно выполнять свою работу.
Специалист компании ООО «Кодерлайн» Мороз Олег
