Что делать, если при реорганизации базы данных возникает ошибка «Имеются данные с одинаковыми измерениями»?

Программист IT и автоматизация бизнеса
← На главную

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

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

Прежде всего, нам необходимо понять механику работы регистра ДвоичныеДанныеФайлов. Этот регистр предназначен для хранения собственно содержимого файлов (двоичных данных), а его единственным измерением является Файл. Тип этого измерения обычно определяется через ОпределяемыйТип.ПрисоединенныйФайл, который может включать в себя десятки различных справочников присоединенных файлов (например, «ДоговорыКонтрагентовПрисоединенныеФайлы», «НоменклатураПрисоединенныеФайлы» и так далее).

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

Проанализируем данные с помощью консоли запросов

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

Рассмотрим следующий текст запроса:


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

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

Способ 1: Тестирование и исправление (ТиИ)

Это стандартный и наиболее безопасный метод. Посмотрим, как правильно настроить параметры ТиИ для решения нашей задачи. Нам необходимо избавиться от ссылок на несуществующие объекты, которые часто маскируются под дубли.

  1. Запустим информационную базу в режиме «Конфигуратор».
  2. Откроем меню «Администрирование» — «Тестирование и исправление».
  3. Установим флажки на пунктах:
    • Проверка логической целостности.
    • Проверка ссылочной целостности.
    • Реиндексация таблиц информационной базы.
  4. В блоке «При наличии ссылок на несуществующие объекты» строго выберем вариант «Очищать ссылки» (или «Удалять объект», если речь идет о записях регистра).

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

Способ 2: Программная очистка регистра через внешнюю обработку

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

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

  1. Создадим полную копию базы данных.
  2. В основной базе создадим обработку и выполним код для очистки проблемного регистра:

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

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

Способ 3: Работа с расширениями и последовательное обновление

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

Рекомендации по обновлению:

Выводы и профилактика

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

Чтобы избежать подобных проблем в будущем, рекомендуется:

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

Следуя этим шагам, мы сможем успешно завершить реорганизацию базы данных и продолжить работу в обновленной системе.

← На главную