Программный механизм предопределенных элементов

В связи с существенным усложнением механизма предопределенных элементов в платформе 8.3 предлагается более удобный и надежный программный механизм.

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

Ошибка

Для обхода привнесенных сложностей предлагается пример программного механизма предопределенных.

Новые объекты:

1. Общий макет с колонками «Имя предопределенного», «Имя справочника», «Это группа», «GUID», «GUID родителя», «Код», «Наименование».

2. Регистр сведений с изменением «Имя» и ресурсом «СсылкаБД»

3. Функции общего модуля ПолучитьПредопределенныйЭлемент(Имя) и СоздатьПредопределенныйЭлемент(Имя).

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

Алгоритм создания новых предопределенных элементов:

1. Прописываем новый элемент в общем макете. Имя должно быть уникально.

2. Используем в коде с помощью функции общего модуля, например:

 Пример

В отличие от платформенного механизма, получаем полную гарантию существования предопределенного элемента в БД. При отсутствии/случайном удалении элемент восстанавливается автоматически.

6 Comments

  1. bayce

    а что в 8.3, пользователь может удалить предопределенные элементы?

    Reply
  2. vavic

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

    Reply
  3. AlX0id
    В отличие от платформенного механизма, получаем полную гарантию существования предопределенного элемента в БД. При отсутствии/случайном удалении элемент восстанавливается автоматически.

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

    Reply
  4. vavic
    Так же в нагрузку получаем вызов сервера при каждом клиентском обращении к элементу и обработку весомого объекта (макета) на сервере же.. Проще уж права закрыть, пожалуй )

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

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

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

    Reply
  5. AlX0id

    (4) vavic,

    Например, в типовой БП 3 вид контрагента сохраняется в строковую переменную формы.

    Вот и да-то.. Был нормальный механизм предопределенных, а теперь хрен поймешь что..

    Reply
  6. FractonKireyev

    Согласен с тем, что испоганили хороший механизм предопределённых!

    Предлагаю поставить на голосование (а вдруг поможет?) — пишите:

    кто за то, чтобы вернуть прежний механизм (так, как это было в 8.0, 8.1, 8.2),

    кто за то, чтобы новый механизм остался так, как есть.

    Reply

Leave a Comment

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