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