Почему самописный документ не записывает данные в регистр бухгалтерии в БГУ 2.0?

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

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

Анализ стандартного подхода и его неэффективности

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


Движения.ЖурналПроводокЕПСБУ.Записывать = Истина;

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

Несмотря на то, что в конце процедуры может быть даже вызван метод Движения.ЖурналПроводокЕПСБУ.Записать(), в БГУ 2.0 этого часто недостаточно. Проблема заключается не в самой платформе «1С:Предприятие 8.3», а в бизнес-логике конфигурации, построенной на базе Библиотеки Стандартных Подсистем (БСП) и специфических механизмов автоматизации учета государственных учреждений.

Причина проблемы: Механизм автопроведения в БГУ 2.0

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

Когда срабатывает стандартная подписка на событие перед записью регистратора или общие модули проведения, система проверяет: заполнены ли настройки типовой операции? Если документ самописный и типовая операция в нем не указана (или не предусмотрена), механизмы конфигурации «решают», что проводок быть не должно, и принудительно очищают коллекцию Движения.ЖурналПроводокЕПСБУ непосредственно перед фиксацией транзакции в базе данных. Именно поэтому в отладчике внутри процедуры проведения мы видим проводки, а после завершения работы кода они исчезают.

Решение №1: Использование флага «ЭтоБухоперация»

Самый быстрый и эффективный способ решить проблему для самописного документа, где логика проводок жестко прописана в коде, — это сообщить системе, что данный документ должен обрабатываться как «Бухгалтерская операция». Это отключает автоматическую очистку движений со стороны типовых механизмов.

Для этого в структуре ДополнительныеСвойства объекта необходимо установить специальный флаг. Разберем по шагам, как это сделать в процедуре ОбработкаПроведения:


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

Важный момент: если вы используете БСП последних версий, структура ДополнительныеСвойства.ДанныеАвтопроведения может инициализироваться автоматически. Однако для гарантии результата в самописных объектах лучше инициализировать ее явно, как показано в примере выше.

Решение №2: Инициализация через типовые функции

Проанализируем ситуацию, когда документ должен интегрироваться в общую экосистему БГУ максимально корректно. В конфигурации существуют служебные функции для подготовки объекта к проведению. Вместо ручной вставки в соответствие ДополнительныеСвойства, можно использовать вызовы общих модулей:

Рассмотрим пример правильной инициализации:


// В начале процедуры ОбработкаПроведения
ПараметрыПроведения = ПроведениеСервер.ПодготовитьСтруктуруПараметровПроведения();
// Здесь можно настроить дополнительные параметры, если это необходимо
// ПроведениеСервер.ИнициализироватьДополнительныеСвойстваДляПроведения(РежимПроведения, ДополнительныеСвойства);

Однако для простых самописных документов способ с флагом ЭтоБухоперация = Истина остается самым надежным «костылем», предотвращающим вмешательство стандартных алгоритмов очистки.

Дополнительные проверки корректности проводок

Если даже после установки флага проводки не появляются, проверим следующие технические нюансы, характерные для ЖурналаПроводокЕПСБУ:

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

Рекомендации по архитектуре в БГУ 2.0

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

Для реализации этого подхода в документ добавляется реквизит ТиповаяОперация, а в процедуре проведения вызывается метод:
ТиповыеОперацииБГУ.СформироватьПроводки(ЭтотОбъект);
В этом случае система сама заполнит ДополнительныеСвойства и выполнит все необходимые проверки, а вам не придется вручную управлять флагами ЭтоБухоперация.

Таким образом, основной причиной "исчезновения" проводок является встроенная защита БГУ 2.0 от некорректного заполнения регистров в обход механизма типовых операций. Использование флага ЭтотОбъект.ДополнительныеСвойства.ДанныеАвтопроведения.ЭтоБухоперация = Истина; — это ключ к тому, чтобы заставить систему доверять вашему программному коду.

← На главную