Как программно заполнить типовую операцию в документе 1С:БГУ 2.0?

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

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

Архитектурные особенности механизма типовых операций

Для понимания логики работы конфигурации проанализируем, как устроен механизм бухгалтерских проводок в БГУ 2.0:

  1. Хранение данных вне объекта документа: Выбранная типовая операция, а также связанные с ней дополнительные реквизиты (КФО, КПС, КОСГУ/КЭК, счета учета и аналитика) не хранятся в реквизитах шапки или табличных частях самого документа. Все эти сведения записываются в отдельный специализированный регистр сведений ОперацииДокументов, где измерением выступает ссылка на документ.
  2. Динамический интерфейс: Вкладка «Бухгалтерская операция» на форме генерируется программно «на лету» в момент открытия или смены операции на основании настроек из справочника ТиповыеОперации. Именно поэтому при анализе свойств объекта документа через отладчик реквизиты операции отсутствуют.
  3. Формирование проводок через СКД: Проводки при проведении документа строятся на основе схем компоновки данных, настроенных в справочнике типовых операций. При проведении общие алгоритмы системы считывают данные из регистра ОперацииДокументов. Если запись в регистре отсутствует, проводки не формируются или проведение завершается с ошибкой.

Пошаговый порядок программного заполнения

Разберем последовательность действий, которую необходимо соблюдать при создании документа из кода:

  1. Заполнение основных данных документа: Заполняем реквизиты шапки (организация, дата, контрагент и т. д.) и строки табличных частей.
  2. Первичная запись документа: Документ обязательно должен быть записан в режиме РежимЗаписиДокумента.Запись. Запись необходима для получения постоянной ссылки, так как запись в регистр сведений ОперацииДокументов привязывается к ссылке на документ.
  3. Формирование структуры дополнительных реквизитов: Создаем структуру, ключами которой являются имена параметров операции, а значениями — необходимые элементы справочников или перечислений.
  4. Вызов процедуры общего модуля: Передаем ссылку на записанный документ, ссылку на типовую операцию и структуру параметров в специальную процедуру общего модуля.
  5. Проведение документа: После успешной записи параметров операции выполняем проведение документа в режиме РежимЗаписиДокумента.Проведение.

Пример программного кода

Посмотрим на практический пример программного создания документа и заполнения его типовой операции на стороне сервера:


&НаСервере
Процедура СоздатьИЗаполнитьДокумент()
    
    // 1. Создаем новый документ и заполняем основные реквизиты
    ДокОбъект = Документы.ПринятиеКУчетуОС.СоздатьДокумент();
    ДокОбъект.Дата = ТекущаяДата();
    ДокОбъект.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000");
    ДокОбъект.ВидПоступления = Перечисления.ВидыПоступленийОС.ПоступлениеНаСчет106;
    
    // Заполняем табличные части (при необходимости)
    // ...
    
    // 2. Обязательно записываем документ для получения ссылки
    ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
    
    // 3. Подготавливаем структуру дополнительных реквизитов операции
    ДопРеквизиты = Новый Структура;
    ДопРеквизиты.Вставить("КФО", Перечисления.КВД.Внебюджет);
    ДопРеквизиты.Вставить("КПС", Справочники.КлассификационныеПризнакиСчетов.НайтиПоКоду("00000000000000000"));
    ДопРеквизиты.Вставить("КОСГУ", Справочники.КОСГУ.НайтиПоКоду("310"));
    ДопРеквизиты.Вставить("СчетУчета", ПланыСчетов.ЕПСБУ.НайтиПоКоду("101.34"));
    
    // Выбираем требуемую типовую операцию
    ТиповаяОперация = Справочники.ТиповыеОперации.НайтиПоНаименованию("Принятие к учету ОС по первоначальной стоимости");
    
    // 4. Записываем данные операции в регистр сведений
    БухгалтерскиеОперацииСервер.ЗаписатьДанныеТиповойОперацииОбъекта(
        ДокОбъект.Ссылка,
        ТиповаяОперация,
        ДопРеквизиты
    );
    
    // 5. Проводим документ
    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
    
КонецПроцедуры

Полезные нюансы и ограничения

Рассмотрим дополнительные моменты, которые важно учитывать при работе с типовыми операциями в БГУ 2.0:

  1. Стандартная групповая обработка: Типовая обработка «Групповое изменение реквизитов» не способна изменить параметры типовой операции, так как они находятся в отдельном регистре. Для массового интерактивного редактирования следует использовать встроенную специализированную обработку «Замена типовых операций и реквизитов операций».
  2. Значения по умолчанию: Чтобы не заполнять вручную всю структуру параметров в коде, можно использовать вспомогательные методы модуля БухгалтерскиеОперацииСервер, считывающие настроенные в системе значения реквизитов по умолчанию для конкретной операции и текущего пользователя.
  3. Контроль транзакций: Если процесс создания документа и проведения обернут в транзакцию (НачатьТранзакцию() ... ЗафиксироватьТранзакцию()), вызов метода БухгалтерскиеОперацииСервер.ЗаписатьДанныеТиповойОперацииОбъекта должен выполняться внутри этой же транзакции после промежуточного вызова Записать().
← На главную