При интеграции различных конфигураций 1С, особенно если одна из них значительно старше другой, специалисты часто сталкиваются с ситуацией, когда данные переносятся успешно, но документы в базе-приемнике остаются в состоянии "не проведен". В данном материале мы разберем конкретный случай: обмен между 1С:Управление торговлей 11.2.3.108 и 1С:Бухгалтерия предприятия 3.0.91.36. Рассмотрим причины возникновения такой ошибки и пошагово выясним, как восстановить автоматическое проведение документов при загрузке.
Первое, что мы должны сделать при обнаружении неисправности — проанализировать Журнал регистрации в базе 1С:Бухгалтерия. Часто пользователи полагают, что если обмен завершился без явного окна ошибки, то "ошибок нет". Однако это заблуждение: документы могут загрузиться, но не провестись из-за исключений, которые подавляются механизмом обмена для сохранения целостности сообщения.
Проанализируем типичную ошибку, возникающую при попытке записи объекта во время обмена:
Ошибка записи объекта
ТипОбъекта = Поступление доп. расходов
Объект = Поступление доп. расходов 27 от 09.04.2021
ОписаниеОшибки = Не удалось записать: "Поступление доп. расходов"!
ПозицияМодуля = {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(2416)}: Объект.Записать;
Обратите внимание, что ошибка возникает непосредственно при вызове метода Объект.Записать(РежимЗаписиДокумента.Проведение). Это означает, что данные в документе формально заполнены, но встроенные проверки конфигурации (например, в процедуре ПередЗаписью или ОбработкаПроверкиЗаполнения) возвращают Отказ = Истина.
Прежде чем приступать к программированию, нам необходимо убедиться, что включена соответствующая функциональная опция в самой программе. В современных версиях БП 3.0 флаг автоматического проведения находится внутри настроек конкретного узла обмена.
Выполним следующие шаги для проверки:
Если этот флаг установлен, но документы всё равно остаются не проведенными, значит, проблема кроется в несоответствии структуры данных (XDTO-пакетов) между старой УТ и новой БП.
Разберем фундаментальную причину. УТ 11.2 была выпущена значительно раньше БП 3.0.91. За это время в бухгалтерской конфигурации появились такие механизмы, как прослеживаемость товаров (РНПТ), обязательная маркировка и новые правила учета НДС. Эти изменения требуют заполнения новых обязательных реквизитов в документах (например, в "Поступлении доп. расходов" или "Поступлении на расчетный счет").
Старая УТ 11.2 использует формат обмена EnterpriseData версии 1.3 или 1.4, в то время как новая БП ожидает версию 1.10 и выше. При загрузке документа 1С пытается сопоставить поля. Если новое обязательное поле в БП отсутствует в данных из УТ, документ может записаться в режиме ОбменДанными.Загрузка = Истина, но при попытке проведения система выдаст отказ, так как логика проведения требует наличия этих данных.
Поскольку обновлять УТ 11.2 часто невозможно из-за большого количества доработок, нам необходимо скорректировать поведение БП 3.0. Использовать старые правила обмена (подменять МенеджерОбменаЧерезУниверсальныйФормат на версию из старых релизов) категорически не рекомендуется, так как это приведет к полной неработоспособности обмена из-за несоответствия типов.
Правильным подходом будет использование расширения конфигурации для дозаполнения недостающих реквизитов. Нам нужно вмешаться в процесс конвертации XDTO-объекта в объект информационной базы.
Рассмотрим пример программного кода в модуле менеджера обмена через расширение. Мы можем переопределить обработчик, который вызывается после загрузки данных, чтобы программно заполнить "пустые" места в документах:
&После("ПРиЧтенииОбъектаXDTO")
Процедура Расш_ПРиЧтенииОбъектаXDTO(КомпонентыОбмена, ДанныеXDTO, Объект, ПравилоКонвертации)
Если ПравилоКонвертации.Имя = "ПоступлениеДопРасходов" Тогда
// Заполняем новые реквизиты, о которых не знает старая УТ
Если Объект.СпособРаспределения.Пустая() Тогда
Объект.СпособРаспределения = Перечисления.СпособыРаспределенияДопРасходов.ПоСумме;
КонецЕсли;
// Пример заполнения специфических настроек НДС для прослеживаемости
// Объект.СтатусУказанияГТД = ...
КонецЕсли;
КонецПроцедуры
Если вы не уверены, какой именно реквизит мешает проведению, воспользуемся методом отладки:
Документ.ПоступлениеДопРасходов).ПередЗаписью на строке, где проверяется РежимЗаписи.Отказ. Как только она примет значение Истина, вы найдете конкретную проверку и недостающий реквизит.Проблема непроведения документов при обмене между старыми и новыми версиями конфигураций почти всегда связана с эволюцией структуры данных. Документ в БП 3.0 "хочет" видеть информацию о налоговых режимах или РНПТ, которую УТ 11.2 просто не умеет отправлять. Решение через расширение с использованием метода ПриЧтенииОбъектаXDTO является наиболее безопасным и технологичным, так как оно не затрагивает основную конфигурацию и позволяет точечно "подправить" данные для успешного проведения.