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

24.06.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Пример к статье
.rar 3,27Kb
31
31 Скачать (2 SM) Купить за 2 150 руб.

В данной статье речь пойдет о программном создании дерева значений (таблицы значений) на управляемой форме в управляемом приложении 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 Платные (руб)

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

6000 руб.

16.01.2015    62986    44    59    

82

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

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

2400 руб.

29.06.2020    18855    26    6    

41

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

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

1500 руб.

06.10.2020    10229    7    7    

10

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

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

06.03.2023    31743    dsdred    74    

214

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

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

29.07.2022    66000    zeltyr    25    

213

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

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

1 стартмани

05.07.2022    5756    kalyaka    6    

33

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

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

09.05.2022    34141    Infostart    84    

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

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

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

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

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


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

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

&НаКлиенте
Процедура СвернутьДеревоАрматуры()
	
	КоллекцияЭлементовДерева = ДеревоАрматурыСЗакладными.ПолучитьЭлементы();
	Для Каждого Строка Из КоллекцияЭлементовДерева Цикл    
		ИдентификаторСтроки = Строка.ПолучитьИдентификатор();
		Элементы.Арматура.Свернуть(ИдентификаторСтроки);
	КонецЦикла; 		
	
КонецПроцедуры
Показать
Мах; r.zdorkin; purgin; Ogonek_ir@; Hamsik; +5 Ответить
6. Светлый ум 415 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 Ответить
Оставьте свое сообщение