Почему не формируются движения по регистру бухгалтерии при проведении документа в 1С

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

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

Главная причина: флаг записи набора движений

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

Для этого у каждого набора записей в коллекции Движения существует булево свойство Записывать. Если перед формированием проводки или после завершения цикла не установить свойство Движения.Хозрасчетный.Записывать = Истина;, платформа проигнорирует сформированные записи и не сохранит их в регистре.

Варианты решения проблемы

Рассмотри два основных способа решения данной задачи в коде модуля документа.

Способ 1. Установка флага для автоматической записи платформой (рекомендуемый)

По умолчанию в свойствах документа параметр «Запись движений» установлен в значение Записывать выбранные. В этом случае достаточно в начале или в конце процедуры ОбработкаПроведения установить свойство Записывать в значение Истина. Явный вызов метода Записать() делать не нужно — платформа сама запишет сформированный набор в транзакции проведения.


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

Способ 2. Явная запись набора движений

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


// Явная запись набора в базу данных
Движения.Хозрасчетный.Записывать = Истина;
Движения.Хозрасчетный.Записать();

Дополнительные чек-листы для проверки движений

Если свойство Записывать = Истина установлено, но проводки все равно не появляются, разберем другие возможные причины:

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