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