Управляемая форма 1С 8.2 (8.3) – работа с деревом значений и таблицей значений. Часть I (Основы)

24.06.15

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

Как известно, в платформе 1С 8.1 не составляло никакого труда связать дерево значений с табличным полем на форме, единственное, что при этом нужно было не забыть, так это СоздатьКолонки(). В управляемом приложении 1С 8.2 (8.3) сделать это не так просто, как кажется на первый взгляд. В данной статье речь пойдет о программном создании дерева значений (таблицы значений) на управляемой форме в управляемом приложении 1С

Скачать исходный код

Наименование Файл Версия Размер
Пример к статье
.rar 3,27Kb
30
.rar 3,27Kb 30 Скачать

В данной статье речь пойдет о программном создании дерева значений (таблицы значений) на управляемой форме в управляемом приложении 1С 8.2. Так как работа с ДеревомЗначений и ТаблицейЗначений в данном контексте практически не отличается, в примере будет использоваться ДеревоЗначений, все то же самое за исключением иерархии применимо и к ТаблицеЗначений. Как известно, в платформе 1С 8.1 не составляло никакого труда связать дерево значений с табличным полем на форме, единственное что при этом нужно было не забыть, так это СоздатьКолонки(). В управляемом приложении 1С 8.2 сделать это не так просто, как кажется на первый взгляд.

Обращаю внимание, что ДеревоЗначений доступно только на сервере, в толстом клиенте и внешнем соединение. В данных самой управляемой формы для моделирования дерева используется тип ДанныеФормыДерево. Для преобразования ДеревоЗначений <-> ДанныеФормыДерево используются методы управляемой формы ЗначениеВРеквизитФормы() и РеквизитФормыВЗначение(). Для непосредственного отображения дерева используется элемент формы типа ТаблицаФормы, связанный через реквизит ПутьКДанным с реквизитом формы типа ДанныеФормыДерево. Если Вам не очень понятна вышеописанная связь объектов, не огорчайтесь, ниже рассмотрим практический пример, и все встанет на свои места.

Задача: Имеется дерево значений, необходимо отобразить его на управляемой форме.

Создаем новую внешнюю обработку, добавляем управляемую форму и создаем обработчик ПриСозданииНаСервере(). Никаких реквизитов и элементов “вручную” не добавляем, будем делать это программно. 

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Создание и заполнение "обычного" объекта прикладного типа ДеревоЗначений,
    // который будет отображен на управляемой форме
    ДеревоОбъект = Новый ДеревоЗначений;
    ДеревоОбъект.Колонки.Добавить("Узел", Новый ОписаниеТипов("Строка"));
    Для к1 = 1 По 3 Цикл
        СтрокаУ1 = ДеревоОбъект.Строки.Добавить();
        СтрокаУ1.Узел = "Узел"+к1;
        Для к2 = 1 По 3 Цикл
            СтрокаУ2 = СтрокаУ1.Строки.Добавить();
            СтрокаУ2.Узел = СтрокаУ1.Узел+к2;
            Для к3 = 1 По 3 Цикл
                СтрокаУ3 = СтрокаУ2.Строки.Добавить();
                СтрокаУ3.Узел = СтрокаУ2.Узел+к3;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;

    // Создание Реквизита формы типа ДанныеФормыДерево
    МассивДобавляемыхРеквизитов = Новый Массив;
    МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Дерево", Новый ОписаниеТипов("ДеревоЗначений")));
    Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл
        МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "Дерево"));
    КонецЦикла;
    ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

    // Преобразование объекта прикладного типа ДеревоЗначений
    // в реквизит управляемой формы (данные формы)
    ЗначениеВРеквизитФормы(ДеревоОбъект, "Дерево");

    // Создание элемента формы типа ТаблицаФормы для отображения дерева
    ЭлементДерево = Элементы.Добавить("Дерево", Тип("ТаблицаФормы"));
    ЭлементДерево.ПутьКДанным = "Дерево";
    ЭлементДерево.Отображение = ОтображениеТаблицы.Дерево;

    Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ЭлементДерево);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
        НовыйЭлемент.ПутьКДанным = "Дерево." + Колонка.Имя;
    КонецЦикла;

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

http://www.obrabotki.com/1s-tree-table-managedforms-1/

1с 8.2 1с 8.3 Дерево значений Таблица значений Управляемые формы

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

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

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

6000 руб.

16.01.2015    61966    43    59    

81

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54592    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16838    21    4    

35

Версионирование объектов VS История данных

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Давайте разберемся в механизме «История данных» и поэкспериментируем для наглядности. Сравним «Версионирование объектов» и «Историю данных».

06.03.2023    19892    dsdred    54    

195

Шпаргалка по функциям АСИНХ

Механизмы платформы 1С Платформа 1С v8.3 Россия Бесплатно (free)

При знакомстве с новой механикой работы с асинхронностью (обещание, ждать и асинх) делал пометки, которыми и хочу поделиться. Ничего сверхъестественного в них нет, просто небольшие примеры и некоторые всплывшие нюансы использования.

29.07.2022    43771    zeltyr    23    

196

Модель состояния для MVC

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

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3860    kalyaka    4    

29

Динамическое обновление - это зло?

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Копнем глубже в тему "Что же такое динамическое обновление" и почему оно может привести к проблемам. И может ли?

09.05.2022    27399    Infostart    83    

243
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ibrogim 1313 15.05.15 07:36 Сейчас в теме
Вы из ВДГБ ?

А по сабжу, можно было ещё написать про:
1) Добавление событий (например реализацию расшифровки)
2) Создание групп полей на форме, флажков и т.п.
3) Управление командной панелью дерева
4) Создание дерева не при создании формы, а по кнопке (необходимо позаботиться об предварительном удалении уже созданного дерева)
5) Кнопки открытия,выбора,гиперссылки в ячейках дерева

Хотя в общем, основы есть основы )
username123; гыук320; jmi; rozhkovdmitriy; Светлый ум; +5
2. ll13 1049 15.05.15 10:35 Сейчас в теме
(1) Ibrogim,
Нет, я не не из ВДГБ. Они украли мои статьи.
username123; purgin; Ibrogim; +3
3. Ibrogim 1313 15.05.15 10:58 Сейчас в теме
(2) Ну тогда вам респект, а им позор
DELOVOYDOM; botokash; username123; Y_U_S; tdml; +5
14. DELOVOYDOM 26.02.24 10:02 Сейчас в теме
(1) Здесь же про дерево значений, причем тут тема подписок на события, группы полей и флажки?
+
15. Ibrogim 1313 26.02.24 10:10 Сейчас в теме
(14) Здесь же про отображение на форме дерева. Какраз про события, флажки , группы полей
+
4. Yashazz 4722 18.05.15 17:08 Сейчас в теме
И вот это называется "статья"? и за этот, пардон, ошмёток, кто-то даже плюсит? Мда-а-а, грустна судьба Инфостарта...
user797130; Night_ost; alest; +3 3
10. Y_U_S 23 13.07.18 00:34 Сейчас в теме
(4) Ошмёток-НеОшмёток, а мне помогло, когда впервые столкнулся с необходимостью использовать ДеревоЗначений на форме.
Всё изложено кратко и по сути — без воды.
По моему вопросу, так и листинг кода излишен — всё есть в Синтаксис-помощнике.
user1346935; adhocprog; Мах; +3
5. Светлый ум 406 31.08.15 12:36 Сейчас в теме
1. Удаление

&НаКлиенте
Процедура УдалитьИзделие(Команда)
	
	УдалитьСтрокиДерева();
	
КонецПроцедуры

&НаКлиенте
Процедура УдалитьСтрокиДерева();
	
	Если Элементы.Арматура.ТекущиеДанные=Неопределено Тогда
		Возврат;
	КонецЕсли;
	ЭлементыТекущегоУровняИерархии=?(Элементы.Арматура.ТекущиеДанные.ПолучитьРодителя()=Неопределено, 
	ДеревоАрматурыСЗакладными.ПолучитьЭлементы(), Элементы.Арматура.ТекущиеДанные.ПолучитьРодителя().ПолучитьЭлементы());
	ТекИндекс=0;
	Пока ЭлементыТекущегоУровняИерархии[ТекИндекс]<>Элементы.Арматура.ТекущиеДанные Цикл
		ТекИндекс=ТекИндекс+1;
	КонецЦикла;
	ЭлементыТекущегоУровняИерархии.Удалить(ТекИндекс);
	
КонецПроцедуры
Показать


2. Свернуть / Развернуть

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

&НаКлиенте
Процедура СвернутьДеревоАрматуры()
	
	КоллекцияЭлементовДерева = ДеревоАрматурыСЗакладными.ПолучитьЭлементы();
	Для Каждого Строка Из КоллекцияЭлементовДерева Цикл    
		ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
		Элементы.Арматура.Свернуть(ИдентификаторСтроки);
	КонецЦикла; 		
	
КонецПроцедуры
Показать
Мах; r.zdorkin; purgin; Ogonek_ir@; Hamsik; +5
6. Светлый ум 406 31.08.15 12:43 Сейчас в теме
Свертка дерева по определенному уровню
http://infostart.ru/public/262126/
adhocprog; Мах; +2
7. user809597 07.08.17 14:27 Сейчас в теме
А почему у меня ругается, что неуникальное имя реквизита "Дерево" ?..
+
8. user809597 07.08.17 15:11 Сейчас в теме
Причём сначала всё работало, а сейчас даже когда предыдущие версии подгружаю, то выдаёт предупреждение (внешний отчёт)
+
9. Xander0206 09.10.17 21:09 Сейчас в теме
При программном Разворачивании/Сворачивании дерева вызываются обработчики событий дерева ПередРазворачиванием/ПередСворачиванием. Как от этого избавится?
+
11. olezhe 21 08.04.19 02:24 Сейчас в теме
Спасибо. Плюсанул.
+
12. ХамитоваРайса 24.08.19 17:51 Сейчас в теме
Добрый день) Спасибо за статью, помогло. Но дальше не могу сдвинуться. Мне надо, что бы работал режим выбора в дереве. Как событие выбора привязать к дереву?
+
13. ХамитоваРайса 24.08.19 18:05 Сейчас в теме
Нашла ответ на свой вопрос: прописать в конце:

ЭлементДерево.УстановитьДействие("Выбор","ВыполнитьДействиеВыбор");


И добавить процедуру, в которой и считать выбранные данные:

&НаКлиенте 
Процедура ВыполнитьДействиеВыбор()
	А0=Элементы["Дерево"].ТекущиеДанные.Узел;
КонецПроцедуры
alean; AndE; Мах; +3
Оставьте свое сообщение