При работе с современными конфигурациями на базе Библиотеки стандартных подсистем (БСП), такими как «1С:Управление торговлей 11.5», специалисты часто сталкиваются с ситуацией, когда после частичного переноса данных или загрузки документов из другой информационной базы перестают открываться списки (динамические списки). Вместо привычного перечня документов система выдает критическую ошибку. Рассмотрим подробно, почему это происходит и как восстановить работоспособность базы.
Проанализируем архитектуру системы. В конфигурациях на БСП существует специальный механизм регистрации объектов метаданных. Все справочники, документы, перечисления и их реквизиты регистрируются в служебном справочнике ИдентификаторыОбъектовМетаданных. Это необходимо для обеспечения ссылочной целостности, настройки прав доступа и корректной работы динамических списков.
Когда мы загружаем документы из базы с «почти» идентичной конфигурацией, может возникнуть конфликт. Например, в базе-приемнике установлено расширение, которое добавляет свои реквизиты, а в базе-источнике этого расширения нет. При загрузке объектов через механизмы XML или другие обработки система может пометить существующие идентификаторы метаданных на удаление или создать новые, «фантомные» записи. В результате динамический список при попытке обращения к структуре данных натыкается на помеченный на удаление или некорректный идентификатор, что и вызывает программный сбой.
Самый простой, но не всегда очевидный способ — выполнение штатного обновления. Как показывает практика, переход даже на минорный релиз (например, с 11.5.12.130 на 11.5.12.147) инициирует автоматический запуск процедур обновления информационной базы. Разберем, что происходит в этот момент:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника().Если обновление конфигурации в данный момент невозможно, мы можем инициировать этот процесс принудительно. Рассмотрим для этого запуск системы с параметром командной строки. Попробуем запустить базу в режиме «Предприятие» со следующим ключом:
/C ЗапуститьОбновлениеИнформационнойБазы
Этот метод заставит систему прогнать все регламентные процедуры, что часто исправляет «битые» ссылки в служебных таблицах.
Если автоматические процедуры не помогли, нам придется вмешаться в работу системы программно. Это наиболее надежный метод для программиста. Нам потребуется внешняя обработка или «Консоль кода». Выполним следующий фрагмент кода, который обращается к методам БСП:
// Принудительное обновление справочника идентификаторов объектов метаданных
// Первый параметр - ВыполнятьОбновлениеДанных (Истина)
// Второй параметр - УдалятьНеактуальныеЗаписи (Истина)
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(Истина, Истина);
Разберем подробнее параметры этого метода. Установка второго параметра в значение Истина крайне важна, так как это позволяет системе очистить «мусор» — те самые записи, которые были созданы ошибочно при загрузке данных из базы с другой структурой метаданных (без расширений).
Часто пользователи пытаются найти справочник ИдентификаторыОбъектовМетаданных в стандартном интерфейсе или через групповую обработку, но не видят его. Посмотрим, как сделать его видимым и отредактировать пометку удаления вручную.
Идентификаторы объектов метаданных в поле «Изменять».Важный момент: если мы видим дубликаты (один идентификатор помечен на удаление, а другой — нет), рекомендуется воспользоваться типовой обработкой «Поиск и удаление дублей». Это позволит правильно перепривязать все существующие ссылки в базе к актуальному идентификатору метаданных.
Иногда даже после исправления данных в справочниках ошибка продолжает появляться. Это происходит из-за того, что платформа 1С кэширует структуру конфигурации и настройки динамических списков. Посмотрим, как правильно произвести очистку.
Проанализируем два уровня кэширования:
%AppData%\1C\1Cv8, и старые описания типов не будут мешать работе.Чтобы в будущем избежать подобных ситуаций при переносе документов между базами с разным набором расширений, придерживайтесь следующих правил:
Таким образом, мы выяснили, что корень проблемы кроется не в самих документах, а в системных механизмах регистрации метаданных. Сочетание программного обновления справочника идентификаторов и очистки кэша позволяет полностью устранить ошибку и убрать лишний «мусор» из системы.