Как ограничить выгрузку документов поступления по конкретному складу при синхронизации БП и УАТ

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

При настройке обмена данными между конфигурациями 1С:Бухгалтерия предприятия (БП) и 1С:Управление автотранспортом (УАТ) (в том числе если используется синхронный обмен данными) часто возникает избыточность данных. Например, бухгалтерии необходимо учитывать весь спектр ТМЦ (от запчастей до канцтоваров), в то время как в УАТ требуется только номенклатура, связанная с обслуживанием автопарка и ГСМ. Одной из эффективных стратегий ограничения потока данных является фильтрация документов Поступление (акты, накладные, УПД) по конкретному складу. Разберем подробно, как реализовать этот механизм при использовании синхронизации через универсальный формат (Enterprise Data).

Анализ механизма регистрации объектов

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

  1. Регистрация изменений: когда документ проводится или записывается, срабатывает механизм, который помечает этот объект как «готовый к выгрузке» для конкретного узла плана обмена.
  2. Выгрузка данных: обработка обмена считывает зарегистрированные объекты, преобразует их в XML по правилам МенеджерОбменаЧерезУниверсальныйФормат и отправляет в базу-приемник.

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

Способ 1. Использование расширения конфигурации (Рекомендуемый)

Этот метод является наиболее безопасным и «чистым», так как не требует изменения основной конфигурации 1С:БП и не создает проблем при последующих обновлениях. Нам необходимо перехватить событие регистрации документа для обмена.

Рассмотрим ситуацию, когда нам нужно выгружать поступления только по складу Основной склад. Проанализируем программный код, который нужно добавить в расширение:


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

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

Способ 2. Редактирование правил регистрации объектов (ПРО)

Если вы предпочитаете использовать штатные инструменты настройки Enterprise Data, можно изменить Правила Регистрации Объектов (ПРО). Эти правила обычно хранятся внутри конфигурации в виде макета ПравилаРегистрации.

Выясним, как правильно внести изменения:

  1. Выгрузите правила регистрации из конфигурации 1С:БП с помощью обработки «Регистрация изменений для обмена».
  2. Загрузите их в конфигурацию «Конвертация данных 3.0».
  3. Найдите правило для документа ПоступлениеТоваровУслуг.
  4. В обработчике ПередОбработкой пропишите условие фильтрации.

Пример логики для ПРО:


// Условие в правилах регистрации
Если Объект.Склад.Наименование = "Склад ГСМ" Тогда
    Отказ = Ложь; // Выгружаем
Иначе
    Отказ = Истина; // Игнорируем
КонецЕсли;

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

Анализ рисков частичной синхронизации

Рассмотрим ситуацию с точки зрения методологии учета, упомянутую в сообщении №2. Ограничение выгрузки только поступлений может привести к логическим ошибкам в УАТ:

Совет: Вместе с ограничением поступлений обязательно проанализируйте настройки выгрузки документов ПеремещениеТоваров и ТребованиеНакладная. Логика фильтрации по складу должна быть идентичной во всех складских документах.

Выводы и рекомендации

Для реализации задачи мы выяснили следующее:

  1. Наиболее стабильный вариант для БП 3.0 — программный перехват регистрации через расширение.
  2. Фильтрация должна происходить на стороне источника (БП), чтобы не засорять канал связи и базу-приемник лишними данными.
  3. При использовании универсального формата Enterprise Data за логику выгрузки отвечает МенеджерОбменаЧерезУниверсальныйФормат, но фильтрацию объектов лучше делать через ПланыОбмена.
  4. Всегда проверяйте сопутствующие документы (перемещения, списания), иначе вы получите некорректные остатки в УАТ.

Проанализировав все способы, мы рекомендуем использовать именно расширение с подпиской на событие, так как это позволяет гибко управлять списком разрешенных складов (например, вынести их в константу или дополнительный параметр) без необходимости пересобирать правила конвертации в специализированном ПО.

← На главную