Имя: Пароль:
1C
1С v8
Загвоздка с ДеревомЗначений
,
0 ВаликТР
 
27.01.14
14:06
Помогите рабобраться.
Создал ТП на форме элемента справочника. Изменил ТипЗначения - ДЗ. Добавил колонку (строка), но свойства "ОтображатьИерархию" в свойствах колонки нет. В результате не раскрывается дерево, которое формирую программно. Как раскрыть? Где взять крестик?. Спасибо!
1 1dvd
 
27.01.14
14:07
в качестве источника что?
2 ВаликТР
 
27.01.14
14:08
(1) Источник ТП - Одноименный реквизит Формы - Тип - ДЗ.
3 1dvd
 
27.01.14
14:09
(2) Заполняй его как дерево и будет тебе щасье
4 ВаликТР
 
27.01.14
14:10
(3) Так заполняю же. В отладчике в первой строке ДЗ  - количество строк -1. А первую строку раскрыть не могу.
5 kosts
 
27.01.14
14:10
(0)>которое формирую программно.
Покажи как
6 djekting
 
27.01.14
14:11
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

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

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

КонецПроцедуры
7 ВаликТР
 
27.01.14
14:13
Дерево.Строки.Очистить();
Дерево = Парсинг(Диалог.ПолноеИмяФайла);

Функция Парсинг(ИмяФайла) Экспорт
    Чтение = Новый ЧтениеXML();
    Чтение.ОткрытьФайл(ИмяФайла);
    Чтение.УстановитьСтроку(ЭлементыФормы.Документ.ПолучитьТекст());
    ДеревоЗначений = Новый ДеревоЗначений();
    Попытка
        Чтение.Прочитать();
    Исключение
        Предупреждение("Документ XML поврежден");
        Возврат ДеревоЗначений;
    КонецПопытки;
    ДеревоЗначений.Колонки.Добавить("Элемент");
    ДеревоЗначений.Колонки.Добавить("Выражение");
    ДеревоЗначений.Колонки.Добавить("Атрибуты");
    Корень = ДеревоЗначений.Строки.Добавить();                              
    Корень.Элемент = Чтение.Имя;
    Рекурсия(Корень, Чтение);
    Возврат ДеревоЗначений;
КонецФункции

Процедура Рекурсия(СтрокаДерева, Чтение)
    Если Чтение.КоличествоАтрибутов() > 0 Тогда
        АтрибутыСоответствие = Новый Соответствие();
        Пока Чтение.ПрочитатьАтрибут() Цикл
            АтрибутыСоответствие.Вставить(Чтение.Имя, Чтение.Значение);
        КонецЦикла;
        СтрокаДерева.Атрибуты = АтрибутыСоответствие;
    КонецЕсли;
    //Состояние(Чтение.Имя);
    Пока Чтение.Прочитать() Цикл
        Если Чтение.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            Прервать;
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
            СтрокаДерева.Выражение = Чтение.Значение;
        ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            Дочерний = СтрокаДерева.Строки.Добавить();
            Дочерний.Элемент = Чтение.Имя;
            Рекурсия(Дочерний, Чтение);
        КонецЕсли;
        ОбработкаПрерыванияПользователя();
    КонецЦикла;
КонецПроцедуры
8 kosts
 
27.01.14
14:14
А руками, интерактивно строку можешь добавить? Имею ввиду после всех этих процедур.
9 ВаликТР
 
27.01.14
14:21
Странно как-то себя это поле ведет. Создаются строки только в корне. Крестиков нет. Подстроку создать нет возможности. Иа "перенести вверх/вниз" вообще не реагирует!!!
10 ВаликТР
 
27.01.14
14:22
Создал новое ТП - ДЗ. Ничего программно не заполняю. Реакция та же. Может глюк платформы :-)
Основная теорема систематики: Новые системы плодят новые проблемы.