Как реализовать формирование проводок для нового документа в БГУ 2.0

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

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

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

Шаг 1. Регистрация документа в метаданных системы

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

Выполним следующие действия в конфигураторе:

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

Шаг 2. Особенности работы подписки на события

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

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

Шаг 3. Решение А — Использование механизма типовых операций

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


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

Метод ДобавитьДанныеДляПроведения инициализирует структуру в ДополнительныеСвойства, которую затем подхватит стандартная подписка на событие для формирования движений по регистру ЕПСБУ.

Шаг 4. Решение Б — Формирование проводок «вручную» (флаг ЭтоБухоперация)

Если задача стоит максимально просто — сформировать конкретные проводки программно, не создавая элементов в справочнике «Типовые операции», нам поможет установка специального флага. Выясним, как это работает.

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


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

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

Шаг 5. Использование ТаблицыПроводок

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

  1. Создаем таблицу значений со структурой, идентичной регистру бухгалтерии ЕПСБУ.
  2. Наполняем таблицу данными.
  3. Помещаем её в ЭтотОбъект.ДополнительныеСвойства.ДанныеАвтоПроведения.ТаблицаПроводок.

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

Шаг 6. Настройка экранных форм

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

В модуле формы в процедуре ПриСозданииНаСервере добавим вызов инициализации:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Настройка параметров типовой операции на форме
    ПараметрыТиповойОперации = БухгалтерскиеОперацииКлиентСервер.НастроитьПараметрыТиповойОперации(ЭтаФорма);
    
    // Программное создание группы и реквизитов на форме
    БухгалтерскиеОперацииСервер.ДобавитьПодчиненныеРеквизитыТиповойОперации(ЭтаФорма, "ГруппаБухгалтерскаяОперация");
    
КонецПроцедуры

Это позволит форме динамически отображать поля, необходимые для конкретной выбранной типовой операции (например, поля для ввода КПС или специфических аналитик).

Рекомендации и частые ошибки

Проанализируем типичные ошибки, которые могут возникнуть при реализации:

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

← На главную