К статье
Практический материал

Администрирование · 11 мин

Как удалить дубли из регистра сведений в 1С

Как найти и удалить дубли записей в регистре сведений 1С: поиск задвоений, обработка удаления, устранение причин через уникальный индекс и проверка результата.

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

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

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

Как понять, что в регистре есть дубли

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

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

Ошибка при включении уникального индексаВ регистре есть записи с совпадающими ключами

Сгруппируйте записи по измерениям в консоли запросов и посчитайте количество

Удвоенные данные в отчётахВозможны прикладные дубли с разными ресурсами

Проверьте, нет ли записей с одинаковыми измерениями, но разными значениями ресурсов

Ошибки при обмене даннымиДубли пришли из другого узла обмена

Сравните записи по ссылкам на объекты и датам загрузки

Обязательная подготовка перед удалением

Удаление записей регистра сведений — необратимая операция, если нет резервной копии. Перед любыми действиями создайте архивную копию базы: в файловом варианте достаточно скопировать файл 1Cv8.1CD при остановленной работе пользователей, в клиент-серверном — сделайте выгрузку через конфигуратор (Администрирование → Выгрузить информационную базу) или средствами СУБД.

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

Способ 1. Удаление вручную через форму списка

Ручной способ подходит, когда дублей немного — единицы или десятки записей. Откройте регистр: в режиме тонкого клиента перейдите в «Все функции» (кнопка с меню в левом верхнем углу, доступна при включённом режиме технического специалиста), найдите раздел «Регистры сведений» и выберите нужный регистр.

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

После удаления обновите форму списка и повторите отбор, чтобы убедиться, что лишние записи исчезли, а нужная осталась. Если запись не удаляется с сообщением об ошибке, проверьте права пользователя — требуется право «Удаление» и «Интерактивное удаление» на этот регистр.

Способ 2. Типовая обработка «Поиск и удаление дублей»

В конфигурациях на базе Библиотеки стандартных подсистем (УТ, ERP, Бухгалтерия, ЗУП) есть встроенная обработка «Поиск и удаление дублей». Она находится в разделе «Администрирование» → «Обслуживание» → «Корректировка данных» (в некоторых конфигурациях — сразу «Поиск и удаление дублей»).

Обработка работает со справочниками и с регистрами сведений, подчинёнными владельцу-справочнику (например, «Контактная информация», «Штрихкоды номенклатуры»). Логика такая: сначала находятся дубли элементов справочника, затем при замене дублей на «правильный» элемент связанные записи регистра автоматически переписываются на него, а лишние удаляются. Это самый безопасный способ, потому что обработка корректно переносит все ссылки.

Порядок действий в обработке «Поиск и удаление дублей»
  1. 1
    Откройте Администрирование → Обслуживание → Поиск и удаление дублей
  2. 2
    Выберите объект поиска — нужный справочник, к которому подчинён регистр
  3. 3
    Настройте правила поиска: сравнение по наименованию, реквизитам, связанным регистрам
  4. 4
    Запустите поиск и просмотрите найденные группы дублей
  5. 5
    Отметьте в каждой группе оригинал и выполните «Удалить дубли»
  6. 6
    Проверьте регистр сведений: записи должны ссылаться на оставленный элемент

Ограничение способа: обработка не работает с независимыми регистрами сведений, у которых нет владельца-справочника, и не ищет дубли внутри самого регистра по произвольному набору измерений. Для таких случаев нужен третий способ.

Способ 3. Произвольная обработка с запросом

Для независимых регистров и нестандартных критериев дублирования используют обработку с запросом. Суть: запрос группирует записи по измерениям (и периоду для периодических регистров), находит группы с количеством больше одного, затем лишние записи удаляются через набор записей или менеджер записи.

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Рег.Измерение1 КАК Измерение1,
| Рег.Измерение2 КАК Измерение2,
| КОЛИЧЕСТВО(<em>) КАК КоличествоЗаписей
|ИЗ
| РегистрСведений.МойРегистр КАК Рег
|СГРУППИРОВАТЬ ПО
| Рег.Измерение1,
| Рег.Измерение2
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(</em>) > 1";
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
 // Для каждой группы дублей: выбрать записи,
 // определить «правильную», остальные удалить
КонецЦикла;

Удаление конкретной записи выполняется через менеджер записи: прочитайте запись по полному ключу (все измерения плюс период), затем вызовите метод удаления. Альтернатива — набор записей с отбором по измерениям: прочитайте набор, удалите из него лишние строки и запишите с замещением. Второй вариант быстрее при большом числе записей в группе.

Перед массовым удалением запустите обработку в тестовом режиме: пусть она только выводит список записей-кандидатов на удаление без фактического изменения данных. Сверьте список глазами или передайте ответственному за данные — это страхует от ошибок в критерии дубля.

Сравнение способов удаления

Вручную через форму списка

Подходит при малом числе дублей и простом критерии. Не масштабируется, легко ошибиться при сотнях записей

Типовая обработка «Поиск и удаление дублей»

Безопасна, переносит ссылки, но работает только с регистрами, подчинёнными справочникам

Произвольная обработка с запросом

Универсальна и быстра на больших объёмах, но требует навыков разработки и тестирования на копии

Как предотвратить повторное появление дублей

Удаление лишних записей не решает проблему, если причина их появления не устранена. Чаще всего дубли возникают из-за обменов данными (один объект загружается под разными ссылками), доработок, где записи создаются без проверки существования, и отключённого контроля уникальности в свойствах регистра.

Проверьте в конфигураторе свойства регистра: для независимого регистра сведений платформа автоматически поддерживает уникальность по комбинации измерений и периода, но если кто-то менял структуру регистра или загружал данные в обход логики (например, через обмен с отключённым контролем), нарушения возможны. После чистки выполните тестирование и исправление базы с проверкой логической целостности.

Если дубли приходят из обмена РИБ или через планы обмена, настройте правила конвертации так, чтобы поиск объекта выполнялся по уникальным полям, а не создавался новый элемент. В собственных доработках перед добавлением записи всегда проверяйте её существование запросом по ключу или используйте набор записей с отбором.

Типичные ошибки
01
Удаление записей без резервной копии — при ошибке в критерии дубля данные теряются безвозвратно
02
Прямое удаление записей регистра, подчинённого регистратору, — появляются «битые» ссылки и расхождения с документами
03
Удаление всех записей группы вместо оставления одной «правильной» — теряются нужные данные
04
Чистка без устранения причины — дубли появляются снова при следующем обмене или проведении документов
05
Игнорирование измерения «Период» в периодическом регистре — удаляются записи разных дат, которые дублями не являются

Проверка результата после очистки

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

Дополнительно выполните тестирование и исправление информационной базы в конфигураторе с включёнными проверками ссылочной и логической целостности. Это выявит записи, ссылающиеся на удалённые объекты, если чистка затронула связанные данные.

Контрольные точки

Как проверить результат

Запрос с группировкой по измерениям и условием КОЛИЧЕСТВО(*) > 1
Норма

Запрос возвращает пустой результат

Тревожный признак

Остались группы с несколькими записями — чистка не завершена

Отчёты, ранее показывавшие удвоение
Норма

Суммы и количества соответствуют ожиданиям

Тревожный признак

Данные всё ещё задвоены или, наоборот, пропали нужные записи

Тестирование и исправление базы
Норма

Проверки завершаются без ошибок ссылочной целостности

Тревожный признак

Есть сообщения о «битых» ссылках — нужно восстановить связи

Частые вопросы

Можно ли удалить дубли без программирования?

Да, если регистр подчинён справочнику — используйте типовую обработку «Поиск и удаление дублей» из раздела «Администрирование». Для небольшого числа записей в любом регистре достаточно ручного удаления через форму списка в режиме «Все функции».

Почему платформа не даёт включить уникальный индекс регистра?

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

Что делать, если дубли появляются после каждого обмена данными?

Чистить регистр после каждого обмена бессмысленно — нужно исправить правила обмена. Проверьте, по каким полям выполняется поиск объекта при загрузке: если поиск не находит существующий элемент, создаётся новый, и связанные записи регистра дублируются.

Как удалить дубли в регистре, подчинённом регистратору?

Напрямую такие записи удалять нельзя. Найдите документы-регистраторы, которые сформировали лишние движения, и отмените их проведение или перепроведите. Если регистратор удалён, а записи остались — используйте тестирование и исправление с опцией удаления записей без регистратора.

Какую запись из группы дублей оставить?

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

Опасно ли удалять записи регистра сведений?

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

Итог

Что важно запомнить

Сначала найдите дубли запросом с группировкой по измерениям, затем удаляйте подходящим способом: вручную, типовой обработкой или произвольной обработкой. Перед удалением — резервная копия, после — проверка пустого результата диагностического запроса и тестирование базы. Без устранения причины (обмены, доработки) дубли вернутся.