При разработке под конфигурацию 1С:Бухгалтерия государственного учреждения 2 (БГУ 2) многие разработчики сталкиваются с тем, что механизм «Типовых операций» устроен сложнее, чем в предыдущих версиях платформы. Типовая операция здесь — это не просто реквизит документа, а комплексная подсистема, основанная на метаданных и регистрах сведений. Давайте разберем, как правильно взаимодействовать с ней программно, чтобы документ корректно формировал проводки.
В БГУ 2 визуально представленная на форме вкладка «Бухгалтерская операция» не является прямым хранилищем данных. Она динамически формирует элементы управления на основе настроек типовой операции. Сами же значения дополнительных реквизитов операции сохраняются в регистре сведений ЗначенияДополнительныхРеквизитовОпераций. Попытка простого присвоения значений через реквизиты объекта приведет к тому, что документ «не увидит» данных при проведении.
Для корректного взаимодействия с системой необходимо использовать методы общего модуля БухгалтерскиеОперацииСервер. Это гарантирует, что все связи будут установлены правильно, а регистры сведений обновлены согласно правилам типовой конфигурации.
Рассмотрим пошагово, как реализовать этот процесс в программном коде:
ТиповуюОперацию (например, для внутреннего перемещения по счету 27.02) из справочника ТиповыеОперации.Справочники.ТиповыеОперации.ДополнительныеРеквизитыТиповойОперации(ТиповаяОперация, , "ИмяДляФормулы").БухгалтерскиеОперацииСервер.ДобавитьДанныеДляПроведения для передачи данных в документ, например, при оприходовании материалов со счета 22.2 на 105.Ниже представлен пример кода, демонстрирующий, как выполнить заполнение реквизитов документа «Отражение зарплаты в учете», назначить операцию и передать в нее данные:
// 1. Получаем ссылку на типовую операцию
ТиповаяОперация = Справочники.ТиповыеОперации.ОтражениеЗарплатыВУчете_ОтражениеЗарплаты;
// 2. Получаем структуру дополнительных реквизитов
// Предположим, что нам нужно заполнить реквизит 'ОсновнойКонтрагент'
ЗначениеРеквизита = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
ДополнительныеРеквизиты = Новый Структура("ОсновнойКонтрагент", ЗначениеРеквизита);
// 3. Заполняем данные через серверный модуль
БухгалтерскиеОперацииСервер.ДобавитьДанныеДляПроведения(ДокОбъект, ТиповаяОперация, ДополнительныеРеквизиты, Истина);
// 4. Записываем документ
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если по каким-то причинам вы работаете с уже существующим объектом документа, можно воспользоваться методом ЗаписатьДанныеТиповойОперацииОбъекта. Этот путь полезен, если вам нужно принудительно переназначить тип операции у записанного документа:
// Записываем документ для инициализации
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
// Применяем типовую операцию через серверный метод
БухгалтерскиеОперацииСервер.ЗаписатьДанныеТиповойОперацииОбъекта(ДокОбъект, Справочники.ТиповыеОперации.ИмяНужнойОперации);
// Перепроводим для формирования проводок
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
При реализации данного функционала обратите внимание на следующие аспекты:
ДополнительныеРеквизиты. Они должны строго соответствовать типам, ожидаемым в типовой операции.ЗначенияДополнительныхРеквизитовОпераций. Для работы с документами, созданными без типовых операций, может потребоваться групповое изменение полей таблицы.БухгалтерскиеОперацииСервер. Это может привести к нарушению целостности бухгалтерских записей и ошибкам при последующих обновлениях конфигурации.Следуя этим рекомендациям и используя методы серверного модуля, вы сможете автоматизировать процесс заполнения документов с типовыми операциями, обеспечив стабильную работу учета в вашей информационной системе.