Как выгрузить движения документа Операция в 1С:Конвертация данных 2.1?

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

При настройке правил обмена в «1С:Конвертация данных 2.1» (КД 2.1) специалисты часто сталкиваются с ситуацией, когда документ ОперацияБух (или аналогичные ему в других конфигурациях) переносится успешно, но его проводки в базе-приемнике отсутствуют. Рассмотрим подробнее, почему это происходит и как правильно настроить правила, чтобы все движения регистров переносились корректно.

Почему не переносятся движения документа Операция

Проанализируем техническую сторону вопроса. Большинство документов в системе 1С имеют признак «Проведение», установленный в значение «Разрешить». Для таких объектов при загрузке в КД достаточно установить флаг «Проводить при загрузке», и система автоматически сформирует движения в модуле проведения.

Однако документ Операция является особенным. В его метаданных свойство «Проведение» всегда установлено в значение «Не разрешить». Это означает, что у него нет модуля проведения, и он не может быть «проведен» в привычном понимании. Движения этого документа (например, по регистру бухгалтерии Хозрасчетный) записываются непосредственно в момент сохранения самого объекта.

При использовании Конвертации данных 2.1, когда мы сопоставляем движения как табличные части, данные успешно выгружаются из источника и загружаются в коллекцию движений объекта в памяти приемника. Но платформа 1С устроена так, что при вызове метода Объект.Записать() движения не будут физически сохранены в базу данных, если для конкретного набора записей регистра не установлен специальный флаг Записывать = Истина. По умолчанию этот флаг всегда имеет значение Ложь.

Шаг 1. Проверка интерактивных настроек в КД

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

  1. При выгрузке описания метаданных (xml-файл) из базы-источника и базы-приемника убедитесь, что в обработке выгрузки установлена галочка «Выгружать движения документов».
  2. В Правилах конвертации объектов (ПКО) для нашего документа на вкладке «Выгружаемые регистры» должен быть отмечен соответствующий регистр (например, Хозрасчетный).
  3. В Правилах конвертации свойств (ПКС) этого документа должны быть сопоставлены движения. Обычно они отображаются в списке как табличные части с именами регистров.

Если эти действия выполнены, но движений всё равно нет, значит, нам необходимо «ткнуть КД носом», как выразились участники обсуждения, и принудительно заставить систему записать движения.

Шаг 2. Использование обработчика ПослеЗагрузки

Выясним причину, по которой стандартные механизмы могут давать сбой. КД 2.1 не всегда автоматически устанавливает флаг записи для непроводящихся документов. Самый надежный и проверенный способ решить эту проблему — использовать обработчик ПослеЗагрузки в ПКО нужного документа.

Рассмотрим конкретный пример кода. Если нам нужно обеспечить запись только одного регистра (например, Хозрасчетный), мы можем прописать это явно:

Объект.Движения.Хозрасчетный.Записывать = Истина;

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

Универсальное решение для записи всех движений

Посмотрим на пример кода, который рекомендуется использовать в обработчике ПослеЗагрузки. Этот подход гарантирует, что какие бы движения ни были переданы из источника, все они будут корректно сохранены в приемнике:


Для Каждого НаборЗаписей Из Объект.Движения Цикл
    НаборЗаписей.Записывать = Истина;
КонецЦикла;

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

Дополнительные рекомендации и нюансы

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

  1. Идентичность конфигураций: Если базы источника и приемника имеют одинаковую структуру (например, БП 3.0), убедитесь, что в ПКО сопоставлены все ключевые реквизиты регистров (субконто, измерения, ресурсы). Если типы данных в регистрах различаются, флаг Записывать = Истина может привести к ошибке при попытке физической записи объекта.
  2. Очистка движений: В некоторых случаях при повторной загрузке документа старые проводки могут задваиваться или накладываться на новые. Хотя КД 2.1 обычно корректно очищает коллекции перед заполнением, иногда полезно добавить явную очистку или использовать режим ОбменДанными.Загрузка = Истина.
  3. Перенос по ссылке: Помните, что если документ выгружается просто «по ссылке» (как реквизит другого объекта), его движения никогда не будут выгружены автоматически. Движения переносятся только тогда, когда документ выгружается через собственное Правило выгрузки данных (ПВД).
  4. Платформа 8.3: На современных версиях платформы 8.3 требования к явной установке признака Записывать стали жестче. То, что могло работать «магическим образом» в старых версиях 8.2, теперь требует обязательного программного указания в обработчиках.

Таким образом, мы выяснили, что для документа Операция стандартного сопоставления регистров в КД 2.1 часто бывает недостаточно. Принудительная установка флага Записывать = Истина в цикле по всем движениям объекта — это «золотой стандарт» решения данной проблемы, обеспечивающий надежный перенос бухгалтерских проводок между базами.

← На главную