Как реализовать автоматический поиск и удаление дублей с помощью регламентного задания и внешней обработки?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Методика 1: Адаптация типовой обработки БСП во внешнюю

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

  1. Сохранение обработки: Найдем в конфигураторе обработку ПоискИУдалениеДублей и сохраним её как внешнюю (.epf).
  2. Добавление серверной команды: Для того чтобы система «Дополнительные отчеты и обработки» смогла запустить код в фоновом задании, нам необходимо изменить тип команды. Вместо «Открытия формы» мы должны использовать «Вызов серверного метода».
  3. Реализация экспортной процедуры: Как было отмечено в обсуждении, простая смена типа команды приведет к ошибке Метод объекта не обнаружен (ВыполнитьКоманду). Выясним причину: при вызове серверного метода система ищет в модуле объекта обработки строго определенную процедуру. Нам необходимо добавить в модуль объекта следующий код:

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    // Здесь вызывается логика поиска и удаления
    Если ИдентификаторКоманды = "АвтоматическийПоискИУдаление" Тогда
        ПровестиПоискИУдалениеДублей();
    КонецЕсли;
КонецПроцедуры

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

Методика 2: Программное использование API БСП

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

Шаг 1: Поиск дубликатов. Используем программный интерфейс модуля ПоискИУдалениеДублей. Нам необходимо программно подготовить структуру правил (по каким реквизитам сравнивать, использовать ли нечеткий поиск) и передать её в функцию НайтиДубликаты().

Шаг 2: Выбор эталона (Мастер-записи). В автоматическом режиме это самый ответственный момент. Проанализируем ситуацию: если мы нашли два одинаковых элемента, какой из них оставить? Обычно выбирают тот, который:

Шаг 3: Замена ссылок. После определения «правильного» элемента и списка его дублей, воспользуемся методом ОбщегоНазначения.ЗаменитьСсылки. Этот метод выполняет «схлопывание»: он находит все упоминания дублей во всех таблицах базы данных (документы, регистры, задачи) и заменяет их на выбранный эталон.


// Пример упрощенной логики замены
ПараметрыЗамены = Новый Структура;
ПараметрыЗамены.Вставить("ПараметрыАнализа", Неопределено);
ПараметрыЗамены.Вставить("ВключитьБизнесЛогику", Истина);

// Вызов программного интерфейса БСП
ОбщегоНазначения.ЗаменитьСсылки(ТаблицаЗамен, ПараметрыЗамены);

Методика 3: Использование «Инструментов разработчика» (ИР)

Разберем вариант, упомянутый пользователями, — инструменты от автора tormozit. Это мощный комплекс, который особенно полезен для управляемых форм. Почему это может быть эффективнее самописного кода?

Проанализируем возможности ИР: в составе инструментов есть визуальный конструктор поиска дублей. Вы можете настроить сложнейшие правила (с учетом транслитерации, опечаток, перестановки слов), а затем нажать кнопку «Получить код». Система сгенерирует готовый фрагмент на языке 1С, который останется просто скопировать в процедуру ВыполнитьКоманду вашей внешней обработки. Это избавляет от необходимости вручную изучать структуру параметров модулей БСП.

Особенности работы в файловых базах

Выясним причину сомнений по поводу файлового режима работы. В клиент-серверном варианте регламентное задание запускается самим сервером 1С. В файловом же варианте для работы планировщика требуется:

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

Риски и рекомендации по безопасности

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

  1. Порционность: Не пытайтесь обработать 10 000 дублей за один раз. Настройте регламентное задание так, чтобы оно обрабатывало, например, по 50-100 пар дублей за один запуск.
  2. Логирование: Обязательно записывайте результаты работы в ЖурналРегистрации. Вы должны четко видеть, какой элемент был выбран эталоном и какие ссылки были удалены.
  3. Режим «Только поиск»: На первом этапе разработки настройте задание так, чтобы оно не удаляло данные, а только формировало отчет (например, отправляло письмо администратору) со списком найденных дублей. Только убедившись в корректности алгоритма, включайте режим удаления.

Таким образом, создание универсального механизма поиска дублей на управляемых формах вполне реализуемо через внешнюю обработку и использование API БСП. Это позволяет поддерживать чистоту данных в автоматическом режиме, не снимая конфигурацию с поддержки и не тратя время на рутинные операции.

← На главную