Как настроить выборочную выгрузку документов в обмене УТ 11 — БП 3.0 с помощью дополнительного реквизита

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

В современных конфигурациях 1С, таких как Управление торговлей 11 и Бухгалтерия предприятия 3.0, обмен данными чаще всего строится на базе технологии Enterprise Data (универсальный формат). Одной из частых задач является ограничение выгрузки конкретных документов на основе признака, установленного пользователем. Например, когда в документ РеализацияТоваровУслуг добавлена «галочка» (булево поле), определяющая, должен ли этот документ попасть в бухгалтерию.

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

Способ 1. Использование расширения для общего модуля событий обмена

Это один из наиболее быстрых и «чистых» способов внедрения логики фильтрации без изменения типовой конфигурации. Мы воспользуемся механизмом расширений для перехвата события перед записью документа в рамках синхронизации.

Разберем по шагам реализацию через перехват процедуры в общем модуле ОбменДаннымиСобытияУТ. Нам необходимо создать расширение и добавить в него процедуру-перехватчик &Вместо для метода СинхронизацияДанныхЧерезУниверсальныйФорматПередЗаписьюДокумента.

Проанализируем пример кода для реализации этого метода:


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

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

Способ 2. Модификация Менеджера обмена через универсальный формат

Более глубокий и надежный способ — вмешательство в работу самого менеджера обмена. В универсальном обмене (КД3) за логику выгрузки отвечают ПКО (Правила Конвертации Объектов) и ПОД (Правила Обработки Данных), описанные программно в модуле менеджера.

Выясним причину, почему это решение считается профессиональным: оно позволяет не просто игнорировать запись, а корректно управлять статусом выгрузки объекта в пакете данных. В общем модуле МенеджерОбменаЧерезУниверсальныйФормат (или его расширении) можно найти процедуру ПОД_Документ_РеализацияТоваровУслуг_ПриОбработке.

Рассмотрим пример кода для управления выгрузкой:


Процедура ПОД_Документ_РеализацияТоваровУслуг_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
    
    // Если наш реквизит "Выгружать" (булево) установлен в Ложь
    Если НЕ ДанныеИБ.ВыгружатьВБухгалтерию Тогда
        // Отменяем использование правила конвертации для данного объекта
        ИспользованиеПКО.Документ_РеализацияТоваровУслуг_Отправка = Ложь;
        
        // Опционально: можно отправить информацию об удалении объекта в приемнике,
        // чтобы документ пометился на удаление в БП, если его там быть не должно
    КонецЕсли;

КонецПроцедуры

Важный нюанс: при таком подходе система Enterprise Data понимает, что объект не должен выгружаться. Если документ ранее уже был в Бухгалтерии, а потом пользователь снял «галочку» в УТ, типовой механизм может отправить сообщение об удалении объекта, что обеспечит синхронность данных в обеих базах.

Способ 3. Работа с Правилами Регистрации Данных (ПРД)

Если мы не хотим, чтобы документ вообще попадал в таблицу зарегистрированных изменений (транзакция обмена), нам нужно изменить Правила Регистрации Данных. В УТ 11 это обычно внешние XML-файлы, которые загружаются в базу через обработку «Регистрация правил регистрации».

Разберем алгоритм действий:

  1. Выгружаем текущие правила регистрации из узла обмена в XML-файл.
  2. Открываем их в конфигурации «Конвертация данных 2.0» (даже если сам обмен идет по КД3, регистрация часто настраивается инструментами КД2).
  3. В правиле для документа РеализацияТоваровУслуг находим обработчик ПередОбработкой.
  4. Прописываем условие: Если НЕ Объект.ВыгружатьВБухгалтерию Тогда Отказ = Истина; КонецЕсли;.
  5. Загружаем правила обратно в 1С:УТ.

Преимущество этого метода в экономии ресурсов: база не будет пытаться выгрузить то, что заведомо не должно быть передано. Минус — при обновлении конфигурации УТ типовые правила регистрации могут обновиться, и ваши правки затрутся, если не использовать механизм расширений для ПРД.

Проблема «забытой галочки» и очистка очереди регистрации

Проанализируем ситуацию: бухгалтер забыл поставить галочку, записал документ, и он тут же зарегистрировался к обмену. Затем он спохватился, поставил галочку и снова записал. В таблице регистрации ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат объект уже «висит».

Чтобы избежать ошибок, рекомендуем добавить в модуль документа или в расширение ПередЗаписью следующий код, который будет принудительно снимать документ с обмена, если галочка не стоит:


Процедура патч_ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения)
    
    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    Если НЕ Источник.ВыгружатьВБухгалтерию Тогда
        // Находим узел обмена с Бухгалтерией
        УзелБП = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоНаименованию("Бухгалтерия предприятия, редакция 3.0");
        Если НЕ УзелБП.Пустая() Тогда
            // Удаляем регистрацию конкретного документа
            ПланыОбмена.УдалитьРегистрациюИзменений(УзелБП, Источник.Ссылка);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

Рекомендации по контролю на стороне Бухгалтерии (БП)

Иногда возникают ситуации, когда документ всё же просочился в Бухгалтерию (например, при начальной выгрузке). Рассмотрим, как подстраховаться на стороне приемника. В БП также можно использовать расширение менеджера обмена универсального формата.

В процедуре ПОД_Документ_РеализацияТоваровУслуг_ПриЗагрузке можно проверить входящие данные. Если в пакете данных нет признака разрешения или объект не соответствует критериям, можно установить Отказ = Истина. Однако помните: если документ уже проведен в БП и по нему сдана отчетность, программная отмена проведения через обмен может привести к конфликтам с главным бухгалтером. Всегда отдавайте приоритет фильтрации на стороне источника (УТ).

Таким образом, для реализации задачи наиболее сбалансированным решением будет сочетание Способа 2 (Менеджер обмена) и механизма очистки регистрации изменений ПередЗаписью. Это гарантирует, что в БП попадут только одобренные документы, а очередь обмена не будет переполнена лишними объектами.

← На главную