Здравствуй, дерево! Продолжение разбора особенностей поведения таблицы формы

12.08.24

Разработка - Работа с интерфейсом

Данная статья является логическим продолжением публикации https://infostart.ru/1c/articles/2156279/ по особенностям представления табличных частей на форме. Но на этот раз поговорим о реквизите типа Дерево и его представления на управляемой форме. Элементы дерева тоже можно обойти, как и элементы коллекции, но есть свои особенности

Попробуем разобраться с условной задачей перемещение по строкам таблицы вверх-вниз при размещении реквизита типа дерево на форме.

Реквизит типа ДанныеФормыДерево напрямую нельзя связать ни с каким из ссылочных типов данных. Для вывода данных, например, табличной части в дерево, потребуется данные табличной части сначала выгрузить в дерево, а по окончании редактирования загрузить обратно. При этом в список реквизитов, например, обработки можно добавить реквизит типа Дерево значений, но реквизиты обработки не сохраняются в информационной базе и существовать такой реквизит будет только пока обработка открыта.

Итак, реквизит для отображения дерева имеет тип ДанныеФормыДерево и является коллекцией элементов типа ДанныеФормыЭлементДерева.

Рассмотрим общие черты и различия реквизиты типа ДанныеФормыДерево и реквизиты типа ДанныеФормыКоллекция.

 

ДанныеФормыДерево ДанныеФормыКоллекция
Каждая строка (элемент коллекции) имеет свой уникальный идентификатор, не изменяющийся при любых изменениях формы (кроме удаления строки). Идентификатор строки в обоих случаях может быть получен ПолучитьИдентификатор(). Для обоих коллекций можно однозначно найти строку методом НайтиПоИдентификатору()
Реквизиты обоих типов представляются на форме в виде элемента типа Таблица, но с учетом особенностей типа реквизита
Есть возможность получить доступ к подчиненным строке элементам, а так же его родителю  
  Есть свойство НомерСтроки
Получить строки напрямую можно только в пределах текущего уровня Возможно получение любой строки
Индекс уникален только в пределах подчинения. Метод Количество() выдает количество элементов для текущего уровня Индекс уникален для всех строк. Метод Количество() возвращает общее количество
  Есть методы Итог() и Сортировать()
Выгружать/загружать напрямую можно только для связанных значений типа ДеревоЗначений можно  загрузить/выгрузить колонку в массив. В ДеревоЗначений можно выгрузить, например, результат запроса или результаты СКД Можно загружать/выгружать данные как напрямую, так и для связанных значений: таблиц значений / табличных частей

 

Элемент формы Таблица, связанный с соответствующим типом.
 

ДанныеФормыДерево ДанныеФормыКоллекция
Идентификатор однозначно связывает со строкой реквизита - ЭлементКоллекции или ДанныеФормыЭлементДерева
Можно получить идентификатор текущей строки
Можно установить текущую строку по идентификатору
Можно получить/установить родителя элемента - свойство ТекущийРодитель (согласно документации допускается чтение и запись). Лично у меня на 8.3.23.2157 получить родителя таким образом не получилось, всегда возвращалось Неопределено  
Структуру дерева можно свернуть-развернуть Свернуть(Идентификатор) Развернуть(Идентификатор)  

 

Отдельно хочется отметить "несовершенство" стандартных интерактивных функций таблицы для дерева. В пустой таблице можно добавить элемент "в корень" таблицы по нажатии кнопки Добавить. Следующее добавление произойдет в подчиненный предыдущему элементу. Добавить новый элемент "в корень" у меня не получилось. 

Основные правила "навигации" по реквизиту формы Дерево типа ДанныеФормыДерево.

1. Получить элементы "корня" Дерево.ПолучитьЭлементы(). Метод ПолучитьРодителя() для любого элемента "корня" будет возвращать Неопределено 

2. Для произвольного элемента возможно:

2.1. Получить родителя = ПолучитьРодителя()

2.2. Получить дочерние элементы = ПолучитьЭлементы()

2.3. Получить "соседние" элементы того же уровня = ПолучитьРодителя().ПолучитьЭлементы()

3. Для получения списка родителей / родителя верхнего уровня следует рекурсивно получать родителей вышестоящего элемента. Как было сказано выше, для родителя самого верхнего уровня ПолучитьРодителя() возвращает Неопределено.

Как и в "прошлой серии" привожу код процедуры движение текущей строки вниз в пределах подчинения.

Опция Вокруг определяет действие при достижении последней строки. Если Истина, то текущей становится первая строка, если Ложь, то ничего не изменяется.

&НаКлиенте
Процедура Вниз(Команда)
	Идентификатор = Элементы.Дерево.ТекущаяСтрока; 
	
	Если Дерево.НайтиПоИдентификатору(Идентификатор).ПолучитьРодителя() = Неопределено Тогда
		ТекущийУровеньДерева = Дерево.ПолучитьЭлементы(); 
	Иначе
		ТекущийУровеньДерева = Дерево.НайтиПоИдентификатору(Идентификатор).ПолучитьРодителя().ПолучитьЭлементы(); 
		//Определяется получением дочерних элементов от родителя текущего элемента

	КонецЕсли;
		
	Индекс = ТекущийУровеньДерева.Индекс(Дерево.НайтиПоИдентификатору(Идентификатор));

	Если Индекс < ТекущийУровеньДерева.Количество()-1 Тогда
		НовыйИдентификатор = ТекущийУровеньДерева[Индекс+1].ПолучитьИдентификатор();
	Иначе
		
		Если Вокруг Тогда
			
			НовыйИдентификатор =ТекущийУровеньДерева[0].ПолучитьИдентификатор();
			
		Иначе
			
			НовыйИдентификатор = Идентификатор; // А можно проще - написать Возврат, ведь ничего делать не нужно
			
		КонецЕсли;
	КонецЕсли;
	
	
	Элементы.Дерево.ТекущаяСтрока = НовыйИдентификатор;
	
	
КонецПроцедуры


Разрабатывалось и тестировалось на 23-м релизе 8.3.23.2157. Поскольку "новые" методы здесь не используются, можно с уверенностью сказать, что обработка будет функционировать под любым релизом платформы на управляемых формах.

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62998    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18866    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10239    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    16887    mrXoxot    43    

121

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7423    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    14825    919    elcoan    47    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    11923    162    acces969    31    

124
Оставьте свое сообщение