Обновление метаданных

  • автор:

БСП справочник Идентификаторы Объектов Метаданных

Сообщение от wladimir_uiДля хранения списка объектов метаданных Т.е. конфигуратора для этого НАМ мало???
Добавлено через 33 секунды

Не по теме:

Давайте в Регистре Сведений хранить тексты функций?!

Добавлено через 25 минут
Нашел на ИТСе
Использование идентификаторов объектов метаданных
При необходимости хранить в базе данных ссылку на объект метаданных (например, ссылка на объект метаданных Справочник.Организации) рекомендуется вместо строкового реквизита с полным именем объекта метаданных использовать ссылку на соответствующий элемент справочника ИдентификаторыОбъектовМетаданных. Такая потребность возникает, например, в различных подсистемах БСП: для хранения настроек версионирования данных, списка выбранных ролей в профилях групп доступа и т.п.
Такой подход позволяет
● повысить производительность запросов, которые обращаются к реквизитам данного типа;
● снизить размер таблиц в базе данных, в которых используются реквизиты данного типа,
● выводить в пользовательском интерфейсе представление ссылки вместо строкового имени объекта метаданных,
● а также избавиться от разработки обработчиков обновления и первоначального заполнения ИБ для актуализации строковых реквизитов с полными именами объектов метаданных при изменениях метаданных конфигурации.
Программно, ссылку на объект метаданных можно получить с помощью функции ИдентификаторОбъектаМетаданных общего модуля ОбщегоНазначения.
Справочник ИдентификаторыОбъектовМетаданных заполняется автоматически при первом запуске (и каждом обновлении) конфигурации, согласно метаданным конфигурации, а также автоматически актуализируется при каждом обновлении версии конфигурации (учитываются переименованные, добавленные и удаленные объекты метаданных). Полный список объектов метаданных (справочники, документы, регистры, и т.п.), обновление идентификаторов которых выполняется автоматически, см. в комментарии к функции ИдентификаторОбъектаМетадан*ных общего модуля ОбщегоНазначения.
Исключение составляют подсистемы и роли, обновление идентификаторов которых требуется выполнять вручную. Необходимость обновления идентификаторов подсистем и ролей возникает при их переименовании (а для подсистем – также и в случае их перемещения из одной родительской подсистемы в другую). В противном случае, возможно рассогласование идентификаторов объектов метаданных с объектами метаданных конфигурации.
Для обновления идентификаторов необходимо воспользоваться процедурой ЗаполнитьТаблицуПереименованияОбъектовМетаданных общего модуля ОбщегоНазначенияПереопределяемый и увеличить номер версии конфигурации. Например, следующий фрагмент кода описывает, что в версии конфигурации 2.0.1.2 подсистема _ДемоПоставляемыеДанные была перенесена из подсистемы _ДемоРаботаВМоделиСервиса в _ДемоНастройкаИАдминистрирование:
Обновление идентификаторов выполняется последовательно по версиям конфигурации, а в пределах одной версии – в порядке следования строк со сведениями о переименованиях. Обновление идентификаторов для переименованных подсистем выполняется также и для всех их дочерних подсистем (если они есть).

Отдельным случаем, когда обновление идентификаторов происходит автоматически, является переименование объектов метаданных с целью изменения структуры данных с помощью создания новой копии объекта метаданных. Такая необходимость возникает, когда реструктуризация объекта метаданных невозможна. Например, при сокращении длины кода справочника Подразделения с 50 до 11, может потребоваться создать новый справочник, а старый переименовать в УдалитьПодразделения. В этом случае идентификатор справочника будет автоматически назначен новому справочнику с тем же именем.
Однако если при этом новый справочник будет назван иначе, например, СтруктурныеЕдиницы, то потребуется отразить переименование справочника Подразделения в справочник СтруктурныеЕдиницы, как это описано выше.
При активной разработке конфигурации данные справочника ИдентификаторыОбъектовМетаданных можно также обновлять вручную, без увеличения номера версии конфигурации, с помощью команды Обновить данные справочника в форме списка (открыв ее, например, из меню Все функции). Однако, это допустимо только в случае, когда не производилось переименование ролей и/или подсистем. В случае переименования ролей и/или подсистем, перед выполнением команды Обновить данные справочника нужно выполнить переименование полных имен соответствующих элементов справочника. Для этого нужно открыть форму элемента справочника ИдентификаторыОбъектовМетаданных, выполнить команду Включить возможность редактирования в меню Все действия и задать новое полное имя. В противном случае, этот элемент справочника будет помечен на удаление и создан новый, что приведет к рассогласованию идентификаторов объектов метаданных с объектами метаданных конфигурации.
Добавлено через 1 минуту
Сообщение от Dethmonttповысить производительность запросов, которые обращаются к реквизитам данного типа; Вот этого не понял вообще!!!
Добавлено через 2 минуты
Если я правильно понял, то 1С-ники пытаются упростить написание процедур обновления ТИПОВЫХ конфигураций и создают геморой для всех остальных…
Добавлено через 24 секунды

Не по теме:

Неплохой монолог у меня получается =)))

Добавлено через 2 часа 7 минут
Кто юзает типовые конфы на БСП — дайте хоть один пример запроса с использованием этого справочника?!

Исправление справочника Идентификаторы объектов метаданных, обновление вспомогательных данных

Обработка позволяет исправить ошибки, возникающие при некорректном содержании справочника идентификаторы объектов метаданных. Когда после нескольких часов установки обновлений во время выполнения обработок перехода на новый релиз конфигурации выскакивает окошко с текстом ошибки, содержащим фразу «идентификаторы объектов метаданных» и конфигурация отказывается загружаться дальше, а только завершить или Ещё-Выполнить внешнюю обработку»! Тут понимаешь, что придётся ещё долго выполнять непонятные пляски с бубном вокруг этой конфигурации до самого утра! Такие ошибки чаще всего возникают при использовании РИБ и установке обновлений в узлы РИБ, когда приходится отвязывать периферийный узел от центрального узла, грузить конфигурацию и восстанавливать связь с центральным узлом. Обработка не раз выручала в таких ситуациях.

Возникают ошибки, текст которых может содержать фразы:
«Не найден идентификатор в справочнике идентификаторы объектов метаданных»
«Не открывается какой-нибудь отчёт или внешняя обработка и ругается на справочник идентификаторы объектов метаданных»
«Требуется воспользоваться обработкой «Обновление вспомогательных данных»
«Запустить программу с параметром командной строки «/С ЗапуститьОбновлениеИнформационнойБазы»
«либо увеличить номер версии конфигурации»
«После десяти попыток в справочнике идентификаторы объектов метаданных остались дубликаты»

Такие обработки уже есть на просторах интернета, но обычно они только запускают обновление вспомогательных данных, а этого не всегда достаточно. Я добавил ещё очистку справочника от лишних элементов, которые мешают нормальной работе со справочником или являются дубликатами.

После выхода обновлений к конфигурациям связанным с кодами для НН (налоговой накладной), решил обновить правила обмена УТ -> БП.
В справочнике Номенклатура, у реквизита НоменклатураГТД изменился тип, стал составным.
Но в правилах обмена использовались метаданные старых версий конфигураций, где ещё не было составного типа.
Сначала попробовал обновить метаданные из выгрузки метаданных новой конфигурации в файл xml, но при загрузке возникает ошибка:
{Обработка.ЗагрузкаСтруктурыМетаданных.МодульОбъекта(499)}: Ошибка при вызове метода контекста (Записать)
Объект.Записать();
по причине:
Ошибка при попытке вставки записи с неуникальным значением ссылки.
таблица Reference7.
Решение оказалось простым: нужно сначала выгрузить существующие правила в xml, а затем при загрузке этих же правил из xml, выбрать заранее загруженные в справочник Конфигурации версии обновленных конфигураций.
После загрузки правил конфигурации будут на обновленных версиях метаданных, теперь можно приступать к изменению правил обмена.

Обновление справочника «Идентификаторы объектов метаданных» без привязки к конфе и релизу БСП

Начну с того, что после добавления новой роли в конфу(на первый взгляд безобидное действие), начала появляться ошибка

Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторыОбъектаМетаданных()
Для Объекта метаданных <Имя_Объекта> не найден идентификатор в справочнике «Идентификаторы объектов метаданных»
Для разработчика: возможно требуется обновить вспомогательные данные, которые влияют на работу программы. Для выполнения обновления можно:
— воспользоваться внешней обработкой «Инструменты разработчика: Обновление вспомогательных данных»
— либо запустить программу с параметром командной строки 1С: Предприятия 8
«/С ЗапуститьОбновлениеИнформационнойБазы»
— либо увеличить номер версии конфигурации, чтобы при очередном запуске выполнились процедуры обновления данных информационной базы.

К слову сказать, появляется она не только при добавлении роли, а и при добавлении других объектов.

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

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

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