Добавляет новый элемент коллекции и возвращает его.
Синтаксис
Добавить()Полное описание, параметры и ограничения
КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных.Добавить (DataCompositionConditionalAppearanceItemCollection.Add)
КоллекцияЭлементовУсловногоОформленияКомпоновкиДанных (DataCompositionConditionalAppearanceItemCollection)
Добавить (Add)
Доступен, начиная с версии 8.1.
Синтаксис:
Добавить()
Возвращаемое значение:
Тип: ЭлементУсловногоОформленияКомпоновкиДанных.
Описание:
Добавляет новый элемент коллекции и возвращает его.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.1.
Методическая информация
Практические примеры
Выделить дорогой товар цветом, не скрывая остальные
Условное оформление списка меняет вид ячейки. В отличие от отбора, правило Цена > 200 оставляет все четыре строки.
Где и как запускать
Модуль собственной управляемой формы внешней обработки. Вставляйте готовые процедуры с директивами на уровне модуля; каждый урок — в отдельной копии формы.
Подготовка
В учебной базе 8.5.1.1343 создайте новую внешнюю обработку УчебныйСписок85, пустую управляемую основную форму. Режим совместимости — 8.3.19 или выше. Не переделывайте список рабочей конфигурации.
В реквизитах формы добавьте Список типа ДинамическийСписок. Создайте один элемент ТаблицаФормы с именем ТаблицаТоваров и путём к данным Список. Колонки вручную не добавляйте: их создаёт код. Это не ТаблицаЗначений и не коллекция строк для Добавить().
В событиях формы назначьте ПриСозданииНаСервере одноимённой процедуре из примера. Не используйте одновременно другой обработчик заполнения этого списка.
При открытии код задаёт произвольный запрос из четырёх константных строк. Основная таблица не указана; таблицы базы, файлы и внешние сервисы не используются. Запись данных отсутствует.
Каждый раз открывайте отдельную копию формы. Автоматическое сохранение настроек отключено: старый пользовательский отбор не должен вмешиваться в упражнение.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.ПроизвольныйЗапрос = Истина;
Список.ОсновнаяТаблица = "";
Список.ДинамическоеСчитываниеДанных = Ложь;
Список.АвтоЗаполнениеДоступныхПолей = Истина;
Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
Список.ВидКлюча = ВидКлючаДинамическогоСписка.ЗначениеПоля;
КлючевыеПоля = Новый Массив;
КлючевыеПоля.Добавить("УчебныйНомер");
Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
Список.ТекстЗапроса = "ВЫБРАТЬ
| 1 КАК УчебныйНомер,
| ""Книга"" КАК Наименование,
| ""Канцелярия"" КАК Категория,
| 3 КАК Количество,
| 250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
Правило = Список.УсловноеОформление.Элементы.Добавить();
Правило.Использование = Истина;
Правило.Представление = "Цена выше 200";
Правило.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 239, 200));
Условие = Правило.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Цена");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
Условие.ПравоеЗначение = 200;
Условие.Использование = Истина;
ПолеЦены = Правило.Поля.Элементы.Добавить();
ПолеЦены.Поле = Новый ПолеКомпоновкиДанных("Цена");
ПолеЦены.Использование = Истина;
Сообщить(Список.УсловноеОформление.ПолучитьКоличествоИспользуемых() = 1);
Сообщить(Список.Отбор.ПолучитьКоличествоИспользуемых() = 0);
Для Каждого ИмяПоля Из СтрРазделить("УчебныйНомер,Наименование,Категория,Количество,Цена", ",") Цикл
Колонка = Элементы.Добавить("Товары" + ИмяПоля, Тип("ПолеФормы"), Элементы.ТаблицаТоваров);
Колонка.Вид = ВидПоляФормы.ПолеВвода;
Колонка.ПутьКДанным = "Список." + ИмяПоля;
Колонка.Заголовок = ИмяПоля;
КонецЦикла;
КонецПроцедуры
Разбор по шагам
Правило принадлежит Список.УсловноеОформление, не условному оформлению всей формы. Поле оформляем по имени данных Цена, не по имени элемента формы ТоварыЦена.
Отбор внутри правила отвечает за применение цвета. Это не Список.Отбор и он не убирает строки.
Светлый фон выбран для читаемости текста. Проверяйте его в используемой теме клиента; цвет не должен быть единственным смысловым сигналом.
Как проверить результат
Две проверки дают Истина.
В таблице четыре строки. Ячейка цены Книги (250) выделена; 150, 70 и 30 не выделены.
Измените порог на 150: Чай не выделяется, потому что сравнение строго Больше.
Ожидаемый результат
Одно проверяемое правило оформления с чётким отличием от фильтра.
На что обратить внимание
Цвет не изменяет цену и не записывает реквизиты.
Имена полей СКД и имена элементов формы различаются: здесь намеренно использовано Цена.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Оформить строку по двум условиям И и найти правило по идентификатору
Выделяем только количество от одного включительно до двух исключительно. Все три видимые колонки одной строки задаются явно.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В учебной базе: Файл → Новый → Внешняя обработка. Создайте управляемую форму и назначьте её основной. Дайте обработке имя УчебнаяТаблица.
Не добавляйте вручную реквизит Товары и одноимённые элементы: код создаст их при открытии. Модуль формы для этой задачи должен быть пустым.
В свойствах формы → События свяжите ПриСозданииНаСервере с одноимённой процедурой. Сохраните отдельную учебную EPF и откройте через Файл → Открыть.
Данные Книга/Ручка создаются в памяти формы. Справочники, документы и регистры вашей конфигурации не читаются и не записываются.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Товары", Новый ОписаниеТипов("ТаблицаЗначений")));
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Код", Новый ОписаниеТипов("Строка"), "Товары", "Код"));
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Наименование", Новый ОписаниеТипов("Строка"), "Товары", "Название"));
НовыеРеквизиты.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)), "Товары", "Количество"));
ЭтаФорма.ИзменитьРеквизиты(НовыеРеквизиты);
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный)));
СтрокаТовара = Данные.Добавить();
СтрокаТовара.Код = "A-01";
СтрокаТовара.Наименование = "Книга";
СтрокаТовара.Количество = 3;
СтрокаТовара = Данные.Добавить();
СтрокаТовара.Код = "B-02";
СтрокаТовара.Наименование = "Ручка";
СтрокаТовара.Количество = 1;
ЭтаФорма.ЗначениеВРеквизитФормы(Данные, "Товары");
Таблица = ЭтаФорма.Элементы.Добавить("ТаблицаТоваров", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "Товары";
Таблица.Заголовок = "Учебные товары";
Таблица.Шапка = Истина;
Таблица.АвтоВводНезаполненного = Ложь;
Таблица.АвтоВводНовойСтроки = Ложь;
Для Каждого ИмяКолонки Из СтрРазделить("Код,Наименование,Количество", ",") Цикл
Колонка = Элементы.Добавить("Товары" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
Колонка.Вид = ВидПоляФормы.ПолеВвода;
Колонка.ПутьКДанным = "Товары." + ИмяКолонки;
Колонка.Заголовок = ИмяКолонки;
КонецЦикла;
Правило = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
Правило.Использование = Истина;
Правило.Представление = "Диапазон от одного до двух";
Правило.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(230, 244, 255));
Группа = Правило.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.Использование = Истина;
Группа.Представление = "Оба условия диапазона";
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
НижняяГраница = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НижняяГраница.Использование = Истина;
НижняяГраница.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Количество");
НижняяГраница.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
НижняяГраница.ПравоеЗначение = 1;
ВерхняяГраница = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ВерхняяГраница.Использование = Истина;
ВерхняяГраница.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Количество");
ВерхняяГраница.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ВерхняяГраница.ПравоеЗначение = 2;
Для Каждого ИмяПоля Из СтрРазделить("ТоварыКод,ТоварыНаименование,ТоварыКоличество", ",") Цикл
ПолеОформления = Правило.Поля.Элементы.Добавить();
ПолеОформления.Использование = Истина;
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);
КонецЦикла;
ИдентификаторПравила = ЭтаФорма.УсловноеОформление.ПолучитьИдентификаторПоОбъекту(Правило);
Если ИдентификаторПравила = Неопределено Тогда
ВызватьИсключение "Правило не принадлежит условному оформлению формы";
КонецЕсли;
ВосстановленноеПравило = ЭтаФорма.УсловноеОформление.ПолучитьОбъектПоИдентификатору(ИдентификаторПравила);
Сообщить(ВосстановленноеПравило.Представление = "Диапазон от одного до двух");
Сообщить(Правило.Поля.Элементы.Количество() = 3);
ИдентификаторПоля = Правило.Поля.ПолучитьИдентификаторПоОбъекту(ПолеОформления);
ВосстановленноеПоле = Правило.Поля.ПолучитьОбъектПоИдентификатору(ИдентификаторПоля);
Сообщить(ВосстановленноеПоле.Использование);
КонецПроцедуры
Разбор по шагам
ГруппаИ содержит два сравнения; оба должны быть истинны для подсветки строки.
Граница 1 включена через БольшеИлиРавно, граница 2 исключена через Меньше.
Для оформления указываем три имён элемента таблицы, а для условий используем путь к числовым данным.
Внутренний идентификатор СКД позволяет найти своё правило или оформляемое поле в соответствующем владельце.
Правило не заменяет строки таблицы и не присваивает им новые количества.
Как проверить результат
На исходных данных вся видимая строка Ручки 1 выделена, Книга 3 нет.
Попробуйте 0, 1 и 2: выделяется только 1 при целочисленной колонке.
Правило находится по идентификатору, оформляемых полей три, поле включено.
Ожидаемый результат
Два условия диапазона и область оформления всей строки разобраны отдельно от внутреннего поиска объектов СКД.
На что обратить внимание
ГруппаИ и ГруппаИЛИ дают разные результаты на граничных значениях.
ИдентификаторКомпоновкиДанных не является номером строки, UUID товара или ключом базы.
После удаления/пересоздания правила старый идентификатор нельзя считать ссылкой на новое правило.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.