4
VashKollega
05.08.14
✎
10:08
|
Объясню для тех, кто как я слабоват в 1С.
ОООООчень редко, но бывает нужно описывать интерактивную работу с деревом значений.
Хочется, чтобы каждый раз, после того, как мы что то с ним сделали, дерево формировалось заново, а курсор вставал на ту же позицию, что и был до переформирования.
Вредная процедура ПриОкончанииРедактирования табличного поля дерева не хочет устанавливать текущую строку, даже если мы ее точно знаем. И получается, что курсор улетает в начало дерева, а мы его вернуть не можем, ведь после события ПриОкончанииРедактирования уже ничего не происходит.
Проблема решается так:
1) Делается в модуле формы переменную
перем СтрокаДереваДляУстановкиКурсора;
В нее сохраняем признаки той строки, на которой стоит курсор, по ним вы потом будете искать строку.
2) В ПриОткрытии() ставите обработчик
ДействиеОкончаниеРедактированияСтроки = Новый Действие("ПриОкончанииРедактированияСвояПроцедура");
ЭлементыФормы.ТаблицаТМЦ.УстановитьДействие("ПриОкончанииРедактирования", ДействиеОкончаниеРедактированияСтроки);
3) В процедуре стандартной подписки ПриОкончанииРедактирования оставляем только сохранение текущей строки в переменную СтрокаДереваДляУстановкиКурсора и действия по переформированию дерева.
4) В модуле формы размещаете процедуру
Процедура ПриОкончанииРедактированияСвояПроцедура(Элемент, НоваяСтрока, ОтменаРедактирования)
Если НЕ СтрокаДереваДляУстановкиКурсора = Неопределено Тогда
ЭлементыФормы.НашеДеревоЗначений.ТекущаяСтрока = СтрокаДереваДляУстановкиКурсора;
КонецЕсли;
КонецПроцедуры
В итоге сработает стандартная процедура там сохранится текущая строка, обновится дерево, а в дополнительной подписке устанавливается текущая строка.
|
|