gifts2017

Ошибка "Записи регистра сведений стали неуникальными"

Опубликовал Евгения Карук (ekaruk) в раздел Администрирование - Чистка базы

При обновлении конфигурации периодически может возникать ошибка "Записи регистра сведений стали неуникальными" или "Имеются записи с одинаковыми измерениями". Что она означает и как ее исправить.

При обновлении конфигурации периодически может возникать ошибка "Записи регистра сведений стали неуникальными" или "Имеются записи с одинаковыми измерениями"
Записи регистра сведений стали неуникальными, Имеются записи с одинаковыми измерениями
Эта ошибка означает, что при обновлении изменился состав измерений регистра сведений.
Одним из базовых принципов работы регистра сведений является требование, что каждому набору значений измерений регистра сведений соответсвует один и только один набор значений реквизитов.
Допустим, в нашей конфигурации есть регистр ответственных лиц по складам в разрезе складов и помещений.
В очередном релизе разработчик решает, что такая детализация ответственности избыточна и оставляет только возможность указания ответственного по складу.

Однако у пользователя в этом регисте указано, что для "Главного склада" за помещение "Продукты" отвечает Иванов, а за помещение "Холодильники" - Петров.
При обновлении информационной базы платформа должна оставить только одну запись с ответственным. Но она не может решить за пользователя, кого поставить ответственным за "Главный склад" вцелом (Иванова или Петрова).
Поэтому выдается сообщение об ошибке.
В зависимости от конкретной ситуации, сообщение может звучать как "Записи регистра сведений стали неуникальными" либо "Имеются записи с одинаковыми измерениями".
Смысл сообщения одинаков.
Это сообщение означает, что в новой структуре регистров образовалось несколько записей с одним набором измерений и их нужно свернуть в одну. 


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

Инструкция по свертке неуникальных записей:

1. Открыть обработку.
2. Выбрать регистр сведений, в котором появились неуникальные записи.
3. Отметить измерения которые будут удалены при обновлении.
4. Нажать "Свернуть дубли".

Обработка найдет дублирующиеся строки и свернет их в одну строку.
После этого обновление конфигурации пройдет корректно.

Также можно просто проверить наличие дублей без изменения данных

Скачать файлы

Наименование Файл Версия Размер
Дубли в регистра сведений 33
.epf 9,01Kb
22.07.16
33
.epf 1.0 9,01Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Evgeny Fotchenkov (fey) 22.07.16 08:07
Каким образом решается проблема, с которой не может справиться платформа, т.е. выбор правильной записи из нескольких при разных значениях ресурсов, или дублирующие записи удаляются полностью?

Если записи удаляются полностью, то можно добавить в алгоритм дополнительную проверку, на записи, которые можно "спасти".
2. Евгения Карук (ekaruk) 22.07.16 10:49
(1) fey, Строки сворачиваются в одну.
В ресурсы записывается МАКСИМУМ() от значений сворачиваемых строк.
Т.е. пытаемся спасти данные, которые есть.
3. Артур Аюханов (artbear) 22.07.16 16:27
В Подсистемах разработчика от tormozIt уже года три есть подобная обработка :)
4. Евгения Карук (ekaruk) 22.07.16 16:54
(3) artbear, Да, есть похожая по принципу работы.
Насколько помню, там есть проверка регистров при усечении типов. Т.е. она проверяет все регистры на возможные дубли при удалении типа данных из конфигурации.
Эта проверяет на ошибки конкретный регистр при изменении набора измерений. Ну и плюс умеет сворачивать записи, а не только удалять.
Логика использования немного другая. И эта проще.
5. Сергей Старых (tormozit) 30.07.16 15:46
По какому принципу "сворачиваются" записи? Строго говоря здесь нужно выбирать какую из N несовместимых записей оставлять. В (2) описан опасный метод, который может вместо N корректных в прошлом строк оставить одну некорректную (с противоречивыми ресурсами+реквизитами) строку склеенную из максимумов. Я в код не смотрел, поэтому сужу только по описанию.
6. Сергей Старых (tormozit) 01.08.16 09:25
Доработал аналогичный инструмент из подсистемы "Инструменты разработчика". Теперь он учитывает удаление измерений и оставляет в каждой группе любую одну строку.
artbear; ekaruk; +2 Ответить 1
7. Евгения Карук (ekaruk) 01.08.16 10:41
(5) tormozit, Да, просто оставляет максимум.
Смысл в том, что сохраняем то, что возможно. В каких-то случаях может получиться противоречивая строка.
(6) Да, посмотрела. Проверить не на чем, но судя по интерфейсу именно то, чего не хватало. Возможно, полезно было бы еще иметь возможность заполнить удаляемые измерения вручную, чтобы всю базу каждый раз не проверять, но и так достаточно.
8. Сергей Старых (tormozit) 02.08.16 11:43
Кстати в 8.3.8 формулировка проблемы в диалоге "Принятие изменений" конфигуратора изменилась на "Имеются записи с одинаковыми измерениями".
9. Евгения Карук (ekaruk) 02.08.16 12:24
(8) tormozit, Это вроде не вопрос номера платформы. У меня оба варианта ("Записи регистра сведений стали неуникальными" и "Имеются записи с одинаковыми измерениями") встречались на разных платформах. Не знаю точно, по какому принципу ошибки отображаются. Возможно, зависит от того, из-за чего получились неуникальные записи (усечение типов или удаление измерений).
10. Сергей Старых (tormozit) 02.08.16 12:31
(9) Действительно, оба варианта имеют место в актуальной платформе. Сейчас получил оба сообщения одновременно. Пока не разобрался точно в чем разница.