Почему при синхронизации документа "Отчет переработчика" из ERP в БП не заполняются вкладка "Продукция" и поле "Склад"?

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

Настройка синхронизации между сложными конфигурациями, такими как 1С:ERP Управление предприятием 2 и 1С:Бухгалтерия предприятия 3.0 (БП), часто сопряжена с нюансами сопоставления данных. Одна из распространенных проблем, с которой мы можем столкнуться, касается передачи документов производства. Рассмотрим ситуацию, когда при выгрузке документа "Отчет переработчика" из ERP в БП создается документ "Поступление из переработки", но при этом теряются данные: табличная часть "Продукция" пуста, а поле "Склад" в шапке документа не заполнено, хотя в исходной базе все данные присутствуют. Для оперативного обнаружения подобных проблем на ранних этапах полезно внедрить мониторинг ошибок обмена с уведомлением на почту.

Разберем подробно причины такого поведения системы и предложим пошаговые методы решения проблемы, начиная от пользовательских настроек и заканчивая отладкой программного кода.

Анализ архитектурных различий ERP и БП

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

  1. Разная логика хранения склада. В ERP склад часто указывается в табличных частях (для каждой строки продукции может быть свой склад или кладовая), либо склад может отсутствовать в шапке, если используются сложные схемы обеспечения. В БП документ "Поступление из переработки" требует указания склада в шапке для корректного оприходования всей партии продукции. Если механизм обмена (XDTO) не находит однозначного соответствия или поле в источнике пустое, в приемник придет Null.
  2. Защита ручных изменений. Механизм обмена данными часто работает по логике "не навреди". Если документ уже был ранее загружен в БП и проведен бухгалтером, система может игнорировать перезапись табличных частей при повторной загрузке. Это сделано для того, чтобы не затереть ручные правки (например, изменения счетов учета), сделанные в бухгалтерии. Чтобы быстро выявить такие расхождения, можно использовать способ сверки документов через http-сервис.
  3. Статусная модель ERP. Важно помнить, что ERP выгружает финальные данные для регламентированного учета только тогда, когда хозяйственная операция завершена. Если статус документа "Отчет переработчика" не переведен в финальное состояние (например, "Закрыт" или соответствующий статус выполнения), данные могут не попадать в выгрузку полностью.

Решение проблемы с полем "Склад"

Начнем с более простой проблемы — незаполненного склада. Как мы выяснили, если в ERP склад не задан явно в шапке документа или его тип не совпадает с ожидаемым в БП (например, используется кладовая цеха, которая не сопоставлена со складом БП), поле придет пустым. Также убедитесь, что корректно настроена регистрация объектов для обмена, чтобы изменения по нужным складам и организациям своевременно попадали в очередь выгрузки.

Чтобы избежать необходимости заполнять это поле вручную в каждом документе, воспользуемся штатными настройками синхронизации на стороне 1С:Бухгалтерия предприятия.

Выполним следующие действия:

  1. Перейдем в раздел Администрирование — Синхронизация данных.
  2. Откроем настройки обмена с нашей базой ERP.
  3. Найдем вкладку или раздел, отвечающий за Правила получения данных (в разных версиях интерфейса это может называться "Настроить правила отправки и получения" или "Параметры подключения").
  4. Нас интересует блок Значения по умолчанию. Здесь система позволяет задать значения, которые будут подставляться в документы, если пришедшее поле пустое.
  5. Найдем поле Склад (или "Склад по умолчанию") и выберем тот склад, на который обычно приходуется продукция из переработки (например, "Основной склад" или "Склад готовой продукции").
  6. Сохраним настройки.

После применения этой настройки, при следующей загрузке документа "Поступление из переработки", если поле склад в XML-файле не передано, БП автоматически подставит указанный нами склад. Это решит проблему ручного заполнению шапки документа.

Решение проблемы с табличной частью "Продукция"

Ситуация с пустой табличной частью "Продукция" более сложная и часто требует вмешательства на уровне правил конвертации или отладки. Если справочник Номенклатура синхронизирован корректно, и позиции есть в обеих базах, проблема кроется в алгоритме обработки входящих данных. В редких случаях причиной может стать некорректная сборка конфигурации, где требуется сравнение и замена GUID объектов метаданных в XML-выгрузках для восстановления связи между типами данных.

В ходе обсуждения выяснилось, что проблема часто заключается в механизме проверки существования документа. Если документ уже есть в базе приемника, процедура конвертации может принудительно прерывать заполнение таблиц, полагая, что данные уже актуальны или изменены вручную.

Диагностика через отладчик

Чтобы убедиться в причине, нам потребуется запустить "1С:Бухгалтерия" в режиме конфигуратора и воспользоваться отладкой. Нас интересуют общие модули, связанные с обменом данными через универсальный формат. Обычно это модуль МенеджерОбменаЧерезУниверсальныйФормат.

В процедуре конвертации объекта (ПКО) для документа "Поступление из переработки" (имя метода похоже на ПКО_Документ_ПоступлениеИзПереработки_ПриКонвертацииДанныхXDTO или аналогичное) поставим точку останова перед записью объекта. Посмотрим, заполнены ли коллекции Объект.Продукция или ДанныеXDTO.Продукция.

Программное исправление (через расширение)

Если мы обнаружим, что данные очищаются или не заполняются из-за проверки на существование ссылки, нам необходимо скорректировать логику. Важно: не рекомендуется менять типовой код конфигурации ("снимать с замка"), лучше использовать механизм Расширений.

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

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

Для решения проблемы нам нужно закомментировать или обойти это условие, чтобы принудительно обновить табличную часть данными из ERP. В рамках расширения мы можем использовать аннотацию &Вместо или &После для переопределения поведения метода конвертации.

Примерный алгоритм действий для программиста:

  1. Создаем расширение конфигурации в БП.
  2. Заимствуем общий модуль МенеджерОбменаЧерезУниверсальныйФормат.
  3. Находим процедуру, отвечающую за конвертацию документа "Поступление из переработки". Имя процедуры можно найти, выполнив глобальный поиск по строке "ПоступлениеИзПереработки" внутри модуля.
  4. Анализируем код. Ищем строки, где происходит проверка: загружался ли документ ранее.
  5. Вносим изменения, позволяющие игнорировать эту проверку.

Рассмотрим пример кода, который часто становится причиной проблемы (основываясь на практике обмена EnterpriseData):

// Фрагмент, который может блокировать перезаполнение
// Если ЗначениеЗаполнено(Приемник.Ссылка) Тогда
//     Возврат;
// КонецЕсли;

Если мы закомментируем подобную проверку, система будет каждый раз при обмене полностью перезаписывать табличную часть данными из источника. Это решит проблему пустой продукции, но следует помнить о побочном эффекте: любые ручные изменения, внесенные бухгалтером в этот документ в БП, будут затираться при следующем обмене.

Альтернативные причины и рекомендации

Помимо описанных выше решений, давайте проверим еще несколько важных моментов, которые могут влиять на результат:

Версии формата обмена

Убедитесь, что в настройках синхронизации в обеих базах (ERP и БП) выбрана одна и та же версия формата EnterpriseData. В разных версиях (например, 1.10 и 1.13) структура XML-файла может отличаться. Если ERP выгружает данные в новом формате, а БП пытается прочитать их старыми правилами, вложенные таблицы могут быть проигнорированы.

Патчи и обновления

Компания 1С регулярно выпускает исправления ошибок (патчи). Проверьте список установленных исправлений для вашей версии БП и ERP. В баг-трекере 1С зафиксированы ошибки, связанные с давальческой схемой в версиях ERP 2.5, когда аналитика затрат или продукция не попадали в выгрузку при определенных условиях.

Контроль результата в БП

Чтобы убедиться, что все материалы и продукция отражены корректно после исправления обмена, рекомендуем использовать специализированную ведомость по материалам, переданным в переработку, которая поможет бухгалтеру контролировать остатки в базе БП 3.0.

Резюме по исправлению

Для устранения ошибки "пустых полей" при синхронизации:

  1. Для поля "Склад": Зайдите в настройки синхронизации в БП -> "Значения по умолчанию" -> Установите "Склад".
  2. Для вкладки "Продукция":
    • Убедитесь, что релизы конфигураций актуальны.
    • Если проблема сохраняется, используйте отладчик в модуле МенеджерОбменаЧерезУниверсальныйФормат.
    • При необходимости создайте расширение, отключающее проверку Если Не Объект.ЭтоНовый()... в процедуре конвертации, чтобы разрешить перезапись табличных частей.

Используя этот подход, мы обеспечиваем корректную передачу данных, минимизируя ручной труд пользователей и сохраняя целостность учетных данных в обеих системах.

← На главную