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