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