Имя: Пароль:
1C
 
удалить строку дерева значений
0 dvrk
 
28.07.22
08:50
Для Каждого строка из ДЗ.Строки Цикл
        Если ЗначениеЗаполнено(строка.Колонка1) Тогда
            строка.Строки.Удалить(строка);
        КонецЕсли;
        КонецЦикла;
=Ошибка при вызове метода контекста (Удалить)
            строка.Строки.Удалить(строка);
по причине:
Недопустимое значение параметра (параметр номер '1') (Строка не принадлежит коллекции)
подскажите
1 mikecool
 
28.07.22
08:52
100500 жертва прямого прохода с удалением
2 mikecool
 
28.07.22
08:52
иди с конца или собирай коллекцию строк на удаление и удаляй вторым шагом
3 dvrk
 
28.07.22
09:09
ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("стр");
    ТЗ.Колонки.Добавить("стрДерева");
    
    Для Каждого стрДерева из ДЗ.Строки Цикл
        Для Каждого Стр из стрДерева.Строки Цикл
            Если стрДерева.Колонка1 <> "" Тогда
                НовСтр = ТЗ.Добавить();
                НовСтр.стр = стр;
                НовСтр.СтрДерева = стрДерева;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    для каждого стр из ТЗ цикл
        стр.стрДерева.строки.удалить(стр.стр);
        КонецЦикла;

почему это удаляет не все строки? а у некоторых подченнные удаляет, а родителей оставляет
4 mikecool
 
28.07.22
09:21
потому что надо рекурсию
5 6awkup_true
 
28.07.22
09:23
(3) Потому что в цикле обхода тз ты удаляешь только подчиненные строки. родители у тебя хранятся в поле стрДерева, которые ты не трогаешь
6 dvrk
 
28.07.22
09:32
спасибо
7 dvrk
 
28.07.22
09:42
(5) а какой вообще мне смысл обходить подчиненные строки, если заполненная колонка у подчиненного = заполненная у родителя, а удаленный родитель = удаленная подчиненная