При настройке или доработке обмена данными между конфигурациями «Управление торговлей» (УТ 11) и «Бухгалтерия предприятия» (БП 3.0) через Конвертацию данных 2.1 разработчики часто сталкиваются с крайне неприятной ошибкой СУБД: «Ошибка при выполнении операции с информационной базой. Запись не найдена в менеджере имен базы данных». Особенность этой проблемы в том, что она может возникать спонтанно, пропадать после очистки кэша на один сеанс и снова блокировать работу пользователей при повторной выгрузке.
В этой статье мы подробно разберем природу возникновения данной ошибки, выясним, почему временная очистка кэша не решает проблему глобально, и рассмотрим пошаговые инструкции по ее устранению на уровне метаданных, расширений и платформы 1С.
Для начала проанализируем физический смысл этой ошибки. Платформа 1С:Предприятие работает как ORM-система (Object-Relational Mapping). Она хранит соответствие между логическими объектами метаданных (документами, справочниками, регистрами) и физическими таблицами в СУБД (например, Microsoft SQL Server или PostgreSQL) в специальных системных таблицах конфигурации (таких как params, config и dbschema). Этот внутренний словарь сопоставлений и называется менеджером имен базы данных.
Когда мы выполняем обмен данными, платформа пытается считать структуру передаваемого объекта, сопоставить его типы с правилами регистрации плана обмена и записать данные. Если в этот момент нарушается логическая целостность (карта сопоставления ссылается на несуществующую таблицу или тип данных, либо кэш сервера приложений хранит устаревшую структуру), менеджер имен выдает критический сбой.
Рассмотрим основные причины этого сбоя и методы борьбы с ними.
---
Наиболее распространенная практическая причина этой ошибки при обмене по правилам конвертации (КД 2.1) — **несоответствие состава плана обмена** в отправляющей и принимающей базах.
Если вы дорабатываете обмен и включаете новый документ в правила регистрации и конвертации, этого недостаточно. Рассмотрим ситуацию по шагам:
Состав этот документ не включен, то платформа не может корректно обработать входящую транзакцию и сопоставить кэш метаданных плана обмена. Возникает сбой менеджера имен.Что необходимо сделать:
Обязательно откройте конфигуратор базы-приемника, найдите используемый план обмена, перейдите на вкладку «Состав» и установите флаг напротив нового документа, данные по которому будут загружаться. Настройки состава планов обмена в обеих базах должны быть идентичными для всех мигрирующих типов объектов.
Пример программной регистрации изменений, которая может вызывать ошибку, если объект не включен в состав плана обмена на одной из сторон:
// Программная регистрация изменений для узла обмена
Процедура ЗарегистрироватьДокументНаУзле(УзелСсылка, ДокументОбъект) Экспорт
Если ПланыОбмена.ВыбратьИзменения(УзелСсылка, ДокументОбъект.Ссылка) = Неопределено Тогда
// Если объект отсутствует в составе плана обмена приемника,
// при попытке чтения этого сообщения возникнет ошибка менеджера имен.
ПланыОбмена.ЗарегистрироватьИзменения(УзелСсылка, ДокументОбъект.Ссылка);
КонецЕсли;
КонецПроцедуры
---
Если очистка локального кэша помогает ровно на один запуск обмена, это явный признак того, что некорректная структура кэшируется на стороне **сервера приложений 1С:Предприятие** (в случае клиент-серверного варианта работы).
Особенно часто эта проблема проявляется при использовании механизма «динамического обновления» (когда конфигурация базы данных обновляется без перезапуска службы сервера). Таблицы сопоставления имен «зависают» в оперативной памяти рабочих процессов rphost.
Рекомендуемый алгоритм очистки серверного кэша:
1C:Enterprise 8.3 Server Agent).C:\Program Files\1cv8\srvinfo\reg_1541\ (удалять нужно каталоги с длинными буквенно-цифровыми именами UID баз, предварительно сделав бэкап).Обратите внимание на версию используемой платформы. В ветках релизов 8.3.11, 8.3.12, 8.3.13 и 8.3.14 (включая упоминаемую в обсуждении 8.3.12.1412) содержатся зарегистрированные ошибки платформы, связанные с утечкой памяти и неверным обновлением кэша менеджера имен БД при работе с планами обмена.
Если есть возможность, обновите платформу до стабильных релизов ветки 8.3.15, 8.3.20 или выше. Если вы привязаны к старым конфигурациям, используйте проверенные временем сборки платформы (например, стабильные релизы ветки 8.3.10, такие как 8.3.10.2753), предварительно проверив требования ваших конфигураций (ЗУП 3.1, БП 3.0).
---
Современные конфигурации БП 3.0 и УТ 11 активно используют расширения. Если задействованные в обмене документы или справочники добавлены в какое-либо расширение (или расширение модифицирует их свойства), реструктуризация СУБД может пройти с ошибками.
При этом физически таблица расширения в СУБД создается, но в основной менеджер имен 1С запись не вносится. Выясним причину через проверку логической целостности расширений:
Если система выдаст лог с ошибками сопоставления таблиц расширения, выполните «перезагрузку» расширения:
.cfe) через меню «Конфигурация — Сохранить конфигурацию расширения в файл»..cfe. Это принудительно заставит платформу пересоздать служебные таблицы сопоставления имен в SQL.---
Если база данных находится в клиент-серверном режиме под управлением MS SQL Server или PostgreSQL, и вышеописанные методы не помогают из-за того, что база заблокирована и не открывается даже в конфигураторе, проблему можно решить точечной очисткой служебных таблиц реструктуризации.
Внимание! Любые операции напрямую в СУБД должны производиться только после создания полной резервной копии базы данных (файла .bak).
Часто сбой «Запись не найдена в менеджере имен» блокируется незавершенным процессом обновления расширений. На уровне SQL-сервера за это отвечает таблица _ExtensionsRestruct. Очистить зависшую очередь реструктуризации расширений можно следующим SQL-запросом:
-- Очистка зависшей таблицы реструктуризации расширений в MS SQL
TRUNCATE TABLE dbo._ExtensionsRestruct;
После выполнения этого запроса перезапустите службу сервера 1С:Предприятие и выполните вход в конфигуратор для выполнения полного тестирования и исправления информационной базы.
---
Для успешного устранения ошибки менеджера имен баз данных при обмене выполните следующие действия: