МакетГруппировкиДиаграммыОбластиКомпоновкиДанных

Типы · DataCompositionAreaTemplateChartGroupTemplate

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

Полное описание, параметры и ограничения

МакетГруппировкиДиаграммыОбластиКомпоновкиДанных (DataCompositionAreaTemplateChartGroupTemplate)

МакетГруппировкиДиаграммыОбластиКомпоновкиДанных (DataCompositionAreaTemplateChartGroupTemplate)

Доступен, начиная с версии 8.1.

Свойства:
Значение (Value)
Оформление (Appearance)
Представление (Presentation)

Описание:

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

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data-composition-system/area-template}. Имя типа XDTO: ChartGroupTemplate.

Использование в версии:

Доступен, начиная с версии 8.1.

Методическая информация

Практические примеры

Форматировать подписи значений, не меняя группировки диаграммы

Работаем с реально скомпилированными макетами серий/точек. Применяем числовой формат подписей и проверяем сохранность значения и представления группировки.

Где и как запускать

Полный клиентский общий модуль УчебныеОбласти85 обычного приложения. Только толстый клиент; Пульт отдельным модулем ниже. Не выполнялся.

Подготовка

  1. Создайте НОВУЮ отдельную файловую учебную базу платформы 8.5.1.1343, имя конфигурации УчебныеОбластиСКД85, совместимость НеИспользовать, обычное приложение и толстый клиент. Не рабочая база. Здесь код и UI не выполнялись: runtimeVerifiedScenarios=0.

  2. Общий модуль УчебныеОбласти85: неглобальный, Клиент (обычное приложение)=Да, Сервер=Нет, остальные клиентские флаги=Нет, Привилегированный=Нет. Вставьте полный модуль одного урока, включая функции. Не вставляйте его внутрь другой процедуры.

  3. Создайте собственную обработку УчебныеОбласти85 с обычной основной формой Пульт. Кнопка Выполнить, действие ВыполнитьНажатие. Отдельный полный модуль формы дан ниже; назначьте действие кнопки и проверьте F7 перед будущим запуском.

  4. Для диаграммы схема, настройки, макет и расшифровки создаются в памяти. Local-запрос содержит ровно Север/Книга 3 и 750, Север/Ручка 1 и 50, Юг/Книга 2 и 500. Контроль: 3 строки, 6 единиц, сумма 1300. Справочников, регистров и внешних наборов нет.

  5. Серии диаграммы группируются по Магазин, точки по Наименование, выбран ресурс Сумма. Код берёт реально созданные объекты из Макет.Макеты. Если нужного типа нет, выдаёт ошибку: конструктор для него не придумывается.

  6. Для урока строки печати источник другой: собственный МакетОбластиКомпоновкиДанных со строкой и ячейкой, текстом Книга и числом 750. Урок управляет полями этой ячейки и вручную выводит один собственный ЭлементРезультатаКомпоновкиДанных.

  7. Окна сравнения открываются без имени файла. Не выбирайте печать/сохранение. Новые макеты не берутся из глобальной библиотеки и не меняют общие/пользовательские настройки оформления. Закройте только свои учебные окна вручную.

  8. Поставьте точки останова перед выводом: изучите различия типов макетов и оформление. Сверка типов, параметров и арифметики не доказывает визуальный результат. Каждый урок запускайте отдельно и заново; 1С здесь не запускалась.

Процедура ВыполнитьПример() Экспорт
    ПроверитьСвойКонтекст();
    Опыт = СоздатьСвойОпыт();
    Исходный = СформироватьСвойДокумент(Опыт);
    Для Каждого МакетДиаграммы Из НайтиСвоиМакеты(Опыт.Макет, Тип("МакетДиаграммыОбластиКомпоновкиДанных")) Цикл
        ПрименитьСвойПараметр(МакетДиаграммы.Оформление, "ТипДиаграммы.ВидПодписей", ВидПодписейКДиаграмме.Значение);
    КонецЦикла;
    Макеты = НайтиСвоиМакеты(Опыт.Макет, Тип("МакетГруппировкиДиаграммыОбластиКомпоновкиДанных"));
    Для Каждого МакетГруппировки Из Макеты Цикл
        ЗначениеДо = МакетГруппировки.Значение;
        ПодписьДо = МакетГруппировки.Представление;
        Оформление = МакетГруппировки.Оформление;
        Если ТипЗнч(Оформление) <> Тип("ОформлениеГруппировкиДиаграммыОбластиКомпоновкиДанных") Тогда
            ВызватьИсключение "Нужно оформление собственного макета группировки";
        КонецЕсли;
        ПрименитьСвойПараметр(Оформление, "ФорматЗначенийВПодписяхДиаграммы", "ЧДЦ=2");
        Если МакетГруппировки.Значение <> ЗначениеДо Или МакетГруппировки.Представление <> ПодписьДо Тогда
            ВызватьИсключение "Числовой формат не должен подменять собственное значение или подпись";
        КонецЕсли;
        Сообщить("Представление собственного макета: " + ПодписьДо);
    КонецЦикла;
    Измененный = СформироватьСвойДокумент(Опыт);
    Исходный.Показать("Свои подписи до форматирования", "", Ложь);
    Измененный.Показать("Свои подписи значений: два десятичных знака", "", Истина);
КонецПроцедуры

Процедура ПроверитьСвойКонтекст()
    Если Метаданные.РежимСовместимости <> Метаданные.СвойстваОбъектов.РежимСовместимости.НеИспользовать Тогда
        ВызватьИсключение "Нужен собственный стенд УчебныеОбластиСКД85 платформы 8.5.1.1343";
    КонецЕсли;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Учебный вывод не должен выполняться внутри чужой транзакции";
    КонецЕсли;
КонецПроцедуры

Функция СоздатьСвойОпыт()
    Схема = Новый СхемаКомпоновкиДанных;
    Источник = Схема.ИсточникиДанных.Добавить();
    Источник.Имя = "УчебныеПродажи";
    Источник.ТипИсточникаДанных = "Local";
    Набор = Схема.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    Набор.Имя = "СвоиТриСтроки";
    Набор.ИсточникДанных = Источник.Имя;
    Набор.АвтоЗаполнениеДоступныхПолей = Истина;
    Набор.Запрос = "ВЫБРАТЬ
    |    ""Север"" КАК Магазин,
    |    ""Книга"" КАК Наименование,
    |    3 КАК Количество,
    |    750 КАК Сумма
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Север"", ""Ручка"", 1, 50
    |ОБЪЕДИНИТЬ ВСЕ
    |ВЫБРАТЬ ""Юг"", ""Книга"", 2, 500";
    Для Каждого ИмяРесурса Из СтрРазделить("Сумма,Количество", ",") Цикл
        Ресурс = Схема.ПоляИтога.Добавить();
        Ресурс.ПутьКДанным = ИмяРесурса;
        Ресурс.Выражение = "Сумма(" + ИмяРесурса + ")";
    КонецЦикла;
    Настройки = Схема.НастройкиПоУмолчанию;
    Диаграмма = Настройки.Структура.Добавить(Тип("ДиаграммаКомпоновкиДанных"));
    Диаграмма.Имя = "УчебныеПродажиПоМагазинам";
    Диаграмма.Использование = Истина;
    Выбранное = Диаграмма.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    Выбранное.Поле = Новый ПолеКомпоновкиДанных("Сумма");
    Выбранное.Использование = Истина;
    Серия = Диаграмма.Серии.Добавить();
    Серия.Имя = "Магазины";
    Серия.Использование = Истина;
    ПолеСерии = Серия.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    ПолеСерии.Поле = Новый ПолеКомпоновкиДанных("Магазин");
    ПолеСерии.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
    ПолеСерии.Использование = Истина;
    Точка = Диаграмма.Точки.Добавить();
    Точка.Имя = "Товары";
    Точка.Использование = Истина;
    ПолеТочки = Точка.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    ПолеТочки.Поле = Новый ПолеКомпоновкиДанных("Наименование");
    ПолеТочки.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Элементы;
    ПолеТочки.Использование = Истина;
    Диаграмма.ПараметрыВывода.УстановитьЗначениеПараметра("ТипДиаграммы", ТипДиаграммы.Гистограмма);
    ЗапросКонтроля = Новый Запрос;
    ЗапросКонтроля.Текст = Набор.Запрос;
    Данные = ЗапросКонтроля.Выполнить().Выгрузить();
    Если Данные.Количество() <> 3 Или Данные.Итог("Количество") <> 6 Или Данные.Итог("Сумма") <> 1300 Тогда
        ВызватьИсключение "Не совпали собственные три продажи";
    КонецЕсли;
    Расшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    Компоновщик = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = Компоновщик.Выполнить(Схема, Настройки, Расшифровки);
    Если ТипЗнч(Макет) <> Тип("МакетКомпоновкиДанных") Тогда
        ВызватьИсключение "Свой компоновщик не вернул макет";
    КонецЕсли;
    Возврат Новый Структура("Макет,Расшифровки", Макет, Расшифровки);
КонецФункции

Функция НайтиСвоиМакеты(Макет, ТребуемыйТип)
    Найденные = Новый Массив;
    Для Каждого Описание Из Макет.Макеты Цикл
        Если ТипЗнч(Описание.Макет) = ТребуемыйТип Тогда
            Найденные.Добавить(Описание.Макет);
        КонецЕсли;
    КонецЦикла;
    Если Найденные.Количество() = 0 Тогда
        ВызватьИсключение "Компоновщик не создал нужный тип макета: " + Строка(ТребуемыйТип);
    КонецЕсли;
    Возврат Найденные;
КонецФункции

Функция СформироватьСвойДокумент(Опыт)
    Процессор = Новый ПроцессорКомпоновкиДанных;
    Процессор.Инициализировать(Опыт.Макет, , Опыт.Расшифровки);
    Документ = Новый ТабличныйДокумент;
    Вывод = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    Вывод.УстановитьДокумент(Документ);
    Итог = Вывод.Вывести(Процессор, Ложь);
    Если ТипЗнч(Итог) <> Тип("ТабличныйДокумент") Или Итог.ВысотаТаблицы = 0 Тогда
        ВызватьИсключение "Свой результат пуст или не является табличным документом";
    КонецЕсли;
    Возврат Итог;
КонецФункции

Процедура ПрименитьСвойПараметр(Оформление, Имя, Значение)
    Параметр = Новый ПараметрКомпоновкиДанных(Имя);
    Доступный = Оформление.ДоступныеПараметры.НайтиПараметр(Параметр);
    Если Доступный = Неопределено Тогда
        ВызватьИсключение "У этого типа оформления нет параметра " + Имя;
    КонецЕсли;
    Если ТипЗнч(Оформление) = Тип("ОформлениеГруппировкиДиаграммыОбластиКомпоновкиДанных") Тогда
        КлючПоиска = Новый ПолеКомпоновкиДанных(Имя);
    Иначе
        КлючПоиска = Параметр;
    КонецЕсли;
    Оформление.УстановитьЗначениеПараметра(Параметр, Значение);
    Установленный = Оформление.НайтиЗначениеПараметра(КлючПоиска);
    Если Установленный = Неопределено Тогда
        ВызватьИсключение "Установленный параметр не найден: " + Имя;
    КонецЕсли;
    Если Не Установленный.Использование Или Установленный.Значение <> Значение Или Оформление.Элементы.Количество() = 0 Тогда
        ВызватьИсключение "Не подтверждены значение и включение параметра " + Имя;
    КонецЕсли;
КонецПроцедуры
УчебныеОбласти85.Пульт

УчебныеОбластиСКД85 → Обработки → УчебныеОбласти85 → Формы → Пульт → Модуль

Полный отдельный модуль своей обычной формы; не выполнялся.

Процедура ВыполнитьНажатие(Кнопка)
    УчебныеОбласти85.ВыполнитьПример();
КонецПроцедуры

Разбор по шагам

  1. Проверка контекста отказывает для другой версии, имени конфигурации или активной чужой транзакции.

  2. Объекты оформления не создаются через недокументированный Новый. У readonly-свойства получаем изменяемый контейнер; само свойство не переназначаем.

  3. ДоступныеПараметры содержит описание допустимых параметров, Элементы — реальные значения. НайтиПараметр и НайтиЗначениеПараметра решают разные задачи.

  4. УстановитьЗначениеПараметра включает Использование. После присваивания проверяем наличие, Значение и этот флаг; неизвестное имя не подменяется фиктивным свойством.

  5. Компоновщик создаёт МакетГруппировкиДиаграммыОбластиКомпоновкиДанных для серий и точек. Значение может быть произвольным: не объявляем его числом по догадке.

  6. Представление — readonly-строка будущей подписи; сохраняем и используем в диагностике. Значение и Представление не подменяем новым текстом.

  7. Для своих диаграмм сначала включаем ВидПодписейКДиаграмме.Значение. Затем ФорматЗначенийВПодписяхДиаграммы=ЧДЦ=2 управляет представлением числового значения, не округляя и не переписывая исходные продажи.

  8. Локальная справка этого типа у НайтиЗначениеПараметра указывает ПолеКомпоновкиДанных, в отличие от других рассмотренных типов с ПараметрКомпоновкиДанных. В helper это различие выделено явно; сверьте и проверьте в своём стенде.

Как проверить результат

  1. Будущий ручной тест: F7 и запуск только в своём новом стенде. Если нужный тип/параметр не найден, зафиксируйте точную ошибку; успешное сообщение подставлять нельзя.

  2. Сравнение выполняется в отдельных собственных окнах без имени файла. Визуальный результат и размеры не подтверждены статическими тестами.

  3. В отладчике формат установлен и используется; Значение и Представление каждого найденного макета совпадают со снимком перед форматированием.

  4. Будущий просмотр: включённые подписи числовых значений имеют два десятичных знака; магазины и товары не переименованы. Проверяйте и режим подписей, и формат — это разные настройки.

Ожидаемый результат

Подготовлен полный собственный учебный опыт с выводом в память и ручным сравнением. runtimeVerifiedScenarios=0.

На что обратить внимание

  1. Оформление результата компоновки отличается от настроек СКД и от глобальной библиотеки оформления. Здесь изменяется только собственный новый макет.

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

  3. Нельзя удалять/добавлять значения параметров в коллекцию, связанную с ДоступныеПараметры. Здесь значения меняются штатным методом и существующим флагом; глубокой копии всего оформления не обещаем.

  4. Различие типов аргумента поиска зафиксировано именно по справке 8.5.1.1343; фактическая совместимость вызова в 1С здесь не проверялась.

  5. ТипДиаграммы.ВидПодписей включает значения у диаграммы, а ФорматЗначенийВПодписяхДиаграммы задаётся у группировки. Не заменяйте две разные настройки одним присваиванием.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.