При переносе данных между идентичными или схожими конфигурациями (например, «Бухгалтерия государственного учреждения 2.0» или «Бухгалтерия предприятия 3.0») разработчики часто сталкиваются с ситуацией, когда обычные документы переносятся и проводятся успешно, а документы ручных операций (ОперацияБух, КорректировкаРегистров) загружаются «пустыми» — без записей в регистрах и бухгалтерских проводок. Кроме того, при некорректных настройках правил сопоставления может возникнуть задвоение предопределенных счетов плана счетов.
Разберем подробно причины такого поведения платформы и пошаговые методы переноса движений ручных операций.
Проанализируем архитектуру документа. В отличие от типовых первичных документов (таких как «Поступление товаров и услуг» или «Реализация»), у ручной бухгалтерской операции в свойствах метаданных режим проведения установлен в значение Запретить. Это означает следующее:
ОбработкаПроведения, формирующая проводки автоматически при проведении.ЖурналПроводокЕПСБУ или Хозрасчетный) и записываются вместе с документом.Перед переносом самих проводок важно убедиться, что план счетов и виды субконто сопоставляются корректно, иначе платформа создаст дубли счетов либо проигнорирует строки проводок:
Код.Выясним частую причину потери проводок: использование несовместимой версии внешней обработки обмена. В некоторых версиях обработки V8Exchan83.epf из комплекта поставки «Конвертации данных» в коде загрузки заблокирована или отключена запись наборов движений для документов с запретом проведения.
Для гарантированного переноса проводок выполним следующие действия:
V8Exchan83.epf используем встроенную в конфигурацию обработку Универсальный обмен данными в формате XML.Рассмотрим структуру ПКО документа. В составе ПКО ручной операции должна присутствовать группа свойств (ПКГС) для соответствующего регистра бухгалтерии (например, ЖурналПроводокЕПСБУ):
MD83Exp.epf был снят флаг Не выгружать движения документов.ОперацияБух проверим наличие ПКГС для регистра бухгалтерии с сопоставлением всех необходимых реквизитов (СчетДт, СчетКт, СубконтоДт, СубконтоКт, Сумма, Количество и др.).
// Принудительно устанавливаем флаг записи для набора движений
Объект.Движения.ЖурналПроводокЕПСБУ.Записывать = Истина;
Попытка
Объект.Движения.ЖурналПроводокЕПСБУ.Записать();
Исключение
Сообщить("Ошибка записи движений операции: " + ОписаниеОшибки());
КонецПопытки;
Если в базе-приемнике состав субконто на некоторых счетах отличается от источника, транзакция записи проводок может завершиться ошибкой. Чтобы исключить сбои, проанализируем и очистим некорректные субконто в обработчике После загрузки перед выполнением метода Записать():
Для Каждого Проводка Из Объект.Движения.ЖурналПроводокЕПСБУ Цикл
// Проверка соответствия субконто дебета
Если ЗначениеЗаполнено(Проводка.СчетДт) Тогда
Для Каждого КлючИЗначение Из Проводка.СубконтоДт Цикл
Если Проводка.СчетДт.ВидыСубконто.Найти(КлючИЗначение.Ключ, "ВидСубконто") = Неопределено Тогда
Проводка.СубконтоДт.Удалить(КлючИЗначение.Ключ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Проверка соответствия субконто кредита
Если ЗначениеЗаполнено(Проводка.СчетКт) Тогда
Для Каждого КлючИЗначение Из Проводка.СубконтоКт Цикл
Если Проводка.СчетКт.ВидыСубконто.Найти(КлючИЗначение.Ключ, "ВидСубконто") = Неопределено Тогда
Проводка.СубконтоКт.Удалить(КлючИЗначение.Ключ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Объект.Движения.ЖурналПроводокЕПСБУ.Записывать = Истина;
Объект.Движения.ЖурналПроводокЕПСБУ.Записать();
Если в сложных правилах типовой механизм ПКГС документа продолжает давать сбои, применим альтернативную схему — перенос от регистра к документу:
ЖурналПроводокЕПСБУ.
Отбор = Новый Структура("Регистратор");
// Накладываем условие выгрузки только записей ручных операций