CDH - охотник за дублями, созданный одним запросом в Codex
Задачи пользователя - Поиск данных
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
cdh-duplicate-hunter-companion.zip (48 КБ): DuplicateManager.epf, fixtures/*.json, fixtures/*.bsl, verify_companion.py, README.mdpython verify_companion.py (контроль SHA-256 EPF, валидация JSON-фикстур, UTF-8 BOM и синтаксический баланс BSL)1С-разработчикам и администраторам: как устроен автономный инструмент CDH (Codex Duplicate Hunter) для поиска дублей и безопасной замены ссылок в базах 1С без БСП.
- CDH полностью автономен и не требует БСП: рабочая логика поиска и замен упакована в обработку DuplicateManager.epf.
- Нечёткое сравнение защищено от транзитивных ошибок: цепочки A-B и B-C не объединяются автоматически; каждый дубль требует прямого соответствия выбранному эталону.
- Снимки движений защищают проведённые документы: если обработчик записи изменяет регистры, транзакция группы немедленно откатывается.
- Диагностический экспорт доступен без исполнения: отчёт в JSON и MXL формируется сразу после подготовки плана, даже если группы заблокированы.
Замена дублей в 1С должна быть детерминированной: раздельные шаги согласования, монопольный захват и снимки движений гарантируют сохранность учёта.
Для кого: разработчики, архитекторы и администраторы 1С, решающие задачи регулярной очистки справочников без риска повредить регистры учёта.
Ключевые технологии: 1С:Предприятие 8.3.27, Управление торговлей 11.5, автономная внешняя обработка EPF, нечёткий поиск строк, снимки движений документов, монопольный режим, экспорт JSON/MXL.
- История создания Codex Duplicate Hunter
- Алгоритм точного и нечёткого поиска
- Формирование подтверждённой группы
- Защита движений проведённых документов
- Монопольный захват и транзакция на группу
- Блокировки и диагностический экспорт
- Что показала проверка на УТ 11.5
- Файл к статье
- Ограничения первого выпуска
- Источники и предшественники
- Итог проведённых испытаний
- Вопросы для обсуждения
📂 История создания CDH (Codex Duplicate Hunter)
Инструмент CDH (Codex Duplicate Hunter) вырос из практического эксперимента: автономную внешнюю обработку и первичное описание спроектировал ИИ-агент Codex по техническим требованиям коллеги NickScherbakov, задавшего архитектурные границы решения.
Разработка шла по схеме встречного контроля: код генерировал один агент, а независимое ревью выполняли контролирующие агенты на стенде с платформой 1С:Предприятие 8.3.27.2130. Первый зелёный прогон оказался обманчив: углублённый аудит выявил три критические уязвимости — искажение проводок штатными событиями при записи документов, взрывной рост пар в интерфейсе и блокировку диагностического отчёта. Код основательно переработали, закрыв тестами пограничные сценарии.
Я исследовала полученные исходники, проверила обработку на копиях синтетической базы и УТ 11.5.22.77, подтвердив контрольные суммы замерами на стенде. Ниже — архитектура инструмента и барьеры защиты учёта при слиянии ссылок.
🔬 Алгоритм точного и нечёткого поиска
Поиск дублей в CDH работает с любым справочником конфигурации. В форме выбираются целевой справочник и реквизиты для сопоставления. Поддерживаются два алгоритма:
- Точный режим: строго различает типы данных — число и строка с одинаковым текстом считаются разными значениями. По умолчанию сопоставление идёт с учётом регистра и пробелов; нормализация включается отдельным флажком.
- Нечёткий режим: строковое сравнение выбранного поля (чаще всего наименования). Алгоритм переводит текст в нижний регистр и удаляет лишние пробелы. Диапазон порога подобия составляет от 50 до 100 процентов (базовый порог — 90 процентов); также доступны удаление пунктуации и сортировка слов.

Чтобы исключить зависание интерфейса, выборка ограничена 2 000 элементов. Поиск отсекает группы, предопределённые элементы, помеченные на удаление позиции и пустые ключи.

Найденные кандидаты выводятся страницами по 100 пар. Сервер кэширует результаты блоками по 1 000 строк. Для каждой пары доступна карточка с формулой расчёта оценки и сопоставлением строк.

📋 Формирование подтверждённой группы
Фундаментальный принцип CDH — запрет неявной транзитивности. Если элемент A похож на B, а B — на C, обработка не связывает C с A. Автоматическое объединение цепочек недопустимо: накопление погрешности приводит к ошибочному слиянию разнородных позиций номенклатуры.
Оператор вручную назначает единственный Эталон. Каждый дубль в группе требует прямого подтверждённого совпадения с выбранным эталоном. В составе группы отображаются артикулы и UUID каждого элемента.

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

🛡 Защита движений проведённых документов
Типовые решения слияния дублей ставят инженера перед рискованным выбором: полное перепроведение искажает себестоимость и закрытые периоды прошлых лет, а режим ОбменДанными.Загрузка = Истина выключает прикладной контроль целостности.
В CDH эту дилемму снимает механизм Movement Guard. Документы записываются штатным методом Записать(РежимЗаписиДокумента.Запись) без перепроведения, с активными проверками конфигурации (ОбменДанными.Загрузка = Ложь). Защита проводок работает по четырём шагам:

- До записи формируется типизированный снимок всех объявленных наборов движений документа (включая пустые наборы, номера строк, регистраторы, измерения и значения ресурсов).
- Документ записывается с новыми ссылками в реквизитах и строках табличных частей.
- Движения считываются повторно и поклеточно сопоставляются со снимком.
- Если хотя бы одна строка регистра изменилась, удалилась или добавилась, транзакция группы немедленно откатывается с восстановлением исходных ссылок.
🔒 Монопольный захват и транзакция на группу
Для гарантированной консистентности замена ссылок требует монопольного захвата базы. CDH действует корректно: обработка не сбрасывает активные сеансы пользователей. Если база занята, платформа отклоняет захват, а запись блокируется до освобождения соединений.

Каждая группа выполняется в обособленной транзакции. Объект-владелец перезаписывается один раз для всех входящих замен. Старые элементы-дубли физически не стираются и не помечаются на удаление автоматически — администратор утилизирует их после сверки отчёта.

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

Диагностический аудит доступен сразу, ещё до монопольного захвата базы. После построения плана обработка формирует JSON и макет MXL. Инженер видит объём замен и блокировок заранее.

🧪 Что показала проверка на УТ 11.5
Работоспособность в типовом контуре я проверила на копии демо-базы конфигурации «Управление торговлей» редакции 11.5.22.77:
- Поисковый прогон: проанализированы 192 позиции Номенклатуры и 177 Контрагентов. Механизм отработал штатно, без ошибок контекста и сбоев памяти.
- Замена ссылок: выполнена точечная подстановка ссылок у двух контрагентов в реквизите СтранаРегистрации. Записаны два объекта и два значения; проверочный запрос подтвердил корректную привязку эталона.
- Сверка отчётов: файлы JSON и MXL выгружены и сопоставлены внешним скриптом; все 38 ячеек макета (19 строк на 2 колонки) совпали с эталоном.
- Статус аварийного отката: на синтетическом стенде откат при изменении проводок подтверждён во всех 22 тестах. На живой УТ искусственный сбой инъектора не возник, поэтому статус отката зафиксирован как «экспериментально не подтверждён на УТ». Тестовое расширение удалено.
📦 Файл к статье
К публикации прикреплён проверенный архив cdh-duplicate-hunter-companion.zip. Это готовый инженерный комплект для безопасного развёртывания и тестирования на вашем стенде:
DuplicateManager.epf: автономная обработка 1С (41 357 байт, SHA-256:07c155b5e96a87aad130c19d7b53f1efdb69695bfe73d865a1e1f430682fe60d). Открывается через «Файл -> Открыть» в любой базе 1С 8.3 без БСП и внешних компонент.fixtures/demo_data_synthetic.json: эталонный набор для точного и нечёткого сценариев поиска.fixtures/demo_orders_fixture.json: контрольный план замен в документах и табличных частях.fixtures/blocked_register_sample.json: готовый пример блокирующего вхождения в регистр сведений.fixtures/СоздатьТестовыеДанныеДублей.bsl: исполняемый BSL-модуль для мгновенного создания трёх тестовых дублей на учебной копии.verify_companion.py: скрипт автоматической проверки целостности комплекта (5 из 5 тестов PASS).README.md: лаконичное руководство по запуску за 3 шага.
Если вам нужен готовый, проверенный на стенде инструмент с защитой закрытых периодов и полным аудитом замен, скачайте архив прямо сейчас в блоке файлов публикации.
🧭 Ограничения первого выпуска
- Замена ссылок в записях регистров сведений, регистрах накопления или константах в релизе 1.0.0 блокирует группу.
- Ссылки внутри хранилищ значений вызывают блокировку.
- Активное разделение данных и неполнота прав (RLS) запрещают выполнение.
- Конфигурации ERP и «Бухгалтерия предприятия» в контур испытаний не входили.
- Поведение при сетевом обрыве во время фиксации транзакции на физическом кластере не исследовалось.
📚 Источники и предшественники
- Типовая подсистема БСП «Поиск и удаление дублей» (документация ИТС): требует интеграции в конфигурацию и перезаписывает объекты через общий механизм слияния.
- Публикация-ориентир на Инфостарте со 122 скачиваниями: показала практическую потребность в альтернативном автономном решении.
- Инженерный проект CDH: все модули внешней обработки, сценарии проверок, тестовые фикстуры и скрипты верификации включены в состав файла-компаньона к статье.
🏁 Итог проведённых испытаний
CDH подтвердил состоятельность автономного подхода: внешняя обработка способна выполнять детерминированный поиск дублей и замену ссылок в 1С без внедрения БСП. Механизм Movement Guard и монопольный режим исключают искажение закрытых периодов, а предварительный экспорт JSON и MXL позволяет согласовать регламентные работы заранее.
💬 Вопросы для обсуждения
Как вы очищаете рабочие базы 1С от дублей? Доверяете ли штатному механизму БСП или разработали собственные инструменты? Случалось ли вам сталкиваться с искажением проводок закрытых периодов при замене ссылок? Поделитесь вашим опытом в комментариях.
- Перегруженные общие модули 1С: что показывает Analyzer 1C и как разнести модуль на части
- SonarQube для 1С: плагин BSL Community, первый анализ и отключение замечаний. Проверено на стенде
- Поменяли строчку — упал маркетплейс: транзитивный анализ вызовов в 1С
- ibcmd: выгрузка и загрузка конфигурации 1С из командной строки
- Привязка LLM к структуре базы 1С: архитектура (выгрузка метаданных, HTTP-сервис и граница вызовов)
Вступайте в нашу телеграмм-группу Инфостарт