Как отключить диаграммы в 1с
Так уж получилось, что за более чем 10 лет работы с платформой 1С:Предприятие мне ни разу не приходилось плотно работать с диаграммами в табличном документе. Разве что пару раз приходилось выводить в отчет круговые диаграммы, но никаких сложностей при этом обнаружено не было.
И вот оно наступило – время диаграмм. Я сейчас работаю в инвестиционной компании, которая занимается в том числе доверительным управлением средствами клиентов. Клиенты разные: от больших НПФ до частных инвесторов, которые хотят выгодно вложить свои 2-3 миллиона рублей. Надо сказать, что при таком инвестировании можно получить доход выше процентной ставки по банковским депозитам даже при осторожной стратегии. Впрочем, можно и почти ничего не выиграть. Но если Вам нужно получить доход за небольшой срок (год-два), уходить для этого в недвижимость или золото навряд ли стоит.
Всем клиентам интересно знать, в какие активы вложены их деньги, какова доходность инвестиционного портфеля за период и в целом, как влияют внешние факторы на перспективы получения дохода. Далеко не все имеют экономическое образование, поэтому было принято решение формировать периодические отчеты для инвесторов в виде буклета с большим количеством диаграмм. Первоначально макет был нарисован нашим менеджером в Adobe Illustrator, затем пришла моя очередь.
С цветовой палитрой и шрифтами проблем не возникло – 1С позволяет манипулировать ими всюду, где это необходимо. Вывод логотипов и таблиц также не представлял сложности, кроме того, что место под каждую табличку было ограничено компоновкой отчета, поэтому приходилось всякий раз анализировать, какие показатели считать значимыми, а какие – прочими.
Проблемы начались при работе с диаграммами. Но прежде, чем их обозначить, давайте вспомним, как в языке платформы 1С:Предприятие выполняется работа с диаграммами в табличном документе.
Каждый табличный документ содержит коллекцию Рисунки. В нее могут входить как статические рисунки (логотипы,пиктограммы, фотографии), так и диаграммы. В случае диаграммы у элемента коллекции Рисунок проинициализировано свойство Объект типа Диаграмма. Важно отметить, что если вы формируете табличный документ путем последовательного вывода в него областей макета с диаграммами, никакого простого способа найти нужную диаграмму в итоговом документе не существует: индекс и имя рисунка всякий раз могут меняться при выводе области в документ, остается лишь искать по свойствам Объекта, например, Заголовок или ТипДиаграммы.
В Excel диаграмма 1С выгружается в виде рисунка.
Обычно диаграммы вставляются в макет отчета, настраиваются их свойства, а затем при выводе отчета программно формируются значения диаграммы. В этой статье не рассматривается вывод диаграмм в отчет с использованием СКД, там есть свои плюсы и минусы.
Каждая диаграмма имеет тип (круговая, гистограмма, график и т.д.). А отрисовывается она благодаря установке значений, связанных с точками и сериями. Серии и точки (элементы коллекций Серии и Точки) можно задать сразу в Конфигураторе, это удобно, когда количество строго ограничено рамками задачи и/или необходимо жестко задать цвет, текст и некоторые другие параметры.
Кстати, при «кликании» на диаграмму в макете у вас может открыться окно свойств области построения диаграммы. Кликните еще раз – и у вас откроется окно свойств объекта Диаграмма.
Серии – это то, что мы обычно раскрашиваем в диаграмме разными цветами. Например, сколько разноцветных сегментов в круговой диаграмме, столько и серий с ненулевыми значениями точки. Точки – это то, что в диаграмме располагается вдоль оси.
Вырожденные случаи: в круговой диаграмме много серий, но одна точка, а гистограмму или график вполне можно построить по одной серии, но по нескольким точкам.
Можно определять серии и точки программно, при этом нужно следить за их добавлением в коллекцию и не забывать устанавливать свойство Текст (особенно для точек, иначе мы не увидим подписей на горизонтальной оси графика). Обращение к сериям и точкам производится через индекс элемента коллекции.
А чтобы задать значение диаграммы, применяется метод УстановитьЗначение(), в который передаются индекс точки, индекс серии и собственно значение. Обычно этот метод вызывается в цикле обхода таблицы значений или выборки запроса.
Итак, нам надо нарисовать вот такую диаграмму:
Проблема 1: 1С не умеет изменять наклон подписей шкалы. Можно размещать подписи либо горизонтально, либо вертикально. Делаем вертикально.
Проблема 2 (более серьезная): мне неизвестен способ заставить 1С добавлять символ процента к значениям точек и легенде шкалы. Настройка везде идет через строку формата, а платформа не позволяет использовать в форматной строке числа произвольный символ. Объект Диаграмма позволяет работать с процентами, но только при анализе соотношения значений по сериям. Если серия одна, то выбирать способ вывода значений в процентах бессмысленно. Что ж, добавляем в заголовок примечание (в %).
Переходим к следующей диаграмме:
Проблема 3. Первое, что бросается в глаза – пунктирное приращение на накопительной гистограмме в последней точке. Так 1С строить диаграммы не умеет, поэтому нам придется придумать для последней серии свой цвет фона.
Проблема 4. Кроме того, цвет подписи значений на диаграмме разный – для серии 1 он белый, для серии 2 он черный. Так 1С тоже не умеет. Придется использовать всюду белый цвет.
Обратите внимание – шкала ординат начинается со значения 307. Это сделано для того, чтобы наглядно увидеть приращение активов. Потому что если выводить шкалу с нуля, то сверху каждого столбика мы увидем малюсенькую полоску приращения, она ведь чуть более процента от значения по Серии 1.
Проблема 5. Казалось бы, у объекта Диаграмма есть свойство МинимальноеЗначение и никто нам не мешает его установить. Устанавливаем. Упс. Выясняется, что для гистограмм оно не работает. Жаль. Но есть свойство БазовоеЗначение. Устанавливаем его в 307 и получаем то, что нужно.
Однако тестирование отчета довольно быстро показывает, что базовое значение корректно работает только тогда, когда в роли доминанты выступает Серия 1. Если же в первой точке значение по Серии 1 будет маленьким, а значение по Серии 2 или по любой другой серии, отличной от первой, будет большим, то мы получим примерно такой эффект:
Мне не удалось найти способ выводить накопительную гистограмму в нормализованном относительно минимального значения виде. После общения с разработчиками выснилось, что действительно, базовое значение считается всегда относительно Серия 1. Получается, что статическое задание серий в Конфигураторе - практически бесполезная фича, нужно программно анализировать значения серий перед выводом гистограммы и переназначать как Серия 1 ту, которая в первой точке имеет максимальное значение.
На партнерской конференции этот вопрос (неработающие свойства Минимальное и МаксимальноеЗначение) поднимался неоднократно, но воз и ныне там. Возможно не хватает настойчивости пользователей, которые довольно редко работают с диаграммами в 1С.
Почему редко? Потому что следующая ошибка ясно показала, насколько серьезные баги встречаются в механизме диаграмм 1С. Будь такого уровня баг в механизме расчета зарплаты или при работе СКД – его бы в момент вычислили.
Воспроизводится он очень просто.
Проблема 6. Делаем макет из нескольких горизонтальных секций. В каждой помещаем 2-3 диаграммы. Все это выводим в табличный документ, заполняя значения диаграмм программно. И вдруг видим, что исчезают подписи к горизонтальной шкале одной из диаграмм. В отладчике видим, что в заполненной области макета имена точек есть, но после выполнения метода
в ТабДок попадает диаграмма уже без имен точек. Ошибка «гуляет» от диаграммы к диаграмме, но воспроизводится стабильно. По крайней мере, на релизе 8.2.17.
Пришлось написать кусок кода, который повторно обходит Рисунки в итоговом табличном документе и устанавливает правильные имена точек. Чем-то напоминает древний баг платформы 7, когда значение переменной присваивалось только со второго-третьего раза.
Проблема 7.
Невозможно вывести в Excel прозрачную диаграмму 1С. У диаграммы 1С есть свойство "Прозрачный фон" и его можо использовать при выводе в табличный документ. Но при экспорте в Excel диаграммы 1С заменяются на картинки, причем непрозрачные.
Пытался средствами 1С произвести подмену диаграммы прозрачной картинкой. У диаграммы есть метод ПолучитьКартинку().
Далее через выгружал BMP-файл в двоичные данные (можно в файл) и создавал конструктором новый объект Картинка. Если при создании картинки из источника установить второй параметр в Истина, то рисунок превратится в прозрачный. А прозрачный рисунок можно экспортировать в Excel, если РазмерРисунка=ИзменятьПропорционально.
Но вот незадача - подобная конвертация сильно искажает исходную диаграмму и практического смысла не имеет:
Но в целом инструмент полезный и довольно многофункциональный. Не ленитесь его использовать – и ваши отчеты будут выглядеть очень наглядно.
Что касается решения моей конкретной задачи, то в итоге я взял, да и нарисовал все диаграммы прямо в Excel. И все получилось.
Библиотеку отрисовки диаграмм в Excel вы можете взять из моей статьи тут:
Диаграмма вставляется в таблицу печатной формы с помощью пункта Вставить рисунок меню Таблица. Далее необходимо сделать следующие действия: определить тип диаграммы (гистограмма, график, круговая и т.п.), настроить внешний вид составных частей диаграммы, а затем описать процедуру "наполнения" данными при выводе печатной формы. Пройдемся поподробнее по каждому из этих действий.
Задание типа диаграммы
Для отображения разных наборов данных имеются более или менее удачные типы диаграмм. Задача программиста при конфигурировании определить тип будущей диаграммы, и задать его при форматировании области построения (контекстное меню области - закладка Тип диаграммы). Задав тип и закрыв окно форматирования, можно увидеть пример построенной диаграммы.
Настройка внешнего вида диаграммы
Для того чтобы включить режим форматирования областей диаграммы, необходимо выбрать пункт Изменить подменю Объект: 1С. V7. Диаграмма меню Действия (тое же пункт есть в контекстном меню диаграммы). Каждая из составных частей диаграммы в режиме редактирования имеет пункт контекстного меню Формат области … Настройка внешнего вида состоит из выбора заливки, рамки, цвета и шрифта текста и т.п. Там же можно определить, например, сетку для области построения. После завершения форматирования достаточно щелкнуть по любой ячейке таблицы, чтобы выключить режим форматирования.
Наполнение диаграммы данными
Диаграмма как объект системы 1С принадлежит таблице, в которую она вставлена. Обращение к объекту происходит в момент вывода на печать таблицы (метод Вывести()) или секции таблицы (метод ВывестиСекцию()), в которую вставлена диаграмма. Для того, чтобы при обращении были выполнены некоторые действия по подготовке данных для диаграммы, в свойствах объекта на закладке "Текст" необходимо указать строку вызова соответствующей процедуры, передав ей в качестве параметра контекст диаграммы как текущего объекта таблицы. Строка может выглядеть, например, так:
где: ОбработкаДиаграммы - имя процедуры, Таб - имя выходной таблицы (должна быть предварительно создана методом СоздатьОбъект()).
В модуле описывается процедура с идентификатором, через который будет производиться к контексту диаграммы:
где Диаграмма1 - идентификатор, в который передается контекст объекта Диаграмма. Все методы объекта записываются через точку после идентификатора.
Форум
Диаграмма предоставляет удобное графическое представление некоторого набора данных, чаще всего результатов каких-либо изменений. 1С предоставляет собственный (надо сказать, приятный) инструмент такого графического представления - объект "Диаграмма". Область диаграммы состоит из нескольких частей: область построения (там создается рисунок), заголовка (надписи над рисунком), легенды (расшифровки меток серий). В диаграмме имеются серии (т.е. наборы значений) и точки, из которых состоят серии (см. рис.1).
Создание диаграммы
Диаграмма вставляется в таблицу печатной формы с помощью пункта Вставить рисунок меню Таблица. Далее необходимо сделать следующие действия: определить тип диаграммы (гистограмма, график, круговая и т.п.), настроить внешний вид составных частей диаграммы, а затем описать процедуру "наполнения" данными при выводе печатной формы. Пройдемся поподробнее по каждому из этих действий.
Задание типа диаграммы
Для отображения разных наборов данных имеются более или менее удачные типы диаграмм. Задача программиста при конфигурировании определить тип будущей диаграммы, и задать его при форматировании области построения (контекстное меню области - закладка Тип диаграммы). Задав тип и закрыв окно форматирования, можно увидеть пример построенной диаграммы.
Настройка внешнего вида диаграммы
Для того чтобы включить режим форматирования областей диаграммы, необходимо выбрать пункт Изменить подменю Объект: 1С. V7. Диаграмма меню Действия (тое же пункт есть в контекстном меню диаграммы). Каждая из составных частей диаграммы в режиме редактирования имеет пункт контекстного меню Формат области … Настройка внешнего вида состоит из выбора заливки, рамки, цвета и шрифта текста и т.п. Там же можно определить, например, сетку для области построения. После завершения форматирования достаточно щелкнуть по любой ячейке таблицы, чтобы выключить режим форматирования.
Наполнение данными диаграммы
Диаграмма как объект системы 1С принадлежит таблице, в которую она вставлена. Обращение к объекту происходит в момент вывода на печать таблицы (метод Вывести()) или секции таблицы (метод ВывестиСекцию()), в которую вставлена диаграмма. Для того, чтобы при обращении были выполнены некоторые действия по подготовке данных для диаграммы, в свойствах объекта на закладке "Текст" необходимо указать строку вызова соответствующей процедуры, передав ей в качестве параметра контекст диаграммы как текущего объекта таблицы. Строка может выглядеть, например, так:
ОбработкаДиаграммы(Таб.ТекущийОбъект)
где: ОбработкаДиаграммы - имя процедуры, Таб - имя выходной таблицы (должна быть предварительно создана методом СоздатьОбъект()).
В модуле описывается процедура с идентификатором, через который будет производиться к контексту диаграммы:
Процедура СформироватьДиаграмму(Диаграмма1)
где Диаграмма1 - идентификатор, в который передается контекст объекта Диаграмма. Все методы объекта записываются через точку после идентификатора.
Основы программирования
Изменение заголовка таблицы
Диаграмма1.Заголовок = "Поступления от покупателей";
Работа с сериями диаграммы
//установим количество серий. Каждая при этом получит свой номер.
Диаграмма1.КоличествоСерий(3); // так у нас будет три серии
//однако если в другом методе будет передана серия с большим номером,
//количество серий будет автоматически увеличено.
КолСерий = Диаграмма1.КоличествоСерий();
// а так переменной КолСерий будет передано текущее количество серий
// так мы зададим имя "Рубли" серии № 1
Диаграмма1.УстановитьИмяСерии(1, "Рубли");
// установим цвет серии № 2
// этот метод не обязательный, как впрочем и некоторые другие
Диаграмма1.ЦветСерии(2, 35, 67, 90);
// установили: 35 единиц красной компоненты, 67 - зеленой, 90 - синей
//можно установить имена серий автоматически: Серия1, Серия2, и т.д.
Диаграмма1.АвтоУстановкаИменСерий(1);
//если поставить вместо флага 1 флаг 0, автоустановка имен будет запрещена.
Работа с точками диаграммы
//установим количество точек, скажем, 8 штук
Диаграмма1.КоличествоТочек(8);
//однако если в другом методе будет передана тока с большим номером,
//количество точек будет автоматически увеличено.
// метод может возвратить текущее количество точек
КолТочек = Диаграмма1.КоличествоТочек();
// можно установить имя любой точки
Диаграмма1.УстановитьИмяТочки(7, "7 точка");
//можно установить имена точек автоматически: 1, 2, 3, и т.д.
Диаграмма1. АвтоУстановкаИменТочек(1);
//если поставить вместо флага 1 флаг 0, автоустановка имен будет запрещена.
Передача значений точкам серий
Это самый важный метод диаграммы. Он устанавливает значение серии в точке равным с возможностью последующей расшифровки. Все параметры, кроме параметра должны быть числовыми выражениями.
Синтаксис:
- параметр не обязательный, может иметь любой тип. Это значение, которое будет передано предопределенной процедуре ОбработкаЯчейкиТаблицы при двойном щелчке мышью на точке диаграммы. Так можно получать расшифровки точек диаграммы. Удобная штука!
Два вспомогательных метода диаграммы
Запрет перерисовки может ускорить работу системы во время наполнения таблицы данными.
Диаграмма1.Обновление(0);
//то же выражение, но с флагом 1 разрешит перерисовку
Очистка всех установленных значений имен и количеств точек, серий, диаграммы делается так:
Диаграмма1.Очистить();
Пример использования диаграммы в 1С: Бухгалтерия
// Блокируем обновление, пока обрабатываются данные
Диаграмма1.Обновление(0);
Диаграмма1.Заголовок = "Поступления от покупателей";
Диаграмма1.УстановитьИмяСерии(1, "Рубли");
Диаграмма1.АвтоУстановкаИменТочек(1);
// Заполним диаграмму значениями
БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
Бухит.ВыполнитьЗапрос(НачКвартала(РабочаяДата()),
КонКвартала(РабочаяДата()),"60.1". 1,"Неделя","С");
БухИт.ВыбратьПериоды();
А = 1;
// дебетовые обороты по счету 60.1 покажут поступления
// денег от покупателей
Пока БухИт.ПолучитьПериод() = 1 Цикл
Диаграмма1.УстановитьЗначение(А, 1, БухИт.ДО());
А = А +1;
// после наполнения данными перерисовываем
Диаграмма1.Обновление(1);
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C медленно работает по сети с базой на SQL Server 20
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих
Еще в этой же категории
Ошибка RDP: Удаленный сеанс отключен, отсутствуют клиентские лицензии!? 1
Ошибка RDP: Удаленный сеанс отключен, поскольку для данного компьютера отсутствуют клиентские лицензии удаленного рабочего стола Иногда в процессе работы с удаленными рабочими столами на клиентских машинах встречается проблема - при подключении к Как заполнить диаграмму данными? 0
// Перезаполнит объект Диагамма значениями из Источник // Параметры: // Диаграмма - Диаграмма // Источник - Массив, Таблица значений, Табличная часть - Коллекция, // для которой доступен обход элементов коллекции посредством оператора Для каждо Как сформировать диаграмму с типом Гистограмма объемная 0
В этом примере формируется диаграмма с типом Гистограмма объемная Данные получаем запросом: ДатаЗапроса = НачалоДня(ТекущаяДата()); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВЫБОР | КОГДА СостояниеДоставки.НетМашины | ТОГДА "" Посмотреть все в категории Диаграмма
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C медленно работает по сети с базой на SQL Server 20
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Посмотреть все результаты поиска похожих
Еще в этой же категории
Построение диаграммы 2
Процедура ФормДиаграммы() Траб=Новый ТаблицаЗначений; Траб.Очистить(); Траб.Колонки.Добавить(" ххх" ); Траб.Колонки.Добавить(" Норм" ); Траб.Колонки.Добавить(" Факт" ); НовСтр=Траб.Добавить(); НовСтр.ххх=" а1" ; НовСтр.Норм=5; НовСтр.Факт=1 Процедура формирования Диаграммы на форме и в макете 1
// Траб - Таблица значений с данными // Диаграмма - ЭлементыФормы.Диаграмма Процедура ПостроитьДиаграмму(Траб,Диаграмма) Для Каждого Колонка из Траб.Колонки Цикл Если Траб.Колонки.Индекс(Колонка) 0 Тогда Диаграмма.Серии.Добавить(Колонка.Имя) Диаграмма Ганта - Как выделить выходные другим цветом? 1
Неделя = 3600 * 24 * 7; Выходные = 3600 * 48; МаксимальнаяДата =ДатаД1; // + Неделя * 4; ТекущаяДата = ДатаД; Пока ТекущаяДата = МаксимальнаяДата Цикл Конец = НачалоНедели(ТекущаяДата); Начало = Конец - Выходные; ИнтФ=ДГ.ИнтервалыФон Ошибка RDP: Удаленный сеанс отключен, отсутствуют клиентские лицензии!? 1
Ошибка RDP: Удаленный сеанс отключен, поскольку для данного компьютера отсутствуют клиентские лицензии удаленного рабочего стола Иногда в процессе работы с удаленными рабочими столами на клиентских машинах встречается проблема - при подключении к Как заполнить диаграмму данными? 0
Диаграмма = ЭлементыФормы.Диаграмма; // Очистить диаграмму, возможно ранее в нее уже выводились данные. Диаграмма.КоличествоСерий = 0; Диаграмма.КоличествоТочек = 0; // Количество серий будет ограничиваться (не все значения будут показыватьс Посмотреть все в категории Диаграмма
Читайте также: