При обновлении конфигураций 1С, особенно тех, что построены на базе Библиотеки стандартных подсистем (БСП), разработчики часто сталкиваются с блокирующим предупреждением: «Имеются данные с одинаковыми измерениями» в регистре сведений ДвоичныеДанныеФайлов. Эта ситуация делает кнопку «Принять» недоступной и полностью останавливает процесс реструктуризации базы данных. В данной статье мы подробно разберем, почему возникает эта ошибка, как найти «невидимые» дубли и какими способами можно восстановить работоспособность системы.
Прежде всего, нам необходимо понять механику работы регистра ДвоичныеДанныеФайлов. Этот регистр предназначен для хранения собственно содержимого файлов (двоичных данных), а его единственным измерением является Файл. Тип этого измерения обычно определяется через ОпределяемыйТип.ПрисоединенныйФайл, который может включать в себя десятки различных справочников присоединенных файлов (например, «ДоговорыКонтрагентовПрисоединенныеФайлы», «НоменклатураПрисоединенныеФайлы» и так далее).
Ошибка возникает в тот момент, когда платформа пытается перестроить индексы таблицы в СУБД. Если в таблице оказываются две записи, у которых значение измерения Файл совпадает, создание уникального индекса становится невозможным. Рассмотрим основные ситуации, приводящие к этому:
<Объект не найден>.... С точки зрения СУБД это разные GUID, но при изменении состава типов в ОпределяемомТипе платформа может попытаться привести их к единому пустому значению, что и порождает конфликт.Прежде чем что-то удалять, нам нужно выяснить, какие именно записи система считает дублями. Обычная форма списка регистра может не показывать проблему из-за фильтров или особенностей отображения пустых ссылок. Воспользуемся консолью запросов и выполним группировку по ключевому измерению.
Рассмотрим следующий текст запроса:
ВЫБРАТЬ
ДвоичныеДанныеФайлов.Файл КАК ПроблемнаяСсылка,
КОЛИЧЕСТВО(*) КАК КоличествоДублей
ИЗ
РегистрСведений.ДвоичныеДанныеФайлов КАК ДвоичныеДанныеФайлов
СГРУППИРОВАТЬ ПО
ДвоичныеДанныеФайлов.Файл
ИМЕЮЩИЕ
КОЛИЧЕСТВО(*) > 1
Если запрос вернул строки, значит, в базе физически присутствуют записи с одинаковым значением Файл. Если же запрос не находит дублей, но ошибка при обновлении сохраняется, значит, проблема в «пустых» значениях или ссылках на несуществующие типы данных, которые 1С пытается унифицировать при реструктуризации.
Это стандартный и наиболее безопасный метод. Посмотрим, как правильно настроить параметры ТиИ для решения нашей задачи. Нам необходимо избавиться от ссылок на несуществующие объекты, которые часто маскируются под дубли.
Важно: Выбор варианта «Создавать объекты» может только усугубить ситуацию, так как система создаст реальные элементы справочников для «битых» ссылок, и дубли станут «законными».
Если дублей много или они не поддаются стандартному исправлению, рассмотрим радикальный, но эффективный метод — временную очистку регистра перед обновлением. Поскольку ДвоичныеДанныеФайлов — это кэш или хранилище самих данных, важно иметь резервную копию.
Рассмотрим алгоритм действий:
НаборЗаписей = РегистрыСведений.ДвоичныеДанныеФайлов.СоздатьНаборЗаписей();
// Если мы хотим удалить всё, просто записываем пустой набор
НаборЗаписей.Записать();
После этого запустим обновление конфигурации. Поскольку данных в регистре нет, уникальный индекс создастся без ошибок. После успешного обновления данные можно перенести из копии базы с помощью обработки «Выгрузка и загрузка данных XML» (при условии, что структура метаданных не изменилась критически) или восстановить файлы из томов, если используется хранение в томах на диске.
Выясним еще одну важную деталь: часто ошибка возникает из-за того, что обновление производится «прыжком» через несколько релизов. В каждом промежуточном релизе могут быть свои обработчики обновления данных, которые должны привести регистр в порядок.
Рекомендации по обновлению:
ОпределяемыйТип.ПрисоединенныйФайл, добавляя в него свои справочники, что конфликтует с изменениями в основной конфигурации.Файл как Владелец. В формах списка БСП это часто сбивает с толку: вы ищете проблему в поле «Файл», а она отображается в колонке «Владелец». Это одно и то же измерение.Подводя итог, можно сказать, что ситуация с дублями в ДвоичныеДанныеФайлов чаще всего связана с «мусором» в базе данных, накопленным за годы эксплуатации или возникшим после некорректного отделения периферийного узла.
Чтобы избежать подобных проблем в будущем, рекомендуется:
ДвоичныеДанныеФайлов приведет к потере содержимого присоединенных файлов, если они не хранятся во внешних томах.Следуя этим шагам, мы сможем успешно завершить реорганизацию базы данных и продолжить работу в обновленной системе.