Почему при загрузке данных через EnterpriseData документы остаются непроведенными?

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

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

Анализ механизма загрузки EnterpriseData

Механизм обмена через EnterpriseData предполагает выполнение записи данных в транзакции. Однако для корректного учета важно не только записать объект, но и обеспечить его проведение. Процесс проведения в типовых решениях часто выполняется отложенно, чтобы избежать ошибок из-за отсутствия связанных данных (например, когда документ загружается раньше, чем справочник номенклатуры).

Рассмотрим структуру процедуры ЗапомнитьОбъектДляОтложенногоЗаполнения. В процессе загрузки система проверяет наличие обработчиков и добавляет объект в таблицу отложенной обработки, если это необходимо:


Процедура ЗапомнитьОбъектДляОтложенногоЗаполнения(ДанныеДляЗаписиВИБ, ПравилоКонвертации, КомпонентыОбмена)
    Если ПравилоКонвертации.ЕстьОбработчикПослеЗагрузкиВсехДанных Тогда
        НоваяСтрока = КомпонентыОбмена.ЗагруженныеОбъекты.Добавить();
        НоваяСтрока.ИмяОбработчика = ПравилоКонвертации.ПослеЗагрузкиВсехДанных;
        НоваяСтрока.Объект = ДанныеДляЗаписиВИБ;
        НоваяСтрока.СсылкаНаОбъект = ДанныеДляЗаписиВИБ.Ссылка;
    КонецЕсли;
КонецПроцедуры

Почему документы не попадают в очередь на проведение?

При проведении глубокого анализа кода мы обнаружили, что запуск автоматического проведения зависит от того, был ли объект корректно помещен в очередь. Если в процессе вызова ОбменДаннымиXDTOСервер::ВыполнитьОтложенноеПроведениеДокументов очередь оказывается пустой, проведение не запускается. Основная проблема часто кроется в том, что в процессе СтруктураОбъектаXDTOВДанныеИБ переменная ДанныеДляЗаписиВИБ.Проведен принимает значение Ложь.

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

Шаги для решения проблемы

Чтобы обеспечить проведение документов после загрузки, выполним следующие действия:

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

Рекомендации по доработке

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

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

← На главную