Как настроить круговую диаграмму в отчете 1С для отображения динамики выполнения проекта?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При управлении проектами часто возникает задача визуализации прогресса: сколько средств уже освоено и какая часть бюджета осталась неиспользованной. Стандартные отчеты в виде таблиц не всегда наглядны, поэтому использование диаграмм, особенно круговых (Pie Charts), становится отличным решением для руководителей и аналитиков. Разберем подробно, как реализовать такой отчет с помощью Системы компоновки данных (СКД), используя примеры кода и настройки структуры.

Анализ исходной ситуации

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

Основная сложность заключается в том, что круговая диаграмма в 1С строит свои сегменты на основе различных значений одного измерения (серии). Если у нас в базе есть только сумма выполнения, диаграмма не сможет «догадаться», какую часть круга составляет остаток. Нам нужно подготовить данные так, чтобы система видела две отдельные категории.

Решение через объединение данных в запросе

Рассмотрим первый способ, предложенный в ходе обсуждения. Мы подготовим данные в запросе таким образом, чтобы каждая строка выполнения дублировалась для категории «Остаток», но с соответствующим вычислением. Проанализируем структуру запроса, который позволит нам это сделать.

Сначала мы собираем данные из регистра накопления во временную таблицу Т. Важно правильно рассчитать процент выполнения, исходя из конечного остатка по проекту и его общей плановой суммы. Посмотрим на пример кода:


ВЫБРАТЬ
    пПроектыСтроительства.Проект КАК Проект,
    пПроектыСтроительства.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток,
    пПроектСтроительства.СуммаПроекта КАК СуммаПроекта,
    ВЫРАЗИТЬ((1 - пПроектыСтроительства.СуммаКонечныйОстаток / пПроектСтроительства.СуммаПроекта) * 100 КАК ЧИСЛО(5, 2)) КАК ПроцентВыполнения
ПОМЕСТИТЬ Т
ИЗ
    РегистрНакопления.пПроектыСтроительства.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, , , ) КАК пПроектыСтроительства
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.пПроектСтроительства КАК пПроектСтроительства
        ПО пПроектыСтроительства.Проект = пПроектСтроительства.Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т.Проект КАК Проект,
    Т.ПроцентВыполнения КАК ЗначениеДоли,
    "Выполнено" КАК ВидДоли
ИЗ
    Т КАК Т

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Т.Проект,
    100 - Т.ПроцентВыполнения,
    "Не выполнено"
ИЗ
    Т КАК Т

В этом запросе мы используем конструкцию ОБЪЕДИНИТЬ ВСЕ. Это ключевой момент: мы создаем искусственное поле ВидДоли, которое будет принимать значения «Выполнено» и «Не выполнено». Таким образом, для каждого проекта в СКД попадет две строки, которые и сформируют два сектора нашего «пирога».

Настройка схемы компоновки данных (СКД)

После того как запрос подготовлен, перейдем к настройке самой системы компоновки. Чтобы диаграмма корректно отобразила наши данные, выполним следующие шаги:

  1. Определение ресурсов: Поле ЗначениеДоли необходимо добавить на вкладку «Ресурсы». В качестве выражения для расчета укажем Сумма(ЗначениеДоли).
  2. Настройка структуры отчета: В иерархии настроек добавим группировку по полю Проект. Внутри этой группировки нажмем правую кнопку мыши и выберем «Новая диаграмма».
  3. Настройка диаграммы:
    • В поле «Точки» мы ничего не добавляем (или добавляем Проект, если хотим видеть несколько диаграмм подряд).
    • В поле «Серии» добавим наше искусственное поле ВидДоли. Это разделит круг на два цвета.
    • В «Выбранные поля» добавим ресурс ЗначениеДоли.

Важный нюанс: Если вы используете круговую диаграмму, убедитесь, что в свойствах диаграммы выбран тип «Круговая» или «Объемная круговая».

Альтернативный метод через вычисляемые поля

Проанализируем ситуацию: использование ОБЪЕДИНИТЬ ВСЕ в запросе удобно, но может замедлить работу при больших объемах данных из-за фактического удвоения количества строк. Мы можем решить задачу элегантнее, используя вычисляемые поля непосредственно в СКД.

Выясним причину, почему это эффективно: мы оставляем запрос линейным, а разделение на доли переносим на уровень логики компоновки. Для этого:

  1. В запросе получаем только СуммаВыполнения и СуммаПроекта.
  2. На вкладке «Вычисляемые поля» добавим поле СуммаОстаток с выражением: ЕСТЬNULL(СуммаПроекта, 0) - ЕСТЬNULL(СуммаВыполнения, 0).
  3. В настройках диаграммы в «Выбранные поля» добавим оба ресурса: СуммаВыполнения и СуммаОстаток.
  4. В поле «Серии» добавим системное поле ИменаРесурсов.

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

Улучшение визуализации и обработка ошибок

При работе с динамикой проектов часто возникает ситуация «перевыполнения», когда фактическая сумма превышает бюджет. Проанализируем, как это отразится на диаграмме. Если 100 - ПроцентВыполнения даст отрицательный результат, круговая диаграмма может отобразиться некорректно или выдать ошибку.

Чтобы этого избежать, рекомендуем использовать условие в запросе или в вычисляемом поле:


ВЫБОР 
    КОГДА СуммаПроекта - СуммаВыполнения < 0 ТОГДА 0 
    ИНАЧЕ СуммаПроекта - СуммаВыполнения 
КОНЕЦ

Также для профессионального вида отчета стоит настроить Условное оформление. Вы можете жестко закрепить цвета за секторами: например, для значения ВидДоли = "Выполнено" всегда использовать зеленый цвет, а для "Не выполнено" — серый. Это делается на вкладке «Условное оформление» в настройках СКД, где в качестве оформляемого поля выбирается «Точка/Серия», а в условии указывается значение ВидДоли.

Когда круговая диаграмма не подходит?

Разберем ситуацию, когда пользователю важна именно динамика во времени (как проект закрывался по месяцам). Круговая диаграмма показывает только срез на конкретную дату. Если ваша цель — показать прогресс накопления, лучше использовать «Гистограмму с накоплением».

В такой гистограмме по оси X (Точки) выводится ПериодМесяц, а по оси Y (Значения) — два ресурса: сколько было выполнено в конкретном месяце и какой остаток плана сохранялся. Это наглядно продемонстрирует, как «пустая» часть общего бюджета постепенно заполняется «фактом» от месяца к месяцу.

Подводя итог, можно сказать, что для создания качественного отчета по динамике закрытия проекта в 1С достаточно грамотно подготовить структуру данных в СКД, разделив план и факт на отдельные категории (серии), и уделить внимание обработке исключительных ситуаций, таких как превышение бюджета.

← На главную