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