Синхронизация данных между конфигурациями «1С:Управление торговлей 11» (УТ) и «1С:Бухгалтерия предприятия 3.0» (БП) — это стандартный процесс, который в большинстве современных решений строится на базе универсального формата EnterpriseData. Однако в реальной практике часто возникает необходимость исключить определенный вид документов из этого процесса. Например, вы не хотите передавать внутренние перемещения, специфические списания или определенные виды реализаций в бухгалтерскую базу.
Особую сложность эта задача представляет тогда, когда конфигурация находится на поддержке, а в случае использования базовой версии конфигурации мы и вовсе лишены возможности использовать расширения или вносить изменения в основную конфигурацию. В этой статье мы подробно разберем, как решить эту задачу изящно и профессионально, сохранив конфигурацию типовой.
Прежде чем перейти к практическим решениям, давайте кратко проанализируем, как устроен обмен. Процесс синхронизации состоит из двух ключевых этапов:
Исходя из этого, у нас есть два пути решения проблемы: либо запретить регистрацию документа на первом этапе, либо отменить его обработку и выгрузку на втором.
Это самый простой, чистый и предпочтительный способ. Если документ вообще не регистрируется на узле обмена, система не будет тратить ресурсы на его обработку и попытку отправки. Этот метод идеально подходит для базовых версий, так как не требует изменения программного кода конфигурации.
Рассмотрим пошагово, как реализовать этот подход:
РеализацияТоваровУслуг или ПеремещениеТоваров).Важный нюанс: простое отключение галочки или удаление правила регистрации для этого документа в интерфейсе часто приводит к обратному эффекту. В механизмах 1С заложено правило: если для объекта нет явного правила регистрации, система может зарегистрировать его по умолчанию или проигнорировать ограничение. Поэтому правильным решением будет явное написание отказа в коде правила регистрации:
// В обработчике правила регистрации «Перед обработкой»
Отказ = Истина;
После внесения этого изменения сохраним XML-файл и загрузим его обратно в настройках синхронизации данных через команду «Загрузить правила регистрации». Теперь новые документы этого вида больше не будут попадать в очередь обмена.
Если логика исключения документа сложная (например, зависит от реквизитов табличной части, остатков или сложных внешних условий), простых правил регистрации может быть недостаточно. В таком случае логику фильтрации нужно перенести в сам менеджер обмена.
Поскольку наша конфигурация находится на поддержке (или является базовой), мы не можем напрямую править общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Но разработчики 1С предусмотрели штатный механизм обхода — подключение внешнего менеджера обмена в виде внешней обработки (файла .epf).
Разберем этот алгоритм по шагам:
МенеджерОбменаЧерезУниверсальныйФормат. Скопируем все его содержимое.ВнешнийМенеджерОбменаУТБП..epf.Важное предупреждение: При обновлении конфигурации «1С:Управление торговлей» типовой менеджер обмена в конфигурации может измениться (например, обновится версия формата EnterpriseData). В этом случае вам потребуется заново выгрузить новый менеджер обмена во внешнюю обработку и перенести туда ваши доработки.
Давайте выясним, где именно в коде менеджера обмена нужно прописать исключение документа. Для этого проанализируем структуру обработчиков событий.
Нам нужны правила обработки данных (ПОД), которые отвечают за отправку. Искать нужную процедуру следует по имени вашего документа. Шаблон имени процедуры выглядит следующим образом: ПОД_Документ_ИмяВашегоДокумента_Отправка_ПриОбработке.
Рассмотрим пример для документа ПеремещениеТоваров. Нам нужно полностью исключить его выгрузку из УТ в БП:
Процедура ПОД_Документ_ПеремещениеТоваров_Отправка_ПриОбработке(ДанныеXDTO, ИспользованиеПКО, КомпонентыОбмена)
// Для исключения документа из обмена сбрасываем использование всех связанных ПКО
УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь);
КонецПроцедуры
Посмотрим на частую ошибку разработчиков. Некоторые пытаются написать просто Возврат; в начале процедуры или установить конкретное ПКО в значение Истина, предполагая, что остальные отключатся сами. Это неверно. В правилах обработки данных по умолчанию все ПКО инициализируются со значением Истина (то есть они разрешены к использованию). Чтобы заблокировать выгрузку объекта, необходимо явно вызвать процедуру УстановитьИспользованиеПКО с параметром Ложь, как показано в примере выше.
Очень часто после успешного внедрения правил регистрации или изменения менеджера обмена пользователи замечают, что документы все равно продолжают выгружаться при первой синхронизации. Почему так происходит?
Дело в том, что новые правила и менеджер обмена начинают действовать только на те события, которые происходят после их загрузки. Все те документы, которые были изменены ранее, уже зарегистрированы на узле обмена и послушно ждут своей отправки в таблице регистрации изменений.
Чтобы решить эту проблему, выполним следующие действия:
После очистки очереди регистрации новые документы не будут регистрироваться благодаря измененным правилам регистрации (ПРД), а старые уже удалены из очереди выгрузки. Теперь синхронизация будет проходить корректно, и лишние документы не попадут в базу «1С:Бухгалтерия предприятия».
Для базовых версий конфигураций 1С самым простым и стабильным решением является использование измененных правил регистрации данных (ПРД) с явным указанием Отказ = Истина; в обработчиках. Это позволяет избежать рутинной работы по обновлению внешнего менеджера обмена при каждом релизе программы. Если же требуется сложная программная фильтрация, используйте механизм внешнего менеджера обмена (EPF) и функцию УстановитьИспользованиеПКО(ИспользованиеПКО, Ложь).