Имя: Пароль:
1C
1С v8
Удаление строк из тч документа
0 Простенький вопросик
 
20.12.11
09:19
написал такой код. вроде не работает. как правильно удаляется строка?

Процедура КнопкаВыполнитьНажатие(Кнопка)
   док= этотобъект.Реквизит1.ПолучитьОбъект();
для каждого стр из док.Товары цикл
Если не стр.Количество > 0 тогда
 стр.удалить();
конецесли;
конеццикла;
КонецПроцедуры
1 Ursus maritimus
 
20.12.11
09:20
док.Товары.Очистить()
2 Простенький вопросик
 
20.12.11
09:21
(1)
мне не все надо, а только строку по условию. Эта команда только строку удалит?
3 Stim213
 
20.12.11
09:22
за такой код нужно бить линейкой по пальцам
4 Stim213
 
20.12.11
09:23
Листинг 3.75. Удаление строк с нулевым количеством
СтруктураДляПоиска = Новый Структура("Количество", 0);

ОбъектДок = СсылкаДок.ПолучитьОбъект();
ТабличнаяЧастьДок = ОбъектДок.Товары;

МассивПустыхСтрок = ТабличнаяЧастьДок.НайтиСтроки(СтруктураДляПоиска);

Для каждого Строка Из МассивПустыхСтрок Цикл
   ТабличнаяЧастьДок.Удалить(Строка);
   
КонецЦикла;

ОбъектДок.Записать();
5 Простенький вопросик
 
20.12.11
09:23
(3)
ну так скажи код, за который не нужно бить
6 Ненавижу 1С
 
гуру
20.12.11
09:23
(0) ЧТО ЭТО?
7 Lama12
 
20.12.11
09:25
(0) Объект не записывается.
Но сделано криво.
В (4) Хороший пример.
8 Простенький вопросик
 
20.12.11
09:39
(4)
Эта структура вроде только конкретные значения отбирает, вроде количество =0. А как сделать,  отобралось количество >0?. Кстати при удалении фича есть, что если удаляется строка, курсор перескакивает через следующую. При этой конструкции такая фича не сработает?
9 Scooter
 
20.12.11
09:40
(0)классика жанра
(4)+ еще обратный перебор есть
10 Scooter
 
20.12.11
09:41
(8)построителем отбери нужные строки и удаляй по индексу в обратной последовательности
11 Starhan
 
20.12.11
09:42
(8) Ничего не перескакивает. У тя индекс при удалении одной строки у всех следующей за ней смещается на единицу назад.
12 Pasha_mix
 
20.12.11
09:50
Процедура КнопкаВыполнитьНажатие(Кнопка)
   док= этотобъект.Реквизит1.ПолучитьОбъект();
МассивПустыхСтрок = Новый массив();
для каждого стр из док.Товары цикл
Если не стр.Количество > 0 тогда
 МассивПустыхСтрок.Добавить(стр);
конецесли;
для каждого стрМассива из МассивПустыхСтрок цикл

 док.Товары.удалить(стрМассива );

конеццикла;
КонецПроцедуры

Я так обычно делаю
13 Pasha_mix
 
20.12.11
09:51
Хотя
док= этотобъект.Реквизит1.ПолучитьОбъект();
- это лишнее. Ты и так в объекте. Просто обращайся сразу к товарам.
14 Простенький вопросик
 
20.12.11
09:52
в общем я по своему сделал и у меня все работает

Процедура КнопкаВыполнитьНажатие(Кнопка)
   док= этотобъект.Реквизит1.ПолучитьОбъект();
колстр=док.Товары.Количество()-1;
й= колстр;
Пока й>0 цикл
Если не док.Товары[й].Количество > 0 тогда
 док.Товары.удалить(док.Товары[й]);
конецесли;
й=й-1;
конеццикла;
док.Записать();
КонецПроцедуры
15 hhhh
 
20.12.11
09:58
(14) этот твой свой способ 757 раз уже описан в яндексе.
16 Простенький вопросик
 
20.12.11
10:01
(15)
не совсем. у меня там одна ошибка. "Пока й>0 цикл" надо поменять на "Пока й>=0 цикл"
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший