[ Вопрос дня ] Как вывести две диаграммы по горизонтали на одном уровне?

Доброго дня, коллеги!

В рамках курса Профессиональная разработка отчетов в 1С 8.3 на СКД  изучается тема “Использование и настройка отображения диаграмм”. В связи с развитием механизма диаграмм в версии платформы 1С 8.3.16 эта тема наверняка будет дополнена новыми примерами.  Более того сами слушатели подкидывают нам идеи, ценные с точки зрения интересной демонстрации возможностей и высокой практической значимости.

Вопрос

Есть ли возможность вывести две диаграммы по горизонтали на одном уровне? То есть не одна под другой, а одна левее, вторая правее. Желательно с примером.

Ответ

Настроек компоновки для такого расположения диаграмм нет. Но при помощи программного кода можно добиться требуемого расположения диаграмм.

В настройках отчета выводим две диаграммы:

Две диаграммы

Если не написать никакого программного кода, то диаграммы будут выведены друг под другом.

В модуле отчета создаем метод ПриКомпоновкеРезультата, содержащий вот такой код:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    //1.
    СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    //2.
    ДокументРезультат.Рисунки[1].Верх = ДокументРезультат.Рисунки[1].Верх - X;//подобрать значение
    ДокументРезультат.Рисунки[1].Лево = ДокументРезультат.Рисунки[1].Лево + Y;//подобрать значение
КонецПроцедуры

В коде выполняются действия по программной компоновке отчета (п. 1). Затем для второй диаграммы меняем её расположение в табличном документе, двигаем по горизонтали и вертикали (п. 2). Надо только подобрать значения X и Y, чтобы диаграммы были красиво расположены рядом.

Получается вот такой отчет:

Реализация услуг и прочих активов

(нажмите, чтобы увеличить картинку)

Комментарий слушателя

Спасибо. Вы бы включили это в курс. На практике часто бывает пользователю нужно именно 2-3 графика рядом друг с другом для наглядности.

Комментарий тренера

Ок. Этот прием может быть полезным на практике.

Это пример разобранного вопроса из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на СКД.

Описание курса и примеры видео

Комментарии / обсуждение (9):

  1. Алексей

    Так как в горизонтальной диаграмме в скд запросе нет возможностей вывести подписи, то пробую построить числовую таблицу клиент-заказ-сумма заказа-сумма оплаты, а рядом визуализацию в виде горизонтальной диаграммы с подгонкой высоты диаграммы под размер таблицы. для этого надо знать кол-во строк в выдаче таблицы и высчитать высоту рисунка диаграммы. как узнать кол-во строк в процедуре ПриКомпоновкеРезультата?

    • Василий Ханевич

      Добрый день!
      Можно выполнить вывод результата компоновки в таблицу значений, подсчитать количество строк в таблице. Затем таблицу значений использовать в качестве внешнего набора данных, передать ее в компоновщик, вывести результат в табличный документ. Здесь можно применить набор данных – объект.
      Или еще вариант – выводить результат в табличный документ, определить количество строк в скомпонованном табличном документе, программно рассчитать высоту шапки. Тогда высота табличного документа минус высота шапки – это как раз и будет количество строк с данными.

  2. Алексей

    А как в процедуре ПриКомпоновкеРезультата узнать размер таблицы (кол-ва строк) выдачи для масшабирования диаграммы с выводом ее рядом с таблицей данных?

  3. Алексей

    А как в диаграмме типа горизонтальная гистограмма вывести не учебные 10-15 строк с полосками диаграммы, а реальную диаграмму на 50-100 строк?

    • Василий Ханевич

      Добрый день!
      Программный код будет одинаковым как для 10-15 “строк”, так и для любого другого количества. Платформа отрисует диаграмму по тем данным, которые были переданы в объект Диаграмма в программном коде.
      Таким образом, в диаграмму нужно просто передавать реальные данные, по ним и будет построена диаграмма.

      • Алексей

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

        • Василий Ханевич

          1. Речь идет про программный код на этой странице. Он не меняется в зависимости от количества данных.

          2. Без Вашей базы трудно представить, что именно выглядится не так, как требуется.
          Могу порекомендовать демо-конфигурацию Диаграммы фирмы “1С”: https://demo.1c.ru/charts
          В ней можно увидеть внешние виды различных вариантов диаграмм, в том числе и горизонтальную гистограмму.
          Есть программный код, который обеспечивает вывод такой диаграммы. Есть настройки компоновки для вывода диаграммы в отчет.
          Посмотрите, пожалуйста, может, что-то из предложенного наведет на мысль, как решить Вашу задачу.

          Если платформа “1С:Предприятие” не формирует диаграмму нужного Вам вида, то можно попробовать самостоятельно отрисовывать диаграмму на форме, например, используя поле HTML-документа.

      • Алексей

        Как увеличить высоту кадра перед началом формирования диаграммы под кол-во строк выдачи?

        • Василий Ханевич

          Непонятно, что такое “высота кадра”.
          Если имеете в виду размер рисунка с диаграммой в табличном документе, то попробуйте после завершения компоновки в процедуре ПриКомпоновкеРезультата программно изменить размер рисунка.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.