При настройке регулярного обмена данными между конфигурациями "Управление торговлей" (УТ) и "Бухгалтерия предприятия" (БП) специалисты часто сталкиваются с неприятной ситуацией: документы (реализации, поступления, отчеты о розничных продажах) успешно переносятся, но оказываются в базе-приемнике в статусе "Записан", хотя в источнике они были проведены. В некоторых случаях документы, которые уже были проведены в БП, внезапно "распроводятся" после очередного сеанса синхронизации. Разберем подробно, почему это происходит, как диагностировать проблему и можно ли обойти дату запрета редактирования.
Для начала проанализируем, как технически происходит загрузка данных в 1С. Важно понимать, что процесс синхронизации — это не просто копирование полей. Это сложная последовательность действий. Стандартный алгоритм загрузки документа выглядит следующим образом:
Записать(РежимЗаписиДокумента.Проведение).Если на четвертом этапе возникает любая ошибка (не заполнены обязательные реквизиты, не хватает остатков, не настроены счета учета), документ остается в базе в статусе "Записан". Процесс прерывается, и мы видим "распроведенный" документ.
Рассмотрим ситуацию с точки зрения "Бухгалтерии предприятия". Для проведения документа в БП крайне важны счета учета (номенклатуры, расчетов с контрагентами, доходов и расходов). В "Управлении торговлей" этих счетов в явном виде может не быть. Если в БП не настроены регистры сведений "Счета учета номенклатуры" или "Счета учета расчетов с контрагентами", документ при загрузке не сможет определить аналитику для проводок.
В результате попытка автоматического проведения после загрузки завершается ошибкой. Проверить это просто: попробуйте провести загруженный документ вручную. Если система выдаст сообщение типа "Не заполнен счет учета в строке 1", значит, причина в настройках БП, а не в самом обмене.
Посмотрим на пример из практики: пользователь создает реализацию в УТ, она уходит в БП и там проводится. Позже в УТ создается СчетФактураВыданный текущей датой. При синхронизации эта счет-фактура "тянет" за собой документ-основание (реализацию). Если в момент записи или проведения реализации возникают какие-то изменения в логике (например, изменились настройки НДС), реализация может переписаться и не провестись, оставив и счет-фактуру в подвешенном состоянии.
Выясним причину, связанную с типами данных. Иногда при выгрузке из УТ числовые значения (например, количество или сумма) могут преобразовываться в Неопределено или Null, если в источнике они по какой-то причине не заполнены (например, в документах корректировки). БП ожидает строго числовое значение 0. При попытке проведения документа с Неопределено в табличной части система падает в исключительную ошибку. Поскольку обмен часто идет в фоновом режиме, пользователь не видит окно с ошибкой, а видит только результат — непроведенный документ.
Для детального анализа ситуации не стоит ограничиваться стандартным окном "События монитора обмена". Рассмотрим правильный алгоритм диагностики:
"Строка: 2. Не заполнено значение реквизита Счет учета" или "Поле 'Количество' должно быть числом".Разберем вопрос автора о дате запрета. В 1С существует два уровня контроля даты запрета:
1. Общая дата запрета редактирования. Она устанавливается для пользователей. Однако при синхронизации используется программный флаг ОбменДанными.Загрузка = Истина.
Этот флаг сообщает системе: "Я — механизм обмена, не нужно проверять дату запрета, не нужно проверять остатки, просто запиши то, что я принес". Если в коде конфигурации или в правилах обмена этот флаг установлен корректно, система проигнорирует общую дату запрета.
// Пример того, как флаг загрузки отключает проверки в модуле документа
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат; // Все проверки обходятся
КонецЕсли;
// Обычные проверки для пользователей
Если Дата < ПараметрыСеанса.ДатаЗапретаРедактирования Тогда
Отказ = Истина;
Сообщить("Период закрыт!");
КонецЕсли;
КонецПроцедуры
2. Дата запрета загрузки в настройках синхронизации.
Проанализируем настройки самого узла обмена. В настройках синхронизации данных есть отдельная гиперссылка "Параметры запрета загрузки данных". Если там установлена дата, то документы старше этой даты не будут загружаться вовсе или будут игнорироваться. Это "фуфло" (как выразился один из участников форума) только в том случае, если программист намеренно отключил эти проверки, но для типовых конфигураций это действенный механизм защиты.
Для того чтобы документы всегда оставались проведенными, выполните следующие шаги:
Таким образом, распроведение документов — это почти всегда признак того, что документ записался (данные пришли), но не смог выполниться код проведения из-за логических ошибок в базе-приемнике. Внимательный анализ Журнала регистрации и проверка заполнения аналитики в БП позволяют решить эту проблему в 90% случаев.