1с как создать предопределенный элемент справочника
Перейти к содержимому

1с как создать предопределенный элемент справочника

  • автор:

Использование предопределенных элементов

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

Действует для версии платформы 1С:Предприятие 8.3.3 и выше без режима совместимости с версией 8.2

1.1. В справочниках, планах счетов, планах видов характеристик и планах видов расчета имеется возможность создавать предопределенные элементы автоматически или программно.

1.2. В большинстве случаев, предопределенные элементы рекомендуется создавать автоматически, поскольку они постоянно нужны и требуется упростить обращение к этим элементам из кода.
Например, предопределенная страна Россия в справочнике Страны мира , предопределенные профиль групп доступа Администратор и т.п.

  • в свойстве ОбновлениеПредопределенныхДанных справочника, плана счетов, плана видов характеристик или плана видов расчета должно быть установлено значение Авто (по умолчанию), а также не следует допускать программных вызовов метода УстановитьОбновлениеПредопределенныхДанных этих объектов для переключения этого режима.
  • запретить удаление предопределенных элементов пользователями, выключив во всех ролях следующие права (по умолчанию выключены):
    • ИнтерактивноеУдалениеПредопределенныхДанных
    • ИнтерактивнаяПометкаУдаленияПредопределенныхДанных
    • ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных
    • ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных

    Область применения (уточнение): управляемое приложение, обычное приложение.

    1.3. Исключение составляют дочерние узлы РИБ, в котором предопределенные элементы автоматически не создаются (и не обновляются при изменении в метаданных), а должны быть переданы из главного узла вместе с изменениями конфигурации.

    а) конфигурация должна обеспечивать загрузку сообщения обмена в подчиненный узел РИБ до выполнения другого прикладного кода, который обращается к получаемым из главного узла предопределенным элементам;

    б) в прикладной логике загрузки данных из главного узла (обработчик события ПриПолученииДанныхОтГлавного , правила регистрации объектов) следует избегать обращений к предопределенным элементам, поскольку нет гарантии, что они уже были загружены из сообщения обмена;

    в) код обработчиков обновления ИБ, который обрабатывает предопределенные элементы, не должен выполняться в подчиненных узлах РИБ:

    Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда
    // заполняем предопределенные элементы
    // .
    КонецЕсли;

    При использовании в конфигурации подсистемы «Обмен данными» Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше требования (а) и (б) снимаются.

    1.4. Для таблиц с предопределенными элементами, которые не входят в состав плана обмена РИБ (и на которые не ссылаются другие таблицы, входящие в состав плана обмена РИБ) свойство ОбновлениеПредопределенныхДанных необходимо устанавливать в значение ОбновлятьАвтоматически .

    Значение Авто в этом случае не подходит, так как для подчиненного узла Авто означает НеОбновлятьАвтоматически , то есть предопределенные элементы таблицы автоматически созданы не будут.

    При включенном режиме совместимости с версией 8.3.3 также необходимо при первом запуске подчиненного узла РИБ (сразу после того, как была обновлена его конфигурация) устанавливать автоматическое обновление в данных с помощью вызова:

    2. В некоторых случаях, предопределенные элементы не требуется создавать автоматически, если их наличие зависит от какого-либо условия: включенной функциональной опции, режима работы программы и т.п.

    Например, те или иные предопределенные виды расчетов в плане видов расчета Начисления зависят от значений функциональных опций ИспользоватьУчетВремениСотрудниковВЧасах , ИспользоватьСдельныйЗаработок и др.

    • в свойстве ОбновлениеПредопределенныхДанных справочника, плана счетов, плана видов характеристик или плана видов расчета нужно установить в значение «Не обновлять автоматически»
    • предусмотреть код создания (и пометки недействительным) предопределенного элемента в зависимости от бизнес-логики, например:

    Если ПолучитьФункциональнуюОпцию(«ИспользоватьУчетВремениСотрудниковВЧасах») Тогда
    НачислениеОбъект = ПланыВидовРасчета.Начисления.СоздатьВидРасчета();
    НачислениеОбъект.ИмяПредопределенныхДанных = «ОкладПоЧасам»;
    // .
    НачислениеОбъект.Записать();
    КонецЕсли;

    • учитывать в прикладном коде отсутствие предопределенных элементов в ИБ. В противном случае, при обращении к несуществующему предопределенному элементу из кода или текста запроса будет вызвано исключение:

    При использовании в конфигурации Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше рекомендуется использовать функцию ПредопределенныйЭлемент общего модуля ОбщегоНазначения или ОбщегоНазначенияКлиент , которая возвращает Неопределено для несуществующих в ИБ предопределенных элементов:

    Получение предопределенных значений на клиенте

    Область применения: управляемое приложение, мобильное приложение, обычное приложение.

    Для получения значения ссылок на предопределенные элементы справочников, планов видов характеристик, планов счетов, планов видов расчета, ссылки на значения перечислений, системных перечислений и точек маршрута бизнес-процессов в коде, выполняемом в клиентском коде (тонкий клиент, веб-клиент), где объекты типа СправочникМенеджер. , ПеречислениеМенеджер. и т.п. не доступны, предназначена функция глобального контекста ПредопределенноеЗначение .
    Например:

    При использовании в конфигурации Библиотеки стандартных подсистем (БСП) версии 2.1.4 и выше рекомендуется использовать функцию ПредопределенныйЭлемент общего модуля ОбщегоНазначения или ОбщегоНазначенияКлиент , которая возвращает Неопределено для несуществующих в ИБ предопределенных элементов. При этом не следует реализовывать дополнительные механизмы кеширования на клиенте предопределенных значений. Указанные выше функции не ухудшают клиент-серверное взаимодействие: серверный вызов выполняется только при первом обращении к значению, а результат автоматически кешируется.

    См. также

    • Использование предопределенных элементов
    • Раздел Работа с предопределенными значениями в документации к платформе 1С:Предприятие (на ИТС)

    Предопределенные элементы справочников 1С 8.3

    У любого справочника 1С (кроме подчиненных) можно создавать предопределенный элемент или предопределенную группу этого справочника (если справочник иерархический). Предопределенные элементы справочника это элементы созданные разработчиком в конфигураторе, с которыми пользователь может работать. Пользователю уже не нужно самостоятельно создавать этот элемент справочника, он уже будет создан в базе по умолчанию при установке. Также разработчикам очень удобство работать с предопределенными элементами в том, что разработчик к ним может обращаться напрямую, используя менеджер справочника. В этой статье мы научимся работать с предопределенными элементами.

    При разработке справочников, рекомендую, первым делом подумать будут ли предопределенные элементы у этих справочников, и создать их заранее, до того как этот справочник будет внедрен в опытную эксплуатацию.

    К примеру, мы в нашей конфигурации для целей учета создали справочник Валюты, поскольку мы живем в Российской федерации, то валюта Рубль всегда будет в нашей конфигурации, которая используется на территории РФ. Поэтому наиболее логичнее её сделать в виде предопределенного элемента. Поэтому создадим для справочника Валюты предопределенный элемент Рубль. Для того, чтобы добавить предопределенный элемент необходимо выделить нужный справочник, вызвать контекстное меню и выбрать в этом меню команду «Открыть предопределенные данные».

    Открыть список предопределенных элементов справочников 1С

    Откроется список предопределенных элементов (и групп, если справочник иерархический), в котором можно добавлять новые элементы. Причем заметьте, при добавлении мы можем указать только наименование элемента и его код, если у справочника есть реквизиты, то мы эти реквизиты мы сможем заполнить только в пользовательском режиме.

    Список предопределенных элементов справочников 1С

    Обращаю внимание на имя предопределенного элемента. Имя должно быть уникально в пределах этого справочника, и к нему применяются правила установки имен для объектов метаданных (отсутствие пробелов, спецсимволов кроме подчеркивания и т.д.). Пользователь не видит имени предопределенного элемента, он работает только с наименованием. С именем может работать разработчик, получая ссылку на конкретный предопределенный элемент, используя менеджер справочника.

    Если справочник иерархический, то можно также создать и предопределенные группы, для этого в командной панели формы списка предопределенных элементов имеется команда «Добавить группу».

    Список предопределенных элементов иерархического справочника 1С

    Если мы зайдем в форму списка справочника Страны в пользовательском режиме «1С: Предприятия», то обнаружим, что уже имеются группы и элементы с точкой внизу. Так платформа помечает предопределенные элементы и группы.

    Предопределенные элементы и группы в справочнике 1С

    Замечу, что все реквизиты у предопределенных элементов присутствуют также как и у обычных, и в них можно записывать какие-либо значения.

    Реквизит предопределенного элемента

    Получить предопределенный элемент справочника 1С

    Используя менеджер справочника, можно обратиться к предопределенному элементу. Делается это следующим образом.

    ЭлементКитай = Справочники.Страны.Китай; 

    Обращаю Ваше внимание, что получить ссылку на предопределенный элемент можно только в серверном контексте. Чтобы получить ссылку на предопределенный элемент в клиентском контексте управляемой формы необходимо использовать метод ПредопределенноеЗначение, где в кавычках нужно указать путь к этому элементу.

    ЭлементКитай = ПредопределенноеЗначение("Справочник.Страны.Китай"); 

    Имейте в виду, что и при помощи метода ПредопределенноеЗначение и при помощи прямого обращения посредством менеджера объекта мы получим ссылку на элемент, с которой можем работать как с обычной ссылкой на элемент справочника: присваивать её какому-нибудь реквизиту, получать объект из этой ссылки и т.д.

    Ссылка на предопределенный элемент справочника

    Создать предопределенный элемент справочника 1С

    Мы уже научились создавать предопределенные элементы справочника в конфигураторе, но можно ли создать предопределенный элемент программно? И да, и нет.

    Мы можем из простого элемента сделать предопределенный, и наоборот предопределенный элемент сделать простым.

    Для этих целей у справочников имеется стандартный реквизит ИмяПредопределенныхДанных.

    Реквизит ИмяПредопределнныхДанных справочника 1С

    Если мы получим ссылку на предопределенный элемент, то этот реквизит заполнен.

    Реквизит ИмяПредопределнныхДанных у предопределенного элемента справочника 1С

    Если же мы возьмем какой-то не предопределенный элемент, то этот реквизит будет пустой.

    Реквизит ИмяПредопределнныхДанных у простого элемента справочника 1С

    Если мы этому реквизиту присвоим какое-нибудь имя (помня об уникальности имен предопределенных элементов в контексте конкретного справочника), то мы программно «создадим» предопределенный элемент, но только в том случае если это имя уже существует в списке предопределенных элементов справочника, которые были заданы в конфигураторе 1С!

    Например, тот же элемент «Тунис» справочника «Страны» у нас простой.

    Простой элемент справочника 1С

    В какой-нибудь обработке напишем код, в котором попробуем сделать из этого элемента предопределенный элемент.

    &НаСервере Процедура СоздатьНаСервере() ЭлТунис = Справочники.Страны.НайтиПоНаименованию("Тунис"); ОбТунис = ЭлТунис.ПолучитьОбъект(); ОбТунис.ИмяПредопределенныхДанных = "Тунис"; ОбТунис.Записать(); КонецПроцедуры &НаКлиенте Процедура Создать(Команда) СоздатьНаСервере(); КонецПроцедуры 

    Если мы попытаемся его сейчас выполнить, то у нас возникнет ошибка «Предопределенный элемент не существует».

    Предопределенный элемент не существует

    Такая ошибка возникла потому, что мы пытаемся указать имя предопределенного элемента, которого нет.

    Если же мы у предопределенного элемента реквизиту ИмяПредопределенныхДанных присвоим пустую строку, то такой элемент станет простым, если же этому реквизиту обратно присвоим имя предопределенного элемента, то простой элемент станет предопределенным.

    Сделаем на обработке две команды. Первая будет снимать предопределенность у элемента справочника с именем «Китай», а вторая устанавливать.

    &НаСервере Процедура ОтсоединитьНаСервере() ЭлементКитай = Справочники.Страны.Китай; ОбЭлКитай = ЭлементКитай.ПолучитьОбъект(); ОбЭлКитай.ИмяПредопределенныхДанных = ""; ОбЭлКитай.Записать(); КонецПроцедуры &НаКлиенте Процедура Отсоединить(Команда) ОтсоединитьНаСервере(); КонецПроцедуры 

    Теперь обратно установим.

    &НаСервере Процедура ПрисоединитьНаСервере() ЭлКитай = Справочники.Страны.НайтиПоНаименованию("Китай"); ОбЭлКитай = ЭлКитай.ПолучитьОбъект(); ОбЭлКитай.ИмяПредопределенныхДанных = "Китай"; ОбЭлКитай.Записать(); КонецПроцедуры &НаКлиенте Процедура Присоединить(Команда) ПрисоединитьНаСервере(); КонецПроцедуры 

    Заметьте, что имя предопределенного элемента может быть только из списка имен предопределенных элементов справочника.

    Имя предопределенного элемента справочника

    У нас до снятия элемент «Китай» был предопределенным.

    Предопределенный элемент справочника 1С

    А после снятия это стал простой элемент.

    Элемент справочника 1С

    Удалить предопределенный элемент справочника 1С

    Начиная с платформы 1С 8.3 предопределенные элементы можно удалять в пользовательском режиме.

    Установка пометки на удаление предопределенного элемента справочника 1С

    Пометка на удаление предопределенного элемента справочника 1С

    Если сейчас этот элемент удалить через стандартную обработку «Удаление помеченных объектов», то он исчезнет из базы.

    Для того, чтобы пользователь мог удалить (поставить пометку на удаление) предопределенный элемент, хотя бы у одной роли, которая есть в профиле пользователя должно быть установлено соответствующее право.

    Права на удаление предопределенного элемента

    Что делать, если мы ошиблись и хотим опять «вернуть» предопределенный элемент? Есть несколько способов. Но самый простой это создать новый элемент справочника в пользовательском режиме и присвоить ему имя удаленного предопределенного элемента, как мы это уже делали.

    Остальные статьи по теме конфигурирования:

    Более подробно и основательно работа со справочниками, документами и другими объектами метаданных дается в моей книге:

    Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

    1. Книга написана понятным и простым языком — для новичка.
    2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
    3. Научитесь понимать архитектуру 1С;
    4. Станете писать код на языке 1С;
    5. Освоите основные приемы программирования;
    6. Закрепите полученные знания при помощи задачника;

    О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

    Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

    1. Очень доступный и понятный язык изложения
    2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
    3. Поймете идеологию управляемого приложения 1С
    4. Узнаете, как разрабатывать управляемое приложение;
    5. Научитесь разрабатывать управляемые формы 1С;
    6. Сможете работать с основными и нужными элементами управляемых форм
    7. Программирование под управляемым приложением станет понятным

    Промо-код на скидку в 15% — 48PVXHeYu

    Вступайте в мои группы:

    3 Replies to “Предопределенные элементы справочников 1С 8.3”

    Дотошный :

    У любого справочника 1С можно создавать предопределенный элемент или предопределенную группу — если у справочника есть владелец, то создать предопределенный элемент нельзя.

    Signum :
    Спасибо, подправил!
    Алексей :

    Автор. Вы морочите голову. Вы пишете, можно ли создать предопределённый программно. Отвечаете и Да и нет. Затем играетесь с реквизитом Предопределенный устанавливая его в значение ложь и обратно в истина. Где программное создание предопределенного элемента? Если нет, то так и пишите ЭТО НЕ ВОЗМОЖНО. И не надо будет разгадывать ваш витиеватый ребус в течение полутора часов. Вот за такие статьи я и не люблю 1С.

    1С, что такое предопределенный элемент, как создать?

    Предопределенный элемент в 1С — это запись справочника заранее созданная в конфигураторе. К предопределенным элементам можно обращаться программно, при этом не используя запросы к базе данных. Данные элементы помечены желтым кружком и их нежелательно редактировать в пользовательском режиме, их нельзя удалить.

    Пример создания предопределенного элемента:

    Допустим нам необходимо, чтобы в базе изначально присутствовал объект справочника «Договор», а именно «Договор подряда».

    • Заходим в конфигуратор;
    • Открываем справочник договоры -> Прочее -> Предопределенные
    • Нажимаем кнопку «Создать» (зеленый круг с плюсом), затем заполняем «Имя», без пробелов.
    • Обновляем базу;
    • Затем в пользовательском режиме открываем справочник «Договоры». Видим, что уже есть 1 элемент справочника, созданный нами в конфигураторе. Договор помечен желтым кружком, что говорит нам о том, что он предопределенный.

    Пример программного обращения к предопределенному элементу

    Создадим обработку, с формой, на форму выведем кнопку. При нажатии на кнопку организуем вывод сообщения с наименованием договора созданного в конфигураторе.

    Пример процедуры:

    &НаСервере Процедура СообщитьНаименованиеПредопределенногоЭлементаНаСервере() // Пример обращения с помощью встроенного языка Сообщить(Справочники.Договоры.ДоговорПодряда); Сообщить(Справочники.Договоры.ДоговорПодряда.Наименование); Сообщить(Справочники.Договоры.ДоговорПодряда.Код); КонецПроцедуры 

    Пример использования предопределенных элементов в СКД

    • Данные элементы мы можем использовать при отборе, в схеме компоновки данных. Создадим отчет СКД, с текстом запроса:
    ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК Ссылка, ЗаказПокупателя.ВерсияДанных КАК ВерсияДанных, ЗаказПокупателя.ПометкаУдаления КАК ПометкаУдаления, ЗаказПокупателя.Номер КАК Номер, ЗаказПокупателя.Дата КАК Дата, ЗаказПокупателя.Проведен КАК Проведен, ЗаказПокупателя.Контрагент КАК Контрагент, ЗаказПокупателя.Договор КАК Договор ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя
    • Далее в форме СКД переходим на вкладку Настройки -> Отбор -> Договор, переместить в правую область -> Выбрать «Договор подряда» из доступных значений;
    • Результат запроса будет отфильтрован по договору подряда.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *