Проблема дублирования данных в информационных базах 1С является одной из самых актуальных для систем любого масштаба. Особенно остро вопрос встает, когда необходимо автоматизировать процесс очистки справочников (например, Номенклатура или Контрагенты) в фоновом режиме, не прибегая к изменению типовой конфигурации и оставляя её «на замке». В этой статье мы подробно разберем, как превратить стандартные механизмы поиска дублей в универсальный инструмент, работающий по расписанию.
Рассмотрим наиболее доступный способ — использование уже имеющегося функционала Библиотеки стандартных подсистем (БСП). Основная сложность здесь заключается в том, что типовая обработка рассчитана на интерактивное взаимодействие с пользователем через формы. Наша задача — перевести её в плоскость серверного выполнения. Проанализируем шаги по реализации этого метода:
ПоискИУдалениеДублей и сохраним её как внешнюю (.epf).Метод объекта не обнаружен (ВыполнитьКоманду). Выясним причину: при вызове серверного метода система ищет в модуле объекта обработки строго определенную процедуру. Нам необходимо добавить в модуль объекта следующий код:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
// Здесь вызывается логика поиска и удаления
Если ИдентификаторКоманды = "АвтоматическийПоискИУдаление" Тогда
ПровестиПоискИУдалениеДублей();
КонецЕсли;
КонецПроцедуры
Важный нюанс: Чтобы обработка имела доступ к удалению и замене ссылок, при её регистрации в справочнике «Дополнительные отчеты и обработки» обязательно нужно снять флаг «Безопасный режим». В противном случае выполнение кода будет прервано из-за ограничений прав доступа на запись в базу данных.
Если нам требуется более тонкая настройка процесса, разберем вариант прямого обращения к программному интерфейсу БСП. Этот метод позволяет создать максимально легкую внешнюю обработку, которая будет содержать только логику вызова системных функций. Посмотрим на ключевые модули и методы, которые нам потребуются:
Шаг 1: Поиск дубликатов. Используем программный интерфейс модуля ПоискИУдалениеДублей. Нам необходимо программно подготовить структуру правил (по каким реквизитам сравнивать, использовать ли нечеткий поиск) и передать её в функцию НайтиДубликаты().
Шаг 2: Выбор эталона (Мастер-записи). В автоматическом режиме это самый ответственный момент. Проанализируем ситуацию: если мы нашли два одинаковых элемента, какой из них оставить? Обычно выбирают тот, который:
Шаг 3: Замена ссылок. После определения «правильного» элемента и списка его дублей, воспользуемся методом ОбщегоНазначения.ЗаменитьСсылки. Этот метод выполняет «схлопывание»: он находит все упоминания дублей во всех таблицах базы данных (документы, регистры, задачи) и заменяет их на выбранный эталон.
// Пример упрощенной логики замены
ПараметрыЗамены = Новый Структура;
ПараметрыЗамены.Вставить("ПараметрыАнализа", Неопределено);
ПараметрыЗамены.Вставить("ВключитьБизнесЛогику", Истина);
// Вызов программного интерфейса БСП
ОбщегоНазначения.ЗаменитьСсылки(ТаблицаЗамен, ПараметрыЗамены);
Разберем вариант, упомянутый пользователями, — инструменты от автора tormozit. Это мощный комплекс, который особенно полезен для управляемых форм. Почему это может быть эффективнее самописного кода?
Проанализируем возможности ИР: в составе инструментов есть визуальный конструктор поиска дублей. Вы можете настроить сложнейшие правила (с учетом транслитерации, опечаток, перестановки слов), а затем нажать кнопку «Получить код». Система сгенерирует готовый фрагмент на языке 1С, который останется просто скопировать в процедуру ВыполнитьКоманду вашей внешней обработки. Это избавляет от необходимости вручную изучать структуру параметров модулей БСП.
Выясним причину сомнений по поводу файлового режима работы. В клиент-серверном варианте регламентное задание запускается самим сервером 1С. В файловом же варианте для работы планировщика требуется:
Если эти условия соблюдены, внешняя обработка будет успешно отрабатывать по расписанию независимо от типа базы данных.
Рассмотрим опасности, которые таит в себе автоматизация удаления дублей. Работа с транзакциями и блокировками в фоновом режиме может привести к тому, что обычные пользователи не смогут проводить документы в момент замены ссылок. Чтобы избежать этого, рекомендуем придерживаться следующих правил:
ЖурналРегистрации. Вы должны четко видеть, какой элемент был выбран эталоном и какие ссылки были удалены.Таким образом, создание универсального механизма поиска дублей на управляемых формах вполне реализуемо через внешнюю обработку и использование API БСП. Это позволяет поддерживать чистоту данных в автоматическом режиме, не снимая конфигурацию с поддержки и не тратя время на рутинные операции.