|   |   | 
| 
 | v7: Удаление строк из Таблицы значений | ☑ | ||
|---|---|---|---|---|
| 0
    
        yliya_1C 14.07.16✎ 08:45 | 
        Доброе утро!
 Ребята, подскажите, пожалуйста, туплю чего-то Хочу удалить строки из таблицы значений. Пишу: тз.ВыбратьСтроки(); Пока тз.ПолучитьСтроку()=1 Цикл тз.УдалитьСтроку(); КонецЦикла; Удаляет каждую вторую строку, начиная с первой. т.е. половину таблицы. А как удалить все строки? | |||
| 1
    
        Провинциальный 1сник 14.07.16✎ 08:46 | 
        Ты не поверишь. 
 УдалитьСтроки() | |||
| 2
    
        aka AMIGO 14.07.16✎ 08:47 | 
        (0) ТвояТЗ.УдалитьСтроки();     | |||
| 3
    
        aka AMIGO 14.07.16✎ 08:49 | 
        Для ы = -ТвояТЗ.КоличествоСтрок() по -1 Цикл
 ТвояТЗ.УдалитьСтроку(-ы); КонецЦикла; (1) :) | |||
| 4
    
        yliya_1C 14.07.16✎ 08:53 | 
        А если мне нужно написать внутри цикла условие для удаления определенных строк? И при этом условие выполняется для последовательных строк
 тз.ВыбратьСтроки(); Пока тз.ПолучитьСтроку()=1 Цикл Если тз.Значение = 1 Тогда тз.УдалитьСтроку(); КонецЕсли; КонецЦикла; Значение = 1 у 1, 2 и 3 -ей строки. Таки способом удаляться 1 и 3-ья строка. А 2-ая останется. | |||
| 5
    
        aka AMIGO 14.07.16✎ 08:56 | 
        (4) Правильно. Т.к. после удаления строки нумерация сбивается     | |||
| 6
    
        aka AMIGO 14.07.16✎ 08:57 | 
        +5 выход - в (3)     | |||
| 7
    
        yliya_1C 14.07.16✎ 08:57 | 
        (5) Поняла, что сбивается. Спрашиваю как можно сделать?     | |||
| 8
    
        VladZ 14.07.16✎ 08:57 | 
        (0)  Ну давай рассмотрим, что делает программа:
 тз.ВыбратьСтроки(); - говорим программе, что нужно организовать выборку строк в ТЗ Пока тз.ПолучитьСтроку()=1 Цикл - увеличиваем счетчик строк, устанавливая следущую строку в качестве текущей. И делаеть это нужно до тех пор, пока есть из чего выбирать. тз.УдалитьСтроку(); - удалить строку из ТЗ. При этом ТЕКУЩЕЙ СТРОКОЙ СТАНОВИТСЯ СЛЕДУЩАЯ СТРОКА!!!! Т.е. после тз.УдалитьСтроку() текущей строкой становится следующая. А потом программаа нам еще делает ПолучитьСтроку() - т.е. еще раз "сдвигает" текущую строку. | |||
| 9
    
        aka AMIGO 14.07.16✎ 08:58 | 
        (7) я тебе ответил "как" - в (6)     | |||
| 10
    
        VladZ 14.07.16✎ 08:58 | 
        Выход: либо удалять с конца, либо контролировать текущую строку самому.     | |||
| 11
    
        Остап Сулейманович 14.07.16✎ 08:59 | 
        (4) Коротко так :
 поз = ТЗ.КоличествоСтрок(); Пока поз > 0 Цикл ТЗ.ПолучитьСтрокуПоНомеру(поз); Если Условие Тогда ТЗ.УдалитьСтроку(); КонецЕсли; поз = поз - 1; КонецЦикла; ЗЫ. Это уже конечно триразапорватыйбаян, но искать в гуголе еще дольше. | |||
| 12
    
        aka AMIGO 14.07.16✎ 08:59 | 
        (11) Вариант :)     | |||
| 13
    
        HawkEye 14.07.16✎ 09:00 | 
        (7) воспользоваться поиском... тема обмусолена вдоль и поперек...     | |||
| 14
    
        aka AMIGO 14.07.16✎ 09:02 | 
        (13) Видишь-ли, ей надо сразу код, а не методику решения :)     | |||
| 15
    
        yliya_1C 14.07.16✎ 09:07 | 
        Да, получилось! Спасибо мальчики
 Удачного всем дня! | |||
| 16
    
        aka AMIGO 14.07.16✎ 09:07 | 
        ЗЫ. ОФФ.. Полезная вещь всё-таки: либо начальные курсы программистов, либо книга-самоучитель по программированию.. там обычно много приёмчиков с хитростями и мелких примеров программирования.. Незнание которых может вызвать крупные потери времени и сил.. и здоровья :)     | |||
| 17
    
        Масянька 14.07.16✎ 09:14 | 
        (16) Зачем? Есть миста, есть "мальчики", девочку все устраивает...     | |||
| 18
    
        HawkEye 14.07.16✎ 09:14 | 
        (17) правильнее писать "девочЕК" )))     | |||
| 19
    
        Злопчинский 14.07.16✎ 09:20 | 
        ТЗ.НоваяКолонка("НадоУдалить","Число",1,0);
 Цикл По ТЗ Если Условие Тогда ТЗ.НадоУдалить = 1; КонецЕсли; КонецЦикла; глОчисткаТЗ(ТЗ,"ПорядокСортировкиИтога"); будет на порядок быстрее | |||
| 20
    
        aka AMIGO 14.07.16✎ 09:21 | 
        (19) Ну, тогда и глОчистку пости сюда :)     | |||
| 21
    
        oslokot 14.07.16✎ 09:25 | 
        строки вообще не придется удалять, если получать таблицу с нужными данными     | |||
| 22
    
        DrZombi гуру 14.07.16✎ 09:28 | 
        (4) Только через (3) или через (19)
 Не делай удаление строк через "Выбрать", ТЗ теряет ссылки на последующие строчки :) | |||
| 23
    
        Масянька 14.07.16✎ 09:38 | 
        (21) Не комсомолец :)     | |||
| 24
    
        hhhh 14.07.16✎ 09:46 | 
        (21) да, и 1с покупать не нужно. Без нее как-то спокойнее.     | |||
| 25
    
        vladmenleo 14.07.16✎ 09:48 | 
        А классическое ?
 ТЗ.НоваяКолонка("_Уд"); КолСтр=0; ТЗ.ВыбратьСтроки(); Пока ТЗ.Получитьстроку()=1 Цикл Если УсловиеВыполняется(ТЗ.К)=1 Тогда ТЗ._Уд=1; колстр=колстр+1; КонецЕсли; КонецЦикла; ТЗ.Сортировать("-_Уд"); ТЗ.УдалитьКолонку("_Уд"); ТЗ.Выгрузить(ТЗ_СЛУЖ,1,1); ТЗ_СЛУЖ.КоличествоСтрок(колстр); ТЗ_СЛУЖ.Заполнить(ТЗ); ТЗ=ТЗ_Служ; | |||
| 26
    
        DrZombi гуру 14.07.16✎ 09:50 | 
        (21) Только не в 7.7 :)
 Там проще в цикле, чем через запрос | |||
| 27
    
        Это_mike 14.07.16✎ 09:51 | 
        (26) нормальные запросы лучше циклов.     | |||
| 28
    
        DrZombi гуру 14.07.16✎ 09:51 | 
        (27) У 7.7 нет нормальных запросов :)     | |||
| 29
    
        DrZombi гуру 14.07.16✎ 09:53 | 
        (25) И что мешало удалить строки в первом цикле?
 В чем профит? | |||
| 30
    
        vladmenleo 14.07.16✎ 10:08 | 
        (29) да удали, не вопрос :)     | |||
| 31
    
        Garykom гуру 14.07.16✎ 10:13 | 
        Ладно уж напомню в очередной раз ))
 Самое быстрое и оптимальное "удаление строк" из ТЗ это создание новой ТЗ. Перенос/копирование в нее только нужных строк и возврат новой ТЗ вместо старой. ЗЫ И да это можно делать запросом )) | |||
| 32
    
        oslokot 14.07.16✎ 10:19 | 
        (28) есть - прямые. Из-за них долго тормозился мой переход на снеговик :)     | |||
| 33
    
        vladmenleo 14.07.16✎ 10:26 | 
        (31) Что я и показал собственно в (25). Перетирали-ж эту тему на мисте кучу раз, вроде и решили, что перенос в новую самое оптимальное     | |||
| 34
    
        opus70 14.07.16✎ 10:28 | 
        ТЗ.ВыбратьСтроки();
 Пока ТЗ.ПолучитЬСтроку()=1 Цикл если ТЗ.Чегото = ЧемутоРавно Тогда ТЗ.удалитьСтроку(); ТЗ.ВыбратьСтроки(); Конецесли; Конеццикла; | |||
| 35
    
        opus70 14.07.16✎ 10:30 | 
        да на больших объемах долг зато простой и понятный алгоритм
 ЛЮБЛЮ ПРОСТЫЕ ВЕЩИ | |||
| 36
    
        vladmenleo 14.07.16✎ 10:34 | 
        (34) Если приличных размеров Тз, да такое в цикле раз несколько... Ждать мягко говоря устанешь     | |||
| 37
    
        opus70 14.07.16✎ 11:03 | 
        НУ ТУТ МОЖНО ОТВЕТИТ ПО ДРУГОМУ БОЛЬШИЕ ТЗ СКОРЕЙ ВСЕГО НЕ ПРАВИЛЬНЫЙ ПОДХОД К ДЕЛУ 
 А НА МАЛЕНЬКИХ ДО 500 1000 СТРОК ДАННЫЙ АЛГОРИТМ ИДЕАЛЕН А ДЛЯ БОЛЬШИХ САМЫЙ УДОБНЫЙ ЭТО (31) КОПИРОВАНИЕ В ДРУГУЮ ТЗ | |||
| 38
    
        opus70 14.07.16✎ 11:05 | 
        к несчастью в 7.7 нет запросов 
 но варианты удалиня строк в 8.хх мне не нравятся больше слишком за мудреный алгоритм обычно | |||
| 39
    
        Garykom гуру 14.07.16✎ 11:05 | 
        (37) размер ТЗ не причем, причем только % удаляемых строк к размеру ТЗ     | |||
| 40
    
        DrZombi гуру 14.07.16✎ 11:08 | 
        (31) Докажи, что это делать можно запросов в 1С  7.7 без ВК в без 1С++ :)     | |||
| 41
    
        DrZombi гуру 14.07.16✎ 11:10 | 
        (37) На больших, самый удобный это 1С++ с прямыми запросами.
 С написанными функциями на языке SQL. И в итоге получающий сразу же необходимую ТЗ на выходе. Без доп удаления и других шаманств :) | |||
| 42
    
        Chameleon1980 14.07.16✎ 11:12 | 
        с...уко
 обсосано 384 миллиона раз. гугл сломали. прошу пардона у публики - нервы. | |||
| 43
    
        Garykom гуру 14.07.16✎ 11:16 | 
        (40) Данные из запроса в новую ТЗ можно, но как засунуть данные из ТЗ в запрос?
 ммм ммм ммм Только с одной колонкой придумал как | |||
| 44
    
        DrZombi гуру 14.07.16✎ 11:17 | 
        (42) Ветки по геополитики нет. Спорить об способах в 8.х не интересно.
 А 7-ка как велосипед, не катаемся, но помним как :) | |||
| 45
    
        Garykom гуру 14.07.16✎ 11:18 | 
        (43)+ И нужна служебная объекта специально заполненная в базе, условием на которую (ТЗ параметр) и получаем что нуна     | |||
| 46
    
        Chameleon1980 14.07.16✎ 11:23 | 
        было жеж типа служебного дока для запросов по тз     | |||
| 47
    
        Chameleon1980 14.07.16✎ 11:25 | 
        тока всё это нафейхоа?
 1цпп не устраивает? там, вроде, всё есть | |||
| 48
    
        DrZombi гуру 14.07.16✎ 11:31 | 
        (47) в 1цпп есть все для второй жизни :)     | |||
| 49
    
        Эльниньо 14.07.16✎ 15:06 | 
        // Алгоритм Эльниньо
 тз.ВыбратьСтроки(); Пока тз.ПолучитьСтроку()=1 Цикл Пока тз.НадоУдалить = 1 Цикл тз.УдалитьСтроку(); Если тз.НомерСтроки = 0 Тогда Прервать; КонецЕсли; КонецЦикла; КонецЦикла; | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |