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