В практике разработки на платформе 1С:Предприятие 8.3 часто возникает задача создания нестандартных аналитических отчетов. Одной из наиболее сложных задач является построение гибрида Оборотно-сальдовой ведомости (ОСВ) и Шахматной ведомости. Пользователи хотят видеть не просто итоговые суммы по счетам, но и детальную расшифровку того, с какими именно корреспондирующими счетами «встречался» основной счет, причем с сохранением возможности разворачивать строки по субконто.
В этой статье мы подробно разберем, как подойти к решению этой задачи, какие механизмы платформы использовать и почему стандартная ОСВ не всегда подходит в качестве фундамента для такой разработки.
Прежде всего, давайте проанализируем, почему обычная Оборотно-сальдовая ведомость не может быть расширена простым добавлением колонок. Стандартная ОСВ строится на виртуальной таблице ОстаткиИОбороты регистра бухгалтерии. Особенность этой таблицы в том, что она агрегирует данные по периодам и остаткам, но не содержит информации о корреспонденции счетов. В ней есть «СуммаОборотДт» и «СуммаОборотКт», но нет поля «КорСчет».
Для реализации «шахматки» с субконто нам необходимо использовать виртуальную таблицу Обороты. Именно в этой таблице доступны измерения:
Счет (основной счет);КорСчет (корреспондирующий счет);Субконто (аналитика основного счета);КорСубконто (аналитика корреспондирующего счета).Разберем по шагам, как настроить получение данных для такого отчета.
Наиболее современным и гибким способом является использование СКД с типом структуры «Таблица». Рассмотрим алгоритм настройки:
Шаг 1: Подготовка запроса. Нам нужно выгрузить данные об оборотах. Пример текста запроса в схеме компоновки данных может выглядеть следующим образом:
ВЫБРАТЬ
ХозрасчетныйОбороты.Счет КАК Счет,
ХозрасчетныйОбороты.КорСчет КАК КорСчет,
ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
ХозрасчетныйОбороты.Субконто2 КАК Субконто2,
ХозрасчетныйОбороты.СуммаОборот КАК Сумма
ИЗ
РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Авто, , , , , ) КАК ХозрасчетныйОбороты
Шаг 2: Настройка структуры «Таблица». В настройках СКД добавим новый элемент «Таблица»:
Счет, а под ним — иерархию по Субконто1, Субконто2 и так далее. Это обеспечит визуальное сходство с ОСВ.КорСчет. Система автоматически создаст столько колонок, сколько различных корреспондирующих счетов было задействовано в проводках за указанный период.Сумма.Как отмечают опытные разработчики, основная сложность «скрещивания» ОСВ и Шахматки заключается в выводе сальдо. В классической шахматной ведомости остатков нет, а в ОСВ они обязательны. Если мы просто добавим остатки в таблицу СКД с колонками по коррсчетам, остатки начнут дублироваться или выводиться некорректно для каждой колонки корреспонденции.
Проанализируем методику решения этой проблемы. Нам потребуется объединение наборов данных:
Счет, КорСчет и СуммаОборот.Счет, СуммаНачальныйОстатокДт и СуммаКонечныйОстатокДт.В настройках СКД колонки с остатками необходимо вынести вне группировки по коррсчетам. Таким образом, в строке отчета сначала будет идти сальдо на начало, затем динамический блок колонок с шахматкой (обороты по коррсчетам), и в конце — итоговый оборот и сальдо на конец.
Построение полной шахматки по всем счетам с детализацией до субконто — это ресурсоемкая операция. Если база крупная, отчет может формироваться долго. Рассмотрим, как оптимизировать процесс:
ТабличныйДокумент. Это позволит вручную управлять объединением ячеек в шапке отчета.Как было справедливо замечено в ходе обсуждения, типовой отчет Шахматная ведомость уже имеет архитектуру, рассчитанную на вывод корреспондирующих счетов в колонках. Если ваша цель — получить разворот именно «по горизонтали», то технически проще взять за основу код шахматки и внедрить в левую часть (строки) алгоритм вывода субконто из ОСВ.
Проанализируем ситуацию: в ОСВ количество граф фиксировано. В Шахматке — динамично. Добавление динамических колонок в жесткую структуру ОСВ потребует переписывания всего модуля формирования макета. В то время как добавление уровней группировки в строки Шахматки — это стандартная работа с коллекцией ГруппировкиСтрок.
Выясним причину, по которой пользователи просят такой отчет: им нужно видеть не просто сумму затрат, а «откуда они пришли» (со счета 10, 70 или 69) в одном окне с остатками. Для реализации этого функционала:
РегистрБухгалтерии.Хозрасчетный.Обороты для получения связей Счет-КорСчет.КорСчет — это колонка.ОстаткиИОбороты.Такой подход позволит вам создать мощный инструмент финансового анализа, не изобретая велосипед, а эффективно используя встроенные механизмы 1С:Предприятия.