При обновлении типовых конфигураций «1С:Предприятие 8.3», особенно при переходе с релизов линейки 3.0.45–3.0.60 на более современные версии «Бухгалтерии предприятия», специалисты часто сталкиваются с системной ошибкой: «Имеются записи с одинаковыми измерениями» в регистре сведений ДвоичныеДанныеФайлов. Эта проблема блокирует процесс реструктуризации базы данных и не позволяет завершить обновление.
Рассмотрим детально, почему возникает эта ситуация, как провести глубокую диагностику данных и какие инструменты использовать для восстановления работоспособности системы без потери присоединенных файлов.
Регистр сведений ДвоичныеДанныеФайлов предназначен для хранения содержимого файлов (сканов, документов, изображений), прикрепленных к объектам базы данных. Основным измерением этого регистра является Файл (ссылка на справочник присоединенных файлов). Ошибка уникальности записей означает, что в таблице базы данных физически существуют две или более строки с одинаковым значением поля Файл.
Проанализируем основные причины появления таких «фантомных» дублей:
.1CD) могут возникнуть логические ошибки, когда внутренняя структура таблицы допускает дублирование, запрещенное правилами платформы.Прежде чем приступать к радикальным мерам, попробуем локализовать проблему. Проанализируем содержимое регистра с помощью внешней обработки «Консоль запросов». Важно понимать, что обычный перебор записей может не показать ошибку, поэтому используем группировку.
Выполним следующий запрос, который поможет выявить файлы, имеющие более одной записи в регистре двоичных данных:
ВЫБРАТЬ
Таб.Файл КАК ПроблемныйФайл,
СУММА(Таб.Количество) КАК ОбщееКоличество
ИЗ
(ВЫБРАТЬ
РС.Файл КАК Файл,
1 КАК Количество
ИЗ
РегистрСведений.ДвоичныеДанныеФайлов КАК РС) КАК Таб
СГРУППИРОВАТЬ ПО
Таб.Файл
ИМЕЮЩИЕ
СУММА(Таб.Количество) > 1
Если запрос вернул результат, мы увидим конкретные ссылки на элементы справочника Файлы или ПрисоединенныеФайлы. В этом случае достаточно удалить лишние записи из регистра программно или вручную через стандартную обработку «Редактирование записей регистра».
Однако часто возникает ситуация, когда запрос возвращает пустой результат, но ошибка при обновлении сохраняется. Это свидетельствует о повреждении физических индексов таблицы.
Если база данных файловая, первым делом необходимо воспользоваться утилитой проверки целостности файлов. Посмотрим на алгоритм действий:
1Cv8.1CD.chdbfl.exe (находится в папке bin установленной платформы 1С).Проанализируем результаты: часто утилита находит ошибки в индексах таблицы InformationRegister.ДвоичныеДанныеФайлов и исправляет их. После этого рекомендуется снова запустить обновление конфигурации.
Если утилита chdbfl не помогла или база работает в клиент-серверном варианте, перейдем к встроенному механизму «Тестирование и исправление информационной базы». Рассмотрим наиболее эффективные настройки для нашего случая:
Если стандартные средства не видят дублей, но обновление «падает», применим метод полной перезаписи набора записей. Это заставит платформу принудительно очистить таблицу и записать данные заново, исключая дубликаты на уровне движка БД.
Рассмотрим пример кода для очистки регистра (внимательно: это действие удалит данные, их нужно предварительно выгрузить):
// Пример полной очистки регистра для тестирования
Набор = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьНаборЗаписей();
Набор.Записать(); // Записываем пустой набор, очищая регистр
Для сохранения данных алгоритм будет сложнее. Проанализируем этапы:
НаборЗаписей.Записать().В современных релизах «1С:Бухгалтерии 3.0» архитектура хранения файлов изменилась. Выясним причину конфликтов: система может пытаться перенести данные из регистра ДвоичныеДанныеФайлов в другие хранилища. Если в справочниках ПрисоединенныеФайлы есть два элемента с одинаковыми наименованиями, это не ошибка. Ошибка — это когда два разных элемента справочника имеют записи в регистре с одним и тем же ключом.
Если вы обнаружили, что в режиме предприятия у одного документа «Реализация товаров и услуг» прикреплено несколько файлов с одинаковым именем (например, Скан.pdf), попробуйте их переименовать или удалить лишние. Несмотря на то, что это разные элементы справочника, при некоторых алгоритмах обновления может возникнуть коллизия.
Если после всех манипуляций ошибка сохраняется, выполним «финальный маневр»:
.dt..dt обратно. Это принудительно пересоздаст физическую структуру таблиц в SQL или файловой системе.Проанализировав ситуацию, мы видим, что проблема чаще всего кроется не в самих данных, а в их физическом представлении на уровне СУБД. Использование комбинации chdbfl, Реиндексации и, в крайнем случае, временной очистки регистра позволяет успешно завершить обновление «1С:Бухгалтерии 3.0» и сохранить все важные присоединенные документы.