Имя: Пароль:
1C
1C 7.7
v7: Удалить строки из ТЗ.
0 bizon2008
 
19.10.11
13:06
День добрый, народ.
Алгоритм стырил с учебника мисты.
Процедура ОставитьТолькоДиконтныйТовар()
 тбТовары.ВыбратьСтроки();
 Пока тбТовары.ПолучитьСтроку()=1 Цикл
   Пока (тбТовары.Товар.НетСкидки = 0) и (тбТовары.НомерСтроки<>0) Цикл
     тбТовары.УдалитьСтроку(); //следующая строка стала текущей
     Сообщить("111   " + тбТовары.Товар);
   КонецЦикла;
 КонецЦикла;
КонецПроцедуры

Получаю ошибку.
111   Яндова красный
111   Ящик сбирающийся.Размер в собранном виде 365х255х365 81004
111   Мешок строительный
111  
Пока (тбТовары.Товар.НетСкидки = 0) и (тбТовары.НомерСтроки<>0) Цикл
{Обработка.ГрупповаяПечатьЭтикеток.Форма.Модуль(603)}: Значение не представляет агрегатный объект (НетСкидки)

Грубо цикл работает и дальше.
1 zak555
 
19.10.11
13:06
удалять с конца
2 Нуф-Нуф
 
19.10.11
13:11
удаля строки сбиваешь выборку. получай строки в цикле "для". и получай строки по номеру
3 ЧеловекДуши
 
19.10.11
13:11
Удаляй без "тбТовары.ВыбратьСтроки();", а номеру строки "НомерСтроки"
И перебором по циклу.
4 Попытка1С
 
19.10.11
13:12
Для Сч = - тбТовары.КоличествоСтрок() По -1 Цикл
тбТовары.ПолучитьСтрокуПоНомеру(-Сч);
...
КонецЦикла;
5 1Сергей
 
19.10.11
13:13
Идн=1;
Пока Идн<=ТЗ.КоличествоСтрок() Цикл
   ТЗ.ПолучитьСтрокуПоНомеру(Идн);
   Если <условие> Тогда
       ТЗ.УдалитьСтроку(Идн);
   Иначе
       Идн=Идн+1;
   КонецЕсли;
КонецЦикла
6 Ахиллес
 
19.10.11
13:13
Это уже даже не смешно. Неплохо было бы ввести баны за подобные вопросы.
И, да, кстати можно ссылку на учебник, где ты там такую ахинею нашёл?
7 palpetrovich
 
19.10.11
13:15
(6) чего только в учебниках нет... :)
8 bizon2008
 
19.10.11
13:15
9 Рэйв
 
19.10.11
13:16
(6)Код работает.У него просто поля НетСкидки нет:-)
10 bizon2008
 
19.10.11
13:17
(9)Конечно, как до конца ТЗ дошли так поле и кончилось.
11 bizon2008
 
19.10.11
13:17
(5)Спасибо. Утащил этот вариант.
12 povar
 
19.10.11
13:18
(10) ...
13 Рэйв
 
19.10.11
13:19
(10)При НомереСтроки= 0 оно туда не попадет
14 Aprobator
 
19.10.11
13:19
(9) +100500.
(10) ага - как последнюю строку удалил, так и ппц.
15 ЧеловекДуши
 
19.10.11
13:19
Автор читать не умеет

//ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ !!!
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
...Если <условие> Тогда
......ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей,
...КонецЕсли;
КонецЦикла;
//ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ !!!
//ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ !!!
16 Ахиллес
 
19.10.11
13:19
(7) Ну вообще то имелся в виду http://mista.ru/tutor_1c/index.htm вот этот учебник, как я понимаю.
(8) //ЭТА ПРОГРАММА НЕПРАВИЛЬНАЯ !!!
ТабЗнач.ВыбратьСтроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
...Если <условие> Тогда
......ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей,
...КонецЕсли;
КонецЦикла;

Пипец... для тебя специально Митичкин капсом выделил и в красный цвет покрасил, что так делать нельзя, но тебе пофигу.
17 Lexxxxx
 
19.10.11
13:21
Он вроде как использовал:
А вот еще один правильный алгоритм, предложенный Wlad:

ТабЗнач.выбратьстроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
.......Пока (<условие>) и (ТабЗнач.НомерСтроки<>0) Цикл
..............ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей
.......КонецЦикла;
КонецЦикла;

а не первый вариант.
18 ЧеловекДуши
 
19.10.11
13:23
(17)А они все неправильные, это как баловаться с гранатой.
Лучше всего сделать, как в (5)
19 bizon2008
 
19.10.11
13:23
А вот еще один правильный алгоритм, предложенный Wlad:

ТабЗнач.выбратьстроки();
Пока ТабЗнач.ПолучитьСтроку()=1 Цикл
.......Пока (<условие>) и (ТабЗнач.НомерСтроки<>0) Цикл
..............ТабЗнач.УдалитьСтроку(); //следующая строка стала текущей
.......КонецЦикла;
КонецЦикла;
20 ЧеловекДуши
 
19.10.11
13:23
+(17)Можно даже без "ТЗ.ПолучитьСтрокуПоНомеру(Идн);". Так даже быстрей пойдет
21 bizon2008
 
19.10.11
13:23
(15)(16) см (16)
22 zak555
 
19.10.11
13:23
(19) удаляй с конфа - не парь мозг
23 zak555
 
19.10.11
13:24
*с конца
24 bizon2008
 
19.10.11
13:24
(15)(16) см (19)
25 Aprobator
 
19.10.11
13:24
(17) это неправильный алгоритм. После удаления последней строки в таблице, что будет с проверкой условия? Если, конечно, в условии ТабЗнач.НомерСтроки <> 0 не поставить первым подусловием.
26 bizon2008
 
19.10.11
13:24
Да ладно. Не грузитесь. Сделал как в (5).
27 ЧеловекДуши
 
19.10.11
13:24
(21)Молодец... мы читать умеем :)
28 Aprobator
 
19.10.11
13:26
+(25) т.е. сделать вот так:

Пока (ТабЗнач.НомерСтроки<>0) И (<условие>) Цикл
....

Тогда все взлетит.
29 Lexxxxx
 
19.10.11
13:26
(18) Но ведь там написано правильный! :)
Я обычно просто с конца удаляю.
30 Эльниньо
 
19.10.11
13:37
Процедура ОставитьТолькоДиконтныйТовар()
 тбТовары.ВыбратьСтроки();
 Пока тбТовары.ПолучитьСтроку()=1 Цикл
   Пока (тбТовары.НомерСтроки<>0) и (тбТовары.Товар.НетСкидки = 0) Цикл
     тбТовары.УдалитьСтроку(); //следующая строка стала текущей
   КонецЦикла;
 КонецЦикла;
КонецПроцедуры
31 Cthulhu
 
19.10.11
13:40
тбТовары.УдалитьСтроку(); //следующая строка стала текущей - ОПА. Или никакая - если удалена последняя.
Если тбТовары.НомерСтроки=0 Тогда Прервать КонецЕсли; // добавь это и алё.
Сообщить("111   " + тбТовары.Товар);
32 bizon2008
 
19.10.11
13:45
(30)Кто близок к автору. Скажите в учебнике ошибку нашли.
33 Эльниньо
 
19.10.11
13:52
(32) Нехрен мой алгоритм печатать в учебниках без моего согласия.
34 Cthulhu
 
19.10.11
13:53
(33): обломись-ка.
алгоритмы не могут являться объектом авторского права.
35 Эльниньо
 
19.10.11
13:55
(33) Да шучу я. Просто приятно, когда твои креативы в учебниках появляются.
36 Irbis
 
19.10.11
13:57
Опять? Это же Сузуки в 7.7
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс