1С 8.3 Дерево значений — Программист 1С Минск. Автоматизация бизнеса.
Дерево Значений в 1С 8.3 — это иерархический динамически набор любого типа. По своим функциям и структуре (колонки и строки) очень схожа с Таблицей Значений, но есть виртуальная колонка «Родитель». Дерево значений рекомендуется использовать для работы именно с иерархической информацией . Каждая строка дерева значений имеет свойства «Родитель» и «Строки», а также может иметь любое количество подчиненных строк. Операции с помощью встроенного функционала (сортировка, раскраска строк, поиск, итоги, различные отборы ) могут производится с учетом подчиненных строк / уровней иерархии.
&НаСервере
Процедура ЗаполнениеРеквизитаФормыДеревоЗначений ()
// Преобразование реквизита формы в объект прикладного типа ДеревоЗначений
ДеревоЗначений = РеквизитФормыВЗначение ( «ДеревоЗначНаФорме» );
// ДеревоЗначений = Новый ДеревоЗначений; — если без реквизита
ДЗ_Корень = ДеревоЗначений . Строки . Добавить ();
ДЗ_Корень . Наименование = «Самый верхний уровень» ;
ДЗ_1уровень = ДЗ_Корень . Строки . Добавить ();
ДЗ_1уровень . Наименование = «1-ая папка (группа)» ;
ЭлементДЗ_1 = ДЗ_1уровень . Строки . Добавить ();
ЭлементДЗ_1 . Наименование = «Первый (вложенный) элемент» ;
ДЗ_2уровень = ДЗ_Корень . Строки . Добавить ();
ДЗ_2уровень . Наименование = «2-ая папка (группа)» ;
ЭлементДЗ_1 = ДЗ_2уровень . Строки . Добавить ();
ЭлементДЗ_1 . Наименование = «Первый (вложенный) элемент» ;
ЭлементДЗ_2 = ДЗ_2уровень . Строки . Добавить ();
ЭлементДЗ_2 . Наименование = «Второй (вложенный) элемент» ;
// Преобразование ДеревоЗначений в реквизит формы (табличное поле)
ЗначениеВРеквизитФормы ( ДеревоЗначений , «ДеревоЗначНаФорме» );
&НаСервере
Процедура ЗаполнениеРеквизитаФормыДеревоЗначенийИзЗапроса ()
Запрос = Новый Запрос ;
Запрос . Текст = «ВЫБРАТЬ
| Материалы.Ссылка КАК Наименование
| Материалы.Родитель КАК Родитель
|ИЗ
| Справочник.Материалы КАК Материалы
|УПОРЯДОЧИТЬ ПО
| Наименование ИЕРАРХИЯ
|ИТОГИ ПО
| Родитель» ;
//Внимание! Если правильно не указать вид обхода результата выборки по запросу,
//то мы получим обычную таблицу значений
ДеревоЗначений = Запрос . Выполнить (). Выгрузить ( ОбходРезультатаЗапроса . ПоГруппировкамСИерархией );
// Заполнение дерева значений из результата запроса
// колонка «Материалы» – это элемент справочника, колонка «Родитель» – это группа
ЗначениеВРеквизитФормы ( ДеревоЗначений , «ДеревоЗначНаФорме» ); // Преобразование в реквизит формы (табличное поле)
&НаСервере
Процедура ПоискСтрокиВДеревеЗначений () // найдём 1-ю строку со значением «Элемент №1» в дереве значений
// Преобразование реквизита формы в объект прикладного типа ДеревоЗначений
ДеревоЗначений = РеквизитФормыВЗначение ( «ДеревоЗначНаФорме» );
// Поиск строки. (если строка не найдена, вернёт «Неопределено»)
НайденнаяСтрокаДЗ = ДеревоЗначений . Строки . Найти ( «Первый (вложенный) элемент» , «Наименование» , Истина);
// Анализ результата поиска
Если НайденнаяСтрокаДЗ = Неопределено Тогда
Сообщить ( «Строка не найдена» );
Иначе // вренёт первую найденную строку
Сообщить ( «Найдена: » + НайденнаяСтрокаДЗ . Наименование + » (» + НайденнаяСтрокаДЗ . Родитель . Наименование + «)» );
КонецЕсли;
&НаСервере
Процедура ПоискВсехСтрокВДеревеЗначений ()
// Преобразование реквизита формы в объект прикладного типа ДеревоЗначений
ДеревоЗначений = РеквизитФормыВЗначение ( «ДеревоЗначНаФорме» );
// Создаем структуру для поиска (условие)
НаименованиеДляПоиска = «Первый (вложенный) элемент» ;
ПараметрыОтбора = Новый Структура ;
ПараметрыОтбора . Вставить ( «Наименование» , НаименованиеДляПоиска );
// Поиск всех строк содержащих наименование «Первый (вложенный) элемент»
МассивСтрок_ДЗ = ДеревоЗначений . Строки . НайтиСтроки ( ПараметрыОтбора , Истина);
// Проверка найдены ли строки
Если МассивСтрок_ДЗ . Количество () = 0 Тогда
Сообщить ( «Ни одной строкис наименованием » + НаименованиеДляПоиска + » не найдено!» );
КонецЕсли;
// Перебор строк
Для Каждого Строка_ДЗ Из МассивСтрок_ДЗ Цикл
Если Строка_ДЗ . Родитель = Неопределено Тогда
Сообщить ( «Корень дерева значений: » + Строка_ДЗ . Наименование );
Иначе
Сообщить ( Строка_ДЗ . Наименование + » — » + Строка_ДЗ . Родитель . Наименование );
КонецЕсли
&НаСервере
Процедура УдалениеСтрокиИзДереваЗначений ()
// Преобразование реквизита формы в объект прикладного типа ДеревоЗначений
ДеревоЗначений = РеквизитФормыВЗначение ( «ДеревоЗначНаФорме» );
// С помощью данных методов возможно удаление конкретных строк
// Важно! При удалении либо очистки строки — все её подчинённые строки удалятся
// 1.Очистка всех строк
ДеревоЗначений . Строки . Очистить ();
// 2. Удаление по конкретному индексу
ДеревоЗначений . Строки . Удалить ( 0 );
// 3.Или удаление по конкретному наименованию
НайтиСтроку = ДеревоЗначений . Строки . Найти ( » Легированная сталь » , «Наименование» );
Если НЕ НайтиСтроку = Неопределено Тогда
ДеревоЗначений . Строки . Удалить ( НайтиСтроку );
КонецЕсли;
ЗначениеВРеквизитФормы ( ДеревоЗначений , «ДеревоЗначНаФорме» ); // Преобразование в реквизит формы (табличное поле)
Источник
Выделенные строки коллекции значений
Часто приходится работать с выделенными строками пользователем в различных элементах формы типа коллекции:
- Дерево значений
- Динамический список
- Список значений
- Таблица значений
Для работы выделенными строками коллекции используется свойство коллекции ВыделенныеСтроки , которое содержит массив идентификаторов выделенных строк.
Для демонстрации работы с выделенными строками, я создал в управляемой форме внешней обработки 4 вида коллекции ( см. Рис 1 )
Свойства ВыделенныеСтроки используется вместе с методом коллекции формы НайтиПоИдентификатору( ) , которое получает элемент коллекции по идентификатору или с методом ДанныеСтроки( ) , который возвращает значение, содержащее данные указанной строки.
Следующий программный кок показывает как использовать свойство
ВыделенныеСтроки в различных видах коллекции
&НаКлиенте Процедура РаботаСвыделеннымиСтроками() // Коллекция Дерево Значений Для Каждого ВыделеннаяСтрока Из Элементы.ДеревоЗначений.ВыделенныеСтроки Цикл ЭлементДерево = Элементы.ДеревоЗначений.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; // Коллекция Динамический Список Для Каждого ВыделеннаяСтрока Из Элементы.ДинамическийСписок.ВыделенныеСтроки Цикл СтрокаДинамическогоСписка = Элементы.ДинамическийСписок.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; // Коллекция Таблица Значений Для Каждого ВыделеннаяСтрока Из Элементы.ТаблицаЗначений.ВыделенныеСтроки Цикл СтрокаТаблицыЗначений = Элементы.ТаблицаЗначений.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; // Коллекция Список Значений Для Каждого ВыделеннаяСтрока Из Элементы.ТаблицаЗначений.СписокЗначений.ВыделенныеСтроки Цикл ЭлементСпискаЗначений = СписокЗначений.НайтиПоИдентификатору(ВыделеннаяСтрока); ЭлементСпискаЗначений = Элементы.СписокЗначений.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; КонецПроцедуры
Поделиться ссылкой:
Источник
Список выделенных строк в 1С
В данной статье будет описано что такое элемент выделенные строки, списки и коллекции выделенных строк в системе 1С, как с ними работать, как они используются в коде программы.
А также какими методами и свойствами удобно пользоваться, относительно выделенных строк в списке. И будут приведены примеры программного кода для работы и управления выделенных строк.
Чаще всего, юзеры встречаются с работой с выделенными строками в динамическом списке, древе значений, списке значений и таблице значений.
Для того, чтобы работать со списками выделенных строк в 1С, существует свойство в коллекции «ВыделенныеСтроки», данное свойство состоит из массива с идентификаторами строк, которые выделены.
Рассмотрим пример, в котором демонстрируется работа с выделенными строками в 1С, основа – это форма с внешней обработкой вида №4, который располагается в коллекции, она представлена на скриншоте с примером ниже:
Работа с выделенными строками в 1С Свойство «ВыделенныеСтроки» всегда задействуется в связке с методом, из коллекции формы, «НайтиПоИдентификатору(), этот метод присваивается элементам в коллекции, согласно их идентификатору, также ещё один метод, который связан со списками выделенных строк – это «ДанныеСтроки(), при помощи этого метода можно возвращать значения, которые содержат данные по указанной строке.
Далее представлен код программы, в котором демонстрируется то, как можно пользоваться свойством «ВыделенныеСтроки» по различным вариациям в коллекции:
Свойство ВыделенныеСтроки для работы с выделенными строками в 1С
2. Метод «ДанныеСтроки()» для работы со списком выделенных строк в 1С
Рассмотрим ещё один метод, который относится к выделенным строкам и его использование – это «ДанныеСтроки()».
Каждое поле из таблицы имеет свойства «ТекущиеДанные», «ТекущаяСтрока» и метод «ДанныеСтроки()». Свойство «ТекущиеДанные» отвечает за хранение данных в текущей строке, конкретного поля таблицы, а свойство «ТекущаяСтрока» отвечает за хранение значение, по которому можно идентифицировать строку. Метод же «ДанныеСтроки()» необходим для возвращения коллекции значений из любой из строк в динамическом списке, который отражается в виде поля таблицы.
Одно из применений этого метода – это обход строк по коллекциям в поле таблицы, как пример, если есть коллекция с выделенными строками.
Рассмотрим пример обхода коллекции списка выделенных строк. Для примера, возьмём некоторое поле таблицы, которое отображает перечень из справочника по номенклатуре. Необходимо сохранить в документе, текстового формата, все строки из данного справочника, которые являются выделенными, при этом, сохранять нужно лишь значения из видимых столбцов в поле таблицы. Далее приведён пример кода, для решения данной задачи, в котором можно получить выделенные строки в списке при помощи кнопки «Записать», если кликнуть на неё:
Список выделенных строк в 1С осуществлен с помощью кнопки Записать
Пример кода при работе со списком выделенных строк
Выделенные строки в списке при работе с кодом В данной статье было описано как работать со списками выделенных строк в 1С, какие свойства и методы удобно и нужно задействовать. А также был приведён обратный метод, — обход коллекции выделенных строк, при помощи метода «ДанныеСтроки()», при этом, не прекращая работу с выделенными строками.
Специалист компании «Кодерлайн» Айдар Фархутдинов
Источник