Транспонирование данных в диаграммах

Диаграмма предназначена для графического представления числовых данных, задаваемых двумя измерениями. Одно измерение в терминах диаграммы называется серии, другое - точки. Однако не все типы диаграмм одинаково хорошо подходят для представления различных данных.

Большинство типов предполагают, что количество серий меньше, чем количество точек. К таким относятся графики, изометрические диаграммы, и различные варианты гистограмм (впрочем, гистограммы являются самыми универсальными с точки зрения удобного представления данных с произвольным сочетанием количества серий и точек). Некоторые из их этих типов предъявляют даже более жесткое требование, чтобы количество точек было как минимум две, для того чтобы диаграмма вообще могла быть построена, и минимум три-четыре, чтобы ее использование имело смысл. К ним, например, относятся графики, изометрическая непрерывная диаграмма и изометрическая лента.

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

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

В платформе 1С:Предприятие 8 диаграмма предоставляет средства, позволяющие решить данную проблему путем перемещения измерений исходных данных из точек в серии и обратно. Этот процесс называется транспонированием. Ниже он будет подробно описан, но для начала следует напомнить, что диаграмма может работать в двух различных режимах - с источником данных и без него, и транспонирование в этих режимах осуществляется по-разному.

Транспонирование в режиме работы с источником данных

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

Транспонирование в режиме прямого заполнения диаграммы

Общее описание

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

Допустим, что в диаграмме заполнено N серий и M точек. После операции транспонирования, мы будем иметь M серий и N точек. При этом значение, которое имело координаты i, j, будет иметь координаты j, i. Отдельно следует описать, что произойдет со свойствами самих точек и серий. Дело в том, что они не симметричны. У серии есть свойства, которые отсутствуют у точки, например, Линия или Индикатор. Что произойдет с этими значениями, когда серия и точка поменяются местами? Поскольку у точки изначально их не было, в новой серии они получат значения по умолчанию. У новой точки их не будет, но они не пропадут, а будут сохранены, и если мы в дальнейшем произведем транспонирование еще раз, и вернем данные в исходное состояние, то значения этих свойств у серии будут восстановлены. Что касается свойств, которые есть и у серии, и у точки, например, Текст, Цвет или Расшифровка, то их значениями серия и точка обменяются. Таким образом, транспонирование представляет собой обратимый процесс.

Ручное транспонирование

Для ручного транспонирования служит метод Транспонировать(). Транспонирование в этом случае выполняется безусловно, если только диаграмма не связана с источником данных и не установлено свойство АвтоТранспонирование (см. ниже).

Автоматическое транспонирование

Для автоматического транспонирования предназначено свойство АвтоТранспонирование. Рассмотрим, что произойдет при установке этого свойства. Будет произведен анализ количества значений в измерениях текущих данных и текущий тип диаграммы. Автоматическое транспонирование будет выполнено в следующих случаях:

При этом факт выполнения транспонирования будет запомнен, и при изменении описанных выше условий (разумеется, и при изменении значения свойства АвтоТранспонирование), будет произведено обратное действие.
 

Совместное использование ручного и автоматического транспонирования

Совместное использование ручного и автоматического транспонирования невозможно. Как было указано выше, в случае если свойство АвтоТранспонирование установлено, метод Транспонировать() не сработает. Обратная последовательность возможна, но в момент включения свойства АвтоТранспонирование предыдущее ручное транспонирование никак не будет учитываться.

Возможные проблемы

Следует подчеркнуть, что транспонирование не создает какое-либо отображение данных при построении, а напрямую изменяет структуру данных диаграммы. Это важно учитывать при заполнении диаграммы. Если свойство АвтоТранспонирование в этот момент включено, то в ситуации, когда заполнение еще не завершено, может произойти транспонирование, и дальнейшее заполнение окажется ошибочным. В связи с этим рекомендуется на время заполнения диаграммы это свойство выключать, и, при необходимости, включать его в конце. Пример заполнения диаграммы можно найти в разделе "Использование значений серий и точек".

Пример использования

Пример использования автоматического транспонирования можно найти в обработке "КонсольОтчетов", которая входит в состав типовых конфигураций.