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

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

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

Выясним причину возникновения ошибки

Проанализируем механику работы платформы 1С. Ошибка возникает не из-за того, что в вашей базе уже есть дубли, а из-за того, что они создаются в процессе реструктуризации таблиц базы данных. В регистре ДвоичныеДанныеФайлов основным измерением является Файл. Тип этого измерения обычно установлен как ОпределяемыйТип.ПрисоединенныйФайл.

Рассмотрим ситуацию: в вашей базе были документы или справочники (например, «Договоры контрагентов»), для которых хранились присоединенные файлы. В какой-то момент при обновлении конфигурации состав Определяемого типа изменился — из него был исключен тип ссылки на справочник присоединенных файлов этих договоров. Когда платформа начинает обновлять конфигурацию базы данных, она выполняет следующие шаги:

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

Именно на этом этапе SQL-сервер или механизм файловой базы выдает ошибку нарушения уникальности индекса, так как в регистре сведений не может быть двух записей с идентичным набором измерений.

Диагностика проблемных записей

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


ВЫБРАТЬ
    ТИПЗНАЧЕНИЯ(ТекстРегистра.Файл) КАК ТипДанных,
    КОЛИЧЕСТВО(*) КАК Количество
ИЗ
    РегистрСведений.ДвоичныеДанныеФайлов КАК ТекстРегистра
СГРУППИРОВАТЬ ПО
    ТИПЗНАЧЕНИЯ(ТекстРегистра.Файл)

Посмотрим на результат. Если в списке типов вы видите строки с названием Неизвестный тип или ссылки вида Объект не найден, это и есть кандидаты на создание дублей — для этого подойдёт диагностика регистров на битые ссылки и повреждения. Также стоит сравнить этот список с составом объекта ОпределяемыйТип.ПрисоединенныйФайл в дереве метаданных конфигуратора. Любой тип, который есть в результате запроса, но отсутствует в определяемом типе, приведет к ошибке при обновлении.

Способ 1. Исправление состава определяемого типа (рекомендуемый)

Это самый правильный и безопасный метод, который позволяет сохранить все данные пользователей. Разберем его по шагам:

  1. Отменим текущее обновление и вернемся к конфигурации базы данных (меню Конфигурация — Конфигурация базы данных — Вернуться к конфигурации БД).
  2. Откроем свойства ОпределяемыйТип.ПрисоединенныйФайл.
  3. Посмотрим, какие типы были в нем ранее. Если вы накатываете типовое обновление на кастомизированную базу, скорее всего, обновление «затерло» ваши добавленные справочники присоединенных файлов.
  4. Вручную проставим галочки напротив всех справочников вида ...ПрисоединенныеФайлы, которые используются в вашей системе.
  5. Повторим попытку обновления конфигурации (нажмем F7).

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

Способ 2. Использование выгрузки и загрузки данных XML

Если по какой-то причине вы не хотите менять состав типов (например, вы сознательно отказываетесь от хранения старых файлов), можно воспользоваться «обходным» путем. Однако помните: этот метод может привести к потере данных.

Рассмотрим алгоритм действий:

  1. Используем универсальную обработку ВыгрузкаЗагрузкаДанныхXML.epf — поможет универсальная обработка выгрузки и загрузки XML.
  2. Выгружаем данные регистра ДвоичныеДанныеФайлов в файл.
  3. Очищаем регистр в базе (можно сделать это небольшой обработкой или через удаление записей в режиме 1С:Предприятие) — удобнее через редактирование и массовая очистка записей регистров сведений.
  4. Выполняем обновление конфигурации. Теперь оно пройдет без ошибок, так как регистр пуст.
  5. Загружаем данные обратно с помощью той же обработки.

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

Устранение ошибок при выгрузке больших объемов данных

Иногда при попытке выгрузить данные регистра ДвоичныеДанныеФайлов возникает ошибка: «Значение данного типа невозможно преобразовать для передачи как файл». Это связано с тем, что регистр хранит бинарные данные (сами файлы), которые могут занимать гигабайты памяти.

Чтобы избежать этой ошибки, выполним следующие рекомендации:

Особенности перехода с БП 2.0 на БП 3.0

Проанализируем ситуацию перехода между редакциями. В версии 2.0 файлы могли храниться в нетиповых механизмах. При переходе на 3.0 внедряется БСП, и данные переезжают в новый регистр. Если в процессе переноса или последующего дообновления конфигурации поставщика вы теряете связь с объектами-владельцами, ошибка дублей неизбежна.

Проверьте, не изменяли ли вы ОпределяемыйТип.ВладелецПрисоединенныхФайлов. Часто ошибка в ДвоичныеДанныеФайлов является лишь следствием того, что «отвалился» тип у владельца файла. Если в системе остались записи файлов, чьи владельцы больше не поддерживают хранение файлов, реструктуризация будет спотыкаться об эти «осиротевшие» записи. Для этой задачи есть инструменты очистки базы и исправления битых движений.

Итоги и профилактика

Подводя итог, можно сказать, что ошибка «Имеются записи с одинаковыми измерениями» — это защитный механизм платформы, предотвращающий потерю уникальности данных при некорректном изменении метаданных. Чтобы избежать подобных проблем в будущем:

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

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

← На главную