Есть дерево значений, в ней есть колонка "Количество". Нужно удалить из этого дерева строки, у которых количество равно нулю.
Делаю так:
При выполнении этого кода очищается все дерево значений, хотя есть строки с ненулевым количеством. Подскажите, где я мог накосячить? PS Отладчиком пробовал пройти, но конфигуратор падает после 2-3 проходов по циклу.
Делаю так:
ОтборСтрокКУдалению = Новый Структура("Количество", 0);
МассивСтрокКУдалению = ДеревоОстатков.Строки.НайтиСтроки(ОтборСтрокКУдалению, Истина);
Для Каждого СтрокаДерева Из МассивСтрокКУдалению Цикл
Попытка
СтрокиДерева = ?(СтрокаДерева.Родитель = Неопределено,
ДеревоОстатков.Строки,
СтрокаДерева.Родитель.Строки);
СтрокиДерева.Удалить(СтрокаДерева);
Исключение
КонецПопытки;
КонецЦикла;
ПоказатьПри выполнении этого кода очищается все дерево значений, хотя есть строки с ненулевым количеством. Подскажите, где я мог накосячить? PS Отладчиком пробовал пройти, но конфигуратор падает после 2-3 проходов по циклу.
По теме из базы знаний
- Пример преобразования дерева значений в таблицу значений и обратно в 1Cv8
- Управляемая форма 1С 8.2(8.3) – работа с деревом значений и таблицей значений. Часть II (Реализация DRAG and DROP)
- Конструктор результата системы компоновки данных для работы с деревом значений в тонком клиенте.
- Работа с деревом значений для новичков (Управляемые формы 8.3)
- Полезности | Дерево значений | Обычные формы |
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Непонятно, почему все ветки удаляются (проще всего сразу глянуть, попадают ли корневые ветки в массив результатов поиска).
Но юзать исключения как часть алгоритма - моветон.
Я бы на рекурсию переписал. Там элементарно сделать, чтобы удаление само по себе начиналось с вложенных веток.
(8) Он контролируемо разрушает дерево.
Но юзать исключения как часть алгоритма - моветон.
Я бы на рекурсию переписал. Там элементарно сделать, чтобы удаление само по себе начиналось с вложенных веток.
(8) Он контролируемо разрушает дерево.
(4)
Падает с ошибкой виндовой.
Ну как бы из текста кода понятно, что нужно. Нужно убрать из дерева значений все строки с количеством, равным нулю.
"но конфигуратор падает после 2-3 проходов по циклу." - это как понят????
Падает с ошибкой виндовой.
А по теме - вы удаляете строки из массива, где нулевые позиции, равзе нет?
Ну как бы из текста кода понятно, что нужно. Нужно убрать из дерева значений все строки с количеством, равным нулю.
Посмотрите что напишет этот код
ОтборСтрокКУдалению = Новый Структура("Количество", 0);
МассивСтрокКУдалению = ДеревоОстатков.Строки.НайтиСтроки(ОтборСтрокКУдалению, Истина);
Сообщить("Всего корневых строк: "+ДеревоОстатков.Строки.Количество);
Для Каждого СтрокаДерева Из МассивСтрокКУдалению Цикл
Попытка
Если СтрокаДерева.Родитель = Неопределено Тогда
Сообщить("удаляется корневая строка дерева");
КонецЕсли;
СтрокиДерева = ?(СтрокаДерева.Родитель = Неопределено,
ДеревоОстатков.Строки,
СтрокаДерева.Родитель.Строки);
СтрокиДерева.Удалить(СтрокаДерева);
Исключение
КонецПопытки;
КонецЦикла;
Показать
(6) Свалилось с ошибкой
Ошибка выполнения запроса
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
server_addr=tcp://[xvap1c03]:2564 descr=Ошибка сетевого доступа к серверу
(Windows Sockets - 10054(0x00002746). Удаленный хост принудительно разорвал существующее подключение. ) line=1041 file=Src\DataExchangeTcpClientImpl.cpp
Ошибка выполнения запроса
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
server_addr=tcp://[xvap1c03]:2564 descr=Ошибка сетевого доступа к серверу
(Windows Sockets - 10054(0x00002746). Удаленный хост принудительно разорвал существующее подключение. ) line=1041 file=Src\DataExchangeTcpClientImpl.cpp
Типа такого
ЗЫ. А, ччерт.. Так-то как раз и нельзя делать... Выборка может сбиться. Щаз перепишу.
Процедура УдалитьНулевыеВетки(Дерево)
Для Каждого Строка Из Дерево.Строки Цикл
Если Строка.Количество = 0 Тогда
Дерево.Строки.Удалить(Строка);
Иначе
УдалитьНулевыеВетки(Строка);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьЗЫ. А, ччерт.. Так-то как раз и нельзя делать... Выборка может сбиться. Щаз перепишу.
нет )))) туплю я с утра. Видать у вас неправильно построено дерево.
Вот код, он работает:
НА форме лежит ДеревоЗначений (МоёДрево), с двумя колонками "Колонка1, Колонка2"
Вот код, он работает:
Процедура КнопкаВыполнитьНажатие(Кнопка)
ОтборСтрокКУдалению = Новый Структура("Колонка2", 0);
МассивСтрокКУдалению = МоёДрево.Строки.НайтиСтроки(ОтборСтрокКУдалению, Истина);
Для Каждого СтрокаДерева Из МассивСтрокКУдалению Цикл
Попытка
СтрокиДерева = ?(СтрокаДерева.Родитель = Неопределено,
МоёДрево.Строки,
СтрокаДерева.Родитель.Строки);
СтрокиДерева.Удалить(СтрокаДерева);
Исключение
КонецПопытки;
КонецЦикла;
КонецПроцедуры
ПоказатьНА форме лежит ДеревоЗначений (МоёДрево), с двумя колонками "Колонка1, Колонка2"
Во, вот так попробуй:
Процедура УдалитьНулевыеВетки(Дерево)
МассивУдаляемыхСтрок = Новый Массив;
Для Каждого Строка Из Дерево.Строки Цикл
Если Строка.Количество = 0 Тогда
МассивУдаляемыхСтрок.Добавить(Строка);
Иначе
УдалитьНулевыеВетки(Строка);
КонецЕсли;
КонецЦикла;
Для Каждого УдаляемаяСтрока Из МассивУдаляемыхСтрок Цикл
Дерево.Строки.Удалить(УдаляемаяСтрока);
КонецЦикла;
КонецПроцедуры
Показать
(29) sCHTASS, И сколько выполняется по времени? Что замер говорит? Просто интересно, на чем именно тормозит в таком простом коде.
Неужели из-за накладных расходов на саму рекурсию? Деревце средненькое весьма...
Что касается сабжевого кода - ты проверил, попадают или нет корневые узлы в массив результатов?
Если нет - тогда такая неадекватная реакция у 1С значит на попытку удаления невалидной ссылки. Хотя упасть, по-идее, должно было раньше. Можно попробовать в начале попытки еще воткнуть обращение к СтрокаДерева.Количество. Может, на нем лучше упадет :) Хотя я лично всё равно попробовал бы выяснить причину тормозов и решить вопрос без исключений.
Неужели из-за накладных расходов на саму рекурсию? Деревце средненькое весьма...
Что касается сабжевого кода - ты проверил, попадают или нет корневые узлы в массив результатов?
Если нет - тогда такая неадекватная реакция у 1С значит на попытку удаления невалидной ссылки. Хотя упасть, по-идее, должно было раньше. Можно попробовать в начале попытки еще воткнуть обращение к СтрокаДерева.Количество. Может, на нем лучше упадет :) Хотя я лично всё равно попробовал бы выяснить причину тормозов и решить вопрос без исключений.
(62) Xershi, Откуда ж я знаю, что новое :)
Добавлю только, что на восьмерке я вообще почти перестал пользоваться удалением по индексам, т.к. по ссылкам гибче, хотя и избыточнее в простых случаях.
Чаще в обычном цикле "Для Каждого" запоминаю ссылки для удаления и потом их удаляю в отдельном цикле, как в (24).
Да, в простых случаях избыточно. Но предельно простые случаи у меня как-то редко стали встречаться. Зато код читабельнее и легче расширяемый при необходимости. Проход ведь может быть многофункциональный, а не только для удаления некоторых строк. И обратный порядок обхода в этом случае - явный костыль, который ясности и простоты в бизнес-код отнюдь не привносит (а где-то может быть и вообще неприемлем).
Добавлю только, что на восьмерке я вообще почти перестал пользоваться удалением по индексам, т.к. по ссылкам гибче, хотя и избыточнее в простых случаях.
Чаще в обычном цикле "Для Каждого" запоминаю ссылки для удаления и потом их удаляю в отдельном цикле, как в (24).
Да, в простых случаях избыточно. Но предельно простые случаи у меня как-то редко стали встречаться. Зато код читабельнее и легче расширяемый при необходимости. Проход ведь может быть многофункциональный, а не только для удаления некоторых строк. И обратный порядок обхода в этом случае - явный костыль, который ясности и простоты в бизнес-код отнюдь не привносит (а где-то может быть и вообще неприемлем).
попробуйте код:
ОтборСтрокКУдалению = Новый Структура("Количество", 0);
МассивСтрокКУдалению = ДеревоОстатков.Строки.НайтиСтроки(ОтборСтрокКУдалению, Истина);
ТаблицаСтрокДляУдаления = Новый ТаблицаЗначений;
ТаблицаСтрокДляУдаления.Колонки("КоллекцияСтрокДереваДляУдаления");
ТаблицаСтрокДляУдаления.Колонки("СтрокаДереваДляУдаления");
ТаблицаСтрокДляУдаления.Колонки("УровеньСтрокиДереваДляУдаления");
Для Каждого СтрокаДерева Из МассивСтрокКУдалению Цикл
нс = ТаблицаСтрокДляУдаления.Добавить();
нс.КоллекцияСтрокДереваДляУдаления = ?(СтрокаДерева.Родитель = Неопределено,
ДеревоОстатков.Строки,
СтрокаДерева.Родитель.Строки);
нс.СтрокаДереваДляУдаления = СтрокаДерева;
нс.УровеньСтрокиДереваДляУдаления = СтрокаДерева.Уровень();
КонецЦикла;
ТаблицаСтрокДляУдаления.Сортировать("УровеньСтрокиДереваДляУдаления Убыв");
Для каждого Стр Из ТаблицаСтрокДляУдаления Цикл
Стр.КоллекцияСтрокДереваДляУдаления.Удалить(Стр.СтрокаДереваДляУдаления);
КонецЦикла;
Показать
(45) Xershi, вам же уже сказали, что удаление происходит не по индексу, значит всё будет ОК. Вот вам пример:
См. вложение. Процедура отрабатывает корректно: сначала удаляет 2 строку со значением 2, потом удаляется 3 строка со значением 4 (хотя в момент попадания массива она была 4) и т.д. Всё корректно отработалось.
Хотите пример перепишите с ТЗ, с Деревом - всё-равно будет всё нормально пока вы удаляете не по индексу.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Для Индекс = 1 По 10 Цикл
Стр = Объект.ТабличнаяЧасть1.Добавить();
Стр.Реквизит1 = Индекс;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьЧетные(Команда)
УдалитьЧетныеНаСервере();
КонецПроцедуры
&НаСервере
Процедура УдалитьЧетныеНаСервере()
//Получаем каким-то образом массив строк к удалению
МассивЧетныхСтрок = Новый Массив;
Для Каждого Строка из Объект.ТабличнаяЧасть1 Цикл
Если Строка.Реквизит1%2=0 Тогда
МассивЧетныхСтрок.Добавить(Строка);
КонецЕсли;
КонецЦикла;
Для Каждого Строка из МассивЧетныхСтрок Цикл
Объект.ТабличнаяЧасть1.Удалить(Строка);
КонецЦикла;
КонецПроцедуры
ПоказатьСм. вложение. Процедура отрабатывает корректно: сначала удаляет 2 строку со значением 2, потом удаляется 3 строка со значением 4 (хотя в момент попадания массива она была 4) и т.д. Всё корректно отработалось.
Хотите пример перепишите с ТЗ, с Деревом - всё-равно будет всё нормально пока вы удаляете не по индексу.
Прикрепленные файлы:
ПробаУдалениеСНачала.epf
(47) klinval, так ты делаешь избыточную операцию! Лучше и быстрее один раз обойти с конца за один проход.
Никто не спорт что такое решение будет работать. Только ты 2 обхода делаешь.
Я же говорил про удаление за один обход. В таком ключе у вас есть решение/предложение?
Никто не спорт что такое решение будет работать. Только ты 2 обхода делаешь.
Я же говорил про удаление за один обход. В таком ключе у вас есть решение/предложение?
(49) Xershi,
На код:
Ты писал:
Там вначале автор получил МАССИВСТРОК и потом делает удаление по строке, а не по индексу. Ты утверждал, что так нельзя. Больше половины сообщений темы занято тем, чтобы доказать тебе что так можно делать и не обязательно делать "с конца". И теперь ты пишешь:
....
По поводу:
Я бы мог получить строки запросом или НайтиСтроки. Не обязательно делать 2 обхода. Я просто создал тестовый пример, чтобы доказать, что в можно удалять не в обратном порядке. До 49 сообщения (например в (8), (9), (41) и т.д.) ты утверждал, что так делать нельзя, теперь оказывается ты изначально знал, что так делать можно. О чём тогда спор?
На код:
ОтборСтрокКУдалению = Новый Структура("Количество", 0);
МассивСтрокКУдалению = ДеревоОстатков.Строки.НайтиСтроки(ОтборСтрокКУдалению, Истина);
Для Каждого СтрокаДерева Из МассивСтрокКУдалению Цикл
Попытка
СтрокиДерева = ?(СтрокаДерева.Родитель = Неопределено,
ДеревоОстатков.Строки,
СтрокаДерева.Родитель.Строки);
СтрокиДерева.Удалить(СтрокаДерева);
Исключение
КонецПопытки;
КонецЦикла;
ПоказатьТы писал:
нужно обходить последнюю группировку и из нее удалять. А так как вы это описали не мудрено, что вылетит в ошибку. Думаю это вы дерево просто разрушаете.
...
И не забывать про то что когда удаляете строку индекс тоже смешается, поэтому лучше делать обратный обход.
...
И не забывать про то что когда удаляете строку индекс тоже смешается, поэтому лучше делать обратный обход.
Там вначале автор получил МАССИВСТРОК и потом делает удаление по строке, а не по индексу. Ты утверждал, что так нельзя. Больше половины сообщений темы занято тем, чтобы доказать тебе что так можно делать и не обязательно делать "с конца". И теперь ты пишешь:
Никто не спорт что такое решение будет работать.
....
По поводу:
Только ты 2 обхода делаешь.
Я бы мог получить строки запросом или НайтиСтроки. Не обязательно делать 2 обхода. Я просто создал тестовый пример, чтобы доказать, что в можно удалять не в обратном порядке. До 49 сообщения (например в (8), (9), (41) и т.д.) ты утверждал, что так делать нельзя, теперь оказывается ты изначально знал, что так делать можно. О чём тогда спор?
(53) Xershi, тебе не стыдно мне повторять мою же мысль только другими словами?
Вы делаете вид, что слова указанные в 53 сообщении вы с самого начала всем пытались донести. Но на самом деле вы писали совсем не это! Вы писали, что то про индексы. Но на самом деле индексы тут не важны, т.к. удаляет автор не по индексу. Об этом вам неоднократно писали! Тут важен уровень в иерархии, а не какой-то индекс!
А теперь почему:
Пример для тебя, а не для автора был, т.к. в ответ на сообщение про ТЗ:
ты написал:
Я тебе привёл пример, что в ТЗ можно удалять "не с конца". И на индексы в этом случае плевать.
(52) klinval 07.12.15 15:29
Изначально код возможно не работал из-за того, что удалялась строка уровнем выше, а потом идёт попытка удалить строку уровнем ниже, которой физически не существует.
Т.е. есть элементы 1, 1.1, 1.2, 2, 2.1 и т.д. Идёт удаление элемента 1, он тянет за собой 1.1 и 1.2. Потом пытаемся удалить 1.1, а этой строки уже нет.
Изначально код возможно не работал из-за того, что удалялась строка уровнем выше, а потом идёт попытка удалить строку уровнем ниже, которой физически не существует.
Т.е. есть элементы 1, 1.1, 1.2, 2, 2.1 и т.д. Идёт удаление элемента 1, он тянет за собой 1.1 и 1.2. Потом пытаемся удалить 1.1, а этой строки уже нет.
(53) Xershi 07.12.15 15:31
Т.е. он удалил ветвь, а потом пытается удалить потомка, который уже удален.
Т.е. он удалил ветвь, а потом пытается удалить потомка, который уже удален.
Вы делаете вид, что слова указанные в 53 сообщении вы с самого начала всем пытались донести. Но на самом деле вы писали совсем не это! Вы писали, что то про индексы. Но на самом деле индексы тут не важны, т.к. удаляет автор не по индексу. Об этом вам неоднократно писали! Тут важен уровень в иерархии, а не какой-то индекс!
А теперь почему:
(50) klinval, о том что твой пример для ТЗ, а у него ДЗ.
Пример для тебя, а не для автора был, т.к. в ответ на сообщение про ТЗ:
(39) Xershi, В таблице значений синтаксис удаления тоже имеет два разных варианта. "Удалять нужно с конца" - это семерочная мантра и в восьмерке актуальна только при удалении по индексу.
ты написал:
(40) herfis, как тогда удалять значения без потери индексов при обходе коллекции?
Если это мантра 1с7, тогда не могли бы вы поведать, что в 1с8 изменилось?
Если это мантра 1с7, тогда не могли бы вы поведать, что в 1с8 изменилось?
Я тебе привёл пример, что в ТЗ можно удалять "не с конца". И на индексы в этом случае плевать.
А что касается темы:
Изначально код возможно не работал из-за того, что удалялась строка уровнем выше, а потом идёт попытка удалить строку уровнем ниже, которой физически не существует.
Т.е. есть элементы 1, 1.1, 1.2, 2, 2.1 и т.д. Идёт удаление элемента 1, он тянет за собой 1.1 и 1.2. Потом пытаемся удалить 1.1, а этой строки уже нет.
ИМХО код в (38) эту проблему устраняет. Вопрос к топикстартеру: попробовал ли он этот код?
Изначально код возможно не работал из-за того, что удалялась строка уровнем выше, а потом идёт попытка удалить строку уровнем ниже, которой физически не существует.
Т.е. есть элементы 1, 1.1, 1.2, 2, 2.1 и т.д. Идёт удаление элемента 1, он тянет за собой 1.1 и 1.2. Потом пытаемся удалить 1.1, а этой строки уже нет.
ИМХО код в (38) эту проблему устраняет. Вопрос к топикстартеру: попробовал ли он этот код?
Еще такой косяк может быть:
На верхнем уровне есть элемент с нулевым количеством, в подчиненных элементах тоже есть нулевое количество. Первым удалили верхнее значение из дерева. Соотвественно все его потомки тоже удалены. Потом пытаемся удалить потомков.
Вообще в постановке задачи не сказано, что делать с потомками удаляемого элемента.
С рекурсией тоже непонятно, почему она так медленно работает, в дереве вроде индексов не бывает, найтистроки не должна работать быстрее.
На верхнем уровне есть элемент с нулевым количеством, в подчиненных элементах тоже есть нулевое количество. Первым удалили верхнее значение из дерева. Соотвественно все его потомки тоже удалены. Потом пытаемся удалить потомков.
Вообще в постановке задачи не сказано, что делать с потомками удаляемого элемента.
С рекурсией тоже непонятно, почему она так медленно работает, в дереве вроде индексов не бывает, найтистроки не должна работать быстрее.
(43) 32ops, по поводу нет индексов
КоллекцияСтрокДереваЗначений (ValueTreeRowCollection)
Удалить (Delete)
Вариант синтаксиса: По объекту
Синтаксис:
Удалить(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: СтрокаДереваЗначений.
Строка, которую необходимо удалить из данной коллекции строк ДеревоЗначений.
Вариант синтаксиса: По индексу
Синтаксис:
Удалить(<Индекс>)
Параметры:
<Индекс> (обязательный)
Тип: Число.
Индекс удаляемой строки.
Описание:
Удаляет строку из коллекции строк данного уровня дерева значений. Если у строки имеются подчиненные строки, они также будут удалены.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:
СтрокиСостава.Удалить(6);
ПоказатьУдалить (Delete)
Вариант синтаксиса: По объекту
Синтаксис:
Удалить(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: СтрокаДереваЗначений.
Строка, которую необходимо удалить из данной коллекции строк ДеревоЗначений.
Вариант синтаксиса: По индексу
Синтаксис:
Удалить(<Индекс>)
Параметры:
<Индекс> (обязательный)
Тип: Число.
Индекс удаляемой строки.
Описание:
Удаляет строку из коллекции строк данного уровня дерева значений. Если у строки имеются подчиненные строки, они также будут удалены.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:
СтрокиСостава.Удалить(6);
(48) В моем понимании индекс - несколько другое. Это вспомогательная структура облегчающая поиск нужного элемента в массиве. например если есть массив чисел от 1 до ста, для поиска нужного элемента с использованием индекса нужно будет 7 сравнений 2 в степени 7 = 128 > 100. Она как бы превращает массив в дерево для удобного сравнения, сначала идет сравнение с самым среднем значением (50), потом в зависимости от результат 25 или 75, и т.д. Все, что я описал, наверное, не совсем соответствует действительности, но описывает мое понимание индекса.
Вы делаете вид, что слова указанные в 53 сообщении вы с самого начала всем пытались донести. Но на самом деле вы писали совсем не это! Вы писали, что то про индексы. Но на самом деле индексы тут не важны, т.к. удаляет автор не по индексу. Об этом вам неоднократно писали! Тут важен уровень в иерархии, а не какой-то индекс!
Просто пишу код так как нужно, я не задумывался над тем какие могут быть последствия у автора, делая как он делал.
А потом пораскинув сделал вывод, что он удалил родителя, а потом удаляет потомка. Потому как массив то у него не отсортирован как нужно.
А по поводу индекса. У ДЗ как вы уже поняли он есть, т.е. внутренняя нумерация коллекции. И автор даже привел текст ошибки, что индекс находится за границей доступности.
Вас я попросил пояснить что нового в 1С8 есть чего я не знаю. Увы я это все знал. Так что спора как бы и нет...
(57) Xershi,
Поэтому предлагаю плюсануть 38 сообщение, т.к. именно там происходит сортировка удаляемых строк (правда не по индексу, а по уровню) и закончить дискуссию.
А потом пораскинув сделал вывод, что он удалил родителя, а потом удаляет потомка. Потому как массив то у него не отсортирован как нужно.
Поэтому предлагаю плюсануть 38 сообщение, т.к. именно там происходит сортировка удаляемых строк (правда не по индексу, а по уровню) и закончить дискуссию.
(59) klinval, мне такое решение просто не нравится как мое личное мнение.
Но думаю, если автора оно устроит. То и вопросов нет.
Я хоть и люблю все правильное, но если есть решение которое будет с костылем, но сработает быстрее могу применить.
Тут дело в конкретном случае меня не устраивает такой огород вот и все))
Так что тут нет спора учимся и делаем выводы.
Но думаю, если автора оно устроит. То и вопросов нет.
Я хоть и люблю все правильное, но если есть решение которое будет с костылем, но сработает быстрее могу применить.
Тут дело в конкретном случае меня не устраивает такой огород вот и все))
Так что тут нет спора учимся и делаем выводы.
(9) Тема старая, но ответа нет
комментарий из 9 помог решить вопрос, удаляйте в ветке листы начиная с последнего. Индекс важен!!!
комментарий из 9 помог решить вопрос, удаляйте в ветке листы начиная с последнего. Индекс важен!!!
Дерево = РеквизитФормыВЗначение("РаспоряженияНаДоставку");
Для Каждого СтрокиПоЗоне Из Дерево .Строки цикл
//Для Каждого Строка Из СтрокиПоЗоне.Строки цикл
КоличествоСтрок = СтрокиПоЗоне.Строки.Количество();
Для й = 1 по КоличествоСтрок цикл
Строка = СтрокиПоЗоне.Строки[КоличествоСтрок-й];
Если УсловиеДляУдаления тогда
СтрокиПоЗоне.Строки.Удалить(Строка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот