Как исключить документ из обмена данными в 1С:УТ 11, если он уже зарегистрирован?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При настройке обменов данными в 1С часто возникает задача выборочной выгрузки документов. Например, если в документ добавлена пользовательская галочка НеВыгружатьДокумент, нам нужно настроить систему так, чтобы при ее установке объект не попадал в состав отправляемых данных. Рассмотрим, как это реализовать и что делать, если документ уже был зарегистрирован к обмену.

Настройка логики через правила регистрации

Первый и наиболее предпочтительный способ — это использование правил регистрации объектов (КД). Когда мы говорим о стандартном обмене, мы можем управлять регистрацией через XML-файлы правил или конструктор КД. Суть метода заключается в том, что при записи документа система проверяет значение нашего реквизита.

Если реквизит НеВыгружатьДокумент принимает значение Истина, регистрация для узла обмена не должна происходить. В правилах регистрации это настраивается таким образом, чтобы проверка булевого значения препятствовала добавлению записи в таблицу изменений плана обмена.

Важно: реквизит НеВыгружатьДокумент должен быть объектным (добавлен в конфигурацию или расширение), а не являться просто элементом формы, иначе он не будет доступен при фоновых процессах обмена.

Программное снятие регистрации

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

Рассмотрим, как это реализовать с помощью кода. Мы можем создать подписку на событие или использовать обработчик в расширении для метода ПриЗаписи. Метод УдалитьРегистрациюИзменений объекта ПланОбменаМенеджер позволяет очистить очередь для конкретного узла.


// Пример программного удаления регистрации для всех узлов обмена
Процедура УдалитьИзРегистрацииОбмена(Источник)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ ПланОбмена.ВашПланОбмена КАК Узлы";
    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
        ПланыОбмена.ВашПланОбмена.УдалитьРегистрациюИзменений(Результат.Ссылка, Источник.Ссылка);
    КонецЦикла;
КонецПроцедуры

Применяя этот код, мы гарантируем, что даже если документ был ошибочно зарегистрирован ранее, при записи с установленной «галочкой» он будет удален из всех планов обмена.

Как обеспечить удаление документа в приемнике

Если ваша задача — не просто перестать передавать изменения, а сделать так, чтобы документ «исчез» или пометился на удаление в другой базе, простого снятия регистрации будет недостаточно. В системе-приемнике документ останется в том виде, в котором он был передан в последний раз.

Чтобы добиться корректного удаления в базе-приемнике, мы рекомендуем следующие шаги:

  1. В правилах выгрузки (в обработчике ПередВыгрузкой) настройте логику передачи признака ПометкаУдаления.
  2. Принудительно устанавливайте свойство ПометкаУдаления = Истина в момент формирования пакета данных для обмена, если наш реквизит НеВыгружатьДокумент равен Истина.
  3. В базе-приемнике стандартный механизм обмена воспримет эту информацию и поставит документ на удаление автоматически.

Использование стандартных инструментов

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

Этот способ является наиболее безопасным, так как не затрагивает логику работы всей системы, однако он требует ручного вмешательства администратора каждый раз при возникновении ошибки.

Заключение и рекомендации

Чтобы работа с обменами была стабильной, мы рекомендуем внедрить проверку на этапе проведения документа. Если пользователь ставит «галочку» невыгрузки, добавьте в модуль документа предупреждение или принудительную процедуру очистки регистрации.

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

← На главную