Как исправить ошибку «Имеются записи с одинаковыми измерениями» в регистре «ДвоичныеДанныеФайлов» при обновлении 1С?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия
← На главную

При обновлении типовых конфигураций «1С:Предприятие 8.3», особенно при переходе с релизов линейки 3.0.45–3.0.60 на более современные версии «Бухгалтерии предприятия», специалисты часто сталкиваются с системной ошибкой: «Имеются записи с одинаковыми измерениями» в регистре сведений ДвоичныеДанныеФайлов. Эта проблема блокирует процесс реструктуризации базы данных и не позволяет завершить обновление.

Рассмотрим детально, почему возникает эта ситуация, как провести глубокую диагностику данных и какие инструменты использовать для восстановления работоспособности системы без потери присоединенных файлов.

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

Регистр сведений ДвоичныеДанныеФайлов предназначен для хранения содержимого файлов (сканов, документов, изображений), прикрепленных к объектам базы данных. Основным измерением этого регистра является Файл (ссылка на справочник присоединенных файлов). Ошибка уникальности записей означает, что в таблице базы данных физически существуют две или более строки с одинаковым значением поля Файл.

Проанализируем основные причины появления таких «фантомных» дублей:

  1. Сбои при динамическом обновлении: Некорректное завершение сеанса или «демон демонического обновления» могут привести к рассогласованию индексов таблицы.
  2. Ошибки реструктуризации: При изменении длины или состава индексов в новых релизах платформа пытается перестроить таблицу и обнаруживает данные, которые раньше игнорировались.
  3. Повреждение файловой таблицы: В файловых базах (библиотека .1CD) могут возникнуть логические ошибки, когда внутренняя структура таблицы допускает дублирование, запрещенное правилами платформы.
  4. Битные ссылки: Наличие записей, ссылающихся на удаленные объекты справочников, которые система не может корректно идентифицировать.

Шаг 1. Поиск дублей с помощью консоли запросов

Прежде чем приступать к радикальным мерам, попробуем локализовать проблему. Проанализируем содержимое регистра с помощью внешней обработки «Консоль запросов». Важно понимать, что обычный перебор записей может не показать ошибку, поэтому используем группировку.

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


ВЫБРАТЬ
    Таб.Файл КАК ПроблемныйФайл,
    СУММА(Таб.Количество) КАК ОбщееКоличество
ИЗ
    (ВЫБРАТЬ
        РС.Файл КАК Файл,
        1 КАК Количество
    ИЗ
        РегистрСведений.ДвоичныеДанныеФайлов КАК РС) КАК Таб
СГРУППИРОВАТЬ ПО
    Таб.Файл
ИМЕЮЩИЕ
    СУММА(Таб.Количество) > 1

Если запрос вернул результат, мы увидим конкретные ссылки на элементы справочника Файлы или ПрисоединенныеФайлы. В этом случае достаточно удалить лишние записи из регистра программно или вручную через стандартную обработку «Редактирование записей регистра».

Однако часто возникает ситуация, когда запрос возвращает пустой результат, но ошибка при обновлении сохраняется. Это свидетельствует о повреждении физических индексов таблицы.

Шаг 2. Восстановление физической целостности базы (chdbfl.exe)

Если база данных файловая, первым делом необходимо воспользоваться утилитой проверки целостности файлов. Посмотрим на алгоритм действий:

  1. Завершим все сеансы работы с базой данных.
  2. Сделаем резервную копию файла 1Cv8.1CD.
  3. Запустим утилиту chdbfl.exe (находится в папке bin установленной платформы 1С).
  4. Установим флаг «Исправлять обнаруженные ошибки» и запустим проверку.

Проанализируем результаты: часто утилита находит ошибки в индексах таблицы InformationRegister.ДвоичныеДанныеФайлов и исправляет их. После этого рекомендуется снова запустить обновление конфигурации.

Шаг 3. Тестирование и исправление (ТиИ)

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

Шаг 4. Программная очистка и «перетряхивание» регистра

Если стандартные средства не видят дублей, но обновление «падает», применим метод полной перезаписи набора записей. Это заставит платформу принудительно очистить таблицу и записать данные заново, исключая дубликаты на уровне движка БД.

Рассмотрим пример кода для очистки регистра (внимательно: это действие удалит данные, их нужно предварительно выгрузить):


// Пример полной очистки регистра для тестирования
Набор = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьНаборЗаписей();
Набор.Записать(); // Записываем пустой набор, очищая регистр

Для сохранения данных алгоритм будет сложнее. Проанализируем этапы:

  1. Выгрузим данные регистра во временную таблицу или во внешний файл XML (используя обработку «Выгрузка и загрузка данных XML»).
  2. Очистим регистр полностью через НаборЗаписей.Записать().
  3. Проведем обновление конфигурации до нужного релиза.
  4. Загрузим данные обратно. При загрузке через XML или программно, платформа автоматически проигнорирует дублирующиеся записи, если они попытаются записаться в одно и то же измерение.

Шаг 5. Особенности при переходе на новые механизмы хранения файлов

В современных релизах «1С:Бухгалтерии 3.0» архитектура хранения файлов изменилась. Выясним причину конфликтов: система может пытаться перенести данные из регистра ДвоичныеДанныеФайлов в другие хранилища. Если в справочниках ПрисоединенныеФайлы есть два элемента с одинаковыми наименованиями, это не ошибка. Ошибка — это когда два разных элемента справочника имеют записи в регистре с одним и тем же ключом.

Если вы обнаружили, что в режиме предприятия у одного документа «Реализация товаров и услуг» прикреплено несколько файлов с одинаковым именем (например, Скан.pdf), попробуйте их переименовать или удалить лишние. Несмотря на то, что это разные элементы справочника, при некоторых алгоритмах обновления может возникнуть коллизия.

Рекомендации по завершению обновления

Если после всех манипуляций ошибка сохраняется, выполним «финальный маневр»:

  1. Снимем базу с поддержки (если были изменения) или вернем на типовую конфигурацию поставщика.
  2. Выгрузим информационную базу в файл .dt.
  3. Создадим пустую базу и загрузим .dt обратно. Это принудительно пересоздаст физическую структуру таблиц в SQL или файловой системе.
  4. Запустим обновление в монопольном режиме.

Проанализировав ситуацию, мы видим, что проблема чаще всего кроется не в самих данных, а в их физическом представлении на уровне СУБД. Использование комбинации chdbfl, Реиндексации и, в крайнем случае, временной очистки регистра позволяет успешно завершить обновление «1С:Бухгалтерии 3.0» и сохранить все важные присоединенные документы.

← На главную