gifts2017

Обновление значений справочника ИдентификаторыОбъектовМетаданных и добавление новых ролей в УТ 11 или Бух 3.0

Опубликовал Виталий Подоба (hitchkock) в раздел Администрирование - Защита, права, пароли

Решение проблем, которые возникают при создании в конфигурациях УТ11 и Бух3.0 новых ролей, отчетов и также других объектов, работа с которыми хоть как-то будет связана с: идентификатором метаданных, настройками пользователей и вариантами отчетов.

Я как программист очень часто сталкивался с моментами, когда нужно создать новый справочник, документ, отчет или обработку в структуре выше перечисленных конфигураций. В результате у нас может выскочить ошибка идентификатора объекта метаданных (когда сохраняются какие-то настройки).  Это связано с тем, что параллельно с системными метаданными разработчики также заполняют справочник ИдентификаторыОбъектовМетаданных, который потом используют для процесса сохранения различных настроек в системе. В более ранних версиях конфигураций в этом справочнике была кнопочка, которая позволяла обновить данные справочника, теперь ее убрали. Но функция-то осталась, соответственно ее можно использовать (обработка и код прилагаются ниже). Некоторые скажут, мол, "есть же инструкция в сообщении, что надо запустить конфигурацию с параметром обновления", но куда удобнее быстро запустить обработку, которая сделает именно то, что тебе надо, а не ждать выполнения глобального обновления после каждого нового созданного объекта.

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

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

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

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

Код простой:

&НаКлиенте
Процедура ОбновитьПараметрыСистемы(Команда)
	ОбновитьПараметрыСистемыСервер();
КонецПроцедуры

&НаСервере
Процедура ОбновитьПараметрыСистемыСервер()
	//обновляет справочник идентефикаторов метаданных
	Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина); 
	
	//обновляет варианты отчетов системы
	ВариантыОтчетов.Обновить(); 
	
	//Обновляет параметры пользователей системы (в том числе и новые роли конфигурации)
	Константы.ПараметрыРаботыПользователей.СоздатьМенеджерЗначения().ОбновитьОбщиеПараметры(); 
КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер
ОбновитьМетаданныеИРоли 13
.epf 5,79Kb
15.07.15
13
.epf 5,79Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Валерий К (klinval) 16.07.15 09:46
Некоторые скажут, мол, "есть же инструкция в сообщении, что надо запустить конфигурацию с параметром обновления", но куда удобнее быстро запустить обработку

А чем вас не устраивает вариант с внешней стандартной обработкой "ИнструментыРазработчикаОбновлениеВспомогательныхДанных" (про которую у вас кстати и написано в скриншоте)?
2. Сергей Ожерельев (Поручик) 16.07.15 10:19
(1) Пацанчик сделал открытие и решил вывалить в интернет, что уже давно изжёвано до дыр, а эти коды вылазят в гугле в числе первых.
3. Виталий Подоба (hitchkock) 16.07.15 15:43
(2) Это далеко не открытие, просто за последнее время лично ко мне стали часто обращаться с этой темой. Особенно люди которые не имеют доступа к https://users.v8.1c.ru. Были такие которые пытались найти стандартную обработку просто на форумах и в итоге они по той или иной причине вываливали ошибки при выполнении. Так почему бы просто не поделится с незнающими конкретной темой, а не перешаривать пачки строк на форумах?
4. Александр К (SunSun1979) 21.07.15 10:18
(2) Поручик, Все понятно, но грубо то так зачем? Мне вот пригодилось, не то что бы это нельзя было найти отдельно, но лишний раз напомнило мне что надо сделать, Так что профит есть.
5. Владимир Насыров (Spacer) 28.01.16 15:52
(1) klinval, Оно то конечно удобнее, если есть возможность выгнать из базы всех пользователей.
Главный недостаток стандартной обработки - это то что она требует монопольный режим.
6. Валерий К (klinval) 28.01.16 16:50
(5) Spacer, Ну так этот код тоже требует монопольного доступа!
В ИТСовской обработке при установке настройки "Идентификаторы объектов метаданных" тоже выполняется код:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина);

Который в свою очередь лезит в модуль менеджера справочника ИдентификаторыОбъектовМетаданных, где и происходит:
УстановитьМонопольныйРежим(Истина);
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа