|
Как удалить строку в табличной части документа? | ☑ | ||
---|---|---|---|---|
0
ded20ded
16.08.13
✎
13:16
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
//Услуги=Объект.Услуги; ВыборкаДокументов = Документы.РеализацияТоваровУслуг.Выбрать(НачалоГода(ТекущаяДата()), КонецГода(ТекущаяДата())); Пока ВыборкаДокументов.Следующий() Цикл Объект = ВыборкаДокументов.ПолучитьОбъект(); Товары = Объект.Товары; Услуги=Объект.Услуги; Для каждого строка из Услуги Цикл Если Строка.Номенклатура.Услуга = 0 Тогда НоваяСтрока=Товары.Добавить(); НоваяСтрока.Номенклатура=Строка.Номенклатура; НоваяСтрока.Количество=Строка.Количество; НоваяСтрока.ЕдиницаИзмерения=Строка.Номенклатура.БазоваяЕдиницаИзмерения; НоваяСтрока.Цена=Строка.Цена; НоваяСтрока.Сумма=Строка.Сумма; НоваяСтрока.СтавкаНДС=Строка.СтавкаНДС; НоваяСтрока.СуммаНДС=Строка.СуммаНДС; НоваяСтрока.СчетУчета=ПланыСчетов.Хозрасчетный.ТоварыНаСкладах; НоваяСтрока.СчетДоходов=ПланыСчетов.Хозрасчетный.ВыручкаНеЕНВД; НоваяСтрока.СчетРасходов=ПланыСчетов.Хозрасчетный.СебестоимостьПродажНеЕНВД; НоваяСтрока.СчетУчетаНДСПоРеализации=ПланыСчетов.Хозрасчетный.Продажи_НДС; //Как правильно удалить перенесенную строку из одной табличной части в другую? //Строка.Удалить(); Сообщить("Товар - "+Строка.Номенклатура); КонецЕсли; Сообщить("Услуга - "+Строка.Номенклатура); КонецЦикла; Сообщить(" Док - "+ВыборкаДокументов); Объект.Записать(); КонецЦикла; КонецПроцедуры |
|||
1
Wobland
16.08.13
✎
13:17
|
ТЧ.Удалить(СтрокаТЧ)
|
|||
2
RomaH
naïve
16.08.13
✎
13:17
|
добавить строки к удалению в массив
потом удалить обходом массива |
|||
3
Besometr
16.08.13
✎
13:40
|
(2) Или обходить табличную часть с конца:
КолВо = Услуги.Количество(); Для i = 1 По КолВо Цикл Если Услуги[Колво - i].Номенклатура.Услуга = 0 Тогда Услуги.Удалить(Услуги[Колво - i]) КонецЕсли; КонецЦикла |
|||
4
Kvitok8320
27.08.13
✎
11:24
|
(3) Подскажите пожалуйста, а в примере в квадратных скобках это индекс строки?
|
|||
5
Wobland
27.08.13
✎
11:26
|
(4) да
|
|||
6
olegves
27.08.13
✎
11:32
|
(2) это верняк
|
|||
7
Kvitok8320
27.08.13
✎
13:50
|
Пробую сделать вот так
&НаСервере Процедура УдалитьЛишнееСервер() NNN=объект.ТабличнаяЧасть1.Количество(); Для й=1 по NNN цикл строка=объект.ТабличнаяЧасть1[й]; если значениезаполнено(строка.счет)=ложь тогда объект.ТабличнаяЧасть1.Удалить(объект.ТабличнаяЧасть1[й]); й=й-1; конецесли; NNN=объект.ТабличнаяЧасть1.Количество(); конеццикла; КонецПроцедуры почему то на последней строке ругается: Индекс находится за границами массива! никак не могу понять - вроде номер последней строки равен количеству строк в последнем варианте табличной части - что не так-то? |
|||
8
Starhan
27.08.13
✎
13:52
|
(7)>>вроде номер последней строки равен количеству строк
не вроде... совсем нет. |
|||
9
Maxus43
27.08.13
✎
13:52
|
Найди отличия...
(3) Услуги.Удалить(Услуги[Колво - i]) (7) объект.ТабличнаяЧасть1.Удалить(объект.ТабличнаяЧасть1[й]); |
|||
10
Maxus43
27.08.13
✎
13:53
|
+ в условии также, (колво - й)
|
|||
11
Kvitok8320
27.08.13
✎
14:03
|
(8) Изначально в документе было 1069 строк - постепенно оно становится меньше - в последнем варианте у меня 453 строки и на таком же индексе вылетает....
(9) я так понял - что там обратный обход идет - поэтому и схема слегка разная. Если не разберусь, почему мой вариант не работает - конечно этим воспользуюсь хотя да - не буду терять время |
|||
12
Starhan
27.08.13
✎
14:05
|
(11)>> я так понял - что там обратный обход идет - поэтому и схема слегка разная. Если не разберусь,
Сразу видно 1с твой первый язык... Индекс (номер строки) Начинаетя с ноля. Поэтому строчек 1на а номер строки = 0, то есть никогда не будут они одинаковыми. |
|||
13
Wobland
27.08.13
✎
14:05
|
(11) ты уже сам понял, почему твой вариант не работает
|
|||
14
Kvitok8320
27.08.13
✎
14:08
|
(12) ну да, я слегка аудитор по профессии ....
|
|||
15
Maxus43
27.08.13
✎
14:22
|
(14) логику никто не отменял. При удалении строк надо идти с конца, а не сначала. Ибо когда удалишь одну строку, то их будет не 10, а 9, и идя сначала ты сбиваешь нумерацию строк, в итоге удалишь не то + выйдешь за границы
|
|||
16
Kvitok8320
27.08.13
✎
17:24
|
ну да, вот поэтому я и назначил переменную NNN и изменял ее по мере удаления строк .... правда при достижении ее значения процесс не остановился ....
хотя и так все работает .... сообщили что индекс превышен, нажал ОК и все довольны :) но в целом я вас понял, спасибо! |
|||
17
Kvitok8320
27.08.13
✎
17:45
|
а вот это работает без вопросов (и без обратного порядка) - ну вдруг кому любопытно ...
&НаСервере Процедура УдалитьЛишнееСервер() ~заново: NNN=объект.ТабличнаяЧасть1.Количество(); NNNN=NNN-1; Для й=0 по (NNNN) цикл строка=объект.ТабличнаяЧасть1[й]; если значениезаполнено(строка.счет)=ложь тогда объект.ТабличнаяЧасть1.Удалить(объект.ТабличнаяЧасть1[й]); й=й-1; перейти ~заново; конецесли; конеццикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |