В справочнике ИдентификаторыОбъектовМетаданных некоторые элементы имеют знаки вопроса в реквизитах и помечены на удаление. Может выскакивать ошибка "{ОбщийМодуль.ОбщегоНазначения.Модуль(2646)}: Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных(). Для объекта метаданных "Документ.ЗаявкаНаРасходованиеСредств" не найден идентификатор в справочнике "Идентификаторы объектов метаданных"."
Рекомендации простые:
- открыть через меню "Все функции" справочник "Идентификаторы объектов метаданных", нажать кнопку "Обновить данные справочника";
- если указанной кнопки нет - выполнить программный код: Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
- либо запустить программу с параметром командной строки 1С:Предприятия 8 "/С ЗапуститьОбновлениеИнформационнойБазы";
- либо увеличить номер версии конфигурации, чтобы при очередном запуске выполнились процедуры обновления данных информационной базы.
На УНФ не прокатило, пришлось садится и разбираться. В итоге пришел к решению - удалить помеченные элементы справочника ИдентификаторыОбъектовМетаданных, но для этого нужно разорвать связи. Кстати удаление возможно только через Стандартные=>Удаление помеченных.
Поковыряв справочник ИдентификаторыОбъектовМетаданных увидел что есть общая логика - помеченный объект в имени имеет знак вопроса и пробел, оригинал этого не имеет, поэтому мы берем и подменяем их.
Листинг для ПрофилейГруппДоступа:
&НаСервере Процедура ЗагрузитьНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПрофилиГруппДоступаРоли.Ссылка КАК Профиль, | ПрофилиГруппДоступаРоли.Роль КАК СвязанныйРеквизит |ИЗ | Справочник.ПрофилиГруппДоступа.Роли КАК ПрофилиГруппДоступаРоли |ГДЕ | ПрофилиГруппДоступаРоли.Роль.ПометкаУдаления = ИСТИНА"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ЭтотОбъект.СписокОперацийИРеквизитов.Очистить(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл НовСтр=ЭтотОбъект.СписокОперацийИРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр,ВыборкаДетальныеЗаписи); НовСтр.НовыйРеквизит=Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту( "Имя",СокрЛП(СтрЗаменить(ВыборкаДетальныеЗаписи.СвязанныйРеквизит.Имя,"?",""))); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Загрузить(Команда) ЗагрузитьНаСервере(); КонецПроцедуры &НаСервере Процедура ЗаменитьРеквизитыНаСервере() Для каждого стр из СписокОперацийИРеквизитов Цикл Если НЕ ЗначениеЗаполнено(стр.НовыйРеквизит) Тогда Продолжить; КонецЕсли; Профиль=Стр.Профиль.ПолучитьОбъект(); НайденнаяСтрока=Профиль.Роли.Найти(Стр.СвязанныйРеквизит,"Роль"); Если НайденнаяСтрока<>Неопределено Тогда НайденнаяСтрока.Роль=стр.НовыйРеквизит; КонецЕсли; Попытка Профиль.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ЗаменитьРеквизиты(Команда) ЗаменитьРеквизитыНаСервере(); КонецПроцедуры
Листинг для НастройкиХозяйственныхОпераций:
&НаСервере Процедура ЗагрузитьНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НастройкиХозяйственныхОперацийДокументы.Ссылка КАК ХозОперрация, | НастройкиХозяйственныхОперацийДокументы.ИдентификаторОбъектаМетаданных КАК СвязанныйРеквизит |ИЗ | Справочник.НастройкиХозяйственныхОпераций.Документы КАК НастройкиХозяйственныхОперацийДокументы |ГДЕ | НастройкиХозяйственныхОперацийДокументы.ИдентификаторОбъектаМетаданных.ПометкаУдаления = ИСТИНА"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ЭтотОбъект.СписокОперацийИРеквизитов.Очистить(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл НовСтр=ЭтотОбъект.СписокОперацийИРеквизитов.Добавить(); ЗаполнитьЗначенияСвойств(НовСтр,ВыборкаДетальныеЗаписи); НовСтр.НовыйРеквизит=Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту( "Имя",СокрЛП(СтрЗаменить(ВыборкаДетальныеЗаписи.СвязанныйРеквизит.Имя,"?",""))); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура Загрузить(Команда) ЗагрузитьНаСервере(); КонецПроцедуры &НаСервере Процедура ЗаменитьРеквизитыНаСервере() Для каждого стр из СписокОперацийИРеквизитов Цикл Если НЕ ЗначениеЗаполнено(стр.НовыйРеквизит) Тогда Продолжить; КонецЕсли; ХозОп=Стр.ХозОперрация.ПолучитьОбъект(); НайденнаяСтрока=ХозОп.Документы.Найти(Стр.СвязанныйРеквизит,"ИдентификаторОбъектаМетаданных"); Если НайденнаяСтрока<>Неопределено Тогда НайденнаяСтрока.ИдентификаторОбъектаМетаданных=стр.НовыйРеквизит; КонецЕсли; Попытка ХозОп.Записать(); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Сообщить(НайденнаяСтрока); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ЗаменитьРеквизиты(Команда) ЗаменитьРеквизитыНаСервере(); КонецПроцедуры
Комментариев нет:
Отправить комментарий