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

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

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

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

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

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

Ниже разобраны рабочие методы: от встроенной обработки «Поиск и удаление дублей» до запросов с группировкой и консоли кода. Каждый способ имеет свои ограничения, поэтому важно понимать, когда какой инструмент применять и как проверить результат до удаления данных.

Что считать дублем в регистре сведений

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

Проблема возникает на уровне бизнес-логики. Например, в регистре «Цены номенклатуры» появляются две записи на один товар с разными датами, хотя по правилам учёта цена должна быть одна. Или в регистр штрихкодов загрузили один и тот же штрихкод для двух разных товаров. Формально записи уникальны, фактически — это дубли, которые ломают отчёты и подбор данных.

Перед поиском определите критерий дубля: совпадение всех полей, совпадение только измерений, совпадение одного ключевого поля (штрихкод, ИНН, адрес). От этого зависит и текст запроса, и стратегия очистки.

Поиск дублей запросом с группировкой

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

Типовой шаблон запроса для независимого регистра сведений выглядит так:

ВЫБРАТЬ

Штрихкоды.Штрихкод КАК Штрихкод,

КОЛИЧЕСТВО(*) КАК КоличествоЗаписей

ИЗ

РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды

СГРУППИРОВАТЬ ПО

Штрихкоды.Штрихкод

ИМЕЮЩИЕ

КОЛИЧЕСТВО(*) > 1

Для периодического регистра добавьте в группировку период (или его начало дня/месяца через функцию НАЧАЛОПЕРИОДА), если дублем считается запись внутри одного интервала. Если нужно увидеть сами записи-дубли, а не только ключи, используйте этот запрос как подзапрос и соедините его с таблицей регистра по полю группировки.

Проверьте результат вручную: выгрузите найденные ключи в табличный документ и убедитесь, что это действительно дубли, а не корректные записи. Например, в регистре курсов валют несколько записей на одну валюту в разные даты — это норма, а не дубль.

bsl
ВЫБРАТЬ Измерение1, КОЛИЧЕСТВО(<em>) КАК Количество ИЗ РегистрСведений.МойРегистр СГРУППИРОВАТЬ ПО Измерение1 ИМЕЮЩИЕ КОЛИЧЕСТВО(</em>) > 1

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

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

Важно понимать ограничение: обработка ищет дубли в справочниках, документах и других ссылочных объектах, а не в записях регистров сведений напрямую. Однако она полезна, когда дубли в регистре — следствие дублей в справочнике. Например, два элемента «Номенклатура» с одинаковым наименованием порождают двойные записи во всех связанных регистрах.

Порядок работы: выберите объект поиска, задайте правила сравнения (по наименованию, по реквизитам), запустите поиск, просмотрите найденные группы и выполните объединение. После объединения ссылок платформа автоматически заменит ссылки в регистрах сведений, и дубли записей исчезнут вместе с дублями элементов.

Порядок действий с типовой обработкой
  1. 1
    Откройте раздел Администрирование → Обслуживание → Корректировка данных → Поиск и удаление дублей
  2. 2
    Выберите вид объектов для сравнения и задайте правила поиска
  3. 3
    Запустите поиск и просмотрите найденные группы дублей
  4. 4
    Отметьте эталонные элементы и выполните объединение
  5. 5
    Проверьте связанные регистры сведений запросом после объединения

Поиск дублей через консоль кода

Когда запрос неудобен — например, нужно сравнивать значения с приведением регистра, обрезкой пробелов или сложной логикой — используют консоль кода (внешнюю обработку для управляемого приложения). Там можно перебрать записи регистра и собрать статистику в соответствие или таблицу значений.

Типовой приём: создать таблицу значений с колонкой ключа, выбрать записи регистра через РегистрыСведений.ИмяРегистра.Выбрать(), для каждой записи сформировать нормализованный ключ (например, СокрЛП + ВРег) и накапливать счётчик. Всё, где счётчик больше единицы — кандидаты в дубли.

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

Как удалить найденные дубли безопасно

Удаление записей регистра сведений — необратимая операция. Перед любыми действиями сделайте выгрузку базы (dt) или хотя бы выгрузите найденные дубли в табличный документ и сохраните файл. Это единственный способ восстановить данные при ошибке.

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

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

Дубли в подчинённых регистрах и обменах

Если регистр сведений подчинён регистратору (режим записи «Подчинение регистратору»), удалять записи вручную нельзя — они принадлежат документам. Дубли в таком регистре означают, что документ-регистратор проведён некорректно или задвоен сам. Ищите дубли документов, а не записей регистра.

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

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

Типичные ошибки
01
Удаление записей без резервной копии — при ошибке данные не восстановить
02
Поиск дублей без нормализации строк — часть дублей остаётся незамеченной из-за пробелов и регистра
03
Ручное удаление записей подчинённого регистра — нарушается связь с документами-регистраторами
04
Очистка дублей без поиска источника — после следующего обмена дубли появляются снова
05
Проверка только по одному полю — удаляются записи, которые на самом деле различны по другим измерениям

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

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

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

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

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

Повторный запрос с группировкой
Норма

Пустой результат

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

Записи с количеством больше 1 остались

Данные отчётов, использующих регистр
Норма

Суммы и строки корректны, без задвоений

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

В отчёте по-прежнему двойные строки

Синхронизация после очистки
Норма

Дубли не возвращаются после обмена

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

После обмена дубли появляются снова

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

Может ли платформа 1С сама создать дубли в регистре сведений?

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

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

Используйте запрос с группировкой — он выполняется на сервере СУБД и справляется с большими объёмами. Избегайте построчного перебора в цикле. Если запрос работает медленно, проверьте индексы по измерениям и ограничьте выборку периодом.

Чем отличается удаление через набор записей от удаления через менеджер записи?

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

Почему после удаления дублей они появились снова?

Наиболее вероятные причины: работает план обмена, который привозит записи из другой базы; регулярная загрузка из файла без контроля дублей; внешняя обработка или интеграция, записывающая данные напрямую. Найдите и устраните источник, затем повторите очистку.

Можно ли найти дубли без прав администратора?

Сам поиск запросом возможен при наличии права чтения регистра и доступа к консоли запросов. Для удаления нужны права на изменение регистра. В типовых конфигурациях консоль запросов и обработки обычно доступны только администраторам и программистам.

Итог

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

Дубли в регистре сведений ищут запросом с группировкой и условием КОЛИЧЕСТВО(*) > 1 или типовой обработкой, если причина — дубли справочников. Перед удалением делайте резервную копию, нормализуйте значения при сравнении, не трогайте записи подчинённых регистров вручную и после очистки проверяйте, не вернулись ли дубли после обмена.