Получает индекс элемента коллекции.
Синтаксис
Индекс(<Элемент>)Полное описание, параметры и ограничения
ДанныеФормыКоллекцияЭлементовДерева.Индекс (FormDataTreeItemCollection.IndexOf)
ДанныеФормыКоллекцияЭлементовДерева (FormDataTreeItemCollection)
Индекс (IndexOf)
Доступен, начиная с версии 8.2.
Синтаксис:
Индекс(<Элемент>)
Параметры:
<Элемент> (необязательный)
Тип: ДанныеФормыЭлементДерева.
Элемент дерева.
Возвращаемое значение:
Тип: Число.
Если элемент в коллекции не найден то -1.
Описание:
Получает индекс элемента коллекции.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
Примечание:
Нумерация с 0.
Использование в версии:
Доступен, начиная с версии 8.2.
Методическая информация
Практические примеры
Вставить, переместить и удалить товары только в учебном дереве формы
На собственной категории демонстрируем все восемь методов коллекции детей. Итоговые Книга и Ручка сохраняются; временные узлы удаляются.
Где и как запускать
Модуль новой управляемой формы учебной внешней обработки. Код содержит готовые процедуры с директивами; вставляйте на уровне модуля, не внутрь другого обработчика. Каждую задачу запускайте в отдельной копии формы.
Подготовка
В учебной базе создайте новую внешнюю обработку УчебноеДерево с пустой управляемой основной формой. Каждую задачу размещайте в отдельной копии формы.
Не создавайте вручную реквизит Категории и элементы ДеревоКатегорий: код создаёт их программно.
В свойствах формы → События назначьте ПриСозданииНаСервере одноимённой процедуре из кода. Остальные процедуры вставьте полностью на уровне модуля.
Сохраните собственную EPF и откройте в 1С через Файл → Открыть. Данные Книга/Ручка создаются только в памяти формы.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Новые = Новый Массив;
Новые.Добавить(Новый РеквизитФормы("Категории", Новый ОписаниеТипов("ДеревоЗначений")));
Новые.Добавить(Новый РеквизитФормы("Название", Новый ОписаниеТипов("Строка"), "Категории"));
Новые.Добавить(Новый РеквизитФормы("Количество", Новый ОписаниеТипов("Число"), "Категории"));
ЭтаФорма.ИзменитьРеквизиты(Новые);
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка"));
Дерево.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Группа = Дерево.Строки.Добавить();
Группа.Название = "Канцелярия";
Книга = Группа.Строки.Добавить();
Книга.Название = "Книга";
Книга.Количество = 3;
Ручка = Группа.Строки.Добавить();
Ручка.Название = "Ручка";
Ручка.Количество = 1;
Резерв = Дерево.Строки.Добавить();
Резерв.Название = "Резерв";
ЭтаФорма.ЗначениеВРеквизитФормы(Дерево, "Категории");
Таблица = Элементы.Добавить("ДеревоКатегорий", Тип("ТаблицаФормы"));
Таблица.ПутьКДанным = "Категории";
Таблица.Отображение = ОтображениеТаблицы.Дерево;
Таблица.Заголовок = "Учебные категории — данные только в памяти";
Таблица.АвтоВводНовойСтроки = Ложь;
Таблица.АвтоВводНезаполненного = Ложь;
Для Каждого ИмяКолонки Из СтрРазделить("Название,Количество", ",") Цикл
Поле = Элементы.Добавить("Категории" + ИмяКолонки, Тип("ПолеФормы"), Таблица);
Поле.Вид = ВидПоляФормы.ПолеВвода;
Поле.ПутьКДанным = "Категории." + ИмяКолонки;
Поле.Заголовок = ИмяКолонки;
КонецЦикла;
КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
КомандаДействия.Действие = "УчебноеДействие";
КомандаДействия.Заголовок = "Проверить операции над детьми";
КомандаДействия.Подсказка = "Действие только над данными учебной формы";
КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
Кнопка.ИмяКоманды = КомандаДействия.Имя;
Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура УчебноеДействие(Команда)
Корни = Категории.ПолучитьЭлементы();
Группа = Корни.Получить(0);
Дети = Группа.ПолучитьЭлементы();
Карандаш = Дети.Вставить(1);
Карандаш.Название = "Карандаш";
Карандаш.Количество = 2;
Сообщить(Дети.Количество() = 3);
Сообщить(Дети.Индекс(Карандаш) = 1);
Дети.Сдвинуть(1, 1);
Сообщить(Дети.Индекс(Карандаш) = 2);
Сообщить(Дети.Получить(2).Название = "Карандаш");
Дети.Удалить(2);
Временный = Дети.Добавить();
Временный.Название = "Временная строка";
Временный.Количество = 99;
Дети.Удалить(Временный);
Резерв = Корни.Получить(1);
РезервныеДети = Резерв.ПолучитьЭлементы();
Черновик = РезервныеДети.Добавить();
Черновик.Название = "Черновик только этой формы";
РезервныеДети.Очистить();
Сообщить(РезервныеДети.Количество() = 0);
Сообщить(Дети.Количество() = 2);
Сообщить(Дети.Получить(0).Название = "Книга");
Сообщить(Дети.Получить(1).Название = "Ручка");
Сообщить(Корни.Количество() = 2);
КонецПроцедуры
Разбор по шагам
Вставить(1) помещает Карандаш между Книгой и Ручкой. Индексы начинаются с нуля и относятся только к одной коллекции детей.
Сдвинуть(1, 1) перемещает строку на одну позицию к концу; объект строки сохраняется, его индекс меняется.
Получить читает строку по позиции. Удалить поддерживает позицию и сам элемент: в уроке использованы оба варианта.
Добавить помещает временную строку в конец; удаление не записывает изменения в справочник.
Очистить вызывается только для собственных детей Резерва. Канцелярия и сами корневые группы не очищаются.
После удаления не обращаемся к Карандашу и Временному: эти элементы больше не принадлежат коллекции.
Как проверить результат
Карандаш сначала имеет индекс 1, после сдвига 2.
После кнопки в Канцелярии снова только Книга 3 и Ручка 1; Резерв пустой.
Повторное нажатие даёт тот же итог: временные узлы не накапливаются.
Ожидаемый результат
Все восемь операций коллекции детей проверены на собственной структуре без удаления рабочих данных.
На что обратить внимание
Очистить удаляет всех детей выбранной коллекции, поэтому нельзя переносить вызов на рабочий объект без проверки области действия.
Позиция 1 в корнях и позиция 1 у Канцелярии относятся к разным строкам.
Перемещение по позиции внутри коллекции не переносит строку к другому родителю.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.