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