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

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

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

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

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

Кроме того, при выгрузке метаданных из информационной базы с флагом «Не выгружать движения документов» таблицы движений исключаются из описания документа, из-за чего в ПКО не создаются соответствующие правила для табличных частей движений.

Способ 1. Перенос движений через подчиненную группу свойств (штатный механизм)

Рассмотрим наиболее правильный и производительный вариант переноса, при котором движения документа передаются вместе с самим документом как подчиненная группа свойств (ПКГС):

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

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

При таком подходе платформа выполнит запись документа и синхронно сохранит все сформированные строки регистра бухгалтерии в рамках единой транзакции.

Способ 2. Программная выгрузка набора записей через функцию ВыгрузитьРегистр

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

Посмотрим на пример правильной программной выгрузки. В ПКО документа ОперацияБух в обработчике события «После выгрузки в файл» разместим следующий код:

ВыгрузитьРегистр(ЭтотОбъект.Движения.Хозрасчетный, , , , "ХозрасчетныйЗапись");

В этом случае обработка выгрузки сформирует единый узел с набором записей по текущему регистратору, который корректно прочитается и запишется в базе-приемнике по правилу ХозрасчетныйЗапись.

Устранение ошибки: Вид субконто не доступен для данной записи

При выгрузке проводок часто возникает исключение платформы при записи набора:

Ошибка при вызове метода контекста (Записать): Запись не верна! Вид субконто "..." не доступен для данной записи! (Регистр бухгалтерии: Журнал проводок (бухгалтерский и налоговый учет))

Выясним причину этой ошибки. Она заключается в несовпадении состава субконто у счетов в базе-источнике и базе-приемнике. Чаще всего это происходит в двух ситуациях:

  1. Пользовательские счета: если бухгалтер создал в источнике счет вручную (непредопределенный элемент плана счетов), то при стандартной синхронизации по ссылке в приемник переносятся только код и наименование. Табличная часть ВидыСубконто у такого счета в приемнике остается пустой. При попытке записать проводку по пустому счету платформа выдает ошибку доступности субконто.
  2. Различия в типовых планах счетов: между релизами конфигураций состав субконто на некоторых счетах мог измениться.

Для гарантированного решения этой проблемы выполним следующие действия:

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

Для Каждого Проводка Из Объект.Движения.Хозрасчетный Цикл
    // Проверяем и очищаем недопустимые субконто дебета
    Для Каждого КлючИЗначение Из Проводка.СубконтоДт Цикл
        Если Проводка.СчетДт.ВидыСубконто.Найти(КлючИЗначение.Ключ, "ВидСубконто") = Неопределено Тогда
            Проводка.СубконтоДт.Удалить(КлючИЗначение.Ключ);
        КонецЕсли;
    КонецЦикла;
    
    // Проверяем и очищаем недопустимые субконто кредита
    Для Каждого КлючИЗначение Из Проводка.СубконтоКт Цикл
        Если Проводка.СчетКт.ВидыСубконто.Найти(КлючИЗначение.Ключ, "ВидСубконто") = Неопределено Тогда
            Проводка.СубконтоКт.Удалить(КлючИЗначение.Ключ);
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

Отображение движений по дополнительным регистрам в БП 3.0

Разберем еще одну важную деталь, актуальную для конфигурации «Бухгалтерия предприятия 3.0». Документ ОперацияБух может содержать записи не только по регистру бухгалтерии, но и по вспомогательным регистрам сведений и накопления (например, по НДС или учету основных средств).

В БП 3.0 состав отображаемых в форме закладок определяется служебными табличными частями документа (такими как ТаблицаРегистровСведений и ТаблицаРегистровНакопления). Если операция переносит движения по регистрам помимо Хозрасчетный, обязательно настроим синхронизацию этих табличных частей. В противном случае записи попадут в базу данных, но не будут видны пользователю при открытии экранной формы документа.

← На главную