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