МакетыТелаДиаграммыМакетаКомпоновкиДанных.Очистить

Методы · Clear

Очищает коллекцию.

Синтаксис

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

МакетыТелаДиаграммыМакетаКомпоновкиДанных.Очистить (DataCompositionTemplateChartBodyTemplates.Clear)

МакетыТелаДиаграммыМакетаКомпоновкиДанных (DataCompositionTemplateChartBodyTemplates)

Очистить (Clear)

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

Синтаксис:
Очистить()
Описание:

Очищает коллекцию.

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

Сервер, толстый клиент, внешнее соединение.

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

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

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

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

Макеты ресурсов диаграммы: ссылки на области, позиции и полный возврат

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

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

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

Подготовка

  1. НОВАЯ пустая файловая база 8.5.1.1343: Имя=УчебноеТелоДиаграммы85, управляемое приложение, совместимость НеИспользовать. Без бизнес-метаданных, расширений, подписок и заданий. Здесь не запускалось: runtimeVerifiedScenarios=0.

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

  3. Обработка УчебныеОбластиДиаграммы85 → управляемая форма Пульт → команда Выполнить с действием Выполнить и кнопкой. Полный отдельный модуль формы ниже. F7 и обновление только нового своего стенда перед будущим отдельно разрешенным запуском.

  4. Свой Local-запрос содержит Север/Книга/3/750, Север/Ручка/1/50, Юг/Книга/2/500. Магазин задает серии, Наименование — точки, выбранный ресурс — Сумма. Источник имеет три строки и сумму 1300; продажа Юг/Ручка отсутствует.

  5. Макет вывода группировки и макет ее ресурса — разные настоящие объекты. Их строковые имена областей разрешаются через Макет.Макеты.Найти; ничего не создается по угаданным техническим именам.

  6. Редактируется только независимый полный XDTO-черновик своего макета в памяти. Каркасы и дубли не исполняются. После очистки восстанавливается весь макет из первоначальной строки; файлов, резервных копий, сети и печати нет.

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

    Каталог.Очистить();
    Если Каталог.Количество() <> 0 Тогда
        ВызватьИсключение "Не очищен каталог черновика";
    КонецЕсли;
    Если ПолучитьСвоюДиаграммуМакета(Макет) <> ИсходнаяДиаграмма
        Или ПолучитьСвоюГруппуМагазинов(ИсходнаяДиаграмма) <> ИсходнаяГруппа
        Или СвойМакетВСтроку(Макет) <> ТекстМакета Тогда
        ВызватьИсключение "Чужая ссылка копии изменила исходный полный макет";
    КонецЕсли;
    Восстановленный = СвойМакетИзСтроки(ТекстМакета);
    ВосстановленнаяГруппа = ПолучитьСвоюГруппуМагазинов(ПолучитьСвоюДиаграммуМакета(Восстановленный));
    ВосстановленнаяОбласть = ПолучитьСвоюОбластьМагазиннойГруппы(ВосстановленнаяГруппа);
    Если ВосстановленнаяОбласть.МакетРесурсов.Количество() <> ИсходноеКоличество Тогда
        ВызватьИсключение "Не восстановлен полный ресурсный каталог";
    КонецЕсли;
    ПроверитьСвоиОбластиДиаграммы(Восстановленный);
    ПроверитьСвоиОбластиДиаграммы(Макет);
    ПроверитьСвоюДиаграммуПродаж(Восстановленный);
    ПроверитьСвоюДиаграммуПродаж(Макет);
    Сообщить("Свои области и полные диаграммы восстановлены: 750/50/500, сумма 1300.");
КонецПроцедуры

Функция ПолучитьСвоюДиаграммуМакета(Макет)
    Найденные = Новый Массив;
    СобратьСвоиДиаграммы(Макет.Тело, Найденные);
    Если Найденные.Количество() <> 1 Тогда
        ВызватьИсключение "В своем макете нужна ровно одна диаграмма";
    КонецЕсли;
    Возврат Найденные[0];
КонецФункции

Процедура СобратьСвоиДиаграммы(Тело, Найденные)
    Для Каждого Часть Из Тело Цикл
        Если ТипЗнч(Часть) = Тип("ДиаграммаМакетаКомпоновкиДанных") Тогда
            Найденные.Добавить(Часть);
        ИначеЕсли ТипЗнч(Часть) = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда
            СобратьСвоиДиаграммы(Часть.Тело, Найденные);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Функция ПолучитьСвоюГруппуМагазинов(ЧастьДиаграммы)
    Найденные = Новый Массив;
    СобратьСвоиМагазинныеГруппы(ЧастьДиаграммы.Серии, Найденные);
    Если Найденные.Количество() <> 1 Тогда
        ВызватьИсключение "Нужна одна настоящая группировка серий по Магазин";
    КонецЕсли;
    Возврат Найденные[0];
КонецФункции

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

Процедура ПроверитьСвоиПервичныеЭлементы(Каталог, Первичные, Смещение)
    Для Номер = 0 По Первичные.Количество() - 1 Цикл
        Если Каталог.Получить(Номер + Смещение) <> Первичные[Номер] Тогда
            ВызватьИсключение "Изменились объекты или взаимный порядок исходных элементов копии";
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

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

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

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

Функция СвойМакетВСтроку(Макет)
    Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(Запись, Макет);
    Возврат Запись.Закрыть();
КонецФункции

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

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


Процедура ПроверитьСвоюДиаграммуПродаж(Макет)
    Документ = СформироватьСвойДокумент(Макет);
    Найденные = Новый Массив;
    Для Каждого Рисунок Из Документ.Рисунки Цикл
        Если Рисунок.ТипРисунка = ТипРисункаТабличногоДокумента.Диаграмма Тогда
            ГотоваяДиаграмма = Рисунок.Объект;
            Если ТипЗнч(ГотоваяДиаграмма) <> Тип("Диаграмма") Тогда
                ВызватьИсключение "Рисунок не содержит обычную готовую диаграмму";
            КонецЕсли;
            Найденные.Добавить(ГотоваяДиаграмма);
        КонецЕсли;
    КонецЦикла;
    Если Найденные.Количество() <> 1 Тогда
        ВызватьИсключение "Нужен один фактически выведенный рисунок диаграммы";
    КонецЕсли;
    ГотоваяДиаграмма = Найденные[0];
    Если ГотоваяДиаграмма.Серии.Количество() <> 2 Или ГотоваяДиаграмма.Точки.Количество() <> 2 Тогда
        ВызватьИсключение "Не получены две магазинные серии и две товарные точки";
    КонецЕсли;
    Север = Неопределено;
    Юг = Неопределено;
    Для Каждого Серия Из ГотоваяДиаграмма.Серии Цикл
        Если Серия.Текст = "Север" Тогда
            Север = Серия;
        ИначеЕсли Серия.Текст = "Юг" Тогда
            Юг = Серия;
        КонецЕсли;
    КонецЦикла;
    Книга = Неопределено;
    Ручка = Неопределено;
    Для Каждого Точка Из ГотоваяДиаграмма.Точки Цикл
        Если Точка.Текст = "Книга" Тогда
            Книга = Точка;
        ИначеЕсли Точка.Текст = "Ручка" Тогда
            Ручка = Точка;
        КонецЕсли;
    КонецЦикла;
    Если Север = Неопределено Или Юг = Неопределено Или Книга = Неопределено Или Ручка = Неопределено Тогда
        ВызватьИсключение "Проверьте реальные подписи осей своей простой диаграммы";
    КонецЕсли;
    СеверКнига = ГотоваяДиаграмма.ПолучитьЗначение(Книга, Север).Значение;
    СеверРучка = ГотоваяДиаграмма.ПолучитьЗначение(Ручка, Север).Значение;
    ЮгКнига = ГотоваяДиаграмма.ПолучитьЗначение(Книга, Юг).Значение;
    Если ТипЗнч(СеверКнига) <> Тип("Число") Или ТипЗнч(СеверРучка) <> Тип("Число")
        Или ТипЗнч(ЮгКнига) <> Тип("Число") Тогда
        ВызватьИсключение "Три настоящие продажи должны быть числовыми значениями рисунка";
    КонецЕсли;
    Если СеверКнига <> 750 Или СеверРучка <> 50 Или ЮгКнига <> 500
        Или СеверКнига + СеверРучка + ЮгКнига <> 1300 Тогда
        ВызватьИсключение "Изменились настоящие значения выведенной диаграммы";
    КонецЕсли;
    ЮгРучка = ГотоваяДиаграмма.ПолучитьЗначение(Ручка, Юг).Значение;
    Если ЗначениеЗаполнено(ЮгРучка) Тогда
        ВызватьИсключение "В исходном запросе нет продажи Юг/Ручка";
    КонецЕсли;
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура Выполнить(Команда)
    ВыполнитьНаСервере();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьНаСервере()
    УчебноеТелоДиаграммы85.ВыполнитьПример();
КонецПроцедуры

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

  1. Создаем собственную схему и настройки, проверяем три строки запроса и сумму 1300. Компоновщик создает полный макет обычного табличного документа.

  2. В теле находим точный тип диаграммы, затем реальную группу с полем Магазин. В ее обычном Тело ищем точный тип МакетГруппировкиДиаграммыМакетаКомпоновкиДанных. Иерархические тела не подменяются обычными.

  3. Имя области самой группировки и каждое фактическое имя ресурса/пересечения проверяем в общем каталоге областей. Если имя необязательной области пусто, явно отмечаем отсутствие, не вызываем Найти для выдуманного значения.

  4. До правок выводим реальную диаграмму: в рисунке правильного типа читаем Объект, затем находим серии и точки по фактическому Текст. Порядок индексов не предполагается.

  5. Создаем отдельную полную XDTO-копию макета. Непустой каталог копии и каждый исходный объект записываем в свой Массив-снимок; проверяем их идентичность и относительный порядок.

  6. Выбран ОбластьКопии.МакетРесурсов — МакетыТелаДиаграммыМакетаКомпоновкиДанных. Фабрики без Тип возвращают МакетТелаДиаграммыМакетаКомпоновкиДанных. Обе настоящие строковые ссылки копируются из первого собственного ресурса только после проверки непустого каталога.

  7. Добавить возвращает первый новый элемент в конце, затем Вставить создает второй в начале. Проверки работают с настоящими фабричными объектами, а не именами или несуществующим конструктором.

  8. После добавлений размеры N+1 и N+2, индексы первого N и N+1, второго 0. Получить(0) должен вернуть тот же второй объект; старые объекты теперь идут с позиции 1 в прежнем порядке.

  9. После вставки Сдвинуть(Первый,-(N+1)) переносит тот же ресурс в начало, старые элементы начинаются с позиции 2. Удалить(Второй) возвращает старые элементы к позиции 1. Размеры N → N+1 → N+2 → N+2 → N+1 → 0.

  10. Очистить затрагивает лишь выбранный каталог копии. Исходные диаграмма и группа остаются теми же объектами; сериализация всего неизмененного оригинала должна дать исходную строку.

  11. Восстанавливаем ВЕСЬ макет из собственной строки, а не пару имен или очищенную коллекцию. Проверяем восстановленный размер, настоящие ссылки областей и повторно формируем оба полных результата.

  12. Три настоящих значения рисунка должны быть числовыми и равняться 750/50/500; сумма 1300. Юг/Ручка незаполнено, а не придуманная четвертая продажа. Проверки ничего не записывают в рисунок.

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

  1. После вставки Сдвинуть(Первый,-(N+1)) переносит тот же ресурс в начало, старые элементы начинаются с позиции 2. Удалить(Второй) возвращает старые элементы к позиции 1. Размеры N → N+1 → N+2 → N+2 → N+1 → 0.

  2. Каждое непустое фактическое имя области разрешается в Макет.Макеты.Найти без Неопределено; пустое имя явно отмечено как необязательное.

  3. После полной XDTO-реставрации восстановлены размер каталога и ссылки на области; оригинал не изменен по объектам и полной сериализации.

  4. Все три вывода дают две серии и две точки, числовые 750/50/500 и сумму 1300; недостающая Юг/Ручка остается незаполненной.

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

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

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

  1. Тело группировки — разнородная коллекция: для Добавить/Вставить нужен Тип. Макеты ресурсов — однородная коллекция: для этих фабрик Тип передавать нельзя. Возвращаемые типы также различаются.

  2. Макет и МакетГруппировки — строковые ссылки на уже существующие области. Не присваивайте им ТабличныйДокумент или чужой объект; пустое допустимое имя не превращается в неизвестную область.

  3. Тело и МакетРесурсов владельца — readonly-ссылки на изменяемые каталоги. Присваивать Массив вместо каталога нельзя. После Очистить удаленные ссылки повторно не используются.

  4. Черновые дубли/пустые ресурсные каркасы не являются полноценным отчетом и никогда не выводятся. Работоспособность графика проверяется лишь на оригинале и восстановленном полном макете.

  5. В установленной справке 8.5.1.1343 Сдвинуть/Удалить именно тела группировки диаграммы имеют противоречивые типы параметров из отбора/условного оформления. Здесь эти два метода не вызываются и не засчитываются; задача их проверки остается открытой. Методы ресурсного каталога имеют согласованные типы.

  6. Обход относится только к своей простой неиерархической гистограмме с одной областью магазинной группы. Это не универсальный редактор чужих отчетов. Запуска в 1С здесь нет, статические проверки не заменяют будущую проверку на новом своем стенде.

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

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

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

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

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