Переход между мажорными версиями конфигураций, такими как обновление 1С:Комплексная автоматизация 2 с ветки 2.2 на 2.4, часто сопровождается значительными изменениями в архитектуре данных. Одной из наиболее трудоемких проблем является реструктуризация подсистемы хранения файлов, которая реализована на базе Библиотеки стандартных подсистем (БСП). Ошибка «Записи регистра сведений стали неуникальными: ДвоичныеДанныеФайлов» возникает на этапе обновления конфигурации базы данных (так называемый «синий бочонок») и полностью блокирует процесс обновления.
В этой статье мы подробно разберем, почему возникает эта ошибка, даже если в исходной конфигурации такого регистра не существовало, и проанализируем пошаговые стратегии ее решения.
Прежде всего, разберем технический парадокс: почему платформа сообщает о неуникальности записей в регистре ДвоичныеДанныеФайлов, если в версии 2.2.4 его нет? Дело в том, что в процессе обновления конфигуратор выполняет реструктуризацию. Он создает новые таблицы и пытается перенести в них данные из старых объектов метаданных, которые в новой версии помечены на удаление или переименованы.
Рассмотрим основные факторы, провоцирующие конфликт уникальности:
Неопределено. Если таких записей было несколько (например, для разных удаленных типов), после замены типа на пустой их ключи становятся идентичными, что и вызывает ошибку уникальности.[ИмяОбъекта]ПрисоединенныеФайлы, которые имеют одинаковые наименования или ссылаются на одни и те же двоичные данные. В новой версии БСП механизм сопоставления этих данных стал более строгим.Как показывает практика, не все релизы одинаково стабильны при конвертации данных. Проанализируем опыт пользователей: попытка прямого обновления с 2.2.4.227 на 2.4.3.170 часто завершается неудачей. Однако использование промежуточного или чуть более раннего релиза ветки 2.4 может решить проблему.
Рекомендуемый алгоритм действий:
cfu, а через сравнение/объединение с полным cf файлом нужного релиза, предварительно сняв базу с поддержки (или разрешив изменения).Если смена релиза не помогла, необходимо «вылечить» данные в исходной базе 2.2.4. Разберем шаги по очистке базы от мусора, который мешает реструктуризации.
1. Тестирование и исправление (ТиИ):
Запустите конфигуратор и выполните «Тестирование и исправление» со следующими настройками:
2. Поиск записей с неопределенными владельцами:
Проанализируем состояние справочников присоединенных файлов. Нам нужно найти записи, у которых поле Владелец не заполнено или содержит объект, не входящий в состав типов. Рассмотрим пример кода для поиска проблемных мест (этот код нужно запустить в обработке в исходной базе):
// Пример поиска дублей в справочниках присоединенных файлов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПрисоединенныеФайлы.Ссылка КАК Файл,
| ПрисоединенныеФайлы.ВладелецФайла КАК Владелец
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК ПрисоединенныеФайлы
|ГДЕ
| ПрисоединенныеФайлы.ВладелецФайла = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)";
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Здесь логика удаления или исправления
Сообщить("Найден файл без владельца: " + Выборка.Файл);
КонецЦикла;
КонецЕсли;
Для глубокого анализа проблемы рекомендуем воспользоваться Инструментами разработчика (ИР). В этом наборе инструментов есть специализированная проверка «Проверка перед усечением типов». Она позволяет до начала реструктуризации увидеть, какие именно записи превратятся в одинаковые из-за потери типа в измерении регистра.
Если вы обнаружили такие записи в регистре, который в версии 2.2 еще называется иначе (например, ПрисоединенныеФайлы или ХранимыеФайлыВерсий), их необходимо удалить или объединить вручную до запуска обновления конфигурации базы данных.
Если конфигуратор не дает внятной информации о том, какая именно запись стала неуникальной, проанализируем ситуацию на уровне СУБД. При возникновении ошибки в SQL-логах фиксируется неудачная попытка вставки или создания индекса.
INSERT INTO или CREATE UNIQUE INDEX.#tt...). По этим именам и значениям полей можно определить конкретные Internal ID объектов, вызывающих конфликт.Обратите внимание на объем оперативной памяти на сервере 1С. Обновление «Комплексной автоматизации» — крайне ресурсоемкий процесс. Зафиксированы случаи, когда на серверах с объемом памяти менее 16-32 Гб процесс реструктуризации завершался некорректно, выдавая ошибки уникальности просто из-за прерывания транзакций кэширования. Убедитесь, что во время обновления на сервере достаточно свободного места и ресурсов.
Подведем итог: Ошибка неуникальности в ДвоичныеДанныеФайлов — это следствие «грязных» данных в старой структуре или ошибок в логике переноса конкретного релиза. Тщательная очистка справочников файлов, использование промежуточного релиза 2.4.3.160 и обязательное «Тестирование и исправление» являются ключом к успешному переходу на новую версию конфигурации.