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

Что произойдет если удалить предопределенный элемент в конфигураторе

  • автор:

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

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

Во встроенном языке существуют методы для поиска данных, например, НайтиПоКоду() или НайтиПоНаименованию().

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

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

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

Таким образом, у предопределенных данных есть две “стороны”: во-первых, существует список предопределенных элементов, созданный в конфигураторе, а, во-вторых, для данных информационной базы указывается, является ли конкретный элемент предопределенным.

Предопределенные элементы могут быть созданы у:

  • справочников;
  • планов счетов;
  • планов видов характеристик;
  • планов видов расчета.

В статье рассмотрены новшества, касающиеся предопределенных данных на платформе 8.3, а также особенности работы с ними в распределенных базах (как центральных, так и периферийных) и в информационных базах в режиме разделения данных.

Пиктограмма в списке изменилась:

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

Теперь с пиктограммой предопределенного элемента выводится другой элемент справочника:

Если параметр запроса ИмяПредопределенныхДанных принимает значение “ОсновнаяОрганизация”, запрос выполняется без ошибок.

Если используется любое другое значение, не указанное в конфигураторе, то во время выполнения произойдет исключение:

ОбъектДанных= Метаданные.Справочники.Организации; ТекстЗапроса = “ |ВЫБРАТЬ | ИмяОбъекта.Ссылка |ИЗ | “ + ОбъектДанных.ПолноеИмя() + ” КАК ИмяОбъекта | |ГДЕ | ИмяОбъекта.Предопределенный; Запрос = Новый Запрос(ТекстЗапроса); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ИмяПредопределенного = Справочники[ОбъектДанных.Имя].ПолучитьИмяПредопределенного (Выборка.Ссылка); Сообщить(ИмяПредопределенного); КонецЦикла;​

Получение списка предопределенных элементов, заданных в метаданных, при помощи встроенного языка – невозможно.

Однако начиная с платформы 8.3.3, метод ПолучитьИмяПредопределенного() является устаревшим и поддерживается для совместимости, поэтому даже в Синтакс-помощнике платформы 8.3.4 он не отображается.

В платформе 8.3 разрешено помечать предопределенные данные на удаление и производить удаление предопределенных данных. Если же удаление предопределенных элементов в разрабатываемой конфигурации недопустимо, то следует настроить права доступа.

Теперь в платформе присутствуют новые права доступа, определяющие возможность редактирования предопределенных данных:

  • ИнтерактивноеУдалениеПредопределенныхДанных,
  • ИнтерактивнаяПометкаУдаленияПредопределенныхДанных,
  • ИнтерактивноеСнятиеПометкиУдаленияПредопределенныхДанных,
  • ИнтерактивноеУдалениеПомеченныхПредопределенныхДанных.

Однако “интерактивные” права на просмотр и редактирование стандартных реквизитов Предопределенный и ИмяПредопределенныхДанных можно установить по отдельности:

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

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

  • Авто – необходимость создания предопределенных элементов и обновление существующих будет определяться системой автоматически;
  • НеОбновлятьАвтоматически – не будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений. В случае отсутствия элемента данных, связанного с предопределенным элементом, будет сгенерировано исключение при попытке обращения к нему;
  • ОбновлятьАвтоматически – будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений.

Чтобы принять решение, нужно ли создавать и обновлять предопределенные данные, система последовательно анализирует следующие значения:

  • значение, установленное для объекта в данных;
  • значение, установленное для объекта метаданных в конфигураторе;
  • значение, установленное в целом для информационной базы;
  • вид информационной базы – центральная (либо не распределенная база) или периферийная база.

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

Подробнее будет рассмотрено ниже.

Такое большое количество анализируемых значений было реализовано для возможности полноценно управлять созданием и обновлением предопределенных данных.

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

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

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

1. Если для объекта метаданных в информационной базе (т.е. в данных) установлен режим обновления, отличный от Авто, то используется это значение.

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

Эти методы доступны у объектов типа СправочникМенеджер, ПланСчетовМенеджер, ПланВидовХарактеристикМенеджер, ПланВидовРасчетаМенеджер.

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

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

3. Иначе если для информационной базы установлен режим обновления, отличный от Авто, то используется это значение.

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

4. Иначе анализируется вид узла распределенной базы. Если это периферийный узел, то предопределенные данные не будут обновлены (соответствует значению НеОбновлятьАвтоматически).

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

Если база находится в режиме совместимости “Версия 8.3.3”, то алгоритм определения необходимости обновления предопределенных данных выглядит немного по-другому.

Обновление не будет производиться:

  • если в метаданных или в данных установлено НеОбновлятьАвтоматически;
  • если в метаданных или в данных установлено Авто и текущий узел является периферийным.

В противном случае предопределенные данные будут обновлены.

Создание в информационной базе данных, связанных с предопределенными, может быть выполнено следующими способами:

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

2. При первом обращении к таблице с данными объекта конфигурации. Создание предопределенных элементов будет выполняться при условии, что их создание не запрещено.

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

Обновление данных, связанных с предопределенными, будет выполняться, если:

  • разрешено автоматическое обновление предопределенных данных;
  • предопределенные данные связаны с данными информационной базы;
  • предопределенные данные изменены в конфигураторе.

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

Если в конфигураторе удалить предопределенный элемент, то будут выполнены следующие действия:

  • элемент данных, связанный с предопределенным элементом, будет помечен на удаление;
  • в списке субконто элемента плана счетов будут удалены соответствующие записи;
  • в списках ведущих, базовых и вытесняющих видов расчета будут удалены соответствующие записи.

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

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

Автоматического создания предопределенных данных в периферийной базе не происходит.

В распределенной базе иногда могут возникать ошибки, которые исправляются после отключения от РИБа, загрузки в периферийную базу конфигурации центральной базы и дальнейшего подключения к распределенной базе.

При работе на платформе 8.3 следует учитывать следующую особенность.

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

Чтобы не допустить такого поведения, можно использовать метод глобального контекста УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы() или использовать параметр командной строки в пакетном режиме запуска конфигуратора /SetPredefinedDataUpdate, который предназначен для указания режимов обновления предопределенных данных.

Этот параметр может принимать одно из трех значений:

    • UpdateAutomatically – при реструктуризации информационной базы будет выполняться автоматическое создание предопределенных элементов и обновление существующих значений;
    • DoNotUpdateAutomatically – при реструктуризации информационной базы не будет выполняться автоматическое создание новых предопределенных элементов и обновление их значений;
    • Auto – фактическое значение вычисляется автоматически. Для главного узла информационной базы значение будет равно UpdateAutomatically, для периферийного узла информационной базы будет равно DoNotUpdateAutomatically.

    Командная строка запуска конфигуратора с этим параметром будет выглядеть следующим образом:

    “C:\Program Files\1cv8\8.3.4.437\bin\1cv8.exe DESIGNER /F”ПутьКБазе” /N”Администратор” /P”Пароль” /SetPredefinedDataUpdate -DoNotUpdateAutomatically”

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

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

    Для информационной базы, где создаются предопределенные элементы, следует использовать значение UpdateAutomatically, а для второй информационной базы – DoNotUpdateAutomatically.

    Таким образом можно создавать обработки загрузки предопределенных данных из файла.

    В платформе 8.2.14 появился механизм разделения данных. При использовании разделенной базы предопределенные элементы создавали ряд ограничений.

    Так, было невозможно использовать предопределенные данные для объектов конфигурации, входящих в состав разделителя в режиме “Независимо и совместно”.

    Теперь в платформе 8.3 предопределенные данные можно использовать для объектов, входящих в состав любых разделителей.

    Ссылки на предопределенные элементы более не являются одинаковыми, в том числе и в различных областях (даже для объектов, входящих в состав разделителя в режиме Независимо).

    Например, рассмотрим предопределенный элемент ОсновнаяОрганизация в справочнике Организации.

    Пусть в базе есть две области: с кодами 01 и 02.

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

    Подведем итоги. Рассмотрим, для чего было внесено столько нововведений в работу с предопределенными данными.

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

    Так, невозможно было использовать предопределенные данные для объектов конфигурации, входящих в состав разделителя в режиме “Независимо и совместно”. Невозможно было связать существующий объект данных с предопределенными данными.

    Один предопределенный элемент имел одинаковую ссылку во всех областях данных.

    При обмене данными с использованием РИБа предопределенные данные передавались только с изменениями конфигурации прикладного решения. Управлять созданием и обновлением предопределенных данных было невозможно.

    Таким образом, рассмотренные нововведения направлены на развитие возможностей платформы по работе в режиме разделенной информационной базы, что особенно актуально в рамках модели SaaS (“программы как сервис”), которую также называют работой “в облаке”.

    Есть справочник. У него есть предопределённые элементы. Всё это крутилось на 8.2-ой платформе. Потом я конвертнул конфу на 8.3-ю последнею. Потом случайно нажал Del на предопределённом элементе. Он пометился на удаление. А потом вообще удалил через удаление помеченных.

    И что делать теперь?

    В общем такое наблюдается при режимах совместимости 8.3.3 и «Не использовать».
    Мне тоже интересно. Что 1С предлагает делать в этом случае. И как код писать.

    (2) Режим совместимости не отключать и не ставить её выше 8.3.2.

    Это оказывается известный баг. Типа, при конвертации могут быть установлены лишние права «Интерактивное удаление предопределённых» и т. п.

    Странно. На их странице с ошибками платформы сказано, что этот баг исправлен в релизе 8.3.4.365.
    гыгыгы — они сказали, что исправлено, значит исправлено! и никак иначе! Но всегда найдется Отморозок, который это проверит и обломит )))
    удалить в конфигураторе предопределенный а потом вновь вернуть ?
    написать свой код обработчика удаление элемента, который не позволит удалить предопределенный ?
    (0) во-первых, не делай так и все
    во-вторых, чтобы восстановить, накати их сравнением-объединением из конфы бэкапа. Вариант (6) неправильный, т.к. при обменах появятся дубли (если есть обмены)
    ну и я бы подписку навесил на все справочники и планы, раз такое дело
    При конвертации проверять права для предопределенных не предлагать?

    Обмен данными. Предопределенные данные.

    —-
    Реализована возможность указывать признак обновления предопределенных данных в целом для информационной базы с помощью встроенного языка или ключей командной строки. В режиме «1С:Предприятие» режим обновления предопределенных данных дополнительно анализирует признак, установленный в целом для информационной базы (дополнительно к признаку, установленному для объектов конфигурации и признаку, установленному в данных и вида информационной базы: центральная/не распределенная информационная база или периферийная информационная база).

    Реализованы методы глобального контекста УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы() и ПолучитьОбновлениеПредопределенныхДанныхИнформационнойБазы().

    Реализованы параметр командной строки пакетного режима запуска конфигуратора /SetPredefinedDataUpdate.

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

    Для управления созданием предопределенных элементов существуют следующие механизмы:
    1) В Конфигураторе для объекта метаданных можно определить способ обновления предопределенных данных — Авто, Обновлять автоматически, Не обновлять автоматически.
    2) Для информационной в целом можно установить режим создания предопределенных через метод:
    УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы(ОбновлениеПредопределенныхДанных), где
    ОбновлениеПредопределенныхДанных — системное перечисление с вариантами Авто, Обновлять автоматически, Не обновлять автоматически
    3) Для конкретной таблицы информационной базы можно установить режим создания предопределенных через менеджера через метод:
    УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных), например
    Справочники.Номенклатура.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.ОбновлятьАвтоматически);
    4) На создание предопределенных элементов также влияет тип информационной базы — главный узел РИБ (не подчинен ни одному плану обмена, являющемуся РИБ) или периферийный узел РИБ.

    • Если для объекта метаданных в данных установлен режим обновления, отличный от Авто, то используется это значение. (пункт 3 из списка выше)
    • Иначе, если для объекта метаданных в конфигурации установлен режим обновления, отличный от Авто, то используется это значение. (пункт 1 из списка выше)
    • Иначе, если для информационной базы установлен режим обновления, отличный от Авто, то используется это значение. (пункт 2 из списка выше)
    • Иначе, если это периферийный узел РИБ, то предопределенные данные не будут обновлены. Если проверка выполняется для центрального узла РИБ, или для базы, не являющейся РИБ, обновление предопределенных данных будет выполнено.

    Что можно сделать:
    — выставлять способ обновления для объекта метаданных в конфигурации = «Обновлять автоматически» не совсем правильно, если в конфигурации есть несколько разных планов обмена РИБ с разным составом, а этот объект входит только в часть из них. Если это сделать, то в данной конкретной ситуации ошибка будет исправлена — в периферийном узле предопределенные элементы будут созданы. Но при создании РИБ по другим планам обмена (куда данный объект входит) элементы задублируются — в периферийный узел придут предопределенные из главного узла.
    Если РольДоступна(«ПолныеПрава») Тогда //методы ниже требуют прав на удаление объектов, поэтому правильнее выполнять их под полными правами
    Справочники.ГруппыПользователей.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.ОбновлятьАвтоматически);
    Справочники.ГруппыВнешнихПользователей.УстановитьОбновлениеПредопределенныхДанных(ОбновлениеПредопределенныхДанных.ОбновлятьАвтоматически);
    КонецЕсли;
    КонецЕсли;

    В этой статье речь пойдет о предопределенных элементах, которые можно создать в платформе 1С:Предприятие 8.

    Для чего нужны предопределенные элементы

    Куда можно добавить

    Предопределенные элементы могут быть созданы у:

    • справочников;
    • планов счетов;
    • планов видов характеристик;
    • планов видов расчета.

    Предопределенные элементы в 1С

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

    Предопределенные элементы в 1С

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

    В платформе 8.3 появилась возможность удалять предопределенные элементы в режиме 1С:Предприятие, ровно как и связывать существующие, задав им имена. В связи с этим в было добавлено системное перечисление ОбновлениеПредопределенныхДанных, содержащее следующие значения:

    • Авто;
    • НеОбновлятьАвтоматически – предопределенные элементы не создаются в БД;
    • ОбновлятьАвтоматически – предопределенные элементы будут созданы.

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

    Предопределенные элементы в 1С

    Рассмотрим свойство ИмяПредопределенныхДанных. Оно служит для связи записи в базе данных элементом предопределенных данных, заданным в конфигурации. Таким образом имеется возможность связать существующие записи в БД с элементами предопределенных данных, например, следующим кодом:

    А также можно «отвязать» элемент в базе данных от предопределенного элемента.

    Получить список предопределенных элементов данных можно обратившись к метаданным, следующим образом:

    Читайте также:

    • Отображение контактов в outlook
    • Лагает дискорд при игре в валорант
    • Как в автокаде объединить объекты 2d примитивы
    • Iconbit hdm33 hdmi прошивка
    • Акцент 6 в ворде что это

    Предопределенные элементы справочников 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С.

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

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