|   |   | 
| 
 | Удаление проводок в цикле, удаление из коллекции. | ☑ | ||
|---|---|---|---|---|
| 0
    
        12345Kostya 13.05.13✎ 14:18 | 
        Для каждого ЗначПроводки Из Проводки Цикл
  Если ЗначПроводки.СчетКт=Счет10111 Тогда НайденнаяСтрока = ТаблЗначений.Найти(ЗначПроводки.СубконтоКт.Номенклатура); Если НайденнаяСтрока = Неопределено Тогда НоваяСтрока = ТаблЗначений.Добавить(); НоваяСтрока.Номенклатура = ЗначПроводки.СубконтоКт.Номенклатура; Проводки.Удалить(ЗначПроводки); Проводки.Записать(); КонецЕсли; КонецЕсли; КонецЦикла; Получается что при каждом удалении проводки обход уменьшается на единицу, а как быть иначе? | |||
| 1
    
        Лефмихалыч 13.05.13✎ 14:20 | 
        (0) два варианта:
  1. Удалять в обратном порядке 2. Выгрузить в ТЗ, в обходе по строкам в массив запомнить строки (не номера, а именно строки), потом в обходе массива грохнуть строки и загрузить все, что останется в набор | |||
| 2
    
        Лефмихалыч 13.05.13✎ 14:20 | 
        и третий вариант - запросом выбрать только нужные проводки и заменить ими набор записей     | |||
| 3
    
        Defender aka LINN 13.05.13✎ 14:23 | 
        Ну и перезаписывать набор после всякого чиха - это тоже сильно.     | |||
| 4
    
        samozvanec 13.05.13✎ 14:25 | 
        (0) не валится?     | |||
| 5
    
        12345Kostya 13.05.13✎ 14:38 | 
        (1) и (2) не понял, можно более подробнее?
  Да и еще, я удаляю задвоенную проводку. Изначально я знаю что проводки задвоенные поэтому я ТЗ добавляю строку номенклатуры НоваяСтрока = ТаблЗначений.Добавить(); НоваяСтрока.Номенклатура = ЗначПроводки.СубконтоКт.Номенклатура; И при следующем проходе если указанная в текущей проводке номенклатура из ТЗ найдена то не удаляю проводку НайденнаяСтрока = ТаблЗначений.Найти(ЗначПроводки.СубконтоКт.Номенклатура); В конечном итоге дубли должны пропасть. | |||
| 6
    
        12345Kostya 13.05.13✎ 14:51 | 
        up     | |||
| 7
    
        12345Kostya 13.05.13✎ 14:55 | 
        (4) не валится, просто количество обходов уменьшается     | |||
| 8
    
        hhhh 13.05.13✎ 15:05 | 
        (7) тогда читайте (1)     | |||
| 9
    
        12345Kostya 13.05.13✎ 15:10 | 
        (8)
  в (5) написал про (1) ) | |||
| 10
    
        hhhh 13.05.13✎ 15:18 | 
        (9) ну миллион раз объясняли, если удаляешь запись, то весь список сдвигается вверх. Чего непонятного. Поэтому делайте то же самое, но начиная с последней строчки и идите вверх. И закончите первой строкой.     | |||
| 11
    
        Лефмихалыч 13.05.13✎ 15:21 | 
        (5)  подробнее - только за тебя все сделать. см вариант (2), он самый наиболее правильный     | |||
| 12
    
        12345Kostya 13.05.13✎ 15:28 | 
        (10) (11) Спокойнее, спокойнее!! я чет не пойму как мне обход делать с конца? Ну хоть пару строчек кода это же не значит что все за меня сделать.     | |||
| 13
    
        Trier 13.05.13✎ 15:45 | 
        Мне лично в обратно порядке не нравится, лучше всего как в (2) делать, либо второй вариант из (1). 
  Ну или если ближе всего к твоему уже написанному то мождно так й=0; Пока й <> Проводки.Количество()-1 Цикл Если ЗначПроводки.СчетКт=Счет10111 Тогда НайденнаяСтрока = ТаблЗначений.Найти(ЗначПроводки.СубконтоКт.Номенклатура); Если НайденнаяСтрока = Неопределено Тогда НоваяСтрока = ТаблЗначений.Добавить(); НоваяСтрока.Номенклатура = ЗначПроводки.СубконтоКт.Номенклатура; Проводки.Удалить(ЗначПроводки); Проводки.Записать(); Иначе й=й+1; КонецЕсли; КонецЕсли; КонецЦикла; | |||
| 14
    
        12345Kostya 13.05.13✎ 16:16 | 
        (13) А как мне обращаться к текущей проводке?
  Ведь я же в НайденнаяСтрока = ТаблЗначений.Найти(ЗначПроводки.СубконтоКт.Номенклатура); обращаюсь к текущей проводке. | |||
| 15
    
        Лефмихалыч 13.05.13✎ 16:18 | 
        (12)  Для СчЦ=0 по КоличествоСтрок Цикл
  Набор.УдалитьКЪебеням(КоличествоСтрок-СчЦ) | |||
| 16
    
        12345Kostya 13.05.13✎ 16:35 | 
        (15) А как обратиться к текущей строке в теле цикла?     | |||
| 17
    
        samozvanec 13.05.13✎ 16:43 | 
        давно ли у нас в цикле Для Каждого разрешили менять коллекцию?     | |||
| 18
    
        12345Kostya 13.05.13✎ 16:46 | 
        (17) ну так вроде всегда так было     | |||
| 19
    
        samozvanec 13.05.13✎ 16:48 | 
        (18) у вас это где?     | |||
| 20
    
        samozvanec 13.05.13✎ 16:50 | 
        (19) виноват. 1сникам можно, спутал с шарпами.     | |||
| 21
    
        12345Kostya 13.05.13✎ 16:52 | 
        кто такие шарпы?     | |||
| 22
    
        12345Kostya 13.05.13✎ 17:00 | 
        (16) ОЧЕНЬ АКТУАЛЬНО     | |||
| 23
    
        12345Kostya 13.05.13✎ 17:04 | 
        UP     | |||
| 24
    
        Лефмихалыч 13.05.13✎ 17:05 | 
        (22) у тебя уже три готовых решения есть. Подробности - в синтаксис-помощнике.     | |||
| 25
    
        Maxus43 13.05.13✎ 17:08 | 
        (20) всякие делфи и т.д. тоже позволяют, 1с не виновата, это нормально     | |||
| 26
    
        12345Kostya 13.05.13✎ 17:12 | 
        Ну как же три готовых решения это просто варианты (идеи). Нужна помощь в (16) написано. Я бы не писал этот пост, если бы мог обойтись СП.     | |||
| 27
    
        12345Kostya 13.05.13✎ 17:15 | 
        (24) ------> (26)     | |||
| 28
    
        hhhh 13.05.13✎ 17:19 | 
        (27) ну в (13) же написали.     | |||
| 29
    
        samozvanec 13.05.13✎ 17:20 | 
        (26) КоличествоСтрок-СчЦ
  вот так обратись. | |||
| 30
    
        samozvanec 13.05.13✎ 17:21 | 
        элемент = коллекция[индекс];
  на всякий пожарный | |||
| 31
    
        12345Kostya 13.05.13✎ 17:48 | 
        (15) Почему КоличествоСтрок-СчЦ? Логики не улавливаю.     | |||
| 32
    
        hhhh 13.05.13✎ 17:56 | 
        (31) ряд чисел й = 0,1,2,3,4,5,6,7,8,9
  преобразуешь в ряд индекс проводки = 9,8,7,6,5,4,3,2,1,0 | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |