Таким образом, можно в одном отчете строить множество его вариантов, различающихся как по оформлению, так и по алгоритму расчета показателей.
Появилась задача создания в бухгалтерских базах компании (БП 2.0, БП 3.0) отчетов «Управленческий баланс». По сути такой отчет - это остатки по счетам на конец месяца с распределением сумм по определенным статьям баланса. Конфигурации нетиповые, используются различные планы счетов. Попробовал применить общий подход для всех баз, т.е. не зашивать жестко алгоритм построения отчета в код, а применить декларативное описание логики построения отчета.
Вид и алгоритм построения отчета полностью определяется схемой расчета. Схема расчета - это макет (табличный документ). В отчет встроен редактор схемы расчета. Пользователь может редактировать макет, сохранять его в файл или загружать из файла.
В схеме расчета каждой статье баланса сопоставляется уникальный идентификатор и формула расчета.
Идентификатор - это параметр в ячейке макета с уникальным именем.
Идентификаторы условно группируются по разделам. Первый символ идентификатора – буква определяет раздел отчета. Например, «А001», «А002», … «Б001», …
Идентификаторы с нулевой цифровой частью «А000», «Б000» … формул не имеют и служат для расчета и вывода в отчет итогов по соответствующему разделу.
Формулы расчета показателей задаются как простые арифметические операции (сложение и вычитание) с бухгалтерскими счетами.
Внимание! для отображения в макете именованных областей отчета нужно включить режим "Главное меню / Таблица / Имена / Отображение именованных строк/колонок"
Действуют следующие правила расчета по формулам:
- Простое указание номера (кода) счета означает что берется остаток по указанному счету и полученная сумма подставляется как она есть. При этом сумма рассчитывается как разница: СуммаДт - СуммаКт. Т.е. для активных счетов получим "+", а для пассивных "-"
- Если указан синтетический счет, то сумма собирается как сумма (СуммаДт - СуммаКт) всех субсчетов этого счета
- Вместе с номером счета в формуле можно использовать модификаторы:
- (Д) - после номера счета означает что берется дебетовая часть развернутого сальдо
- (К) - после номера счета означает что берется кредитовая часть развернутого сальдо
- {?+} - перед номером счета означает, что сумма остатка берется только если она положительная
- {?-} - перед номером счета означает, что сумма остатка берется только если она отрицательная
Разработчик может создать схему расчета по умолчанию. Такая схема зашивается в макет отчета и будет использоваться при первом запуске. Пользователь всегда может вернуться к этой схеме расчета нажав кнопку «Восстановить схему».
В отчете реализована простейшая расшифровка по статьям баланса. В расшифровку выводятся составляющие части суммы в разрезе бухгалтерских счетов.
Отличия третьей редакции от предыдущей редакции:
- Внешний вид отчета теперь полностью определяется пользователем. Т.е. можно менять не только формулы, но и макет отчета в режиме 1С:Предприятие
- Реализован полноценный редактор табличного документа (схемы расчета)
- Добавлено автоматическое сохранение отредактированной схемы расчета в пользовательских настройках при закрытии отчета и их восстановление при открытии
Не знаю, насколько примененный в отчете подход может быть полезен для других задач, но в моем случае реально помог. Не имея четкой постановки по задаче, отдал заказчику отчет, а через день получил готовую схему расчета (*.mxl файл) с формулами, которые просто перенес в код отчета.
Ясно, что этот отчет не является универсальным решением. Но, может быть, подобный подход можно использовать еще где-нибудь в разработке. Буду рад, если поделитесь идеями :)
ПыСы. В выложенных файлах отчета схема расчета не отражает законченный бухгалтерский баланс, а приведена в качестве демонстрационной.