В практике работы с конфигурацией 1С:Бухгалтерия государственного учреждения 2.0 разработчики часто сталкиваются с требованиями пользователей (бухгалтеров или юристов) реализовать учет по нескольким ИФО (Источникам финансового обеспечения) в рамках одного документа Регистрация обязательств. По умолчанию в системе ИФО является балансоразделителем и располагается в шапке документа, что подразумевает принцип: один документ — один баланс.
В данной статье мы подробно разберем, как реализовать возможность ведения учета по ИФО в табличных частях, проанализируем технические сложности и рассмотрим пути решения, которые позволят сохранить работоспособность программы при обновлениях.
Прежде чем приступать к кодингу, проанализируем ситуацию с точки зрения методологии. В БГУ 2.0 ИФО — это не просто дополнительная аналитика (как КФО или КПС), а признак, разделяющий учет на независимые балансы. Большинство типовых механизмов, таких как формирование проводок и проверка лимитов, ожидают увидеть ИФО именно в заголовке объекта. Если мы просто добавим колонку в таблицу, стандартный механизм проведения проигнорирует её, подставив значение из шапки во все строки проводок.
Самый правильный путь с точки зрения минимизации правок конфигурации — это использование механизмов Шаблонов бухгалтерских операций. Каждая операция в БГУ 2.0 использует настройки, определяющие, откуда брать данные для проводок. Выясним причину, по которой стандартная настройка не видит вашу колонку.
Для реализации этого метода выполним следующие шаги:
ИФО в нужную табличную часть документа РегистрацияОбязательств.ОбработкаПроведенияБухгалтерскихОпераций) обращается к реквизиту Объект.ИФО.Чтобы система «подхватила» данные из строки, нам придется доработать алгоритм в расширении, переопределив заполнение структуры параметров для формирования проводок. Рассмотрим примерный код, который можно внедрить в процедуру обработки проведения:
&После("ПередЗаписьюРегистрацииОбязательств")
Процедура ДопОбработкаИФО_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Для Каждого СтрокаТЧ Из ЭтотОбъект.ВнебюджетныеСредства Цикл
// Если поле ИФО в строке заполнено, используем его для логики проводок
Если ЗначениеЗаполнено(СтрокаТЧ.ИФО_Доп) Тогда
// Логика передачи ИФО в механизм формирования движений
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Рассмотрим подробнее ситуацию, когда стандартных настроек источников данных недостаточно. Проблема в том, что ИФО должен попадать не только в проводки, но и в регистры накопления. Документ Регистрация обязательств делает записи в регистры Обязательства организаций и Сведения о контрактах.
Если мы не обновим движения по регистрам, у нас возникнет разрыв: в бухгалтерском учете (на счетах 500.00) данные будут в разрезе разных ИФО, а в отчетах по исполнению бюджета данные «схлопнутся» по ИФО из шапки. Чтобы этого избежать, проанализируем процедуру проведения:
&Вместо или &После для этой процедуры.ИФО (из шапки) на обращение к ТекущаяСтрока.ИФО.Посмотрим на пример логики переопределения данных:
// Пример модификации движения по регистру накопления
Движение = Движения.ОбязательстваОрганизаций.Добавить();
Движение.Период = ЭтотОбъект.Дата;
Движение.Организация = ЭтотОбъект.Организация;
// Вместо ЭтотОбъект.ИФО используем колонку из ТЧ:
Движение.ИФО = СтрокаТЧ.ИФО_Доп;
Движение.Договор = ЭтотОбъект.Договор;
// ... заполнение остальных реквизитов ...
Если вы хотите избежать прямого изменения процедуры проведения, можно попробовать использовать внешние функции в шаблонах проводок. Это позволяет вызывать программный код прямо из настроек пользовательского режима. Однако, как показывает практика обсуждения (Сообщение 3), расчет в функции часто сворачивает данные, если не обеспечена уникальность ключа связи между строкой документа и строкой проводки. Для корректной работы необходимо убедиться, что алгоритм расчета проводок понимает, какая строка ТЧ соответствует какой записи в журнале проводок.
Разберем, с какими сложностями мы можем столкнуться после внедрения этой доработки:
ИФО — это балансоразделитель, и может посчитать некорректным наличие разных ИФО в рамках одного регистратора, если не все регистры были корректно пропатчены.Прежде чем приступать к глубокой разработке, проанализируем ситуацию еще раз. Типовая методология 1С предлагает создавать отдельный документ на каждый ИФО. Если пользователям неудобно создавать много документов, можно автоматизировать этот процесс:
Регистрация обязательств, в каждом из которых будет свой ИФО в шапке.Договоры.Такой подход является наиболее безопасным. Вы сохраняете типовую логику конфигурации, не нарушаете работу регистров и технологического анализа, а пользователи получают желаемый результат — возможность быстро разнести данные по разным источникам финансирования.
Резюме: Если вы все же решите идти по пути модификации табличной части, делайте это исключительно через расширения, уделяя внимание не только проводкам, но и движениям по регистрам накопления Обязательства организаций и Сведения о контрактах. Это обеспечит целостность учета и корректность формирования регламентированной отчетности.