Имя: Пароль:
1C
 
Дерево значений на форме, Как удалить строку
0 pauluss
 
06.07.06
11:19
Туплю я граждане, и чувствую себя идиотом.
Вроде бы примитивная задача, а застрял.
Есть дерево значений на форме. Имя: СоставНоменклатурныхГрупп
Стоит задача удалить строку на которой стоит курсор
Пишу:

ЭлементыФормы.СоставНоменклатурныхГрупп.Значение.Строки.Удалить(ЭлементыФормы.СоставНоменклатурныхГрупп.ТекущаяСтрока);

Ругается: Недопустимое значение параметра 1. Строка не принадлежит коллекции.

Чето не врублюсь я как это победить
1 Волшебник
 
06.07.06
11:21
для начала:

Дерево = СоставНоменклатурныхГрупп;
Дерево.Строки.Удалить(ЗдесьСтрока);

проверь в отладчике типы данных
2 pauluss
 
06.07.06
11:40
Гм. Странно.
Пишу как советовали:

Дерево = СоставНоменклатурныхГрупп;  (без ЭлементыФормы)

Все логично. Возвращает дерево значений.
Пишу дальше:

ЭлементыФормы.СоставНоменклатурныхГрупп.ТекущаяСтрока

(потому что у реквизита формы СоставНоменклатурныхГрупп нет свойства "ТекущаяСтрока", оно есть только у элемента формы)
Проверяю типы. Все правильно:

ЭлементыФормы.СоставНоменклатурныхГрупп.ТекущаяСтрока имеет тип "СтрокаДереваЗначений".

Запускаю и получаю ту же ошибку. Печально :(

P.S. Пардон за оффтопик, как выделять код рамочкой?
3 Волшебник
 
06.07.06
11:41
(2) про выделение кода - ты не напрягайся. Форум сам всё раскрасит.
4 pauluss
 
06.07.06
12:01
*чухаю репу* Гм. А корневой элемент дерева удаляет.
5 pauluss
 
06.07.06
12:02
А как по строке дерева определить её индекс?
6 TormozIT
 
гуру
06.07.06
12:06
Так надо.
Функция УдалитьСтрокуДерева(пСтроки, пУдаляемаяСтрока)
   
   Для Каждого Строка из пСтроки Цикл
       Если Строка = пУдаляемаяСтрока Тогда
           пСтроки.Удалить(пУдаляемаяСтрока);
           Возврат Истина;
       КонецЕсли;
       
       // Рекурсивный вызов.
       Результат = УдалитьСтрокуДерева(Строка.Строки, пУдаляемаяСтрока);
       
       Если Результат Тогда
           Возврат Результат;
       КонецЕсли;
   КонецЦикла;
   
   Возврат Ложь;
   
КонецФункции
7 TormozIT
 
гуру
06.07.06
12:25
Ну и вызвать в твоем случае
УдалитьСтрокуДерева(ЭлементыФормы.СоставНоменклатурныхГрупп.Значение.Строки,
                   ЭлементыФормы.СоставНоменклатурныхГрупп.ТекущаяСтрока)
8 pauluss
 
06.07.06
12:32
Ага. Спасибо. Заработало.
Хотя я весьма удивлен чесно говоря.
Получается, что что-бы удалить известную строку мало просто вызвать метод Удалить, надо рекурсивно пробедать по дереву, найти эту строку, ещё раз её получить а только потом вызвать этот же самый метод удалить, причем даже с тем-же параметром.
(я бы ещё понял, если бы внутри цикла по строкам надо было вызывать метод "Удалить" с параметром "Строка", а не "пУдаляемаяСтрока").

Спасибо ещё раз.
*Ушел впечатленный*
9 TormozIT
 
гуру
06.07.06
12:58
Можно и проще. Но уже не так круто =))

НужнаяСтрока = ЭлементыФормы.СоставНоменклатурныхГрупп.ТекущаяСтрока
Если НужнаяСтрока.Родитель <> Неопределено Тогда
   НужнаяСтрока.Родитель.Строки.Удалить(НужнаяСтрока);
Иначе
   ЭлементыФормы.СоставНоменклатурныхГрупп.Значение.Строки.Удалить(НужнаяСтрока);
КонецЕсли;
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn