В процессе обновления конфигураций на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Бухгалтерия предприятия», при первом запуске в режиме 1С:Предприятие может возникнуть критическая ошибка:
{Справочник.ИдентификаторыОбъектовМетаданных.МодульМенеджера}: Ошибка при вызове метода контекста (Записать) ТаблицаОбъект.Записать; по причине: Не удалось записать "Присоединенные файлы (...) (Справочник) (Идентификатор объекта метаданных)"
Разберем причины возникновения этой ситуации, проанализируем взаимосвязь ошибки с нетиповыми доработками и рассмотрим пошаговые способы диагностики и устранения сбоя.
Проанализируем ключевые факторы, приводящие к сбою при обновлении вспомогательных данных:
ПередЗаписью или ПриЗаписи для всех справочников. Если в коде обработчика отсутствует фильтрация служебных объектов БСП, любая попытка платформы записать данные в Справочник.ИдентификаторыОбъектовМетаданных вызывает сбой логики интеграции.ПараметрыПриложения["СтандартныеПодсистемы.СообщенияДляЖурналаРегистрации"]) объекты клиентского контекста, формы или таблицы значений, серверные вызовы БСП завершаются аварийно с отказом транзакции.Если конфигурация содержит доработки, в первую очередь проверим модули перехвата событий. Разберем по шагам порядок действий:
ПодпискаНаСобытие, в состав которых входят справочники или все объекты метаданных.
Если Источник.Метаданные().Имя = "ИдентификаторыОбъектовМетаданных"
Или Источник.Метаданные().Имя = "ИдентификаторыОбъектовРасширений" Тогда
Возврат;
КонецЕсли;
Рассмотрим, как локализовать проблемный объект в модуле менеджера справочника. Откроем конфигуратор и выполним следующие действия:
Справочник.ИдентификаторыОбъектовМетаданных и откроем его модуль менеджера.Свойства.Имя = "ПачкаДокументовАДВ_1").
// Обновление идентификаторов объектов метаданных.
Если Свойства.ЭтоНовый Тогда
ТаблицаОбъект = СоздатьЭлементСправочника(ОбъектыРасширений);
ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка);
ИначеЕсли Свойства.Обновлен Тогда
ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект();
Иначе
Продолжить;
КонецЕсли;
Проанализируем текущие свойства объекта через табло. Если флаги ЭтоНовый или Обновлен установлены некорректно из-за задвоенных ссылок, выясним точную причину отказа метода ТаблицаОбъект.Записать() в блоке исключения.
Если доработки исправлены, но база данных осталась в незавершенном состоянии, воспользуемся штатным механизмом пересчета идентификаторов:
ИнструментыРазработчикаОбновлениеВспомогательныхДанных из состава БСП либо выполним вызов процедуры обновления через консоль кода:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
1cv8.exe ENTERPRISE /IBConnectionString "..." /C ЗапуститьОбновлениеИнформационнойБазы
Если ошибки сохраняются, выполним стандартный регламент очистки кэша и проверки целостности структуры базы:
%LocalAppData%\1C\1cv8 и %AppData%\1C\1cv8).1C:Предприятие и очистим каталоги серверных сеансов (папки с маской snccntx*).