[Обучаловка] Знакомство с объектом «Дерево+Таблица» внешней компоненты «FormEx»

17.08.10

Разработка - Разработка внешних компонент

Ликбез для «штатных» программистов по объекту «Дерево+Таблица» внешней компоненты «FormEx»

Скачать файлы

Наименование Файл Версия Размер
ДеревоПлюсТаблица.ert
.ert 8,50Kb
253
.ert 8,50Kb 253 Скачать

Довольно часто в системе 1С:Предприятие 7.7 у разработчика возникает потребность использовать на форме контрол, который бы давал возможность представить данные для пользователя в виде дерева. Штатные возможности системы таким функционалом не располагают, но внешняя компонента «FormEx», дает возможность разработчику это реализовать с помощью объекта «Дерево+Таблица», с которым мы сейчас и познакомимся.

Скачаем внешнюю компоненту с сайта http://www.dorex.ru.  Последнюю стабильную сборку можно взять тут: http://www.dorex.ru/files/?formex_t.zip. Из скачанного архива нужно распаковать файл «formex.dll» в папку конфигурации или в папку «Bin» платформы 1С 7.7.

Затем создадим в какой-нибудь конфигурации для экспериментов обработку и на ее форму закинем обычную «ТаблицуЗначений», зададим ей идентификатор -«ТЗ». Это, впоследствии, и будет наше дерево. Кнопки «Выполнить» и «Закрыть», которые появляются при создании новой обработки, оставим на будущее, также как и пустую процедуру «Выполнить()» в модуле формы обработки. Т.е. в конфигураторе она будет выглядеть примерно так, см. рис.:


Далее будем писать код в модуле формы нашей обработки. Определим две глобальные переменные, они нам понадобятся для манипулирования деревом:

Перем гАтрФормыТЗ, гСтруктураТЗ;

И затем в процедуре «ПриОткрытии()» запишем код загрузки внешней компоненты «FormEx»:

Процедура ПриОткрытии()
    Если ЗагрузитьВнешнююКомпоненту("formex.dll")=0 Тогда
        Предупреждение("Не удалось загрузить внешнюю компоненту FormEx.",10);
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры  // ПриОткрытии

А в теле модуля, т.е. после процедур и функций модуля формы обработки, заполним и сохраним в глобальную переменную модуля структуру «ТаблицыЗначений»:

ТЗ.НоваяКолонка("Ветка");
ТЗ.НоваяКолонка("Значек");
ТЗ.НоваяКолонка("ИмяВетки",,,,"Узлы");
гСтруктураТЗ=ЗначениеВСтрокуВнутр(ТЗ);

После чего в процедуре «ПослеОткрытия()», эта предопределенная процедура работает, если загружен «FormEx», напишем код, который преобразует нашу «ТаблицуЗначений» в дерево:

Процедура ПослеОткрытия()
    гАтрФормыТЗ = СоздатьОбъект("АтрибутФормы");
    гАтрФормыТЗ.УстановитьАтрибут(Форма,"ТЗ");
    гАтрФормыТЗ.ПерехватитьТаблицуЗначений();
    гАтрФормыТЗ.ОпцииДерева(0,0);
КонецПроцедуры  // ПослеОткрытия

Вот, в принципе, пустое дерево мы создали. Стоит также отметить, что колонки, которые мы задали для «ТаблицыЗначений» - это те три минимальных служебных колонки, которые должны быть у «ТаблицыЗначений» в любом случае, для того, чтобы она успешно стала деревом. Т.е. это колонки «Ветка», «Значек», «ИмяВетки». Причем, ячейки колонки «Ветка» - фактически, должны хранить «ТаблицуЗначений», в которой хранится таблица подветок текущей ветки, если подветки у нее есть. Т.е. имеем структуру вложенных друг в друга «ТаблицЗначений». Ячейки колонки «Значек» можем пока не трогать, так как нам будет достаточно системных пиктограмм, а колонка «ИмяВетки» - это то, что будет отображаться в нашем дереве в качестве названий узлов-веток.

Теперь давайте заполним какими-нибудь произвольными данными наше дерево, чтобы можно было посмотреть, как это все выглядит.

Для этого в процедуре «Выполнить()», которую мы оставили пустой, после создания новой обработки в начале, напишем код заполнения нашего дерева какими-нибудь данными, например, такими (я тут намеренно не усложняю рекурсией и даю пример для дерева всего с двумя уровнями):

Процедура Выполнить()
    ТЗ.УдалитьСтроки();
    Для Сч=1 По 10 Цикл
        ТЗ.НоваяСтрока();
        ТЗ.ИмяВетки="Уровень номер "+НРег(СокрЛП(Формат(1,"ЧП")))+
            ", узел номер "+НРег(СокрЛП(Формат(Сч,"ЧП")));
        ТЗ.Ветка=ЗначениеИзСтрокиВнутр(гСтруктураТЗ);
        Для Сч2=1 По 5 Цикл
            ТЗ.Ветка.НоваяСтрока();
            ТЗ.Ветка.ИмяВетки="Уровень номер "+НРег(СокрЛП(Формат(2,"ЧП")))+
                ", узел номер "+НРег(СокрЛП(Формат(Сч2,"ЧП")));
            ТЗ.Ветка.Ветка=ЗначениеИзСтрокиВнутр(гСтруктураТЗ);
        КонецЦикла;
    КонецЦикла;
    гАтрФормыТЗ.ОбновитьДерево();
КонецПроцедуры

Итак, весь код модуля формы нашей обработки таков:

Перем гАтрФормыТЗ, гСтруктураТЗ;

Процедура Выполнить()
    ТЗ.УдалитьСтроки();
    Для Сч=1 По 10 Цикл
        ТЗ.НоваяСтрока();
        ТЗ.ИмяВетки="Уровень номер "+НРег(СокрЛП(Формат(1,"ЧП")))+
            ", узел номер "+НРег(СокрЛП(Формат(Сч,"ЧП")));
        ТЗ.Ветка=ЗначениеИзСтрокиВнутр(гСтруктураТЗ);
        Для Сч2=1 По 5 Цикл
            ТЗ.Ветка.НоваяСтрока();
            ТЗ.Ветка.ИмяВетки="Уровень номер "+НРег(СокрЛП(Формат(2,"ЧП")))+
                ", узел номер "+НРег(СокрЛП(Формат(Сч2,"ЧП")));
            ТЗ.Ветка.Ветка=ЗначениеИзСтрокиВнутр(гСтруктураТЗ);
        КонецЦикла;
    КонецЦикла;
    гАтрФормыТЗ.ОбновитьДерево();
КонецПроцедуры  // Выполнить

Процедура ПриОткрытии()
    Если ЗагрузитьВнешнююКомпоненту("formex.dll")=0 Тогда
        Предупреждение("Не удалось загрузить внешнюю компоненту FormEx.",10);
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры  // ПриОткрытии

Процедура ПослеОткрытия()
    гАтрФормыТЗ = СоздатьОбъект("АтрибутФормы");
    гАтрФормыТЗ.УстановитьАтрибут(Форма,"ТЗ");
    гАтрФормыТЗ.ПерехватитьТаблицуЗначений();
    гАтрФормыТЗ.ОпцииДерева(0,0);
КонецПроцедуры  // ПослеОткрытия

ТЗ.НоваяКолонка("Ветка");
ТЗ.НоваяКолонка("Значек");
ТЗ.НоваяКолонка("ИмяВетки",,,,"Узлы");
гСтруктураТЗ=ЗначениеВСтрокуВнутр(ТЗ);

В итоге, запустив обработку в режиме предприятия и нажав кнопку выполнить, мы увидим примерно такую картину:

Щелкая мышкой по плюсикам/минусикам (слева), можно разворачивать и сворачивать узлы, наслаждаясь полученным эффектом.

Естественно, это далеко не весь функционал и особенности, которые есть у этого объекта, к этой публикации прилагается внешний отчет/обработка «ДеревоПлюсТаблица.ert». Там усложнен приведенный пример – рекурсивное заполнение дерева любым количеством уровней (задается пользователем), рекурсивный обход дерева с разворачиванием и сворачиванием всех узлов, есть дополнительный столбик с данными для узлов (в примере, просто порядковый номер), а также возможность редактировать ячейки дерева двойным щелчком мыши на ячейке. См. скрин.

Также может возникнуть вопрос вывода на печать этого дерева, привожу свой вариант печати. Это внешний отчет/обработка, которую можно использовать в любой конфигурации:

Печать объекта Дерево+Таблица внешней компоненты FormEx

//infostart.ru/public/74313/

И привожу ссылки на реальные проекты, где использовался этот объект в реальных условиях, в обработках для настройки тех или иных подсистем:

Универсальная подсистема «Подписи/согласования документов»

//infostart.ru/public/73774/

Универсальная подсистема «Фабрика событий» + «Доп. права документов» + «Сканы документов»

//infostart.ru/public/71084/

Универсальная подсистема «Дополнительные права для документов»

//infostart.ru/public/22202/

См. также

HTTP сервер 1С 7.7 + HTTP асинхронный клиент: внешние компоненты для 1С 7.7

Разработка внешних компонент WEB-интеграция Платформа 1С v7.7 Конфигурации 1cv7 Платные (руб)

Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и даже, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя компоненту HTTP_Async или синхронный клиент HTTP для 1С 7.7 (публикация № 1152364) можно наладить обмен данными между удаленными информационными базами. С помощью компоненты HTTP_Async можно параллельно посылать много запросов к сайтам, веб-сервисам (в т.ч. к HttpSrv7), а затем обрабатывать данные по мере их поступления.

2000 руб.

27.05.2022    7810    19    13    

31

Компонента ExchangeStruc (Структура Обмена). Прямой обмен данными между потоками, сессиями и окнами.

Разработка внешних компонент Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 Платформа 1С v8.1 Россия Платные (руб)

Аддон "Структура Обмена" (ExchangeStruc) - это компонента, которая обеспечивает доступ к разделяемым процессом структурам, аналогичным структурам 1С. Обеспечивает прозрачную передачу данных примитивных типов, в том числе Двоичных данных, в режиме Реального времени между разными контекстами (формами) или потоками одного процесса. В перспективе функционал будет расширен для обмена между процессами, даже разных версий платформ. Совместим с версиями Windows рабочих станций и серверов, с платформами 1С разных версий и релизов в режиме Native начиная с 8.2, и в режиме COM начиная с версий 7.7. По скорости чтения и записи лишь немногим уступает стандартной структуре 1С. НОВОЕ: Добавлен функционал регистрации компоненты COM в качестве OLE Auto (COMОбъект) для поддержки её работы в серверах старых версий 1С: 8.0 и 8.1, где работа с компонентами исключена. Теперь можно коммуникацию с Фоновыми заданиями на этих версиях проводить.

7200 руб.

19.04.2023    4799    1    0    

3

Выбор из большого списка (для 1С 7.7)

Разработка внешних компонент Платформа 1С v7.7 Платные (руб)

Компонента для выбора значения из больших списков значений.

1200 руб.

02.12.2021    5776    2    19    

4

Форма для ввода количества товаров

Разработка внешних компонент Оптовая торговля Платформа 1С v7.7 Конфигурации 1cv7 Управленческий учет Платные (руб)

Расширяем уровень взаимодействия c пользователем с помощью новых возможностей - форма для ввода количества для перемещений и форма ввода количества с упаковками и штуками.

1200 руб.

08.09.2021    7390    0    2    

1

Внешняя компонента для преобразования файлов из/в кодировку Base64 в 1С 7.7

Разработка внешних компонент Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Эта внешняя компонента Base64.dll предназначена для платформы 1С версии 7.7. Используется для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие. Компонента тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.

10 стартмани

06.04.2021    9445    14    softmaker    12    

5

Криптография: внешняя компонента для 1С 7.7

Разработка внешних компонент Защита ПО и шифрование Платформа 1С v7.7 Абонемент ($m)

Цифровые подписи, шифрование, просмотр сертификатов ключей ЭЦП, работа с различными криптопровайдерами (в т.ч. КриптоПРО ГОСТ 2012) в 1С 7.7.

1 стартмани

08.06.2020    9048    27    mdbruyfn    10    

9

Протокол UDP: внешняя компонента для 1С 7.7

Разработка внешних компонент Платформа 1С v7.7 Абонемент ($m)

Обмен сообщениями и небольшими файлами по протоколу UDP с 1С и внешними приложениями в локальной сети или сети VPN.

1 стартмани

23.05.2020    7316    5    mdbruyfn    0    

6
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Ёпрст 1063 13.08.10 17:21 Сейчас в теме
А по мне, дерево красившее, если это активикс..
:))
4. iov 406 14.08.10 11:53 Сейчас в теме
(1) А запостить как и с чем? Очень интересная тема... Как говорится - ждемс..
2. Свой 164 13.08.10 18:28 Сейчас в теме
дает ли в показанном виде дерево распечатать ? чтобы не скриншотить
или надо будет самому рисовать таблицу
3. venger 2121 13.08.10 18:50 Сейчас в теме
(2) Нет, распечатать не дает, насколько я знаю.
Свой; +1 Ответить
6. CheBurator 3119 16.08.10 05:26 Сейчас в теме
(2) на Исе есть хорошая разработочка по дереву в печатной форме...
7. venger 2121 17.08.10 15:53 Сейчас в теме
(2),(6) Вот и мой вариант печати Дерево+Таблица появился на Исе:
http://infostart.ru/public/74313/

Ибо проще написать, чем найти и разобраться, что там к чему и где;-)
abrafaks; +1 Ответить
5. kompas-dm 780 14.08.10 11:56 Сейчас в теме
(0) Хорошая, краткая статья. Чаще бы видеть на портале такие работы ... :idea:
8. romanuil 17.03.12 00:28 Сейчас в теме
Спасибо, доступно описано.
9. ROM_1C 691 24.10.13 23:06 Сейчас в теме
А как вставить строку в дереве? Обичное Тз.Новаястрока(номерстроки) - не катить!
10. venger 2121 25.10.13 12:19 Сейчас в теме
(9) Давно это все было, забывать начал;-) Обновить дерево, после вставки пробовали?
11. ROM_1C 691 25.10.13 16:40 Сейчас в теме
(10)Да, обновляю. Получаеться вставить только строку на верхнем уровне. А как добавить подчиненную второго или больше уровня - никак не получается. Пробовал и активировать перед добавлением, чтобы получить тек. строку и там уже добавлять - то ошибку издает...
Помогите пожалуйста. Очень нужная вещь!
12. venger 2121 25.10.13 18:06 Сейчас в теме
(11) Ну так посмотрите в процедуру "Выполнить()" в этой статье, там же и добавляются новые строки в подчиненные узлы... Подчиненные узлы в поле "Ветка" содержат обычную 1С-совску ТЗ...
13. pisarevEV 7 20.11.13 06:58 Сейчас в теме
приветствую! столкнулся с такой проблемой: дерево большое (сотни документов и >100 узлов), так вот при попутке развернуть все узлы - все длится неприемлемо долго (уже минут 15 разворачивает), эта проблема имеет решение?
14. pisarevEV 7 21.11.13 11:07 Сейчас в теме
15. Иваныч 23 22.11.13 15:16 Сейчас в теме
Начинаю реализовывать у себя. Заранее плюсую.
16. merlin1975 2 02.10.19 21:38 Сейчас в теме
Никак не пойму, как по вышеприведенному коду перебрать всю структуру какого-либо справочника? Ведь уровней много.. подскажете?
17. Slypower 2 03.10.19 17:24 Сейчас в теме
(16) как я понял из описания, то запросом создать ТЗ с группировками. А потом уже формекс перехватит эту тз и сделает это дерево
18. victuan 4232 21.02.23 07:05 Сейчас в теме
"Значок" пишется через "о", а не через "ё".
Оставьте свое сообщение