1с выделенные строки дерево значений

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.Или удаление по конкретному наименованию
НайтиСтроку = ДеревоЗначений . Строки . Найти ( » Легированная сталь » , «Наименование» );
Если НЕ НайтиСтроку = Неопределено Тогда
ДеревоЗначений . Строки . Удалить ( НайтиСтроку );
КонецЕсли;

ЗначениеВРеквизитФормы ( ДеревоЗначений , «ДеревоЗначНаФорме» ); // Преобразование в реквизит формы (табличное поле)

Источник

8.2 Упр.прилож.: Дерево значений — можно ли выделить цветом/шрифтом одну строку ?

Вывожу в упр.форму дерево значений — могу посмотреть тек.строку/тек.данные есть еще тек.элемент где можно менять цвет/шрифт, но это, похоже меняет во всем списке. Есть ли варианты выделить одну конкретную строку программно ?

Или только таб.документ делать ?

Как выделить одну строку другим цветом
Не судите строго, второй день изучаю С++. Прочитал много тем, нашел несколько подходящих тем, но.

Как выделить цветом одну строку в ленточной форме? Help!
Коллеги! Может быть, кто-то знает, как решить следующую задачку? Буду очень признателен за помощь.

Можно ли как-то выделить строку другим цветом?
так не катит,он весь текст делает таким.

Читайте также:  Деревья осенью рисование старшая группа

TCalendarView как выделить определенные даты цветом или шрифтом?
На форме имеется TCalendarView и TDBGrid стоит задача выделить в календаре цветом или шрифтом.

Эксперт 1С

Извините за тавтологию, но тек.строка (Текущая строка) по вашему не ОДНА конкретная строка?

Добавлено через 53 секунды
Для изменения шрифта и цвета в управляемых формах, строки не нужны. Есть объект «Условноеоформление» — читайте справку

А где у дерева значений условное уформление ? Усл.оформление у формы в целом в моем варианте не работает — я дерево программно создаю.

Эксперт 1С

Так и просят код за них написать.
Что за «Пррограммисты»пошли

УО = УсловноеОформление.Элементы.Добавить(); УО.Оформление.УстановитьЗначениеПараметра("ЦветФона",WebЦвета.Красный); ЭУ = УО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭУ.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДЗ.Колонка1"); ЭУ.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭУ.ПравоеЗначение = "4"; ОП = УО.Поля.Элементы.Добавить(); ОП.Поле = Новый ПолеКомпоновкиДанных("ДЗКолонка1");

ЦитатаСообщение от BVladimir2 Посмотреть сообщение

ЦитатаСообщение от Dethmontt Посмотреть сообщение

УО = УсловноеОформление.Элементы.Добавить(); УО.Оформление.УстановитьЗначениеПараметра("ЦветФона",WebЦвета.Красный); ЭУ = УО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭУ.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДЗ.Колонка1"); ЭУ.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭУ.ПравоеЗначение = "4"; ОП = УО.Поля.Элементы.Добавить(); ОП.Поле = Новый ПолеКомпоновкиДанных("ДЗКолонка1");

Это усл.оформление динамического списка, я так понимаю. Мне он не подходит, по ряду причин. У меня в форме создан реквизит типа
«Дерево значений» и выведен на форму. Само дерево заполняется программно (и выводится в соотв. элемент). Усл.оформления здесь нигде не нашел, ну кроме самой формы, конечно. Отсюда вопрос и возник, можно ли как-то изменить одну строку или не вариант ?

Эксперт 1С

Лучший ответ

Сообщение было отмечено как решение

Решение

ЭТОТ код для реквизита формы с типом «ДЕРЕВОЗННАЧЕНИЙ»
я где то разве писал про динамический список?

Добавлено через 1 минуту
КОд не для динамического списка, а для любой таблицы формы.

Добавлено через 19 секунд

Добавлено через 2 минуты

Делаете выводы, даже не соизволив проверить.

ЦитатаСообщение от Dethmontt Посмотреть сообщение

Ну, я, собственно, тоже подумал, что это к дин списку относится (поскольку в УФ ещё — честно признаться — пальцем о палец не ударял) и ввёл человека в заблуждение, натолкнув на эту мысль. Но что правда, то правда: надо ВСЁ ПРОВЕРЯТЬ НА ПРАКТИКЕ. Спасибо.

Читайте также:  Нужно ли отбеливать дерево перед покраской

ЦитатаСообщение от Dethmontt Посмотреть сообщение

Спасибо, заработало !
Но это код для усл.оформления формы в целом ? Я пробовал устанавливать усл.оформл. формы в конфигураторе — не сработало. А после програмн. добавления уже после формиров. дерева все заработало и новые добавленные поля можно увидеть в табло вместе с созданными в конфигураторе.

Эксперт 1С

ЦитатаСообщение от BVladimir2 Посмотреть сообщение

Тут указываешь какие поля нужно оформлять

ОП = УО.Поля.Элементы.Добавить(); ОП.Поле = Новый ПолеКомпоновкиДанных("ДЗКолонка1");

CheckedListBox выделить некоторые элементы жирным шрифтом или цветом
CheckedListBox выделить некоторые элементы жирным шрифтом или цветом. возможно ли это? в ListBox.

Выделить строку в ListView жирным шрифтом
Здравствуйте!Возможно ли выделить строку в ListView жирным шрифтом. Вот код кнопки которая.

Как выделить строку в RichEdit жирным шрифтом
Здравствуйте. Как оптимальнее всего написать на Делфи следующее: RichEdit.Lines становится.

ComboBox. Можно ли выделить отдельные элементы жирным шрифтом?
Хочу некоторые элементы выделить цветом или жирным шрифтом. Это возможно?

Выделить в textBox одну или несколько букв другим цветом
На форме имеется элемент Textbox с некоторым текстом. Подскажите пожалуйста, как выделить одну.

Выделить строку DataGridView цветом
Доброго времени суток! Подскажите пожалуйста, как выделить строку в datagridview.

Источник

Выделенные строки коллекции значений

Часто приходится работать с выделенными строками пользователем в различных элементах формы типа коллекции:

  • Дерево значений
  • Динамический список
  • Список значений
  • Таблица значений

Для работы выделенными строками коллекции используется свойство коллекции ВыделенныеСтроки , которое содержит массив идентификаторов выделенных строк.

Для демонстрации работы с выделенными строками, я создал в управляемой форме внешней обработки 4 вида коллекции ( см. Рис 1 )

Свойства ВыделенныеСтроки используется вместе с методом коллекции формы НайтиПоИдентификатору( ) , которое получает элемент коллекции по идентификатору или с методом ДанныеСтроки( ) , который возвращает значение, содержащее данные указанной строки.

Следующий программный кок показывает как использовать свойство
ВыделенныеСтроки в различных видах коллекции

&НаКлиенте Процедура РаботаСвыделеннымиСтроками() // Коллекция Дерево Значений Для Каждого ВыделеннаяСтрока Из Элементы.ДеревоЗначений.ВыделенныеСтроки Цикл ЭлементДерево = Элементы.ДеревоЗначений.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; // Коллекция Динамический Список Для Каждого ВыделеннаяСтрока Из Элементы.ДинамическийСписок.ВыделенныеСтроки Цикл СтрокаДинамическогоСписка = Элементы.ДинамическийСписок.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; // Коллекция Таблица Значений Для Каждого ВыделеннаяСтрока Из Элементы.ТаблицаЗначений.ВыделенныеСтроки Цикл СтрокаТаблицыЗначений = Элементы.ТаблицаЗначений.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; // Коллекция Список Значений Для Каждого ВыделеннаяСтрока Из Элементы.ТаблицаЗначений.СписокЗначений.ВыделенныеСтроки Цикл ЭлементСпискаЗначений = СписокЗначений.НайтиПоИдентификатору(ВыделеннаяСтрока); ЭлементСпискаЗначений = Элементы.СписокЗначений.ДанныеСтроки(ВыделеннаяСтрока); КонецЦикла; КонецПроцедуры 

Поделиться ссылкой:

Источник

Оцените статью