Как реализовать отчет на базе ОСВ с разворотом по коррсчетам и субконто?

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

В практике разработки на платформе 1С:Предприятие 8.3 часто возникает задача создания нестандартных аналитических отчетов. Одной из наиболее сложных задач является построение гибрида Оборотно-сальдовой ведомости (ОСВ) и Шахматной ведомости. Пользователи хотят видеть не просто итоговые суммы по счетам, но и детальную расшифровку того, с какими именно корреспондирующими счетами «встречался» основной счет, причем с сохранением возможности разворачивать строки по субконто.

В этой статье мы подробно разберем, как подойти к решению этой задачи, какие механизмы платформы использовать и почему стандартная ОСВ не всегда подходит в качестве фундамента для такой разработки.

Анализ структуры данных и выбор источника

Прежде всего, давайте проанализируем, почему обычная Оборотно-сальдовая ведомость не может быть расширена простым добавлением колонок. Стандартная ОСВ строится на виртуальной таблице ОстаткиИОбороты регистра бухгалтерии. Особенность этой таблицы в том, что она агрегирует данные по периодам и остаткам, но не содержит информации о корреспонденции счетов. В ней есть «СуммаОборотДт» и «СуммаОборотКт», но нет поля «КорСчет».

Для реализации «шахматки» с субконто нам необходимо использовать виртуальную таблицу Обороты. Именно в этой таблице доступны измерения:

Разберем по шагам, как настроить получение данных для такого отчета.

Реализация через Систему компоновки данных (СКД)

Наиболее современным и гибким способом является использование СКД с типом структуры «Таблица». Рассмотрим алгоритм настройки:

Шаг 1: Подготовка запроса. Нам нужно выгрузить данные об оборотах. Пример текста запроса в схеме компоновки данных может выглядеть следующим образом:


ВЫБРАТЬ
    ХозрасчетныйОбороты.Счет КАК Счет,
    ХозрасчетныйОбороты.КорСчет КАК КорСчет,
    ХозрасчетныйОбороты.Субконто1 КАК Субконто1,
    ХозрасчетныйОбороты.Субконто2 КАК Субконто2,
    ХозрасчетныйОбороты.СуммаОборот КАК Сумма
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &КонецПериода, Авто, , , , , ) КАК ХозрасчетныйОбороты

Шаг 2: Настройка структуры «Таблица». В настройках СКД добавим новый элемент «Таблица»:

  1. В строки таблицы мы добавим группировки по полю Счет, а под ним — иерархию по Субконто1, Субконто2 и так далее. Это обеспечит визуальное сходство с ОСВ.
  2. В колонки таблицы мы добавим группировку по полю КорСчет. Система автоматически создаст столько колонок, сколько различных корреспондирующих счетов было задействовано в проводках за указанный период.
  3. В ресурсы добавим поле Сумма.

Решение проблемы начальных и конечных остатков

Как отмечают опытные разработчики, основная сложность «скрещивания» ОСВ и Шахматки заключается в выводе сальдо. В классической шахматной ведомости остатков нет, а в ОСВ они обязательны. Если мы просто добавим остатки в таблицу СКД с колонками по коррсчетам, остатки начнут дублироваться или выводиться некорректно для каждой колонки корреспонденции.

Проанализируем методику решения этой проблемы. Нам потребуется объединение наборов данных:

В настройках СКД колонки с остатками необходимо вынести вне группировки по коррсчетам. Таким образом, в строке отчета сначала будет идти сальдо на начало, затем динамический блок колонок с шахматкой (обороты по коррсчетам), и в конце — итоговый оборот и сальдо на конец.

Оптимизация и производительность

Построение полной шахматки по всем счетам с детализацией до субконто — это ресурсоемкая операция. Если база крупная, отчет может формироваться долго. Рассмотрим, как оптимизировать процесс:

  1. Ограничение списка счетов. Рекомендуем добавить в параметры отчета возможность выбора конкретных групп счетов (например, только 20-е или только 60-е счета).
  2. Использование механизма характеристик. Для динамического вывода субконто разных типов (Контрагенты, Номенклатура, Статьи затрат) лучше использовать вкладку «Характеристики» в СКД. Это позволит унифицировать обращение к аналитике.
  3. Программная обработка расшифровки. Если стандартных настроек группировки не хватает, можно использовать программный вывод в ТабличныйДокумент. Это позволит вручную управлять объединением ячеек в шапке отчета.

Почему «Шахматка» лучше в качестве базы?

Как было справедливо замечено в ходе обсуждения, типовой отчет Шахматная ведомость уже имеет архитектуру, рассчитанную на вывод корреспондирующих счетов в колонках. Если ваша цель — получить разворот именно «по горизонтали», то технически проще взять за основу код шахматки и внедрить в левую часть (строки) алгоритм вывода субконто из ОСВ.

Проанализируем ситуацию: в ОСВ количество граф фиксировано. В Шахматке — динамично. Добавление динамических колонок в жесткую структуру ОСВ потребует переписывания всего модуля формирования макета. В то время как добавление уровней группировки в строки Шахматки — это стандартная работа с коллекцией ГруппировкиСтрок.

Резюме для разработчика

Выясним причину, по которой пользователи просят такой отчет: им нужно видеть не просто сумму затрат, а «откуда они пришли» (со счета 10, 70 или 69) в одном окне с остатками. Для реализации этого функционала:

  1. Используйте РегистрБухгалтерии.Хозрасчетный.Обороты для получения связей Счет-КорСчет.
  2. В СКД применяйте тип «Таблица», где КорСчет — это колонка.
  3. Для вывода сальдо используйте отдельный набор данных или левое соединение с таблицей ОстаткиИОбороты.
  4. Не забудьте про условное оформление: итоги по строкам в таком отчете должны соответствовать оборотам в обычной ОСВ, что служит отличным способом самопроверки для бухгалтера.

Такой подход позволит вам создать мощный инструмент финансового анализа, не изобретая велосипед, а эффективно используя встроенные механизмы 1С:Предприятия.

← На главную