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

Типы · DataCompositionTemplateAreaTemplateDefinition

Описание макета области.

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

ОписаниеМакетаОбластиМакетаКомпоновкиДанных (DataCompositionTemplateAreaTemplateDefinition)

ОписаниеМакетаОбластиМакетаКомпоновкиДанных (DataCompositionTemplateAreaTemplateDefinition)

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

Свойства:
Имя (Name)
Макет (Template)
Параметры (Parameters)

Описание:

Описание макета области.

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

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

См. также:
ОписанияМакетовОбластейМакетаКомпоновкиДанных, метод Добавить
ОписанияМакетовОбластейМакетаКомпоновкиДанных, метод Вставить
ОписанияМакетовОбластейМакетаКомпоновкиДанных, метод Получить
ОписанияМакетовОбластейМакетаКомпоновкиДанных, метод Удалить
ОписанияМакетовОбластейМакетаКомпоновкиДанных, метод Индекс
ОписанияМакетовОбластейМакетаКомпоновкиДанных, метод Сдвинуть

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

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

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

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

Подготовить собственный каталог параметров строки продажи

Различаем имя параметра и текст выражения. Создаём определения товара, количества и суммы, проверяем тип, порядок и поиск, переименовываем количество и очищаем только определения.

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

Серверный общий модуль УчебныеОбластиСКД85. Собственный черновик областей или параметров без запуска процессора вывода.

Подготовка

  1. В отдельной собственной учебной базе 8.5.1.1343 создайте общий модуль УчебныеОбластиСКД85: Сервер — Да, Клиент — Нет, Глобальный — Нет, Вызов сервера — Нет, Привилегированный — Нет.

  2. Вставьте весь приведённый модуль одного урока: экспортную процедуру и функцию СоздатьУчебнуюОбласть. Из серверного обработчика команды своей учебной обработки вызовите УчебныеОбластиСКД85.ВыполнитьПример();.

  3. Задача — подготовить и проверить собственный каталог описаний областей или параметров. Это редактирование служебных объектов в памяти, не запуск готового отчёта и не изменение рабочего макета.

  4. Объект ЭлементРезультатаКомпоновкиДанных здесь создаётся конструктором специально для владения собственной коллекцией Макеты. Этот элемент не передаётся процессору вывода.

  5. У собственной области есть настоящая строка, ячейка и поле с текстовым значением. Это МакетОбластиКомпоновкиДанных, не ТабличныйДокумент и не строковое имя области.

  6. Смотрите сообщения и значения в отладчике. Индексы начинаются с нуля; Сдвинуть принимает объект и относительное смещение, Удалить — объект, Получить — индекс.

  7. Очистить и Удалить действуют только на заново созданные коллекции этого модуля. После удаления элементы больше не используются. Записи базы, чужие отчёты, файлы и сеть не затрагиваются.

  8. В 1С код не запускался. Сигнатуры и readonly сверены статически с установленной справкой; ожидаемые проверки подтвердите в собственной учебной базе.

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

КонецПроцедуры

Функция СоздатьУчебнуюОбласть(ТекстОбласти)
    Область = Новый МакетОбластиКомпоновкиДанных;
    СтрокаОбласти = Область.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных"));
    Ячейка = СтрокаОбласти.Ячейки.Добавить();
    Поле = Ячейка.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
    Поле.Значение = ТекстОбласти;
    Возврат Область;
КонецФункции

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

  1. Сначала создаём своё описание области и настоящий макет с текстовым полем. Параметры берём у этого описания; переменная ссылается на его коллекцию.

  2. Добавить требует Тип. Передаём точный ПараметрОбластиВыражениеКомпоновкиДанных, не строковое имя и не значение суммы.

  3. Имя — название определения, Выражение — строка языка выражений СКД. У суммы сохраняется Количество * Цена, но этот урок её не исполняет.

  4. Вставить(1, Тип(...)) ставит количество между товаром и суммой. Получить и Индекс проверяют ожидаемый порядок.

  5. После Найти отдельно защищаемся от отсутствия элемента и проверяем точный тип перед чтением Выражение. Коллекция может содержать и параметры расшифровки другого типа.

  6. Сдвинуть перемещает количество на одну позицию вправо. После переименования Имя поиск по старому ключу ничего не находит, поиск по новому возвращает тот же объект.

  7. Переименование определения не изменяет Выражение: оно по-прежнему ссылается на поле Количество, а не на имя ЧислоЕдиниц.

  8. Удаляем объект определения суммы, затем очищаем собственные параметры. Само описание области и его Макет остаются; это разные уровни объектов.

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

  1. Все семнадцать сравнений должны дать Истина. Параметров сначала три, после удаления суммы два, после очистки ноль.

  2. В отладчике найдите СуммаСтроки до удаления: это ПараметрОбластиВыражениеКомпоновкиДанных, Выражение содержит Количество * Цена.

  3. После переименования Найти("Количество") возвращает Неопределено, а Найти("ЧислоЕдиниц") — тот же объект с неизменённым выражением.

  4. После очистки Контейнер.Макеты содержит одно описание области; сама область не стирается вместе с коллекцией параметров.

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

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

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

  1. Readonly относится к ссылке: нельзя присвоить новый объект свойству Макеты или Параметры. Добавить и Очистить меняют содержимое полученной собственной коллекции.

  2. Индекс и объект — разные аргументы. Удалить не принимает здесь число вместо описания, а Сдвинуть — не абсолютную будущую позицию.

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

  4. Это законченная задача редактирования собственного черновика. Наличие описаний не доказывает, что собран согласованный элемент для ВывестиЭлемент.

  5. Код не выводит отчёт, не обращается к рабочей конфигурации и не запускался в 1С. Проверки описывают ожидаемое поведение учебного стенда.

  6. Выражение не равно значению: строка Количество * Цена сама не становится числом 750. Здесь нет компоновки, вычисления, расшифровки или привязки параметров к текстовому полю области.

  7. Текстовая область — учебный объект для владения каталогом, не доказательство готовности макета к выводу. Вычисление реальных данных показано в отдельных уроках запуска СКД.

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

Организовать собственные области: заголовок, товары и подвал

Создаём три настоящие области с текстовыми полями, ищем описание по имени, перемещаем подвал, удаляем описание товаров и очищаем только свой каталог.

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

Серверный общий модуль УчебныеОбластиСКД85. Собственный черновик областей или параметров без запуска процессора вывода.

Подготовка

  1. В отдельной собственной учебной базе 8.5.1.1343 создайте общий модуль УчебныеОбластиСКД85: Сервер — Да, Клиент — Нет, Глобальный — Нет, Вызов сервера — Нет, Привилегированный — Нет.

  2. Вставьте весь приведённый модуль одного урока: экспортную процедуру и функцию СоздатьУчебнуюОбласть. Из серверного обработчика команды своей учебной обработки вызовите УчебныеОбластиСКД85.ВыполнитьПример();.

  3. Задача — подготовить и проверить собственный каталог описаний областей или параметров. Это редактирование служебных объектов в памяти, не запуск готового отчёта и не изменение рабочего макета.

  4. Объект ЭлементРезультатаКомпоновкиДанных здесь создаётся конструктором специально для владения собственной коллекцией Макеты. Этот элемент не передаётся процессору вывода.

  5. У собственной области есть настоящая строка, ячейка и поле с текстовым значением. Это МакетОбластиКомпоновкиДанных, не ТабличныйДокумент и не строковое имя области.

  6. Смотрите сообщения и значения в отладчике. Индексы начинаются с нуля; Сдвинуть принимает объект и относительное смещение, Удалить — объект, Получить — индекс.

  7. Очистить и Удалить действуют только на заново созданные коллекции этого модуля. После удаления элементы больше не используются. Записи базы, чужие отчёты, файлы и сеть не затрагиваются.

  8. В 1С код не запускался. Сигнатуры и readonly сверены статически с установленной справкой; ожидаемые проверки подтвердите в собственной учебной базе.

Процедура ВыполнитьПример() Экспорт
    Контейнер = Новый ЭлементРезультатаКомпоновкиДанных;
    Описания = Контейнер.Макеты;
    Заголовок = Описания.Добавить();
    Заголовок.Имя = "УчебныйЗаголовок";
    Заголовок.Макет = СоздатьУчебнуюОбласть("Учебный заказ");
    СтрокиТоваров = Описания.Добавить();
    СтрокиТоваров.Имя = "УчебныеТовары";
    СтрокиТоваров.Макет = СоздатьУчебнуюОбласть("Книга: 750; Ручка: 50");
    Подвал = Описания.Вставить(1);
    Подвал.Имя = "УчебныйПодвал";
    Подвал.Макет = СоздатьУчебнуюОбласть("Итого: 800");
    Сообщить(Описания.Количество() = 3);
    Сообщить(Описания.Индекс(Подвал) = 1);
    Сообщить(Описания.Получить(0) = Заголовок);
    НайденныеТовары = Описания.Найти("УчебныеТовары");
    Если НайденныеТовары = Неопределено Тогда
        ВызватьИсключение "Не найдено собственное описание области товаров";
    КонецЕсли;
    Сообщить(НайденныеТовары = СтрокиТоваров);
    Сообщить(ТипЗнч(НайденныеТовары.Макет) = Тип("МакетОбластиКомпоновкиДанных"));
    Сообщить(НайденныеТовары.Макет.Получить(0).Ячейки.Получить(0).Элементы.Получить(0).Значение = "Книга: 750; Ручка: 50");
    Сообщить(Описания.Найти("НесуществующаяУчебнаяОбласть") = Неопределено);
    Описания.Сдвинуть(Подвал, 1);
    Сообщить(Описания.Индекс(Подвал) = 2);
    Сообщить(Описания.Получить(1) = СтрокиТоваров);
    Описания.Удалить(СтрокиТоваров);
    Сообщить(Описания.Количество() = 2);
    Сообщить(Описания.Найти("УчебныеТовары") = Неопределено);
    Сообщить(Описания.Получить(1) = Подвал);
    Описания.Очистить();
    Сообщить(Описания.Количество() = 0);
    Сообщить(Контейнер.Макеты.Количество() = 0);

КонецПроцедуры

Функция СоздатьУчебнуюОбласть(ТекстОбласти)
    Область = Новый МакетОбластиКомпоновкиДанных;
    СтрокаОбласти = Область.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных"));
    Ячейка = СтрокаОбласти.Ячейки.Добавить();
    Поле = Ячейка.Элементы.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
    Поле.Значение = ТекстОбласти;
    Возврат Область;
КонецФункции

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

  1. Конструктор создаёт свой контейнер. Макеты возвращает связанную коллекцию описаний без отдельного конструктора коллекции.

  2. Добавить создаёт описание заголовка и описание товаров. Имя — ключ собственного каталога; Макет — новый объект области, возвращённый полной функцией из этого же модуля.

  3. Функция создаёт строку нужного типа, ячейку и текстовое поле. Поэтому в Макет хранится не название и не неизвестный объект, а построенная область.

  4. Вставить(1) помещает подвал между заголовком и товарами. Получается порядок 0: заголовок, 1: подвал, 2: товары.

  5. Найти возвращает описание. После защиты от Неопределено проверяем его тип макета и текст первого поля, созданного функцией.

  6. Сдвинуть(Подвал, 1) переносит существующий объект на одну позицию вправо: заголовок, товары, подвал. Это не создание ещё одного подвала.

  7. Удалить получает объект СтрокиТоваров. Остаются заголовок и подвал, поиск прежнего имени товаров возвращает Неопределено.

  8. Очистить освобождает содержимое своего каталога. Обе проверки числа элементов подтверждают, что переменная Описания и Контейнер.Макеты указывают на одну коллекцию.

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

  1. Все четырнадцать сравнений должны дать Истина. Три области сначала существуют; после удаления остаются две, после Очистить — ноль.

  2. До удаления найдите описание УчебныеТовары: его Макет — МакетОбластиКомпоновкиДанных, текст поля — Книга: 750; Ручка: 50.

  3. После сдвига подвал имеет индекс 2, а товары — 1. После удаления товаров подвал имеет индекс 1.

  4. После Очистить коллекция пустая, но объект-контейнер не подменялся. Удаление записи базы или рабочего отчёта не происходило.

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

Освоены все девять операций собственной коллекции описаний областей на связанной учебной задаче.

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

  1. Readonly относится к ссылке: нельзя присвоить новый объект свойству Макеты или Параметры. Добавить и Очистить меняют содержимое полученной собственной коллекции.

  2. Индекс и объект — разные аргументы. Удалить не принимает здесь число вместо описания, а Сдвинуть — не абсолютную будущую позицию.

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

  4. Это законченная задача редактирования собственного черновика. Наличие описаний не доказывает, что собран согласованный элемент для ВывестиЭлемент.

  5. Код не выводит отчёт, не обращается к рабочей конфигурации и не запускался в 1С. Проверки описывают ожидаемое поведение учебного стенда.

  6. Учебный итог 800 записан как текст 750 + 50, не вычислен процессором. Эти именованные области не привязываются к реальному скомпилированному отчёту.

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

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

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

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

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