При настройке обмена данными между идентичными конфигурациями "1С:Бухгалтерия Предприятия 3.0" (или другими типовыми решениями на БСП) часто возникает проблема с документами, в которых включена "Ручная корректировка". Стандартные документы переносятся корректно, а документы с ручными проводками либо не загружают движения, либо выдают ошибки при попытке проведения.
Разберем эту ситуацию подробно, выясним причины такого поведения системы и рассмотрим проверенное решение с использованием настроек "Конвертации данных 2.1" (КД 2.1).
Рассмотрим сценарий, описанный в вопросе:
Проблема кроется в механизме записи документа при загрузке. По умолчанию в Правилах Конвертации Объектов (ПКО) для документов обычно стоит режим "Проведение". Обработка обмена пытается провести документ методом Записать(РежимЗаписиДокумента.Проведение).
В типовых конфигурациях логика проведения проверяет флаг "Ручная корректировка". Если он установлен, система понимает, что автоматический расчет движений запрещен, и блокирует стандартное формирование проводок. В то же время, так как документ пытается "провестись", движения, пришедшие из файла обмена, могут игнорироваться или перезатираться пустой коллекцией перед попыткой расчета.
Чтобы корректно перенести и сам документ, и его ручные движения, необходимо изменить подход к записи объекта в базе-приемнике. Нам нужно не "проводить" документ (запуская алгоритмы расчета), а просто "записать" его вместе с наборами записей регистров, которые пришли из файла.
Для этого в обработчиках событий ПКО необходимо переопределить стандартную переменную РежимЗаписи.
Мы будем работать в конфигурации "Конвертация данных 2.0/2.1". Откройте ваши правила обмена и найдите ПКО соответствующего документа.
Наиболее надежный способ — изменить режим записи непосредственно перед загрузкой объекта в базу, проверив, стоит ли у него признак ручной корректировки.
Рассмотрим код, который необходимо разместить в обработчике события "Перед загрузкой" (BeforeLoad) в ПКО документа:
// Проверяем, есть ли у загружаемого объекта признак ручной корректировки.
// Важно: свойство должно быть уже прочитано из файла или передано как параметр.
// Обычно в БП 3.0 этот реквизит называется "РучнаяКорректировка".
Если Объект.РучнаяКорректировка Тогда
// Меняем режим записи с "Проведение" на "Запись".
// Это предотвратит запуск механизмов пересчета движений.
РежимЗаписи = "Запись";
// В режиме "Запись" движения из файла (свойство Объект.Движения)
// будут записаны платформой (или обработкой обмена) "как есть".
КонецЕсли;
В некоторых случаях, если свойство РучнаяКорректировка еще не доступно в объекте на этапе "Перед загрузкой" (зависит от порядка следования свойств в XML), можно использовать обработчик "После загрузки" (AfterLoad), но тогда придется управлять записью самостоятельно:
// Обработчик "После загрузки"
Если Объект.РучнаяКорректировка Тогда
// Принудительно устанавливаем режим загрузки данных, чтобы отключить проверки
Объект.ОбменДанными.Загрузка = Истина;
// Записываем документ без проведения
Объект.Записать(РежимЗаписиДокумента.Запись);
// Явно записываем движения, которые пришли с объектом
Для Каждого НаборЗаписей Из Объект.Движения Цикл
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();
КонецЕсли;
КонецЦикла;
КонецЕсли;
Обратите внимание на несколько моментов, которые помогут избежать ошибок:
РежимЗаписи на "Запись", убедитесь, что переносится системное свойство Posted (Проведен). Иначе документ в базе-приемнике запишется, движения появятся, но сам документ будет иметь статус "Не проведен" (значок документа без галочки), и проводки могут не учитываться в отчетах. Обычно это свойство переносится автоматически, но проконтролируйте этот момент.
Попытка
// Источник доступен на этапе выгрузки. Если мы на стороне приемника,
// лучше оперировать "Объектом" в событиях ПКО.
Если Источник.РучнаяКорректировка Тогда
РежимЗаписи = "Запись";
КонецЕсли;
Исключение
// Обработка ошибок, если свойства нет у объекта
КонецПопытки;
ОбменДанными.Загрузка = Истина является базовым правилом для переноса данных. Стандартные обработки обмена (Универсальный обмен XML) делают это по умолчанию. Однако при режиме "Проведение" логика конфигурации может быть сильнее этого флага в части движений. Именно поэтому перевод в режим "Запись" является ключевым.
Используя этот подход, вы сможете корректно синхронизировать документы с ручными правками, сохраняя идентичность данных между базами 1С.