Как исключить определенный вид документа из обмена между УТ 11 и БП 3 без снятия конфигурации с поддержки?

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

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

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

Понимание механизмов обмена данными

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

  1. Регистрация изменений: При создании или изменении документа система сверяет его с Правилами регистрации данных (ПРД). Если документ соответствует правилам, он регистрируется на узле плана обмена (встает в очередь на выгрузку).
  2. Выгрузка и конвертация: При запуске обмена менеджер обмена берет зарегистрированные объекты, обрабатывает их согласно Правилам обработки данных (ПОД) и преобразует в формат XML (EnterpriseData) с помощью Правил конвертации объектов (ПКО).

Исходя из этого, у нас есть два пути решения проблемы: либо запретить регистрацию документа на первом этапе, либо отменить его обработку и выгрузку на втором.

Способ №1. Настройка правил регистрации данных (ПРД)

Это самый простой, чистый и предпочтительный способ. Если документ вообще не регистрируется на узле обмена, система не будет тратить ресурсы на его обработку и попытку отправки. Этот метод идеально подходит для базовых версий, так как не требует изменения программного кода конфигурации.

Рассмотрим пошагово, как реализовать этот подход:

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

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


// В обработчике правила регистрации «Перед обработкой»
Отказ = Истина;

После внесения этого изменения сохраним XML-файл и загрузим его обратно в настройках синхронизации данных через команду «Загрузить правила регистрации». Теперь новые документы этого вида больше не будут попадать в очередь обмена.

Способ №2. Использование внешнего менеджера обмена

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

Поскольку наша конфигурация находится на поддержке (или является базовой), мы не можем напрямую править общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Но разработчики 1С предусмотрели штатный механизм обхода — подключение внешнего менеджера обмена в виде внешней обработки (файла .epf).

Разберем этот алгоритм по шагам:

  1. Откроем конфигуратор нашей базы данных.
  2. Найдем общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Скопируем все его содержимое.
  3. Создадим новую внешнюю обработку и назовем ее, например, ВнешнийМенеджерОбменаУТБП.
  4. В модуле объекта созданной обработки вставим весь скопированный код из общего модуля.
  5. Теперь мы можем свободно редактировать код обработки, не меняя основную конфигурацию.
  6. Сохраним обработку в файл .epf.
  7. В режиме «1С:Предприятие» зайдем в настройки синхронизации, перейдем в «Параметры подключения» и найдем пункт «Использовать внешний менеджер обмена». Загрузим туда наш файл обработки.

Важное предупреждение: При обновлении конфигурации «1С:Управление торговлей» типовой менеджер обмена в конфигурации может измениться (например, обновится версия формата EnterpriseData). В этом случае вам потребуется заново выгрузить новый менеджер обмена во внешнюю обработку и перенести туда ваши доработки.

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

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

Нам нужны правила обработки данных (ПОД), которые отвечают за отправку. Искать нужную процедуру следует по имени вашего документа. Шаблон имени процедуры выглядит следующим образом: ПОД_Документ_ИмяВашегоДокумента_Отправка_ПриОбработке.

Рассмотрим пример для документа ПеремещениеТоваров. Нам нужно полностью исключить его выгрузку из УТ в БП:


Процедура ПОД_Документ_ПеремещениеТоваров_Отправка_ПриОбработке(ДанныеXDTO, ИспользованиеПКО, КомпонентыОбмена)
    
    // Для исключения документа из обмена сбрасываем использование всех связанных ПКО
    УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);
    
КонецПроцедуры

Посмотрим на частую ошибку разработчиков. Некоторые пытаются написать просто Возврат; в начале процедуры или установить конкретное ПКО в значение Истина, предполагая, что остальные отключатся сами. Это неверно. В правилах обработки данных по умолчанию все ПКО инициализируются со значением Истина (то есть они разрешены к использованию). Чтобы заблокировать выгрузку объекта, необходимо явно вызвать процедуру УстановитьИспользованиеПКО с параметром Ложь, как показано в примере выше.

Важнейший этап: Очистка уже зарегистрированных данных

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

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

Чтобы решить эту проблему, выполним следующие действия:

  1. В режиме «1С:Предприятие» откроем форму «Регистрация изменений для обмена» (ее можно найти через функции для технического специалиста или в панели администрирования синхронизации).
  2. Найдем в дереве объектов нужный нам вид документа.
  3. Нажмем правой кнопкой мыши по узлу документа и выберем команду «Отменить регистрацию» (или удалить регистрацию для всех объектов данного типа).

После очистки очереди регистрации новые документы не будут регистрироваться благодаря измененным правилам регистрации (ПРД), а старые уже удалены из очереди выгрузки. Теперь синхронизация будет проходить корректно, и лишние документы не попадут в базу «1С:Бухгалтерия предприятия».

Резюме и рекомендации

Для базовых версий конфигураций 1С самым простым и стабильным решением является использование измененных правил регистрации данных (ПРД) с явным указанием Отказ = Истина; в обработчиках. Это позволяет избежать рутинной работы по обновлению внешнего менеджера обмена при каждом релизе программы. Если же требуется сложная программная фильтрация, используйте механизм внешнего менеджера обмена (EPF) и функцию УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь).

← На главную