программное удаление записи из РС #655293


#0 by puasson
Сабж, делаю отбор же, но почему то удаляются все записи! вместо тех, что я выделил обором, что не так в коде?? СписокДокументовБУ - документы записи с которыми нужно удалить
#1 by Reset
Закоментарить строку НаборЗаписей.Прочитать; И первый цикл ошибочен, но это уже другой вопрос
#2 by pessok
вообще не понятно как на стадии первого цикл в превышение индекса не падает... видимо нет помеченных на удаление документов. по делу - читать надо УЖЕ с отбором
#3 by Alexaha
сначала делай отбор на те записи ктр надо удалить, потом читай набор , очищай его и записывай
#4 by Reset
Зачем читать и очищать?
#5 by puasson
спс бро. По поводу 1 цикла по удалению: так параметр строка ТЧ же вот из СП Параметры: Тип: СтрокаТаблицыЗначений. Удаляемая строка таблицы значений. Я же не по индексу передаю
#6 by puasson
другое дело что 2 цикла тут вовсе не нужны))) ну это другая история
#7 by pessok
потому что в цикле так нельзя, ты удаляешь элемент, а потом продолжаешь с него итерировать, а его, как бы, нет. на вот
#8 by Defender aka LINN
За сервер бабло уплочено. Пусть работает, сцуко железное!
#9 by cw014
Криво, но все же решение:
#10 by Мыш
Присоединяюсь к вопросу )
#11 by Reset
"спс бро." Это в в каком смысле? По поводу 1 цикла: Удаление элементов коллекции при обходе коллекции требует явной корректировки индекса "текущего" элемента (что невозможно в цикле foreach) - иначе некотрые значения просто будут в цикле пропущены. Это типичная ошибка начинающих. Нужно или использовать цикл "Для" (начиная с отрицательного счетчика), или "Пока" с самостоятельным изменением счетчика. Или не делать удаление в этом цикле, сохраняя ссылки на нужные элементы во временном массиве, который обходить потом отдельно.
#12 by Alexaha
да увлекся я ))
#13 by puasson
то бишь после удаления  iй строки i+1 строка переместится на место iй. и когда цикл шагнет на следующую строчку, он попадет на строку которая была на i+2 месте до удаления. Я так понял?? Прост долго получается. 3 цикла. 1 - найти помеченные на удаление. 2 - удаление собстно. 3 - удаление из регистра. Не слишком то оптимально. По шустрее возможно сделать??
#14 by Reset
Не там ишещь оптимальность. Если хочешь оптимальности, избавься от получения пометки удаления через точку в цикле.
#15 by pessok
я тебе в дал ссылку, как правильно в цикле удалять. издеваешься?
#16 by puasson
та не, прост удалять вообще не было смысла. сразу проверяем на пометку, и если помечен, то и удаляем запись из регистра. Оптимально же
#17 by Reset
Можно записать одним циклом, только оптимальности это не особо прибавит
#18 by puasson
та я просёк твою мыслю, даже если вынесу пометку удаления в колонку, у нескольких доументов значение пометки меняется в процессе работы. И каждый раз при смене значения искать этот дкоумент в таблице и менять значение в колонке с пометкой на удаление? Да ну это тоже оптимальности не прибавит же. Ресет давай дружить?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С