Как исправить ошибку «Для одного ссылочного кода существует более одной таблицы» при обновлении 1С:ЗиКГУ

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При обновлении конфигурации «Зарплата и кадры государственного учреждения» (ЗиКГУ), особенно при переходе на новые релизы (например, с ветки 3.1.15 на 3.1.16), администраторы и программисты часто сталкиваются с критической ошибкой: «Для одного ссылочного кода существует более одной таблицы в базе данных». Эта проблема блокирует обновление конфигурации базы данных и может привести к невозможности входа в систему. Разберем подробно причины возникновения этой коллизии и пошаговые методы её решения.

Анализируем причину возникновения ошибки

Прежде всего, нам необходимо понять природу этого сообщения. Ошибка свидетельствует о рассинхронизации между внутренней схемой данных 1С (специальная таблица DBSchema) и фактическим составом таблиц в SQL-базе или файле 1Cv8.1CD. Каждому объекту метаданных (справочнику, документу, регистру) платформа присваивает уникальный числовой идентификатор — ссылочный код.

Рассмотрим ситуацию на примере кода 24454, упомянутого в логах. Платформа обнаруживает, что этот код одновременно закреплен за основной таблицей справочника (например, RefSInf24454) и за служебной таблицей ExtensionsRestruct. Наличие таблицы с префиксом Extensions прямо указывает на то, что проблема вызвана механизмом расширений конфигурации. Начиная с версии платформы 8.3.15, расширения, которые добавляют собственные реквизиты в типовые объекты, создают дополнительные физические таблицы. Если процесс реструктуризации был прерван или выполнен некорректно, временные таблицы не удаляются, создавая «двойника» для одного и того же кода объекта.

Шаг 1: Идентификация виновного объекта метаданных

Для того чтобы понять, какой именно справочник или регистр вызывает конфликт, мы можем воспользоваться программными средствами платформы. Выясним, какому объекту соответствует код из ошибки. Для этого в консоли кода или во внешней обработке выполним следующий фрагмент:


СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаТТ Из СтруктураХранения Цикл
    Если Найти(СтрокаТТ.ИмяТаблицыХранения, "24454") > 0 Тогда
        Сообщить("Объект метаданных: " + СтрокаТТ.ИмяТаблицы);
        Сообщить("Назначение: " + СтрокаТТ.Метаданные);
    КонецЕсли;
КонецЦикла;

Проанализируем результат. Чаще всего «виновником» оказывается объект, задействованный в общем реквизите ОбластьДанныхОсновныеДанные. Это характерно для конфигураций, подготовленных для работы в модели сервиса (Fresh), к которым относится и ЗиКГУ.

Шаг 2: Работа с расширениями конфигурации

Поскольку стандартное Тестирование и Исправление (ТиИ) часто не затрагивает таблицы расширений, нам необходимо выполнить манипуляции с ними вручную. Рассмотрим последовательность действий:

  1. Создадим полную резервную копию базы данных.
  2. Зайдем в список расширений (Конфигурация — Расширения конфигурации).
  3. Снимем флаг «Активно» со всех имеющихся расширений.
  4. Попробуем выполнить обновление конфигурации базы данных (F7).
  5. Если ошибка сохраняется, полностью удалим расширения, предварительно сохранив их в файлы .cfe. Важно: при удалении расширения платформа предложит удалить данные этого расширения — в данной ситуации это необходимо для очистки «фантомных» таблиц.

Шаг 3: Метод полной замены конфигурации (Загрузка CF)

Если расширения удалены, а ошибка «Для одного ссылочного кода существует более одной таблицы» все еще появляется, это означает, что записи в DBSchema повреждены на уровне основной конфигурации. В этом случае эффективно помогает метод загрузки файла конфигурации (.cf) вместо стандартного сравнения/объединения.

Разберем алгоритм:

  1. Выгрузим текущую конфигурацию в файл (Конфигурация — Выгрузить конфигурацию в файл...).
  2. В режиме конфигуратора выберем пункт Конфигурация — Загрузить конфигурацию из файла....
  3. Выберем только что выгруженный или полностью типовой cf-файл нужного релиза.
  4. Платформа полностью перезапишет структуру метаданных, что заставит её перестроить DBSchema и устранить дублирующиеся ссылки на таблицы.

Шаг 4: Очистка серверного кеша и временных таблиц

В клиент-серверном варианте работы (SQL) информация о структуре таблиц может кэшироваться службой 1С:Предприятия. Проанализируем состояние кластера серверов. Для гарантированного устранения проблемы выполним следующие действия:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent.
  2. Перейдем в каталог описания кластера (обычно это C:\Program Files\1cv8\srvinfo\reg_1541).
  3. Найдем папку с GUID вашей базы данных и внутри неё удалим папку snccntx. Это очистит кэш сеансовых данных.
  4. Запустим службу сервера и повторим попытку реструктуризации.

Шаг 5: Решение проблемы «Пользователь не идентифицирован»

Часто после неудачной попытки обновления при входе в конфигуратор возникает ошибка «Пользователь не идентифицирован». Это происходит из-за того, что платформа начала процесс переноса таблицы пользователей во временную таблицу, но не завершила его.

Чтобы исправить это в SQL-версии, можно проверить таблицу v8users. Если она пуста, данные временно находятся в таблице с префиксом v8users_..._old. Однако наиболее безопасным способом является восстановление из копии перед попыткой реструктуризации и запуск конфигуратора от имени администратора операционной системы с очисткой локальных кэшей в папках %AppData%\1C\1cv8 и %LocalAppData%\1C\1cv8.

Шаг 6: Использование выгрузки/загрузки в DT (для файловых баз)

Если ваша база ЗиКГУ файловая, и стандартное ТиИ падает с критической ошибкой, эффективным методом «пересборки» структуры является создание файла выгрузки данных .dt. Рассмотрим этот процесс:

  1. Выполним выгрузку информационной базы в .dt.
  2. Создадим новую пустую информационную базу.
  3. Загрузим .dt в новую базу.

При загрузке файла .dt платформа создает таблицы в файле 1Cv8.1CD с нуля, основываясь только на актуальных метаданных. Все «лишние» таблицы, которые физически существовали в старом файле, но не имели описания в метаданных, просто не будут созданы в новой базе. Это самый простой способ избавиться от «фантомных» объектов без прямого редактирования таблиц через Tool_1CD.

Важный совет: всегда проверяйте совместимость версии платформы и релиза ЗиКГУ. Для последних версий 3.1.16+ рекомендуется использовать платформу не ниже 8.3.17.1549 или 8.3.18, так как в них исправлено множество ошибок, связанных именно с реструктуризацией расширений.

← На главную