Почему не появляются проводки при проведении нового документа в БГУ 2.0 и как это исправить?

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

При разработке новых документов в конфигурации «Бухгалтерия государственного учреждения 2.0» (БГУ 2.0) программисты часто сталкиваются с ситуацией, когда код в процедуре ОбработкаПроведения написан корректно, отладчик показывает добавление строк в движения, но после завершения транзакции регистр бухгалтерии остается пустым. Проанализируем эту ситуацию, выясним причины «исчезновения» записей и разберем правильные методы формирования проводок.

Разбор типичной ошибки при ручном формировании проводок

Рассмотрим ситуацию, когда разработчик пытается добавить проводки в ЖурналПроводокЕПСБУ классическим для платформы 1С способом. Код может выглядеть следующим образом:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Движения.ЖурналПроводокЕПСБУ.Записывать = Истина;
    
    Для Каждого СтрПриплод из Приплод Цикл
        Движение = Движения.ЖурналПроводокЕПСБУ.Добавить();
        Движение.Регистратор = Ссылка;
        Движение.Период = Дата;
        Движение.Организация = Справочники.Организации.НайтиПоКоду("000000001");
        Движение.КФО = Перечисления.КВД.СубсидииНа Госзадание;
        
        // Заполнение Дебета
        Движение.СчетДт = СтрПриплод.Счет;
        Движение.КПСДт = Справочники.КлассификационныеПризнакиСчетов.НайтиПоКоду("06030000000000000");
        Движение.СубконтоДт.ОсновныеСредства = СтрПриплод.Номенклатура;
        Движение.КЭКДт = Справочники.КОСГУ.НайтиПоКоду("310"); 
        
        // Заполнение Кредита
        Движение.СчетКт = ПланыСчетов.ЕПСБУ.НайтиПоКоду("401.10");
        // ... заполнение остальных реквизитов ...
        
        Движение.Сумма = СтрПриплод.СуммаПлановая;
    КонецЦикла;
КонецПроцедуры

На первый взгляд, все сделано по канонам: свойство Записывать установлено в значение Истина, записи в цикл добавляются. Однако в БГУ 2.0 этот код может не сработать. Почему? Выясним причину, заглянув «под капот» механизмов записи.

Анализ причины: почему проводки исчезают?

Проанализируем поведение системы через отладчик. Если поставить точку останова в модуле набора записей регистра ЖурналПроводокЕПСБУ в процедуре ПередЗаписью, можно заметить странную особенность: система заходит в это событие дважды.

  1. Первый заход: В наборе записей присутствует сформированная вами проводка. Это происходит в момент завершения процедуры проведения.
  2. Второй заход: Набор записей оказывается пустым. Система выполняет автоматическую очистку движений, так как не находит подтверждения актуальности этих записей во внутренних структурах БГУ 2.0.

Такое поведение связано с тем, что в БГУ 2.0 реализованы сложные механизмы управления проведением. Если документ не использует штатный общий модуль ПроведениеСервер, система может считать ручные записи «мусорными» или ошибочными и очищать их перед окончательной фиксацией транзакции.

Решение №1: Принудительная запись (быстрый способ)

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


// В конце процедуры ОбработкаПроведения
Движения.ЖурналПроводокЕПСБУ.Записать(); 

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

Решение №2: Использование штатного механизма БГУ 2.0 (рекомендуемый способ)

Разберем, как правильно формировать проводки в БГУ 2.0 согласно стандартам разработки фирмы «1С». В этой конфигурации проведение строится на подготовке таблиц проводок и их последующей передаче в общие модули. Рассмотрим алгоритм по шагам:

  1. Подготовим таблицу значений со структурой, идентичной регистру бухгалтерии.
  2. Наполним её данными.
  3. Поместим таблицу в ДополнительныеСвойства документа.
  4. Вызовем процедуру записи движений.

Пример правильной архитектуры проведения:


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    
    // 1. Подготовка таблиц для формирования проводок
    ТаблицыДляЗаписи = ПроведениеСервер.ПодготовитьСтруктуруТаблицДляПроведения();
    
    // Получаем таблицу регистра бухгалтерии
    ТаблицаЕПСБУ = ТаблицыДляЗаписи.ЖурналПроводокЕПСБУ;
    
    Для Каждого Стр из Приплод Цикл
        НоваяСтрока = ТаблицаЕПСБУ.Добавить();
        НоваяСтрока.Период = Дата;
        НоваяСтрока.Организация = Организация;
        НоваяСтрока.КФО = Стр.КФО;
        
        // Аналитика Дебета
        НоваяСтрока.СчетДт = Стр.СчетДт;
        НоваяСтрока.КПСДт = Стр.КПСДт;
        // Для субконто используется специальная структура или прямое обращение
        НоваяСтрока.СубконтоДт1 = Стр.Номенклатура; 
        
        // Аналитика Кредита
        НоваяСтрока.СчетКт = Стр.СчетКт;
        НоваяСтрока.КПСКт = Стр.КПСКт;
        
        НоваяСтрока.Сумма = Стр.Сумма;
        НоваяСтрока.Содержание = "Приплод животных";
    КонецЦикла;
    
    // 2. Помещаем подготовленные данные в дополнительные свойства
    ДополнительныеСвойства.Вставить("ТаблицыДляЗаписи", ТаблицыДляЗаписи);
    
    // 3. Вызываем штатный механизм записи
    ПроведениеСервер.ЗаписатьПроводки(Ссылка, ТаблицыДляЗаписи, Отказ);

КонецПроцедуры

Использование ПроведениеСервер.ЗаписатьПроводки гарантирует, что система зарегистрирует записи во всех необходимых внутренних механизмах контроля. Это исключает проблему повторного захода в ПередЗаписью с пустым набором, так как записи теперь считаются «официальными» с точки зрения конфигурации.

Важные нюансы заполнения аналитики

Проанализируем еще одну частую причину, по которой проводки могут не отображаться или «вылетать» при записи — некорректное заполнение измерений регистра. В БГУ 2.0 критически важно следить за следующими полями:

Итоги и рекомендации

Если вы столкнулись с тем, что проводки в БГУ 2.0 исчезают сразу после создания, выполните следующие действия:

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

Помните, что БГУ 2.0 — это конфигурация с очень строгой логикой контроля проводок. Любое отступление от стандартных механизмов может привести к трудноуловимым ошибкам в учете.

← На главную