Дубликаты справочников в 1С 8.3: найти, объединить и больше не плодить

· 10 мин

Содержание

Дубли в 1С 8.3 удаляют штатной обработкой «Поиск и удаление дублей»: в Бухгалтерии 3.0 она открывается через Администрирование → Обслуживание → Корректировка данных. Обработка находит похожие элементы, переносит на оригинал все ссылки из документов и регистров и только после этого убирает копии. Простое удаление дубликата без замены ссылок оставляет в базе «битые» документы.

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

Откуда берутся дубли и как их найти

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

Типичные причины задвоения:

  • ✍️ Ручной ввод. Менеджер не нашёл «ООО Ромашка» и завёл «Ромашка ООО» или «Ромашка, ООО».
  • 🔄 Обмены. Объект из другой базы не сопоставился с существующим (по уникальному идентификатору или по ИНН) и создался заново.
  • 📥 Загрузка из файлов. Номенклатура из Excel загружена дважды или с другим артикулом.
  • 🧾 Банковская выписка и ЭДО. При загрузке документов программа создаёт нового контрагента, если не нашла существующего по реквизитам.
  • 🗂 Перенос из старой базы. Данные загружали несколько раз, не очистив результат первой попытки.

Быстрая проверка списком

Для небольшого справочника хватит сортировки. Откройте список контрагентов, включите колонку ИНН (через Ещё → Изменить форму), отсортируйте по ней. Одинаковые ИНН с одинаковым КПП встанут рядом.

Для номенклатуры сортируйте по артикулу или по наименованию. Похожие названия с разным написанием так не поймать — для них нужна обработка с нечётким поиском.

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

Если есть доступ к консоли запросов (внешняя обработка с диска ИТС или встроенная в отладочные инструменты), дубли контрагентов по ИНН и КПП находит такой запрос:

ВЫБРАТЬ
    Контрагенты.ИНН КАК ИНН,
    Контрагенты.КПП КАК КПП,
    КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК Копий
ИЗ
    Справочник.Контрагенты КАК Контрагенты
ГДЕ
    НЕ Контрагенты.ПометкаУдаления
    И Контрагенты.ИНН <> ""
СГРУППИРОВАТЬ ПО
    Контрагенты.ИНН,
    Контрагенты.КПП
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(Контрагенты.Ссылка) > 1
УПОРЯДОЧИТЬ ПО
    Копий УБЫВ

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

Один ИНН с разными КПП — это обычно обособленные подразделения, а не дубли. Не объединяйте такие элементы, пока не убедитесь, что КПП внесён по ошибке.

Способы удаления дублей: что выбрать

СпособКогда подходитРиски
Обработка «Поиск и удаление дублей»Типовая конфигурация на БСП, десятки и сотни дублейМинимальные: ссылки переносятся автоматически
Объединение из списка справочника2–5 известных копийЛегко выбрать не тот элемент как основной
Универсальная обработка поиска и замены значенийСтарые и нетиповые конфигурации без БСПНужно вручную сопоставлять пары «дубль → оригинал»
Исправление правил обмена и повторная синхронизацияДубли массово приходят из другой базыБез настройки сопоставления копии вернутся
Прямой SQLТолько диагностикаУдаление ломает ссылочную целостность базы

Выбор почти всегда сводится к первым двум строкам. Остальное — для особых случаев.

Как удалить дубли в 1С штатной обработкой

Обработка входит в Библиотеку стандартных подсистем, поэтому есть во всех современных типовых конфигурациях.

КонфигурацияГде открыть
Бухгалтерия предприятия 3.0Администрирование → Обслуживание → Корректировка данных → Поиск и удаление дублей
Управление торговлей 11НСИ и администрирование → Администрирование → Обслуживание → Корректировка данных
Любая конфигурация на БСПВсе функции → Обработки → Поиск и удаление дублей

Если пункта «Все функции» нет в меню, включите его в главном меню: Сервис → Параметры → флажок «Отображать команду Все функции».

Сначала резервная копия

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

В файловой базе подойдёт выгрузка в .dt через Конфигуратор или копия папки с файлом 1Cv8.1CD при закрытой программе. В клиент-серверной — бэкап средствами СУБД.

Пошаговая чистка

  1. Выберите область поиска. В поле объекта укажите справочник: «Контрагенты», «Номенклатура», «Физические лица» и т.д.
  2. Задайте отбор. Например, исключите помеченные на удаление или ограничьтесь группой справочника. Отбор сокращает время поиска на больших базах.
  3. Настройте правила сравнения. Для каждого реквизита выберите условие: «Совпадает» — точное равенство, «Похоже» — нечёткое сравнение строк. Для контрагентов надёжная связка — ИНН «Совпадает» плюс наименование «Похоже».
  4. Запустите поиск. Обработка покажет группы найденных дублей. Рядом с каждым элементом видно число мест, где он используется.
  5. Проверьте каждую группу. Снимите флажки с элементов, которые на самом деле не дубли: разные филиалы, тёзки среди физических лиц.
  6. Назначьте оригинал. В каждой группе отметьте основной элемент — тот, что останется. Обычно это элемент с максимальным числом ссылок и полностью заполненной карточкой.
  7. Выполните удаление. Обработка заменит ссылки на дубли ссылками на оригинал во всех документах, справочниках и регистрах, затем удалит или пометит на удаление лишние элементы.
  8. Посмотрите отчёт. Если какие-то ссылки заменить не удалось, обработка выведет список с причиной.

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

Почему важен выбор оригинала

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

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

Если дублей два-три

Для пары копий запускать обработку не обязательно. В типовых конфигурациях на БСП в списке справочника выделите оба элемента и найдите в меню Ещё команду объединения (обычно «Объединить…»). Откроется окно, где нужно выбрать основной элемент. Механизм тот же: ссылки переносятся, лишний элемент удаляется.

Перед удалением дублей
Выполнено: 0 / 5

Пометка на удаление и окончательная очистка

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

Что учесть:

  • 🔗 Удаление помеченных проверяет ссылки. Если на дубль ещё ссылается хоть один документ, элемент не удалится, и программа покажет, где он используется.
  • ⏳ На большой базе проверка идёт долго. Запускайте вечером или в выходные.
  • 👥 Монопольный режим для удаления помеченных в современных версиях не обязателен, но работа пользователей замедлит процесс и может вызвать блокировки.

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

МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаДубль);
ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);
Для Каждого Строка Из ТаблицаСсылок Цикл
    Сообщить(Строка(Строка.Метаданные) + ": " + Строка(Строка.Данные));
КонецЦикла;

Код выполняется на сервере, например во внешней обработке.

Дубли из обменов и загрузки через XML

Если копии появляются после каждой синхронизации, обработка лечит симптом. Причина — в сопоставлении объектов.

Как работает сопоставление при обмене:

  • 🆔 Сначала объект ищется по уникальному идентификатору (GUID). Если базы изначально созданы независимо, GUID у одного и того же контрагента разные.
  • 🔍 Затем — по полям поиска из правил обмена: ИНН, КПП, наименование, артикул. Если правило ищет только по наименованию, «ООО Ромашка» и «Ромашка ООО» не совпадут.
  • ➕ Не нашёл — создаёт новый элемент. Так и рождаются дубли.

Что делать

  1. Почистите дубли в принимающей базе штатной обработкой.
  2. В настройках синхронизации типовых обменов есть этап сопоставления данных. Запустите его и вручную свяжите несопоставленные элементы обеих баз.
  3. Для обменов по своим правилам (Конвертация данных ) добавьте в правило поиска ИНН и КПП для контрагентов, артикул или штрихкод для номенклатуры.
  4. Только после этого запускайте синхронизацию заново.

Перенос через универсальную выгрузку XML

Обработка «Выгрузка и загрузка данных XML» переносит объекты с сохранением GUID. Если загрузить в базу элемент, который там уже есть с тем же идентификатором, он перезапишется, а не задвоится.

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

SQL-запросы: для поиска можно, для удаления нельзя

В клиент-серверной базе соблазн велик: открыть SQL Server Management Studio и удалить лишние строки. Делать этого не стоит.

Почему прямое удаление ломает базу:

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

Безопасный сценарий с SQL — только чтение. Имена таблиц в СУБД обезличены (_Reference45, _Fld1234). Сопоставить их с объектами конфигурации позволяет метод ПолучитьСтруктуруХраненияБазыДанных(). После этого можно выполнить диагностический запрос:

SELECT _Fld1234 AS INN, COUNT(*) AS Cnt
FROM _Reference45
WHERE _Marked = 0x00
GROUP BY _Fld1234
HAVING COUNT(*) > 1
ORDER BY Cnt DESC;

Номера таблицы и поля здесь условные: подставьте свои из структуры хранения. Найденный список дальше обрабатывается штатными средствами 1С.

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

Удаление дубликатов в старых и нетиповых конфигурациях

Обработка «Поиск и удаление дублей» есть только в конфигурациях на БСП. В других случаях путь другой.

1С 8.2 и обычные формы. Для старых конфигураций на обычных формах (например, Бухгалтерия 2.0, УПП) используют универсальную обработку поиска и замены значений с диска ИТС. Принцип ручной: указываете пары «что заменить → на что», обработка находит все ссылки и меняет их. Потом дубли помечаются на удаление и удаляются обычным способом.

Самописные конфигурации. Если разработчик не встроил БСП, есть два варианта:

  • 🧩 Подключить универсальную обработку поиска и замены как внешнюю.
  • 🛠 Написать свою: найти дубли запросом, для каждой пары вызвать НайтиПоСсылкам(), перезаписать найденные объекты с заменой ссылки. Регистры, подчинённые регистратору, перезаписываются через документ, а не напрямую.

Программно в конфигурациях на БСП. Для разработчика в общем модуле ОбщегоНазначения есть процедура замены ссылок, которой пользуется и сама обработка. Её удобно вызывать в обработчиках обмена или в регламентных заданиях, чтобы не писать замену заново.

1С 7.7. Механизмы платформы другие, и советы для 8.3 к ней не подходят. В этой версии дубли обычно чистят обработками сторонних разработчиков под конкретную конфигурацию.

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

Разовая чистка без профилактики даёт эффект на месяц-два.

Настройки программы

  • ✅ Проверка ИНН при вводе. В типовых конфигурациях при записи контрагента с уже существующим ИНН программа предупреждает о возможном дубле. Не отключайте эти сообщения и научите сотрудников читать их.
  • ✅ Заполнение по ИНН. Сервис заполнения реквизитов по ИНН (через интернет -поддержку) даёт единообразное наименование из ЕГРЮЛ. Вариантов «Ромашка ООО» становится меньше.
  • ✅ Права на создание элементов. Ограничьте ввод новой номенклатуры и контрагентов кругом ответственных. Остальные выбирают из существующего.

Для разработчика

  • 🔒 В Конфигураторе у справочника есть свойство контроля уникальности кода. Включите его, если код — бизнес-ключ (например, табельный номер или артикул в нетиповой базе).
  • 🔒 В модуле объекта в обработчике ПередЗаписью можно проверять наличие элемента с тем же ИНН и отказывать в записи.
  • 🔒 В правилах обмена ищите объекты по ИНН, КПП, артикулу, а не только по наименованию.

Регулярная проверка

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

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

Можно ли восстановить удалённый дубль?
Только из резервной копии. Если элемент лишь помечен на удаление, достаточно снять пометку, но ссылки в документах уже указывают на оригинал и обратно сами не вернутся.
Почему обработка не находит дубли, которые я вижу глазами?
Скорее всего, стоит условие «Совпадает» для наименования. Замените его на «Похоже» или ищите по ИНН. Также проверьте отбор: помеченные на удаление элементы могут быть исключены.
Нужно ли перепроводить документы после замены ссылок?
Как правило, нет: обработка сама перезаписывает документы и движения. Но если дубли были в номенклатуре со складским учётом, после чистки полезно восстановить последовательность и закрыть месяц заново за затронутые периоды.
Что делать с дублями физических лиц в зарплатной базе?
Объединять так же, но внимательнее: у сотрудника-дубля могут быть свои кадровые документы и начисления. Объединение перенесёт их на одно физлицо; заранее сверьте СНИЛС и даты приёма.
Влияет ли удаление дублей на отчётность, уже сданную в налоговую?
На сданные файлы — нет. Но при повторном формировании регламентного отчёта за прошлый период цифры по контрагенту объединятся. Для деклараций это обычно не меняет итогов, а в книгах покупок и продаж изменятся только наименования.