Имя: Пароль:
1C
1С v8
v8: Спозиционироваться на строке дерева значений Remake
0 VashKollega
 
05.08.14
09:21
Привет.
Я перед тем как задать вопрос всегда ищу, может такое уже было. Часто нахожу. Вот и в этот раз нашел. Но что посоветовали (а оно как утверждает автор топика сработало) я так и не понял.

v8: Спозиционироваться на строке дерева значений

Смотрите сообщение номер 31 "подключайте обработчик на 1мс, в котором уже устанавливайте строку на какую нужно..".

Что значит обработчик 1мс???
1 ДенисЧ
 
05.08.14
09:21
одна миллисекунда
2 VashKollega
 
05.08.14
09:22
Хм... А как он делается?
3 Cube
 
05.08.14
09:23
4 VashKollega
 
05.08.14
10:08
Объясню для тех, кто как я слабоват в 1С.

ОООООчень редко, но бывает нужно описывать интерактивную работу с деревом значений.
Хочется, чтобы каждый раз, после того, как мы что то с ним сделали, дерево формировалось заново, а курсор вставал на ту же позицию, что и был до переформирования.

Вредная процедура ПриОкончанииРедактирования табличного поля дерева не хочет устанавливать текущую строку, даже если мы ее точно знаем. И получается, что курсор улетает в начало дерева, а мы его вернуть не можем, ведь после события ПриОкончанииРедактирования уже ничего не происходит.

Проблема решается так:

1) Делается в модуле формы переменную
перем СтрокаДереваДляУстановкиКурсора;

В нее сохраняем признаки той строки, на которой стоит курсор, по ним вы потом будете искать строку.

2) В ПриОткрытии() ставите обработчик

ДействиеОкончаниеРедактированияСтроки = Новый Действие("ПриОкончанииРедактированияСвояПроцедура");
ЭлементыФормы.ТаблицаТМЦ.УстановитьДействие("ПриОкончанииРедактирования", ДействиеОкончаниеРедактированияСтроки);

3) В процедуре стандартной подписки ПриОкончанииРедактирования оставляем только сохранение текущей строки в переменную СтрокаДереваДляУстановкиКурсора и действия по переформированию дерева.

4) В модуле формы размещаете процедуру
Процедура ПриОкончанииРедактированияСвояПроцедура(Элемент, НоваяСтрока, ОтменаРедактирования)

Если НЕ СтрокаДереваДляУстановкиКурсора = Неопределено Тогда
ЭлементыФормы.НашеДеревоЗначений.ТекущаяСтрока = СтрокаДереваДляУстановкиКурсора;    
КонецЕсли;
    
КонецПроцедуры

В итоге сработает стандартная процедура там сохранится текущая строка, обновится дерево, а в дополнительной подписке устанавливается текущая строка.