Имя: Пароль:
1C
1С v8
Спозиционироваться на строке дерева значений
0 pavig
 
17.02.11
17:07
Выполняется код:

   ТекСтрока = ПолучитьВеткуПоПозицииСтроки(текДЗ, мПозицияСтроки); // функция возвращает строку дерева значений по параметру
       
   Если ТекСтрокаДЗ <> Неопределено Тогда
       текТП.ТекущаяСтрока  = ТекСтрокаДЗ;
   КонецЕсли;

текТП - это текущее табличное поле формы, с установленным признаком ДЕРЕВО;
текДЗ - это данные текущего табличного поля, тип - дерево значений;

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

Другими словами, текущая строка не устанавливается.

Куда рыть что курить и как быть подскажите плиз кто сталкивался :-)
1 Mort
 
17.02.11
17:09
ТекСтрока  <> ТекСтрокаДЗ ?
2 pavig
 
17.02.11
17:15
(1) моя очепятка

ТекСтрока = ТекСтрокаДЗ
3 pavig
 
17.02.11
17:35
апну немного что ли
4 pavig
 
17.02.11
18:01
вввввееееерх
5 pavig
 
18.02.11
09:46
еще раз вверх...
6 Axel2009
 
18.02.11
09:48
платформа то хоть какая?
7 pavig
 
18.02.11
09:50
1с 8.1
8 pavig
 
18.02.11
09:50
(7)
8.1.15.14
9 Axel2009
 
18.02.11
09:55
стр1_1 = ДЗ.Строки.Добавить();
   стр1_1.колонка1 = "кол1_1";
   стр1_1.колонка2 = "кол2_1";
   стр1_2 = ДЗ.Строки.Добавить();
   стр1_2.колонка1 = "кол1_2";
   стр1_2.колонка2 = "кол2_2";
   стр1_3 = ДЗ.Строки.Добавить();
   стр1_3.колонка1 = "кол1_3";
   стр1_3.колонка2 = "кол2_3";
   стр1_1_1 = стр1_1.Строки.Добавить();
   стр1_1_1.колонка1 = "кол1_1_1";
   стр1_1_1.колонка2 = "кол2_1_1";
   ЭлементыФормы.ДЗ.ТекущаяСтрока = стр1_1_1;
такой код у меня работает нормально. значит не строку дерева передаете. показывайте свою нетленную функцию
10 pavig
 
18.02.11
10:00
(9)
Функция ПолучитьВеткуПоПозицииСтроки(Дерево, НомерСтроки)      
   Для Каждого Ветка Из Дерево.Строки Цикл
       Если Ветка.НомерСтрокиДЗ = НомерСтроки Тогда
           Возврат Ветка;
       Иначе
               НайденнаяСтрока = ПолучитьВеткуПоПозицииСтроки(Ветка, НомерСтроки);
               Если НайденнаяСтрока <> Неопределено Тогда
                   Возврат НайденнаяСтрока;
               КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   Возврат Неопределено;
КонецФункции
11 Axel2009
 
18.02.11
10:02
а если встать на какую либо строку самому в дереве, а потом запустить код какойнить и посмотреть что хранится в элементыформы.текдз.текущаястрока?
12 Mitriy
 
18.02.11
10:03
(10) а не проще Дерево.Строки.Найти??? или НайтиСтроки...
13 kosts
 
18.02.11
10:05
У меня работает (8.2)

Процедура Кнопка2Нажатие(Элемент)
   
   Строки = Дерево.Строки.НайтиСтроки(Новый Структура("Колонка1",1), Истина);
   Если Строки.Количество() > 0 Тогда
       ЭлементыФормы.Дерево.ТекущаяСтрока =  Строки[0];
       Сообщить("Позиционирование на строке", СтатусСообщения.Информация);
   КонецЕсли;
   
КонецПроцедуры

т = Дерево.Строки.Добавить();
т.Строки.Добавить();
т.Строки.Добавить();
т.Строки.Добавить();
т = Дерево.Строки.Добавить();
т.Строки.Добавить();
т1 = т.Строки.Добавить(); т1.Колонка1 = 1;
т.Строки.Добавить();
т = Дерево.Строки.Добавить();
т.Строки.Добавить();
т.Строки.Добавить();
т.Строки.Добавить();
14 pavig
 
18.02.11
10:05
(11)
допустим при редактировании ДЗ.ТекущаяСтрока имеет значение СтрокаДереваЗначений, тип - СтрокаДереваЗначений, что совпадает с возвращаемым функцией значением...
15 Mitriy
 
18.02.11
10:07
(14) может у тебя разные деревья?
16 Axel2009
 
18.02.11
10:08
скорее всего то что хранится в ТекДЗ не совпадает с данными в ТекТП..
так не работает:
   стр1_1 = ДЗ.Строки.Добавить();
   стр1_1.колонка1 = "кол1_1";
   стр1_1.колонка2 = "кол2_1";
   стр1_2 = ДЗ.Строки.Добавить();
   стр1_2.колонка1 = "кол1_2";
   стр1_2.колонка2 = "кол2_2";
   стр1_3 = ДЗ.Строки.Добавить();
   стр1_3.колонка1 = "кол1_3";
   стр1_3.колонка2 = "кол2_3";
   стр1_1_1 = стр1_1.Строки.Добавить();
   стр1_1_1.колонка1 = "кол1_1_1";
   стр1_1_1.колонка2 = "кол2_1_1";
   
   
   стр1_1 = ДЗ1.Строки.Добавить();
   стр1_1.колонка1 = "кол1_1";
   стр1_1.колонка2 = "кол2_1";
   стр1_2 = ДЗ1.Строки.Добавить();
   стр1_2.колонка1 = "кол1_2";
   стр1_2.колонка2 = "кол2_2";
   стр1_3 = ДЗ1.Строки.Добавить();
   стр1_3.колонка1 = "кол1_3";
   стр1_3.колонка2 = "кол2_3";
   стр1_1_1 = стр1_1.Строки.Добавить();
   стр1_1_1.колонка1 = "кол1_1_1";
   стр1_1_1.колонка2 = "кол2_1_1";
   ЭлементыФормы.ДЗ.ТекущаяСтрока = стр1_3;
17 pavig
 
18.02.11
10:15
(12)
проще конечно, но результат не меняется.
(15), (16)
в отладчике забиваю:
текТП.Значение = текДЗ, выдает Истина.
18 Axel2009
 
18.02.11
10:16
текТП.текущаястрока = текТП.Значение.Строки[0];
работает?
19 pavig
 
18.02.11
10:21
(18) не работает(((
20 pavig
 
18.02.11
10:22
значит где-то еще идет перестроение дерева.
21 pavig
 
18.02.11
10:22
щас поищу
22 Axel2009
 
18.02.11
10:26
(20) перестроение дерева, событие дерева. вообще сбросить текущую строку в неопределено обычным присваиванием не сделать. это только при формировании строк заново.
23 pavig
 
18.02.11
12:10
Событие ПослеУдаления, устанавливаю текущую строку указанным способом -- все работает;

Событие ПриОкончанииРедактирования устанавливаю текущую строку -- не работает.

печально.
24 kosts
 
18.02.11
12:18
(23) Чиорт. простите.
25 Axel2009
 
18.02.11
12:19
а что нужно встать на строку, отличную от текущей редактируемой?
26 pavig
 
18.02.11
12:26
(25)
суть:
есть Дерево в табличном поле формы, у которого есть виртуальные группировки, которые содержат общие для подчиненных данные. После редактирования строки интерактивно происходит перестроение дерева, и текущая строка уходит в Неопределено;

проблема такова:
нужно чтобы после редактирования и перестроения дерева текущая строка возвращалась в предыдущее (до редактирования) положение.
При удалении строки прием полностью прокатывает; при редактировании строки -- прием не прокатывает.
27 pavig
 
18.02.11
12:27
(24) весьма неуместно
28 pavig
 
18.02.11
12:32
текТП.ТекущаяСтрока  = ТекСтрокаДЗ;

если код выполняется после удаления строки, то сразу после него возникает событие ПриВыводеСтроки, и для текТП ТекущаяСтрока встает на текСтрокаДЗ.

если же код выполняется после редактирования строки (ПриОкончанииРедактирования) то ничего не происходит вообще, ТекущаяСтрока как была Неопределено так ей же и остается.
29 kosts
 
18.02.11
12:33
(26) Программно удали строку и вставь новую в нужное место.
(27) Беда пришла не с той стороны где ее ждали...
30 pavig
 
18.02.11
12:35
(29)
"Беда пришла не с той стороны где ее ждали..."
в общем-то да
31 Axel2009
 
18.02.11
12:50
(30) подключайте обработчик на 1мс, в котором уже устанавливайте строку на какую нужно..
32 pavig
 
18.02.11
13:44
(31) очень даже прокатило
спасибо за помощь!!!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.