FORMEX. Примеры работы с объектом "Дерево+Таблица". Шаблон для универсальной печати справочников.

Опубликовал Sprite в раздел Программирование - Практика программирования

[b] ПРИМЕР алгоритма формирования структуры дерева в ТЗ [/b]
[b] ПРИМЕР выборки значений дерева из ТЗ [/b]
[b] ПРИМЕРЫ работы с объектами типа ''Метаданные.Справочник'' [/b]
Внешняя обработка для печати справочника Номенклатуры и подчиненных справочников.
Выкладывается для примеров работы с объектом "Дерево+Таблица".

ИСПОЛЬЗОВАНЫ МЕТОДЫ FORMEX:

ЗначениеВДерево / ValueToTree
ЗначениеИзДерева / ValueFromTree
ПерехватитьТаблицуЗначений / WrapValueTable
РазвернутьУзел / ExpandNode
СвернутьУзел / CollapseNode
ТекущаяКолонкаДерева / CurrentTreeColumn
ТекущаяСтрокаДерева / CurrentTreeItem
УзелРазвернут
ЭтоГруппа / IsGroupNode
ПриНажатииКнопкиКлавиатуры

Файлы

Наименование Файл Версия Размер Кол. Скачив.
FORMEX. Примеры работы с объектом "Дерево+Таблица"
.1208686464 202,00Kb
27.02.13
527
.1208686464 202,00Kb 527 Скачать
Определение раскраски строк и шрифта в ТЗ
.1208687512 41,00Kb
27.02.13
149
.1208687512 41,00Kb 149 Скачать

См. также

Лучшие комментарии

1. Noy 23.04.2008 11:09
Для удобства работы с деревом предлагаю дополнить следующим кодом:

Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
АтрФ=СоздатьОбъект("АтрибутФормы");
АтрФ.УстановитьАтрибут(Форма,"ТЗ");
Если (Форма.АктивныйЭлемент()="ТЗ") и (Alt+Shift+Ctrl=0) тогда
Если КодКлавиши=37 тогда
Если АтрФ.ТекущаяКолонкаДерева()=1 тогда
Если (АтрФ.ЭтоГруппа(атрф.ТекущаяСтрокаДерева())=1) и (атрф.УзелРазвернут(атрф.ТекущаяСтрокаДерева())=1) тогда
ФСО=0;
Атрф.СвернутьУзел(атрф.ТекущаяСтрокаДерева());
Иначе
ТекСтрока=атрф.ТекущаяСтрокаДерева();
Для х=1 по СтрДлина(атрф.ТекущаяСтрокаДерева()) Цикл
ТекСтрока=Лев(текСтрока,СтрДлина(ТекСтрока)-1);
Если Прав(ТекСтрока,1)="/" тогда
ТекСтрока=Лев(текСтрока,СтрДлина(ТекСтрока)-1);
Попытка
атрф.УстановитьТекущийУзел(ТекСтрока);
ФСО=0;
Исключение
КонецПопытки;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если КодКлавиши=39 тогда
Если АтрФ.ТекущаяКолонкаДерева()=1 тогда
Если АтрФ.ЭтоГруппа(атрф.ТекущаяСтрокаДерева())=1 тогда
Если атрф.УзелРазвернут(атрф.ТекущаяСтрокаДерева())=0 тогда
ФСО=0;
Атрф.РазвернутьУзел(атрф.ТекущаяСтрокаДерева());
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Да, и в названии присутствует слово "универсальная", а в коде есть строки:
Спр=СоздатьОбъект("Справочник.Номенклатура");
Осн=СоздатьОбъект("Справочник.Партии");...
# Ответить
7. SSNick 31.07.2010 17:56
Код не работает для старой версии 1С++ (совмещённой с FormEx). Скачай последние версии 1С++ и FormEx (раздельными компонентами). В последней версии FormEx метод УзелРазвернут() уже присутствует. ;)
+ 1 [ Sprite; ]
# Ответить

Комментарии

1. Noy 23.04.2008 11:09
Для удобства работы с деревом предлагаю дополнить следующим кодом:

Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
АтрФ=СоздатьОбъект("АтрибутФормы");
АтрФ.УстановитьАтрибут(Форма,"ТЗ");
Если (Форма.АктивныйЭлемент()="ТЗ") и (Alt+Shift+Ctrl=0) тогда
Если КодКлавиши=37 тогда
Если АтрФ.ТекущаяКолонкаДерева()=1 тогда
Если (АтрФ.ЭтоГруппа(атрф.ТекущаяСтрокаДерева())=1) и (атрф.УзелРазвернут(атрф.ТекущаяСтрокаДерева())=1) тогда
ФСО=0;
Атрф.СвернутьУзел(атрф.ТекущаяСтрокаДерева());
Иначе
ТекСтрока=атрф.ТекущаяСтрокаДерева();
Для х=1 по СтрДлина(атрф.ТекущаяСтрокаДерева()) Цикл
ТекСтрока=Лев(текСтрока,СтрДлина(ТекСтрока)-1);
Если Прав(ТекСтрока,1)="/" тогда
ТекСтрока=Лев(текСтрока,СтрДлина(ТекСтрока)-1);
Попытка
атрф.УстановитьТекущийУзел(ТекСтрока);
ФСО=0;
Исключение
КонецПопытки;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если КодКлавиши=39 тогда
Если АтрФ.ТекущаяКолонкаДерева()=1 тогда
Если АтрФ.ЭтоГруппа(атрф.ТекущаяСтрокаДерева())=1 тогда
Если атрф.УзелРазвернут(атрф.ТекущаяСтрокаДерева())=0 тогда
ФСО=0;
Атрф.РазвернутьУзел(атрф.ТекущаяСтрокаДерева());
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

Да, и в названии присутствует слово "универсальная", а в коде есть строки:
Спр=СоздатьОбъект("Справочник.Номенклатура");
Осн=СоздатьОбъект("Справочник.Партии");...
# Ответить
2. Sprite 23.04.2008 20:55
Noy
Обновил.
По поводу:
<Спр=СоздатьОбъект("Справочник.Номенклатура");
<Осн=СоздатьОбъект("Справочник.Партии");...
Согласен.
Указал, что это шаблон для Шаблон для универсальной печати справочников.
# Ответить
3. Вадимко 17.02.2009 01:10
Плюс за проделанную работу
Хотя для примера слишком многа буков не говоря уже про оформление кода :)
Ответили: (4)
# Ответить
4. vasilykushnir 17.02.2009 12:04
(3) Согласен. Плюс за труды.
# Ответить
5. Borometr 29.03.2009 12:48
Спасибо, здорово помогло для создания моей разработки.
# Ответить
6. RvsL 17.07.2009 10:14
не работает код:
атрф.УзелРазвернут(атрф.ТекущаяСтрокаДерева())

Почему никто не замечает? А без этого фиг что напишешь. Нужная фича.
# Ответить
7. SSNick 31.07.2010 17:56
Код не работает для старой версии 1С++ (совмещённой с FormEx). Скачай последние версии 1С++ и FormEx (раздельными компонентами). В последней версии FormEx метод УзелРазвернут() уже присутствует. ;)
+ 1 [ Sprite; ]
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016