1С: Массивы и коллекции. Дерево значений

Массивы и коллекции. Дерево значений

Оглавление (нажмите, чтобы раскрыть)

Добавление и удаление строк

Пример добавления и удаления строк дерева значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");

ГенДир = Должности.Строки.Добавить();
ГенДир.Должность = "Ген. директор";

ФинДир = ГенДир.Строки.Добавить();
ФинДир.Должность = "Фин. директор";

КомДир = ГенДир.Строки.Добавить();
КомДир.Должность = "Ком. директор";

//удаляем строку "Фин. директор"
ГенДир.Строки.Удалить(0);

//удаляем все строки ветки "Ген. директор"
ГенДир.Строки.Очистить();

//удаляем все строки дерева
Должности.Строки.Очистить();

Загрузка и выгрузка колонок

Примеры загрузку и выгрузки колонок дерева значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");

ГенДир = Должности.Строки.Добавить();
ГенДир.Должность = "Ген. директор";

ФинДир = ГенДир.Строки.Добавить();
ФинДир.Должность = "Фин. директор";

КомДир = ГенДир.Строки.Добавить();
КомДир.Должность = "Ком. директор";

Массив = Должности.Строки.ВыгрузитьКолонку(0);
//Массив = ["Ген. директор"]

Массив = ГенДир.Строки.ВыгрузитьКолонку(0);
//Массив = ["Фин. директор", "Ком. директор"]

Массив[0] = "Тех. директор";
ГенДир.Строки.ЗагрузитьКолонку(Массив, 0);

Инициализация

Пример создания дерева значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");
Должности.Колонки.Добавить("Количество");

ГенДир = Должности.Строки.Добавить();
ГенДир.Должность = "Ген. директор";
ГенДир.Количество = 1;

ФинДир = ГенДир.Строки.Добавить();
ФинДир.Должность = "Фин. директор";
ФинДир.Количество = 1;

КомДир = ГенДир.Строки.Добавить();
КомДир.Должность = "Ком. директор";
КомДир.Количество = 1;

Торг = КомДир.Строки.Добавить();
Торг.Должность = "Торг. представитель";
Торг.Количество = 3;

Обход дерева значений

Пример обхода дерева значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");
Должности.Колонки.Добавить("Количество");

ГенДир = Должности.Строки.Добавить();
ГенДир.Должность = "Ген. директор";
ГенДир.Количество = 1;

ГлБух = ГенДир.Строки.Добавить();
ГлБух.Должность = "Гл. бухгалтер";
ГлБух.Количество = 1;

ЗамГлБух = ГлБух.Строки.Добавить();
ЗамГлБух.Должность = "Зам. гл. бухгалтера";
ЗамГлБух.Количество = 1;

БухРасчет = ГлБух.Строки.Добавить();
БухРасчет.Должность = "Бух. расч. отдела";
БухРасчет.Количество = 3;

ПоказатьДЗ(Должности);

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

&НаСервере
Процедура ПоказатьДЗ(Дерево, Уровень = 1)
    Пробелы = "          ";
    Для Каждого Строка из Дерево.Строки Цикл
        Стр = Строка.Должность + ": " +
        Строка.Количество + " ед.";
        //отступ для подчиненных строк
        Стр = Лев(Пробелы, (Уровень - 1)*2) + Стр;
        Сообщить(Стр);
        ПоказатьДЗ(Строка, Уровень + 1);
    КонецЦикла;
КонецПроцедуры

Перемещение строк

Пример перемещения строк в дереве значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");

ГенДир = Должности.Строки.Добавить();
ГенДир.Должность = "Ген. директор";

ФинДир = ГенДир.Строки.Добавить();
ФинДир.Должность = "Фин. директор";

КомДир = ГенДир.Строки.Добавить();
КомДир.Должность = "Ком. директор";

//сдвигаем фин. дир. на строчку ниже
ГенДир.Строки.Сдвинуть(0, 1);

//возвращаем обратно
ГенДир.Строки.Сдвинуть(1, -1);

Перечисление колонок

Пример перечисления колонок в дереве значений
Товары = Новый ДеревоЗначений;
Товары.Колонки.Добавить("Товар");
Товары.Колонки.Добавить("Цена");

Для Каждого Колонка Из Товары.Колонки Цикл
    Сообщить(Колонка.Имя);
КонецЦикла;

Поиск по дереву значений

Пример поиска по дереву значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");
Должности.Колонки.Добавить("Количество");

Директор = Должности.Строки.Добавить();
Директор.Должность = "Директор";
Директор.Количество = 1;

Бухгалтер = Директор.Строки.Добавить();
Бухгалтер.Должность = "Бухгалтер";
Бухгалтер.Количество = 1;

Продавец = Директор.Строки.Добавить();
Продавец.Должность = "Продавец";
Продавец.Количество = 3;

//поиск по всем колонкам и подчиненным строкам
Строка1 = Должности.Строки.Найти("Продавец", Неопределено, Истина);
//Строка = Продавец : 3

//поиск по колонке "Должность", включая подчиненные строки
Строка2 = Должности.Строки.Найти("Продавец", "Должность", Истина);
//Строка = Продавец : 3

//поиск по колонке "Количество", включая подчиненные строки
Строка3 = Должности.Строки.Найти("Продавец", "Количество", Истина);
//Строка = Неопределено

//поиск по колонке "Должность"
Строка4 = Должности.Строки.Найти("Продавец", "Должность");
//Строка = Неопределено

//поиск по всем колонкам в строке "директор"
строка5 = директор.Строки.Найти("Продавец");
//строка = Продавец : 3

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Количество", 1);
строки = должности.Строки.НайтиСтроки(ПараметрыОтбора, Истина);
//массив из строк "Директор" и "Бухгалтер"

Получение индекса строки

Пример получения индекса строки дерева значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");

ГенДир = Должности.Строки.Добавить();
ГенДир.Должность = "Ген. директор";

ФинДир = ГенДир.Строки.Добавить();
ФинДир.Должность = "Фин. директор";

КомДир = ГенДир.Строки.Добавить();
КомДир.Должность = "Ком. директор";

Индекс = Должности.Строки.Индекс(КомДир);
//Индекс = -1

Индекс = ГенДир.Строки.Индекс(КомДир);
//Индекс = 1

Создание копии дерева значений

Пример создания копии дерева значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");

ГенДир = Должности.Строки.Добавить();
ГенДир.Должность = "Ген. директор";

ФинДир = ГенДир.Строки.Добавить();
ФинДир.Должность = "Фин. директор";

КомДир = ГенДир.Строки.Добавить();
КомДир.Должность = "Ком. директор";

//полная копия дерева
Копия = Должности.Скопировать();

Сортировка данных в дереве значений

Пример сортировки данных в дереве значений
Должности = Новый ДеревоЗначений;
Должности.Колонки.Добавить("Должность");
Должности.Колонки.Добавить("Количество");

ГлБух = Должности.Строки.Добавить();
ГлБух.Должность = "Гл. бухгалтер";
ГлБух.Количество = 1;

ЗамГлБух = ГлБух.Строки.Добавить();
ЗамГлБух.Должность = "Зам. гл. бухгалтера";
ЗамГлБух.Количество = 1;

БухРасчет = ГлБух.Строки.Добавить();
БухРасчет.Должность = "Бух. расч. отдела";
БухРасчет.Количество = 3;

//сортировка подчиненных строк строки глБух
ГлБух.Строки.Сортировать("Должность Возр");

//сортировка всех строк дерева значений
Должности.Строки.Сортировать(
    "Количество Убыв, Должность Возр", Истина);
Ключи: | |