1С: Массивы и коллекции. Дерево значений
Описание
Примеры работы с деревом значений в 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; //сортировка подчиненных строк строки глБух ГлБух.Строки.Сортировать("Должность Возр"); //сортировка всех строк дерева значений Должности.Строки.Сортировать( "Количество Убыв, Должность Возр", Истина);