![]() |
![]() |
![]() |
|
программное удаление записи из РС | ☑ | ||
---|---|---|---|---|
0
puasson
06.03.13
✎
11:11
|
Сабж, делаю отбор же, но почему то удаляются все записи! вместо тех, что я выделил обором, что не так в коде??
СписокДокументовБУ - документы записи с которыми нужно удалить НаборЗаписей = РегистрыСведений.ТакойтоРегистр.СоздатьНаборЗаписей(); НаборЗаписей.Прочитать(); Для Каждого Стр Из СписокДокументовБУ Цикл Если Стр.ДокБУ.ПометкаУдаления = Ложь Тогда СписокДокументовБУ.Удалить(Стр); КонецЕсли; КонецЦикла; Для каждого стр из СписокДокументовБУ Цикл НаборЗаписей.Отбор.ДокументБУ.Установить(Стр.ДокБУ); НаборЗаписей.Записать(); КонецЦикла; |
|||
1
Reset
06.03.13
✎
11:15
|
Закоментарить строку НаборЗаписей.Прочитать();
И первый цикл ошибочен, но это уже другой вопрос |
|||
2
pessok
06.03.13
✎
11:17
|
вообще не понятно как на стадии первого цикл в превышение индекса не падает... видимо нет помеченных на удаление документов.
по делу - читать надо УЖЕ с отбором |
|||
3
Alexaha
06.03.13
✎
11:18
|
(0) сначала делай отбор на те записи ктр надо удалить, потом читай набор , очищай его и записывай
|
|||
4
Reset
06.03.13
✎
11:22
|
(3) Зачем читать и очищать?
|
|||
5
puasson
06.03.13
✎
11:23
|
(1) спс бро.
По поводу 1 цикла по удалению: так параметр строка ТЧ же вот из СП Параметры: <Строка> (обязательный) Тип: СтрокаТаблицыЗначений. Удаляемая строка таблицы значений. Я же не по индексу передаю |
|||
6
puasson
06.03.13
✎
11:25
|
другое дело что 2 цикла тут вовсе не нужны))) ну это другая история
|
|||
7
pessok
06.03.13
✎
11:26
|
(5) потому что в цикле так нельзя, ты удаляешь элемент, а потом продолжаешь с него итерировать, а его, как бы, нет.
на вот v8: Удаление строки из таблицы значений |
|||
8
Defender aka LINN
06.03.13
✎
11:26
|
(4) За сервер бабло уплочено. Пусть работает, сцуко железное!
|
|||
9
cw014
06.03.13
✎
11:29
|
Криво, но все же решение:
Для Каждого Стр Из СписокДокументовБУ Цикл Если Стр.ДокБУ.ПометкаУдаления Тогда НаборЗаписей = РегистрыСведений.ТакойтоРегистр.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ДокументБУ.Установить(Стр.ДокБУ); НаборЗаписей.Записать(); КонецЕсли; КонецЦикла; |
|||
10
Мыш
06.03.13
✎
11:29
|
(4) Присоединяюсь к вопросу )
|
|||
11
Reset
06.03.13
✎
11:29
|
(5) "спс бро."
Это в в каком смысле? По поводу 1 цикла: Удаление элементов коллекции при обходе коллекции требует явной корректировки индекса "текущего" элемента (что невозможно в цикле foreach) - иначе некотрые значения просто будут в цикле пропущены. Это типичная ошибка начинающих. Нужно или использовать цикл "Для" (начиная с отрицательного счетчика), или "Пока" с самостоятельным изменением счетчика. Или не делать удаление в этом цикле, сохраняя ссылки на нужные элементы во временном массиве, который обходить потом отдельно. |
|||
12
Alexaha
06.03.13
✎
11:46
|
(4) (10) да увлекся я ))
|
|||
13
puasson
06.03.13
✎
11:53
|
(11) то бишь после удаления iй строки i+1 строка переместится на место iй. и когда цикл шагнет на следующую строчку, он попадет на строку которая была на i+2 месте до удаления. Я так понял??
Прост долго получается. 3 цикла. 1 - найти помеченные на удаление. 2 - удаление собстно. 3 - удаление из регистра. Не слишком то оптимально. По шустрее возможно сделать?? |
|||
14
Reset
06.03.13
✎
12:03
|
(13) Не там ишещь оптимальность. Если хочешь оптимальности, избавься от получения пометки удаления через точку в цикле.
|
|||
15
pessok
06.03.13
✎
12:03
|
(13) я тебе в (7) дал ссылку, как правильно в цикле удалять. издеваешься?
|
|||
16
puasson
06.03.13
✎
12:04
|
та не, прост удалять вообще не было смысла. сразу проверяем на пометку, и если помечен, то и удаляем запись из регистра. Оптимально же
|
|||
17
Reset
06.03.13
✎
12:06
|
(16) Можно записать одним циклом, только оптимальности это не особо прибавит
Для каждого стр из СписокДокументовБУ Цикл Если Стр.ДокБУ.ПометкаУдаления Тогда // вот здесь косяк НаборЗаписей.Отбор.ДокументБУ.Установить(Стр.ДокБУ); НаборЗаписей.Записать(); КонецЕсли; КонецЦикла; |
|||
18
puasson
06.03.13
✎
12:23
|
та я просёк твою мыслю, даже если вынесу пометку удаления в колонку, у нескольких доументов значение пометки меняется в процессе работы. И каждый раз при смене значения искать этот дкоумент в таблице и менять значение в колонке с пометкой на удаление? Да ну это тоже оптимальности не прибавит же.
Ресет давай дружить? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |