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

Методы · Insert

Добавляет элемент в заданную позицию.

Синтаксис

Вставить(<Индекс>, <Тип>)
Полное описание, параметры и ограничения

ЭлементыМакетаОбластиКомпоновкиДанных.Вставить (DataCompositionAreaTemplateItems.Insert)

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

Вставить (Insert)

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

Синтаксис:
Вставить(<Индекс>, <Тип>)
Параметры:

<Индекс> (обязательный)
Тип: Число.
Расположение элемента в коллекции.

<Тип> (необязательный)
Тип: Тип.
Тип добавляемого элемента. Элементами коллекции могут быть ПолеОбластиКомпоновкиДанных.
Возвращаемое значение:
Тип: ПолеОбластиКомпоновкиДанных.

Описание:

Добавляет элемент в заданную позицию.

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

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

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

Доступен, начиная с версии 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С здесь не запускалась.

Процедура ВыполнитьПример() Экспорт
    ПроверитьСвойКонтекст();
    Область = Новый МакетОбластиКомпоновкиДанных;
    СтрокаОбласти = Область.Добавить(Тип("СтрокаТаблицыОбластиКомпоновкиДанных"));
    СтрокаОбласти.ИдентификаторТаблицы = "own-book-appearance-85";
    Ячейка = СтрокаОбласти.Ячейки.Добавить();
    Поля = Ячейка.Элементы;
    Товар = Поля.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
    Товар.Значение = "Книга";
    Сумма = Поля.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
    Сумма.Значение = 750;
    ПрименитьСвойПараметр(Товар.Оформление, "ЦветТекста", Новый Цвет(0, 80, 120));
    ПрименитьСвойПараметр(Сумма.Оформление, "Формат", "ЧДЦ=2");
    ПрименитьСвойПараметр(Ячейка.Оформление, "ЦветФона", Новый Цвет(240, 248, 255));
    Исходный = ВывестиСвоюСтроку(Область);
    Префикс = Поля.Вставить(0, Тип("ПолеОбластиКомпоновкиДанных"));
    Префикс.Значение = "Товар: ";
    Если Поля.Индекс(Префикс) <> 0 Или Поля.Получить(1) <> Товар Тогда
        ВызватьИсключение "Префикс должен стоять перед своим товаром";
    КонецЕсли;
    Поля.Сдвинуть(Сумма, -1);
    Если Поля.Получить(1) <> Сумма Тогда
        ВызватьИсключение "Своя сумма не сдвинута перед товаром";
    КонецЕсли;
    Переставленный = ВывестиСвоюСтроку(Область);
    Поля.Сдвинуть(Сумма, 1);
    Поля.Удалить(Префикс);
    Если Поля.Количество() <> 2 Или Поля.Получить(0) <> Товар Или Поля.Получить(1) <> Сумма Тогда
        ВызватьИсключение "Удален не префикс или нарушен собственный порядок";
    КонецЕсли;
    Поля.Очистить();
    Если Поля.Количество() <> 0 Тогда
        ВызватьИсключение "Не очищены собственные поля ячейки";
    КонецЕсли;
    Товар = Поля.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
    Товар.Значение = "Книга";
    Сумма = Поля.Добавить(Тип("ПолеОбластиКомпоновкиДанных"));
    Сумма.Значение = 750;
    ПрименитьСвойПараметр(Товар.Оформление, "ЦветТекста", Новый Цвет(0, 80, 120));
    ПрименитьСвойПараметр(Сумма.Оформление, "Формат", "ЧДЦ=2");
    Если Поля.Количество() <> 2 Или Товар.Значение <> "Книга" Или Сумма.Значение <> 750 Тогда
        ВызватьИсключение "Не восстановлено содержимое собственной строки";
    КонецЕсли;
    Восстановленный = ВывестиСвоюСтроку(Область);
    Исходный.Показать("Своя строка: оформление поля и ячейки", "", Ложь);
    Переставленный.Показать("Своя строка: префикс и новый порядок", "", Ложь);
    Восстановленный.Показать("Своя строка: пересозданные поля", "", Истина);
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

  5. Новый МакетОбластиКомпоновкиДанных содержит строку таблицы и ячейку. Поля появляются только через её Элементы.Добавить/Вставить с типом ПолеОбластиКомпоновкиДанных.

  6. ЦветТекста применяется к полю Книга, Формат=ЧДЦ=2 — к числу 750, ЦветФона — к ячейке. Оформление поля и оформление ячейки имеют разные типы и доступные параметры.

  7. Вставить(0,Тип(...)) создаёт префикс перед товаром. Индекс и Получить проверяют реальный порядок; Сдвинуть(Сумма,-1) переносит только эту существующую сумму.

  8. Удалить получает именно свой Префикс, не условный индекс. Очистить удаляет только поля своей ячейки, не строку источника или бизнес-данные.

  9. После Очистить создаются новые поля с прежними литералами и заново назначается их оформление. Старые ссылки не объявляются сохранёнными; сохраняется содержание учебной строки.

  10. Ручной элемент вывода получает именованное описание своей области, а Элемент.Макет — строковое имя, не сам объект. ТипЭлемента=НачалоИКонец; НачатьВывод, ВывестиЭлемент и ЗакончитьВывод образуют полный цикл.

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

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

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

  3. Будущий тест: первый и последний документы содержат Книга и 750 с цветом текста/фоном и двумя десятичными знаками. Средний документ показывает префикс и изменённый порядок.

  4. После удаления префикса порядок Товар/Сумма, после очистки Количество=0, после пересоздания Количество=2. В отладчике поля последнего этапа новые, их Значение снова Книга и 750.

  5. Замените 750 на 751 только при первичном создании: конечный контроль согласованного пересоздания требует соответствующей правки; это изменение данных, а не действие формата.

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

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

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

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

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

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

  4. ЭлементРезультата.Макет — строковое имя. Передача МакетОбласти напрямую противоречит справке; объект хранится в элементе его каталога Макеты.

  5. Очищаем коллекцию ПОЛЕЙ собственной ячейки, не связанные с доступными параметрами коллекции оформления. Пересоздание полей не является глубокой копией или возвратом их прежней идентичности.

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

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

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

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

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