Удаление строк табличной части по условию

1. Mars2006 16.09.15 16:48 Сейчас в теме
Подскажите как реализовать в 1С77
Процедуру удаления строк табличной части по условию, например удалить товары у которых цена меньше 100?
Нужно всё это делать в форме документа.
Заранее спасибо.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
33. Allexe8.1 06.12.15 00:41 Сейчас в теме
(1) Mars2006, в чем проблема?
Подсказка - обходить таблицу нужно с последней строки.
user682948_rusmaxval; user1092520; +2 Ответить
78. nikk911 14.05.18 01:27 Сейчас в теме
В 2 цикла: в первом цикле получаешь список с номерами строк которые удовлетворяют твоему условию, потом сортируешь список по убыванию и вторым циклом получаешь номера строк из цикла и удаляешь их.

Процедура УдалитьЛишниеСтроки()
	спиСтр = создатьобъект("списокзначений");
	выбратьстроки();
	пока получитьстроку() = 1 цикл
		если ценасндс<100 тогда
			спиСтр.добавитьзначение(номерстроки);
		конецесли;		
	конеццикла;
	
	спиСтр.сортировать(1);
	для йй = 1 по СпиСтр.размерСписка() цикл
		номстр = СпиСтр.получитьзначение(йй);
		ПолучитьСтрокуПоНомеру(номстр);
		удалитьстроку();		
	конеццикла;
	
КонецПроцедуры	
Показать
80. vika64 75 24.12.21 13:08 Сейчас в теме
(78) спасибо большое, пригодилось
81. CheBurator 2712 24.12.21 13:15 Сейчас в теме
(80) правильный ответ в (33)
2. Frogger1971 16.09.15 16:54 Сейчас в теме
Выгружаешь табличную часть в ТЗ, удаляешь нужные строки, загружаешь обратно в документ
79. пользователь 18.01.21 18:50
Сообщение было скрыто модератором.
...
3. Mars2006 16.09.15 16:59 Сейчас в теме
Видимо так и придётся делать,
И обратно загрузить тоже одной командой ?
4. Зеленоград 16.09.15 17:03 Сейчас в теме
(3) Mars2006, ну, можно двумя. Предварительной и исполнительной.

Покажешь код - подскажут. Не покажешь - будут дразнить.
5. Mars2006 16.09.15 17:07 Сейчас в теме
(4) Зеленоград,
Показать кода какой?
всей формы?

ТЧ=СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТЧ);
ТЧ.ВыбратьСтроки();
Пока ТЧ.ПолучитьСтроку()=1 Цикл
Если ТЧ.КомплектПластикаНабора.Вид<>Пластик_кт Тогда
ТЧ.УдалитьСтроку();
КонецЕсли;
КонецЦикла;
УдалитьСтроки();
ЗагрузитьТабличнуюЧасть(ТЧ);
8. Frogger1971 16.09.15 17:10 Сейчас в теме
(5) Mars2006, теряешь позиционирование,
Пока ТЧ.ПолучитьСтроку()=1 Цикл
ТЧ.УдалитьСтроку(); 


нужно по-другому

    Сч = 0;
    Пока Сч < ТЗ.Количество() Цикл
      СтрокаТЗ = ТЗ.Получить(Сч);
      Если СтрокаТЗ.КомплектПластикаНабора.Вид<>Пластик_кт Тогда
          ТЗ.Удалить(Сч);
      Иначе
          Сч = Сч + 1;
      КонецЕсли;
    КонецЦикла;
Показать
Vida; romulanin; TManukovskaya; Babylka; user728106; GOshaSaveiko; izidakg; корум; inanity; MaxDavid; +10 Ответить
10. Mars2006 16.09.15 17:37 Сейчас в теме
(8) Frogger1971,
ТЗ.Получить(Сч); Получить такой нет функции в 1С77
ТЗ.Количество() на количество тоже ругается наверно Количество Строк()
66. Peka2 09.11.16 00:37 Сейчас в теме
6. Mars2006 16.09.15 17:08 Сейчас в теме
Но не работает так корректно, почему то не всё удаляет
7. binex 279 16.09.15 17:10 Сейчас в теме
Юзай на здоровье!


Процедура НаложитьФильтр() 
	ИмяКолонки = ТЗЗаявки.ТекущаяКолонка();
	ЗначениеФильтра = ТЗЗаявки.ПолучитьЗначение(ТЗЗаявки.ТекущаяСтрока(),ИмяКолонки);

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

	ТекстФильтр = "ФИЛЬТР";
КонецПроцедуры	// НаложитьФильтр
Показать
9. binex 279 16.09.15 17:15 Сейчас в теме
+ (7) Не выгружая в ТЗ. Считай ТЗЗаявки - это твой документ.
11. AndKovalchuk 195 16.09.15 17:50 Сейчас в теме
Да. Похоже текст из 8-ки. Может проще


ВыгрузитьТабличнуюЧасть(ТЧ);

ТЧ.ВыбратьСтроки();
УдалитьСтроки(); //очищаем табличную часть документа
Пока ТЧ.ПолучитьСтроку()=1 Цикл
 Если ТЧ.КомплектПластикаНабора.Вид=Пластик_кт Тогда
      //а здесь переносить в документ нужную строку
      НоваяСтрока();
      РеквизитДокумента=ТЧ.РеквизитДокумента;
      ...
 КонецЕсли;
КонецЦикла; 

Показать
12. Dnki 4 16.09.15 18:39 Сейчас в теме
Тема удаления строк что с таблицы значений, что с табл. части неделю назад обсуждалась, но не нашел.
Суть алгоритмов:
1) переписать во временную нужные строки, потом вернуть в документ
2) удалять строки циклом с конца.
Allexe8.1; +1 Ответить
13. falcon 16.09.15 19:01 Сейчас в теме
(12) она раз в квартал обсуждается уже лет 20 как... как программист может не уметь пользоваться поиском... не понимаю...
гыук320; +1 Ответить
17. sanek_kop 15 17.09.15 15:49 Сейчас в теме
(13) falcon,
Тут вопрос еще в том, как программист не умеет пользоваться удалением строк из Таблицы (массива, списка и т.д.). Это школьная задачка, как замена двух переменных без использования третей.
корум; MaxDavid; +2 Ответить
19. vcv 89 21.09.15 07:26 Сейчас в теме
(17) sanek_kop,
<троллинг ON>
Это школьная задачка, как замена двух переменных без использования третей

Ну... Эта "школьная задачка" проста только в школьной абстрактно-теоретической формулировке. На сообразительность.
Задача удаления строк из таблицы попроще и имеет меньше подводных камней :)
18. CheBurator 2712 21.09.15 01:05 Сейчас в теме
(13) это не программисты
Это какие-то грабители корованов
Я понимаю когда находишься в идейном тупняке и не можешь найти и просишь подсказку
Но когда полностью отсутствует абстрактное мышление и способность проиграть на примерах - это клиника, окостенение мозга, лечится трудно и длительно
Да и то только при горячем содействии самого болящего
14. Mars2006 17.09.15 10:50 Сейчас в теме
пытаюсь удалить строки с конца

Сч = КоличествоСтрок();
Пока Сч > 0 Цикл
// СтрокаТЗ = ТЧ.ПолучитьЗначение(Сч);
АктивизироватьСтроку(Сч);
Если КомплектПластикаНабора.Вид<>Пластик_кт Тогда
УдалитьСтроку();
КонецЕсли;
Сч = Сч - 1;
КонецЦикла;

не работает активизироватьстроку
15. Frogger1971 17.09.15 11:02 Сейчас в теме
(14) Mars2006,
Замечание:
Метод доступен только в Модуле формы документа и работает с документом доступным в локальном контексте.
16. sanek_kop 15 17.09.15 15:45 Сейчас в теме
Удалять строки из таблицы лучше не стоит. Для этих целей, как говорилось выше, лучше переносить данные в другую таблицу и ее потом уже загружать. На больших объемах таблицы будет значительно быстрее. Да и код будет более "читабельный".
20. imax26 91 23.09.15 09:47 Сейчас в теме
Не работает, потому что после удаления строки выборка нарушается.
Общий алгоритм таков :

Док.ВыбратьСтроки();

пока Док.ПолучитьСтроку()=1
Цикл

Если <условие>
Тогда
Док.УдалитьСтроку();
Док.ВыбратьСтроки(); //Вот эта строка важна ! Чтобы по-новой софрмировать выборку.
КонецЕсли;

КонецЦикла;
21. Shreki2015 2 01.10.15 22:51 Сейчас в теме
(20) imax26, да да. именно так.
после удаления происходит сдвиг позиционирования. обжигался об это очень давно.
бывает проще организовать 2 таблицы значения.
из одной берешь, в другую записываешь нужное. из другой потом в таблицу документа грузишь
23. kiser 01.12.15 17:41 Сейчас в теме
(20) imax26, если строк не много то можно и каждый раз выбирать сначала, но лучше идти подряд но не терять позицию:
НомСтроки = 1;
Пока НомСтроки <= Док.КоличествоСтрок() Цикл
	Док.ПолучитьСтрокуПоНомеру(НомСтроки);
	Если <Условие> Тогда
		Док.УдалитьСтроку();
	Иначе
		НомСтроки = НомСтроки + 1;
	КонецЕсли;
	Если НомСтроки > Док.КоличествоСтрок() Тогда	//на тот случай, если удалили все строки
		Прервать;
	КонецЕсли;
КонецЦикла;
Показать
24. LadyMara 02.12.15 08:26 Сейчас в теме
(23) kiser, (14) Mars2006, лучше действительно удалять строки с конца, чтобы не заморачиваться со сдвигом нумерации:
НомСтроки = Док.КоличествоСтрок();
Пока НомСтроки > 0 Цикл
    Док.ПолучитьСтрокуПоНомеру(НомСтроки);
    Если <УСЛОВИЕ> Тогда
        Док.УдалитьСтроку();
    КонецЕсли;
    НомСтроки = НомСтроки - 1;
КонецЦикла;
Показать

Проверено, работает.
spaler; A1WEB; корум; Чародей; Sanario; +5 Ответить
25. kiser 03.12.15 09:58 Сейчас в теме
(24) LadyMara, вы правы, этот способ и лучше и проще
22. Иваныч 23 30.11.15 16:39 Сейчас в теме
Особенно в документе "Ввод остатков" пустые строки удалять хорошо, после свертки базы
26. falcon 03.12.15 22:09 Сейчас в теме
не мое
ТЗ.Выбратьстроки(); 
Пока ТЗ.ПолучитьСтроку()=1 Цикл 
Пока (<условие>) и (ТЗ.НомерСтроки<>0) Цикл 
ТЗ.УдалитьСтроку(); 
КонецЦикла; 
КонецЦикла; 
27. LadyMara 05.12.15 09:17 Сейчас в теме
(26)falcon, и, наверно, не проверяли? Работать будет так же некорректно, как и в (5) - потеря позиционирования. Дело в том, что с точки зрения позиционирования ТЗ.УдалитьСтроку() срабатывает так же, как и ТЗ.ПолучитьСтроку(), поэтому происходит пропуск непроверенных строк. (Так что, пожалуй, не стОит так категорично: (13) )
28. falcon 05.12.15 10:50 Сейчас в теме
(27) LadyMara,

если у тебя не работает, то что работает у других, то варианта два...
или руки выпрямлять, или что-то в ДНК...

ну а если еще и (13) смущает, то это точно второй вариант...
29. LadyMara 05.12.15 21:30 Сейчас в теме
(28) falcon, переходить на личности и оскорблять - некорректно.
31. falcon 06.12.15 00:23 Сейчас в теме
(29) ок, как назвать человека который не умеет пользоваться поиском и не может выданный готовый код адаптировать под себя?

(30) внимательно читать (26) можно раза три.. если и после это будет опрометчиво, завязывать с программированием.
34. spacecraft 06.12.15 01:07 Сейчас в теме
(31) falcon, если не дошло с первого раза, то дам подсказку. Ваш код (точнее даже не ваш) работает в определенных ограниченных условиях. Следовательно такой код не стабилен. Использовать не стабильный код не желательно. Тем более когда есть хороший стабильный проверенный временем (обход таблицы с конца).
Завязывайте с программированием.
35. falcon 06.12.15 10:46 Сейчас в теме
(34) spacecraft,

а теперь подумай, почему он работает у других, и не работает у тебя...
36. vcv 89 06.12.15 12:24 Сейчас в теме
(35) falcon, Вопрос не в том, что код работает, а в том, что он - плохое решение. Он пользуется нигде не документированными особенностями работы выборки из таблицы значений. Ладно в 7.7, когда платформа уже умерла и не развивается. Есть надежда, что подобный код будет работать на любой базе 7.7. Хотя, боюсь, ни кто не даст гарантии работоспособности подобного кода, если вдруг встретится что-то архаичное типа 19 релиза платформы.
Подобный код является ненадёжным, плохо читаемым и, соответственно, не рекомендуемым к использованию.
Если бы я увидел подобное извращение на 1с8, сразу бы канделябром по пальцам. Потому что ни кто не может обещать, что подобные извраты не приведут к глюкам на какой-нибудь версии платформы 8.3.8.
И даже касательно 7.7. Например. Вот вы сделали подобный код. Он часть какой-нибудь процедуры. Много развивался, дополнялся. И в один прекрасный момент в процедуру кроме стандартных таблиц значений стало можно передавать индексированную таблицу. Со всеми её наворотами - индексами, фильтрами... Вы уверены, что не словите труднодиагностируемых проблем?
Sanario; Cooler; +2 Ответить
38. falcon 06.12.15 19:27 Сейчас в теме
(36) vcv,
давай не передергивай, спор всего лишь про то, работает код в (26) или нет, два "специалиста" утверждают, что - нет, я утверждаю что вполне работает, просто у них кривые руки адаптировать этот код под себя

вопрос где, кто и как его использует - зависит от контекста задачи и никак не влияет на его работоспособность.

и это далеко не единственный вариант удаления строк по условию....
37. spacecraft 06.12.15 12:41 Сейчас в теме
(35) falcon, если снова не дошло, то дам последнюю подсказку. Попробуйте этим кодом решить следующую задачу:
Удалить из ТЗ все строки кроме каждой 6 и 7.

И за всех говорить не стоит. Вы не все.
39. falcon 06.12.15 19:40 Сейчас в теме
(37) подсказчик, если руки кривые не позорься...

Было: 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

Удаляем все кроме кратных 6 И 7
6
7
12
14
18
21
24
28
30
Показать


какие там еще у тебя условия не получается сделать? говорю же... не в коде дело, а в том, кто его использует...
40. vcv 89 06.12.15 19:50 Сейчас в теме
(39) falcon,
какие там еще у тебя условия не получается сделать

Намекнули же в (30). Если в фильтрации строк присутствует условие от ТЗ.НомерСтроки. При удалении сначала в конец номера строк меняются. Пример вполне реальный. У меня, например, в конфигурации есть таблица значений при приходовании ТМЦ с доп.расходами. Там в каждой нечетной строке ТМЦ, а в каждой четной - сумма доп.расходов на неё.
41. falcon 06.12.15 20:06 Сейчас в теме
(40) во первых в (30) нет никаких намеков на НомерСтроки, есть просто неумение воткнуть нужное условие в правильное место, не более того...

во вторых, ты не поверишь и твой вопрос вполне решается кодом из (26) т.к. все приведенные тут примеры, никаким боком не относятся к коду из (26), вы зацикливаетесь на каких то бредовых комбинациях условий, при этом абсолютно не отдавая себе отчет, в том, что смысл не в условии, любое условие из обратного перебора, с легкостью ляжет на код из (26), т.к. задача условия вернуть Истина/ложь и плевать по какому алгоритму оно будет получаться....
печально то, что такие элементарные вещи нужно разжевывать до нЕльзя
И уже ни в какие ворота ни лезет, выкрики некоторых "специалистов", которые из шаблона:
Пока (<условие>) и (ТЗ.НомерСтроки<>0) Цикл 

рожают:
Пока ((Условие = ТЗ.Номер/2) и (ТЗ.НомерСтроки<>0)) Или (ТЗ.Номер = 5) Цикл 

с пеной у рта доказывая, что шаблон не верный )))
46. vcv 89 06.12.15 20:40 Сейчас в теме
(41) falcon, Предположим, что условие удаления выглядит так:
Если (ТЗ.Сумма < 0) И (ТЗ.НомерСтроки % 2 = 0) Тогда

При обратном переборе понятие четная/нечетная строка, определяемая условием (ТЗ.НомерСтроки % 2 = 0) работает корректно. При прямом переборе оно будет работать с ошибками.
И хорошо, если цикл удаления строк компактен, и его, в случае чего, успешно перепишут. А если он на экран не влазит, да еще код не ваш? Когда заметите проблему?
Код в (26) плохой. Не потому что работает или не работает. Когда код плох, неважно, что он работает, его нужно пустить под реинжиниринг. И не надо подобное советовать в форумах. Не нужно учить людей плохому.
47. falcon 06.12.15 20:56 Сейчас в теме
(46) а при сортировке по другой колонке, вообще не отработает и что?
код в (26) работает, точка.

а реинжинирингу надо подвергать решения удалять по НомеруСтроки и тут я с тобой согласен на 100%.. не надо учить людей плохому.
48. spacecraft 06.12.15 20:57 Сейчас в теме
(39) falcon, где код? Хотя и так понятно, что использовали колонку номер. Но ее нет в реальной таблице. Это называется костыль. Мало того, нужен еще один костыль, чтоб удалить не нужную колонку. В общем ваш уровень программирования и так понятен.
Я бы еще понял, если бы этот код значительно оптимизировал выполнение, но он же еще более затратный.
49. falcon 06.12.15 21:02 Сейчас в теме
(48) и снова пук в лужу...
Использовать в условии номерстроки это к vcv я такими вещами не пользуюсь.
Даже после того как тебя ткнули носом в твою ошибку ты, вместо того, чтобы понять свою ошибку исправит ее и убедиться, что не прав, продолжаешь как баран гнуть свою линию.... показательно....
50. spacecraft 06.12.15 21:08 Сейчас в теме
(49) falcon, я так понимаю кода не будет? Очень показательно. Ничего не понять, но всех оскорбить.
52. falcon 06.12.15 21:15 Сейчас в теме
(50) ого.... ты это "все" что-ли? не льсти себе )))

кода не будет, ибо во-первых, шаблон кода указан в (26), любой более-менее грамотный специалист на основе его создаст нужный ему код, я тебе даже больше скажу, код из (26) почти 1 в 1 как у меня в обработке, отличается только вот этим: "<условие>"

во-вторых тебе несколько раз указали на твою ошибку, если тебе не хватает ума понять, что надо исправить, чем тебе поможет мой код? исправь свою ошибку и мой код не нужен будет ибо твой заработает, но для этого надо руки прямые и голову на плечах иметь....
54. spacecraft 06.12.15 21:19 Сейчас в теме
(52) falcon, что и требовалось доказать. Кода нет, а апломба много. Как там было в (28) ?
55. falcon 06.12.15 21:21 Сейчас в теме
(54) на тебе подсказку...

СтрДлина("<Условие>") = СтрДлина("То чем отличается код из (26) в моей обработке")....


))))
56. spacecraft 06.12.15 21:25 Сейчас в теме
(55) falcon, продолжайте, не стесняйтесь.
57. falcon 06.12.15 21:27 Сейчас в теме
(56) а чего мне стесняться? ты тупишь - это твой выбор )))
58. spacecraft 06.12.15 21:30 Сейчас в теме
(57) falcon, у вас есть код, но его не покажите. Правильно?
Смахивает на манию величия или шизофрению. Надеюсь не второе.
30. spacecraft 05.12.15 22:19 Сейчас в теме
(28) falcon, очень опрометчиво.
Что бы не быть голословным:
ТЗ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ.НоваяКолонка("Номер");
	Для ш=1 По 10 Цикл
		ТЗ.НоваяСтрока();
		ТЗ.Номер = ш;
	КонецЦикла;
	ТЗ.Выбратьстроки(); 
	Пока ТЗ.ПолучитьСтроку()=1 Цикл
		Условие = Цел(ТЗ.Номер/2);
		Пока ((Условие = ТЗ.Номер/2) и (ТЗ.НомерСтроки<>0)) Или (ТЗ.Номер = 5) Цикл 
			ТЗ.УдалитьСтроку(); 
		КонецЦикла; 
	КонецЦикла;
	ТЗ.Выбратьстроки();
	Пока ТЗ.ПолучитьСтроку() = 1 Цикл
		Сообщить("Номер = "+ТЗ.Номер);
	КонецЦикла;
Показать

Вот листинг результата:
Номер = 1
Номер = 3
Номер = 6
Номер = 7
Номер = 9
32. falcon 06.12.15 00:24 Сейчас в теме
(30)
на тебе результат твоего кода написанного прямыми руками:
Было: 
1
2
3
4
5
6
7
8
9
10

Удаляем кратное 2, И ЕЩЕ 5
Стало: 
1
3
7
9
Показать
42. YNik 06.12.15 20:14 Сейчас в теме
В (30) неправильно записано условие, вместо:
        Условие = Цел(ТЗ.Номер/2);
        Пока ((Условие = ТЗ.Номер/2) и (ТЗ.НомерСтроки<>0)) Или (ТЗ.Номер = 5) Цикл 

надо писать:
        Пока ((Цел(ТЗ.Номер/2) = ТЗ.Номер/2) и (ТЗ.НомерСтроки<>0)) Или (ТЗ.Номер = 5) Цикл 

а еще лучше проверку на четность записать как (ТЗ.Номер%2 = 0)
43. falcon 06.12.15 20:26 Сейчас в теме
(42) YNik,
а что принципиально изменилось? ))))
44. YNik 06.12.15 20:31 Сейчас в теме
(43) falcon, переменная Условие вычисляется один раз перед циклом и в цикле не меняется, поэтому и срабатывает неправильно.
45. falcon 06.12.15 20:35 Сейчас в теме
(44) YNik,
а.. ну да, замотали под вечер меня своими условиями )))
51. spacecraft 06.12.15 21:12 Сейчас в теме
(42) YNik, я как бы знаю. Это пример краш-теста предложенного кода. Цель: показать, что код не стабильный.
53. falcon 06.12.15 21:16 Сейчас в теме
(51) смешной.... " Цель: показать, что код не стабильный." - ты руки выпрями и код сразу стабильным станет ))))
59. Cooler 22 06.12.15 21:49 Сейчас в теме
Мое мнение: возможно, код в (26) и 100% рабочий. То есть, работает при любых условиях, что не проверено.

Возможно, что нерабочий - т.е. можно найти условие, при котором он сработает некорректно. Что пока не доказано.

Но в любом случае, код непрозрачный, и программиста, который любит "украшать" свои творения такими перлами, лучше гнать из команды ссаной тряпкой. Ибо случись что - найдется ли еще хоть один умелец, способный разгребать такой геникод?

Так что "просто бизнес, ничего личного", пусть идет и основывает свою собственную фирму, "FalconSoft" какой-нить. Взлетит - снимем шляпы, нет - пусть возвращается на зарплату, сменив стиль программирования.
60. Shreki2015 2 09.12.15 13:06 Сейчас в теме
впишу и свои 5коп
всегда при удалении строк таблицы значений делал перезапись НУЖНЫХ элементов в другую таблицу значений
и нагляднее и видно что было и что стало.
ну и контрольки можно делать по количеству записей и суммы ДО и ПОСЛЕ
61. PythonJ 117 15.02.16 12:35 Сейчас в теме
Вот так прекрасно работает

	тблЗнач.ВыбратьСтроки();
	Пока тблЗнач.ПолучитьСтроку() = 1 Цикл
		Пока НЕ (<Условие>) Цикл
			тблЗнач.УдалитьСтроку();
			Если тблЗнач.НомерСтроки = 0 Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
Показать
62. BotMan4 15 16.02.16 09:33 Сейчас в теме
(61) PythonJ, Смахивает на пост 26 , нет? )
63. PythonJ 117 16.02.16 09:59 Сейчас в теме
(62) botman4, Смахивает, но, как говорится, есть нюанс.
Пока (<условие>) и (ТЗ.НомерСтроки<>0) Цикл 

Вторая часть условия не имеет смысла, поскольку условие накладывается на значение из строки. При НомерСтроки = 0, то есть при отсутствии позиционирования, проверка условия сразу даст исключение. Так что такая конструкция сбойнет, если придется удалить последнюю строку таблицы.
64. falcon 16.02.16 11:24 Сейчас в теме
(63) PythonJ,
откуда же вы такие специалисты беретесь.....

При НомерСтроки = 0, то есть при отсутствии позиционирования, проверка условия сразу даст исключение ЛОЖЬ, т.к. 0 <> 0 - есть ложь.
и ес-сно такая конструкция не сбойнет при удалении любой строки, в том числе и последней.
65. PythonJ 117 16.02.16 13:23 Сейчас в теме
(64) falcon,
Мда, верно. Перестраховался исходя из того, что ТЗ.ИмяПоля даст исключение при ТЗ.НомерСтроки = 0. Здесь вам не си ))
67. milolan 4 04.04.17 19:02 Сейчас в теме
Давно сталкивался с такой задачей, в прочих языках программирования есть оператор Downto. а в 1С 7.7 возможно два варианта:

КолВо = КоличествоСтрок();
Для Н=-КолВо по -1 цикл
ПолучитьСтрокуПоНомеру(-Н);
Если <Условие> тогда
УдалитьСтроку();
КонецЕсли;
КонецЦикла;
////********Второй вариант*************************
КолВо = КоличествоСтрок();
Для Н=0 по КолВо-1 Цикл
ПолучитьСтрокуПоНомеру(КолВо-Н);
Если <Условие> тогда
УдалитьСтроку();
КонецЕсли;
КонецЦикла;
Т.е. перебираем строки от последней к первой, и удаляем в этом же порядке.
68. imax26 91 24.04.17 09:15 Сейчас в теме
Док = СоздатьОБъект("Документ.НужныйВид);
Док.Найти(...);

док.ВыбратьСтроки();
пока ПОлучитьСтроку()=1
Цикл

   Если Условие Тогда
             Док.УдалитьСтроку();
             Док.ВыбратьСтроки();
   КонецЕсли;



КонецЦИкла;
Показать
69. CheBurator 2712 24.04.17 15:15 Сейчас в теме
Если Уhttp://infostart.ru/profile/edit/словие Тогда
       Док.УдалитьСтроку();
       Если Док.НомерСтроки=1 Тогда
             Док.ВыбратьСтроки();
      Иначе
             Док.ПолучитьСтрокуПоНомеру(Док.НомерСтроки-1);
      КонецЕсли;
   КонецЕсли;
70. imax26 91 25.04.17 06:06 Сейчас в теме
Круто, только работать это не будет.
Так как количество строк после удаления уменишится и оператор ПолучитьСтрокуПоНомеру(КолВо-Н); выдаст ошибку
71. IvanovAV 142 04.08.17 19:36 Сейчас в теме
Для ин=-КоличествоСтрок() По -1 Цикл
		ПолучитьСтрокуПоНомеру(-ин);
		Если Товар.МинимальнаяЗакупка> Количество Тогда
			УдалитьСтроку();   
		КонецЕсли;	
	КонецЦикла;
72. Team leader 12 06.05.18 12:45 Сейчас в теме
Если нужно удалить строки в Документе "Операция" (по пределенному счету):

	СтрокиС_МЦ = ХозрасчетныйНаборЗаписей.НайтиСтроки(Новый Структура("СчетДт",ПланыСчетов.Хозрасчетный.НайтиПоКоду("МЦ.02")));
	Для каждого СтрокаТаблицы Из СтрокиС_МЦ Цикл
		ХозрасчетныйНаборЗаписей.Удалить(СтрокаТаблицы);
	КонецЦикла;
	
73. YNik 06.05.18 22:49 Сейчас в теме
74. M_W_W 32 07.05.18 23:37 Сейчас в теме
А я как-то давно уже подобные задачи(удаление строк из таблицы по условию) решаю через:
Стр = "";
Пока ТЗ.НайтиЗначение(<Искомое значение>, Стр, <Колонка таблицы, по которой ищем>) = 1  Цикл
     ТЗ.УдалитьСтроку(Стр);
     Стр = "";
КонецЦикла;


Если напрямую, найти значение в ТЗ нельзя, а нужно проверять какое-то условие, возможно по нескольким колонкам, то сначала добавляю в ТЗ колонку, числовую, в которую в цикле(ВыбратьСтроки(), ПолучитьСтроку()), по условию, добавляю единичку, если условие соблюдается, или оставляю ноль, если нет. Потом, в цикле удаления строк(Пока НайтиЗначение(****) = 1 Цикл), уже ищу значение 1, по добавленной колонке, и удаляю все строки, в которых единичка находятся.
Немного через "Ж", но выборка при удалении строк не сбивается, так, как она просто не используется, работает на 100%
vadeem_13; +1 Ответить
75. CheBurator 2712 08.05.18 00:09 Сейчас в теме
ТЗ.УдалитьСтроку(Стр); - очень ресурсоемкая операция.
76. Gkmy 28 08.05.18 18:28 Сейчас в теме
(75)
ТЗ.УдалитьСтроку(Стр); - очень ресурсоемкая операция.
- каждый.. как умеет.

если "очень ресурсоемкая операция" смотрите в сторону:
- индексированных таблиц
- 1скулайт
- эскуэл
- др. бд
- пр.

инструмент зависим от задачи; для 7.7 инструментов, - вагон и прицеп с тележкой
77. Rif_md 6 12.05.18 11:50 Сейчас в теме
Процедура УдалитьСовпадающие()
	ТЗн = СоздатьОбъект("ТаблицаЗначений");
	ВыгрузитьТабличнуюЧасть(ТЗн);
	КС = ТЗн.КоличествоСтрок();
	НС = 1;
	Пока НС <= КС Цикл
		ТЗн.ПолучитьСтрокуПоНомеру(НС);
		Если ТЗн.ПргОст = ТЗн.ИнвОст Тогда
			ТЗн.УдалитьСтроку(НС); КС = ТЗн.КоличествоСтрок(); 		
		Иначе
			НС = НС + 1;
		КонецЕсли;	
	КонецЦикла;
	ЗагрузитьТабличнуюЧасть(ТЗн);
КонецПроцедуры
Показать
82. Иваныч 23 22.03.23 10:58 Сейчас в теме
Здравствуйте, решили свою задачу? У меня есть похожий алгоритм заполнения по минимальному остатку на конкретный розничный склад. Если количество товара равно остатку или больше, то из такая строка удаляется из ТЧ документа. Если не равно, то дополнится количеством. Если интересно, могу скинуть, сами разберётесь
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот