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