|
Не получается выгрузить из ТЗ в дерево | ☑ | ||
---|---|---|---|---|
0
ks-815
31.01.14
✎
07:38
|
Доброе утричко всем!
Что-то делаю, как написано везде в гугле про выгрузку данных из дерево в ТЗ и обратно, а не получается. При выгрузке из ТЗ в дерево не ищется родитель. Дерево получается без плюсиков! А везде на всех форумах этот код хвалят.. //Выгрузка из дерева в ТЗ: Процедура ПриЗаписи(Отказ) ТЗВидыМТР = Новый ТаблицаЗначений; Для Каждого Колонка Из ЭтаФорма.ДеревоДанные.Колонки Цикл ТЗВидыМТР.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); КонецЦикла; ТЗВидыМТР.Колонки.Добавить("КлючСвязи",Новый ОписаниеТипов("Строка")); ТЗВидыМТР.Колонки.Добавить("КлючСтроки",Новый ОписаниеТипов("Строка")); Дерево = ЭтаФорма.ДеревоДанные.Скопировать(); Дерево.Колонки.Добавить("КлючСвязи",Новый ОписаниеТипов("Строка")); Дерево.Колонки.Добавить("КлючСтроки",Новый ОписаниеТипов("Строка")); ОбновитьКлючиСвязиВДеревеЗначений(Дерево); ОбновитьКлючиСтрокВДеревеЗначений(Дерево); ЗаписьСтрокДереваВТаблицу(Дерево, ТЗВидыМТР); ВидыМТР.Загрузить(ТЗВидыМТР); КонецПроцедуры Функция ЗаписьСтрокДереваВТаблицу(Дерево, Таблица) Для Каждого СтрокаДерева Из Дерево.Строки Цикл СтрокаТаблицы = Таблица.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаДерева); ЗаписьСтрокДереваВТаблицу(СтрокаДерева, Таблица); КонецЦикла; Возврат Таблица; КонецФункции //Выгрузка из ТЗ в дерево: Процедура ПриОткрытии() ТЗВидыМТР = ВидыМТР.Выгрузить(); Дерево = Новый ДеревоЗначений; Для Каждого Колонка Из ТЗВидыМТР.Колонки Цикл Дерево.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); КонецЦикла; ЗаполнитьДерево(ТЗВидыМТР, Дерево); ЭлементыФормы.ДеревоДанные.Значение = Дерево; ЭлементыФормы.ДеревоДанные.СоздатьКолонки(); ЭлементыФормы.ДеревоДанные.Колонки.Вид.Ширина = 6; КонецЕсли; КонецПроцедуры Функция ЗаполнитьДерево(Таблица, Дерево, КлючСтроки = "КлючСтроки", КлючСвязи = "КлючСвязи") Для Каждого СтрокаТаблицы Из Таблица Цикл СтрокаГруппировки = Дерево.Строки.Найти(СтрокаТаблицы[КлючСвязи], КлючСтроки,Истина); Если СтрокаГруппировки = Неопределено Тогда ЗаполнитьЗначенияСвойств(Дерево.Строки.Добавить(), СтрокаТаблицы); Иначе ЗаполнитьЗначенияСвойств(СтрокаГруппировки.Строки.Добавить(), СтрокаТаблицы); КонецЕсли; КонецЦикла; Возврат Дерево; КонецФункции |
|||
1
mzelensky
31.01.14
✎
07:43
|
(0) А ты в настройках самого дерева (элемента формы) поставил нужные галочки?
|
|||
2
ks-815
31.01.14
✎
07:46
|
(1) поставила! когда выгружается обратно, при трассировке у дерева нет родителей. а когда из дерева в тз - у дерева есть родители.
|
|||
3
mzelensky
31.01.14
✎
07:49
|
(2) Я правильно понимаю, что ты пытаешься сделать дерево в 2 уровня?
|
|||
4
ks-815
31.01.14
✎
07:51
|
(3) там уровней 3.
|
|||
5
mzelensky
31.01.14
✎
07:53
|
(4) у дерева (элемента формы) должна стоять галочка "Дерево" + у нужной колонки должна стоять галочка "Отображать иерархию". Стоят?
|
|||
6
mzelensky
31.01.14
✎
07:56
|
(5) Сама процедура "ЗаполнитьДерево(" вроде написана верно.
Если не получается, то сделай сперва настройку дерева (как элемента формы) нормально в ручную, без вот этого: ЭлементыФормы.ДеревоДанные.Значение = Дерево; ЭлементыФормы.ДеревоДанные.СоздатьКолонки(); ЭлементыФормы.ДеревоДанные.Колонки.Вид.Ширина = 6; А потом уже пробуй делать программно. |
|||
7
ks-815
31.01.14
✎
07:56
|
(5) колонки создаются программно в процедуре "ПриОткрытии". Надо еще кодом что-то прописать??
|
|||
8
mzelensky
31.01.14
✎
07:59
|
(7) Попробуй программно это свойство заполнить.
А вообще - еслди не умеешь работать с каким-то компонентом, то не нужно начинать с программного создания. Сделай сперва руками, а когда поймешь как работает - переделай на программное создание. Так проще. |
|||
9
ks-815
31.01.14
✎
08:01
|
(6) попробовала. плюсиков нет. просто таблицей выводит :(
|
|||
10
ks-815
31.01.14
✎
08:02
|
может надо еще родителя выгружать в ТЗ????? а потом прицеплять его к дереву?
|
|||
11
mzelensky
31.01.14
✎
08:05
|
(10) Ты про какого родителя? Из ТЗ?
Вообще для самого дерева он не нужен. Это чисто чтобы из ТЗ и обратно гонять. |
|||
12
ks-815
31.01.14
✎
08:07
|
(11) Точно не нужно из дерева выгружать в ТЗ родителей, чтобы потом при загрузке из ТЗ в дерево указывать у каждой строки родителя??
|
|||
13
kosts
31.01.14
✎
08:07
|
Думаю нужно использовать ключи. Для каждой ветки дерева должна быть уникальная связь. Сейчас везде идентичная связь, по этому всё попадает на один уровень.
|
|||
14
mzelensky
31.01.14
✎
08:07
|
Сдается мне, что у тебя как-то коряво сам элемент формы настроен. Еще раз повторяю, сделай сперва ручную настройку.
И зачем делать вот так: Дерево = Новый ДеревоЗначений; Для Каждого Колонка Из ТЗВидыМТР.Колонки Цикл Дерево.Колонки.Добавить(Колонка.Имя, Колонка.ТипЗначения); КонецЦикла; ... ... ЭлементыФормы.ДеревоДанные.Значение = Дерево; Можно сразу в "ДеревоДанные" загружать. Ты сама себе жизнь усложняешь. |
|||
15
mzelensky
31.01.14
✎
08:09
|
(13) Ну вот...так это у тебя ТЗ тогда коряво заполнено. Я подразумевал .что ТЗ сформировано верно.
Короче проходи отладчиком и смотри. |
|||
16
ks-815
31.01.14
✎
08:18
|
(14) мне не нужно колонки с ключами выводить из ТЗ. я на форму не всё буду выгружать
|
|||
17
kosts
31.01.14
✎
08:20
|
(16) Как этот алгоритм должен понять, что именно эта строка должна попасть вон в ту ветку дерева, а не в другую?
Напиши свой собственный алгоритм преобразования ТЗ в Дерево, что бы понять принцип. |
|||
18
mzelensky
31.01.14
✎
08:22
|
(17) Вот по этому принципу она понимает:
СтрокаГруппировки = Дерево.Строки.Найти(СтрокаТаблицы[КлючСвязи], КлючСтроки,Истина); Просто для этого "Ключи" должны быть верно заполнены. А я так понимаю у ее они корявые. |
|||
19
mzelensky
31.01.14
✎
08:24
|
Вот мой код. Он 100% рабочий и практически идентичен в (0).
Здесь "ДеревоТСД" - дерево, которое заполняется "ТабличнаяТСД" - табличная часть (твоя ТЗ) Процедура ЗаполнитьДеревоИзТЧ(ДеревоТСД=неопределено) ЭКСПОРТ Запрос=новый запрос; Запрос.Текст="ВЫБРАТЬ | * |ПОМЕСТИТЬ ВТ |ИЗ | &ТЧ КАК ТЧ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | * |ИЗ | ВТ КАК ВТ | |УПОРЯДОЧИТЬ ПО | НомерСтроки |"; ЗАпрос.УстановитьПараметр("ТЧ",ТабличнаяТСД); Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока Выборка.Следующий() цикл Если ЗначениеЗаполнено(Выборка.КлючРодителя) тогда Отбор=новый Структура; Отбор.Вставить("КлючСтроки", Выборка.КлючРодителя ); НайденныеСтроки=ДеревоТСД.Строки.НайтиСтроки(Отбор, истина); Если НайденныеСтроки.Количество()=1 тогда НстрокаДЗ=НайденныеСтроки[0].Строки.Добавить(); ЗаполнитьЗначенияСвойств(НстрокаДЗ,Выборка); КонецЕсли; Иначе НстрокаДЗ=ДеревоТСД.Строки.Добавить(); ЗаполнитьЗначенияСвойств(НстрокаДЗ,Выборка); КонецЕсли; КонецЦикла; Выборка=NULL; Запрос=NULL; КонецПроцедуры |
|||
20
ks-815
31.01.14
✎
09:03
|
Я вгляделась в свой код!! вот она, ошибка:
ОбновитьКлючиСвязиВДеревеЗначений(Дерево); ОбновитьКлючиСтрокВДеревеЗначений(Дерево); Надо местами строки поменять - и, о чудо, плюсики появились!! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |