При обновлении конфигурации «Зарплата и кадры государственного учреждения» (ЗиКГУ), особенно при переходе на новые релизы (например, с ветки 3.1.15 на 3.1.16), администраторы и программисты часто сталкиваются с критической ошибкой: «Для одного ссылочного кода существует более одной таблицы в базе данных». Эта проблема блокирует обновление конфигурации базы данных и может привести к невозможности входа в систему. Разберем подробно причины возникновения этой коллизии и пошаговые методы её решения.
Прежде всего, нам необходимо понять природу этого сообщения. Ошибка свидетельствует о рассинхронизации между внутренней схемой данных 1С (специальная таблица DBSchema) и фактическим составом таблиц в SQL-базе или файле 1Cv8.1CD. Каждому объекту метаданных (справочнику, документу, регистру) платформа присваивает уникальный числовой идентификатор — ссылочный код.
Рассмотрим ситуацию на примере кода 24454, упомянутого в логах. Платформа обнаруживает, что этот код одновременно закреплен за основной таблицей справочника (например, RefSInf24454) и за служебной таблицей ExtensionsRestruct. Наличие таблицы с префиксом Extensions прямо указывает на то, что проблема вызвана механизмом расширений конфигурации. Начиная с версии платформы 8.3.15, расширения, которые добавляют собственные реквизиты в типовые объекты, создают дополнительные физические таблицы. Если процесс реструктуризации был прерван или выполнен некорректно, временные таблицы не удаляются, создавая «двойника» для одного и того же кода объекта.
Для того чтобы понять, какой именно справочник или регистр вызывает конфликт, мы можем воспользоваться программными средствами платформы. Выясним, какому объекту соответствует код из ошибки. Для этого в консоли кода или во внешней обработке выполним следующий фрагмент:
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаТТ Из СтруктураХранения Цикл
Если Найти(СтрокаТТ.ИмяТаблицыХранения, "24454") > 0 Тогда
Сообщить("Объект метаданных: " + СтрокаТТ.ИмяТаблицы);
Сообщить("Назначение: " + СтрокаТТ.Метаданные);
КонецЕсли;
КонецЦикла;
Проанализируем результат. Чаще всего «виновником» оказывается объект, задействованный в общем реквизите ОбластьДанныхОсновныеДанные. Это характерно для конфигураций, подготовленных для работы в модели сервиса (Fresh), к которым относится и ЗиКГУ.
Поскольку стандартное Тестирование и Исправление (ТиИ) часто не затрагивает таблицы расширений, нам необходимо выполнить манипуляции с ними вручную. Рассмотрим последовательность действий:
.cfe. Важно: при удалении расширения платформа предложит удалить данные этого расширения — в данной ситуации это необходимо для очистки «фантомных» таблиц.Если расширения удалены, а ошибка «Для одного ссылочного кода существует более одной таблицы» все еще появляется, это означает, что записи в DBSchema повреждены на уровне основной конфигурации. В этом случае эффективно помогает метод загрузки файла конфигурации (.cf) вместо стандартного сравнения/объединения.
Разберем алгоритм:
cf-файл нужного релиза.DBSchema и устранить дублирующиеся ссылки на таблицы.В клиент-серверном варианте работы (SQL) информация о структуре таблиц может кэшироваться службой 1С:Предприятия. Проанализируем состояние кластера серверов. Для гарантированного устранения проблемы выполним следующие действия:
1C:Enterprise 8.3 Server Agent.C:\Program Files\1cv8\srvinfo\reg_1541).snccntx. Это очистит кэш сеансовых данных.Часто после неудачной попытки обновления при входе в конфигуратор возникает ошибка «Пользователь не идентифицирован». Это происходит из-за того, что платформа начала процесс переноса таблицы пользователей во временную таблицу, но не завершила его.
Чтобы исправить это в SQL-версии, можно проверить таблицу v8users. Если она пуста, данные временно находятся в таблице с префиксом v8users_..._old. Однако наиболее безопасным способом является восстановление из копии перед попыткой реструктуризации и запуск конфигуратора от имени администратора операционной системы с очисткой локальных кэшей в папках %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8.
Если ваша база ЗиКГУ файловая, и стандартное ТиИ падает с критической ошибкой, эффективным методом «пересборки» структуры является создание файла выгрузки данных .dt. Рассмотрим этот процесс:
.dt..dt в новую базу.При загрузке файла .dt платформа создает таблицы в файле 1Cv8.1CD с нуля, основываясь только на актуальных метаданных. Все «лишние» таблицы, которые физически существовали в старом файле, но не имели описания в метаданных, просто не будут созданы в новой базе. Это самый простой способ избавиться от «фантомных» объектов без прямого редактирования таблиц через Tool_1CD.
Важный совет: всегда проверяйте совместимость версии платформы и релиза ЗиКГУ. Для последних версий 3.1.16+ рекомендуется использовать платформу не ниже 8.3.17.1549 или 8.3.18, так как в них исправлено множество ошибок, связанных именно с реструктуризацией расширений.