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