Дубликаты справочников в 1С 8.3: найти, объединить и больше не плодить
Содержание
Дубли в 1С 8.3 удаляют штатной обработкой «Поиск и удаление дублей»: в Бухгалтерии 3.0 она открывается через Администрирование → Обслуживание → Корректировка данных. Обработка находит похожие элементы, переносит на оригинал все ссылки из документов и регистров и только после этого убирает копии. Простое удаление дубликата без замены ссылок оставляет в базе «битые» документы.
Если копий две-три, быстрее объединить их прямо из списка справочника. Если дубли массово приходят из обмена, чистка без исправления правил обмена бесполезна: через неделю они вернутся. Прямые SQL-запросы годятся только для поиска, не для удаления.
Откуда берутся дубли и как их найти
Прежде чем удалять, полезно понять источник. От него зависит, хватит ли разовой чистки.
Типичные причины задвоения:
- ✍️ Ручной ввод. Менеджер не нашёл «ООО Ромашка» и завёл «Ромашка ООО» или «Ромашка, ООО».
- 🔄 Обмены. Объект из другой базы не сопоставился с существующим (по уникальному идентификатору или по ИНН) и создался заново.
- 📥 Загрузка из файлов. Номенклатура из Excel загружена дважды или с другим артикулом.
- 🧾 Банковская выписка и ЭДО. При загрузке документов программа создаёт нового контрагента, если не нашла существующего по реквизитам.
- 🗂 Перенос из старой базы. Данные загружали несколько раз, не очистив результат первой попытки.
Быстрая проверка списком
Для небольшого справочника хватит сортировки. Откройте список контрагентов, включите колонку ИНН (через Ещё → Изменить форму), отсортируйте по ней. Одинаковые ИНН с одинаковым КПП встанут рядом.
Для номенклатуры сортируйте по артикулу или по наименованию. Похожие названия с разным написанием так не поймать — для них нужна обработка с нечётким поиском.
Поиск дублей запросом
Если есть доступ к консоли запросов (внешняя обработка с диска ИТС или встроенная в отладочные инструменты), дубли контрагентов по ИНН и КПП находит такой запрос:
ВЫБРАТЬ
Контрагенты.ИНН КАК ИНН,
Контрагенты.КПП КАК КПП,
КОЛИЧЕСТВО(Контрагенты.Ссылка) КАК Копий
ИЗ
Справочник.Контрагенты КАК Контрагенты
ГДЕ
НЕ Контрагенты.ПометкаУдаления
И Контрагенты.ИНН <> ""
СГРУППИРОВАТЬ ПО
Контрагенты.ИНН,
Контрагенты.КПП
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Контрагенты.Ссылка) > 1
УПОРЯДОЧИТЬ ПО
Копий УБЫВ
Запрос только читает данные и ничего не меняет. Его можно запускать в рабочей базе в любое время.
Один ИНН с разными КПП — это обычно обособленные подразделения, а не дубли. Не объединяйте такие элементы, пока не убедитесь, что КПП внесён по ошибке.
Способы удаления дублей: что выбрать
| Способ | Когда подходит | Риски |
|---|---|---|
| Обработка «Поиск и удаление дублей» | Типовая конфигурация на БСП, десятки и сотни дублей | Минимальные: ссылки переносятся автоматически |
| Объединение из списка справочника | 2–5 известных копий | Легко выбрать не тот элемент как основной |
| Универсальная обработка поиска и замены значений | Старые и нетиповые конфигурации без БСП | Нужно вручную сопоставлять пары «дубль → оригинал» |
| Исправление правил обмена и повторная синхронизация | Дубли массово приходят из другой базы | Без настройки сопоставления копии вернутся |
| Прямой SQL | Только диагностика | Удаление ломает ссылочную целостность базы |
Выбор почти всегда сводится к первым двум строкам. Остальное — для особых случаев.
Как удалить дубли в 1С штатной обработкой
Обработка входит в Библиотеку стандартных подсистем, поэтому есть во всех современных типовых конфигурациях.
| Конфигурация | Где открыть |
|---|---|
| Бухгалтерия предприятия 3.0 | Администрирование → Обслуживание → Корректировка данных → Поиск и удаление дублей |
| Управление торговлей 11 | НСИ и администрирование → Администрирование → Обслуживание → Корректировка данных |
| Любая конфигурация на БСП | Все функции → Обработки → Поиск и удаление дублей |
Если пункта «Все функции» нет в меню, включите его в главном меню: Сервис → Параметры → флажок «Отображать команду Все функции».
Сначала резервная копия
Перед массовым удалением дублей сделайте резервную копию базы . Обработка меняет ссылки в тысячах документов, в том числе в закрытых периодах. Откатить это без копии нельзя.
В файловой базе подойдёт выгрузка в .dt через Конфигуратор или копия папки с файлом 1Cv8.1CD при закрытой программе. В клиент-серверной — бэкап средствами СУБД.
Пошаговая чистка
- Выберите область поиска. В поле объекта укажите справочник: «Контрагенты», «Номенклатура», «Физические лица» и т.д.
- Задайте отбор. Например, исключите помеченные на удаление или ограничьтесь группой справочника. Отбор сокращает время поиска на больших базах.
- Настройте правила сравнения. Для каждого реквизита выберите условие: «Совпадает» — точное равенство, «Похоже» — нечёткое сравнение строк. Для контрагентов надёжная связка — ИНН «Совпадает» плюс наименование «Похоже».
- Запустите поиск. Обработка покажет группы найденных дублей. Рядом с каждым элементом видно число мест, где он используется.
- Проверьте каждую группу. Снимите флажки с элементов, которые на самом деле не дубли: разные филиалы, тёзки среди физических лиц.
- Назначьте оригинал. В каждой группе отметьте основной элемент — тот, что останется. Обычно это элемент с максимальным числом ссылок и полностью заполненной карточкой.
- Выполните удаление. Обработка заменит ссылки на дубли ссылками на оригинал во всех документах, справочниках и регистрах, затем удалит или пометит на удаление лишние элементы.
- Посмотрите отчёт. Если какие-то ссылки заменить не удалось, обработка выведет список с причиной.
Замена ссылок перезаписывает документы. Если в базе установлена дата запрета изменения, документы закрытого периода не перезапишутся, и дубли из них не уйдут. Временно сдвиньте дату запрета или согласуйте чистку с главным бухгалтером.
Почему важен выбор оригинала
Реквизиты дубля в оригинал не переносятся. Если у копии был заполнен банковский счёт или контактное лицо, а у оригинала нет, эти данные пропадут вместе с дублем.
Поэтому перед удалением откройте карточки в группе и допишите в основной элемент всё полезное. Подчинённые справочники (договоры, банковские счета) переходят к оригиналу вместе с заменой ссылок, но наименования договоров могут задвоиться — проверьте их отдельно.
Если дублей два-три
Для пары копий запускать обработку не обязательно. В типовых конфигурациях на БСП в списке справочника выделите оба элемента и найдите в меню Ещё команду объединения (обычно «Объединить…»). Откроется окно, где нужно выбрать основной элемент. Механизм тот же: ссылки переносятся, лишний элемент удаляется.
Пометка на удаление и окончательная очистка
Когда обработка или объединение только пометили дубли на удаление, они остаются в базе с красным крестиком. Окончательно их убирает Администрирование → Обслуживание → Удаление помеченных объектов.
Что учесть:
- 🔗 Удаление помеченных проверяет ссылки. Если на дубль ещё ссылается хоть один документ, элемент не удалится, и программа покажет, где он используется.
- ⏳ На большой базе проверка идёт долго. Запускайте вечером или в выходные.
- 👥 Монопольный режим для удаления помеченных в современных версиях не обязателен, но работа пользователей замедлит процесс и может вызвать блокировки.
Если элемент не удаляется из-за ссылок, вернитесь к замене: значит, какой-то документ пропущен. Платформенный метод НайтиПоСсылкам() покажет, где именно:
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(СсылкаНаДубль);
ТаблицаСсылок = НайтиПоСсылкам(МассивСсылок);
Для Каждого Строка Из ТаблицаСсылок Цикл
Сообщить(Строка(Строка.Метаданные) + ": " + Строка(Строка.Данные));
КонецЦикла;
Код выполняется на сервере, например во внешней обработке.
Дубли из обменов и загрузки через XML
Если копии появляются после каждой синхронизации, обработка лечит симптом. Причина — в сопоставлении объектов.
Как работает сопоставление при обмене:
- 🆔 Сначала объект ищется по уникальному идентификатору (GUID). Если базы изначально созданы независимо, GUID у одного и того же контрагента разные.
- 🔍 Затем — по полям поиска из правил обмена: ИНН, КПП, наименование, артикул. Если правило ищет только по наименованию, «ООО Ромашка» и «Ромашка ООО» не совпадут.
- ➕ Не нашёл — создаёт новый элемент. Так и рождаются дубли.
Что делать
- Почистите дубли в принимающей базе штатной обработкой.
- В настройках синхронизации типовых обменов есть этап сопоставления данных. Запустите его и вручную свяжите несопоставленные элементы обеих баз.
- Для обменов по своим правилам (Конвертация данных ) добавьте в правило поиска ИНН и КПП для контрагентов, артикул или штрихкод для номенклатуры.
- Только после этого запускайте синхронизацию заново.
Перенос через универсальную выгрузку 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 к ней не подходят. В этой версии дубли обычно чистят обработками сторонних разработчиков под конкретную конфигурацию.
Как не допустить повторного появления дублей
Разовая чистка без профилактики даёт эффект на месяц-два.
Настройки программы
- ✅ Проверка ИНН при вводе. В типовых конфигурациях при записи контрагента с уже существующим ИНН программа предупреждает о возможном дубле. Не отключайте эти сообщения и научите сотрудников читать их.
- ✅ Заполнение по ИНН. Сервис заполнения реквизитов по ИНН (через интернет -поддержку) даёт единообразное наименование из ЕГРЮЛ. Вариантов «Ромашка ООО» становится меньше.
- ✅ Права на создание элементов. Ограничьте ввод новой номенклатуры и контрагентов кругом ответственных. Остальные выбирают из существующего.
Для разработчика
- 🔒 В Конфигураторе у справочника есть свойство контроля уникальности кода. Включите его, если код — бизнес-ключ (например, табельный номер или артикул в нетиповой базе).
- 🔒 В модуле объекта в обработчике
ПередЗаписьюможно проверять наличие элемента с тем же ИНН и отказывать в записи. - 🔒 В правилах обмена ищите объекты по ИНН, КПП, артикулу, а не только по наименованию.
Регулярная проверка
Раз в квартал запускайте поиск дублей в режиме просмотра, без удаления. Когда находок мало, чистка занимает минуты, а не выходной.