ТЗ. Удаление строки сдвигает строки? #86330


#0 by KAPACb
Задача - надо перебрать все строки в ТЗ, и та у которой несколько условий сработает отрабатывается, и удаляется.Но! Удаление строки сдвигает строки(так?) и получается, что несколько строк выпадут из списка.Делал через ВыбратьСтроки, ПолучитьСтроку, затем подумал сделать цикл от 1 до КоличествоСтрок, но понял что это проблему не решает. Удаление строки в любом случае сдвигает строки.Как быть?
#1 by Astat
А чем тебе сдвиг строк мешает?
#2 by MetaEditor
когда проклуб оживёт, поищи там по delstrtz.zip - с десяток способов решения этой задачи...
#3 by KAPACb
Чувак, ты конечно извини, но ты блин тормозишь штоли?Ну представь цуцл, А = от 1 до КоличествоСтрокЦуцл начался. А = 1.Ты строку отработал, удаляешь её. И первой строкой станет бывшая вторая строка. А второй строкой станет бывшая третья.Цуцл продолжается, А = 2. Но когда ты будешь побращаццо к строке №2, это будет бывшая третья строка! Т.е. первоначальная вторая строка пролетает мимо.
#4 by KAPACb
А это... типа... мне срочно бы надо...Есть вариант, если точно знать что строки сдигаются всегда вверх... Делать цикл и переменную цикла при удалении строки уменьшать на 1.Вкратце не расскажешь что это за десяток способов?
#5 by KAPACb
<><>ЯшЩюЩ­ЩяЩюЋ«Щ®ЪўЩ®Ћ«Щ¬Щ«ЩшЩ®ЩяЪэЪ©ЪшЋ«ЩюЩЇЩяЩюЋ«ЩэЩюЩщЩ®Ћ«ЩяЩ«Ћ«ЋяЏЄЋшЋ«ЩЈЋ«ЩэЩюЪ©ЩюЩшЋ«ЪЄЩ©Щ®Ъ«ЩяЪЁЪ©ЪшЋ«Ш©Я¬ЋюЋ«ЯЈЋ«ЩэЪ«ЩюЩ©Щ®Ъ«ЩЈЪ©ЪшЋшЋ«Щ®ЪЄЩщЩЈЋ«ЪЄЪ©Ъ«ЩюЩъЩ«Ћ«ЩюЩЇЩяЩ«ЋшЋ«Ъ©ЩюЋ«ЪЇЪЄЮЈЋ«ЩюЩъЋюЏшЉ©‹©ЏюЯяЩюЋ«Щ©Ћ«Ш©Я¬Ћ«ЩшЩюЩ­Щ®Ъ©Ћ«ЩЈЋ«Щ©ЩюЩюЩЄЪўЩ®Ћ«ЩяЩ®Ћ«ЩЄЪщЪ©ЪшЋ«ЪЄЪ©Ъ«ЩюЩъЋшЋ«ЩЈЋ«Ъ©ЋюЩЇЋюЋшЋ«ЩяЪЁЩ­ЩяЪщЋ«ЩЄЪЁЩЇЪЁЪ©Ћ«Щ®ЪўЩ®Ћ«ЩэЪ«ЩюЩ©Щ®Ъ«ЩъЩЈЋюЏшЉ©‹©ЏюЯ®ЪЄЪ©ЪшЋ«ЩщЩЈЋ«ЩъЩ«ЩъЩюЩўЋяЪ©ЩюЋ«ЩяЩ«ЩЈЩЄЩюЩщЩ®Щ®Ћ«ЩэЪ«ЩюЪЄЪ©ЩюЩ®Ћ«Ъ«Щ®ЪЈЩ®ЩяЩЈЩ®ЋшЋ«ЩЄЩ®Щ¬Ћ«Щ©ЋЁЋЁЩЄЩюЩяЩюЩ©Џэј›Я
#6 by jurii
Усё очень просто:КонецЦикла;У меня енто даже в шаблонах прописано...
#7 by MetaEditor
давай я лучше пришлю обработку чем рассказывать......
#8 by Sla
+2 Да и в типовых, по крайней мере, 2 способа находил. Запусти поиск во всех текстах "УдалитьСтроку"
#9 by DRAGO
Это старо как мир...
#10 by Astat
2 Во-первых не "чувак". Во-вторых, не извиняю.Это не я торможу. Это ты ламер.
#11 by KAPACb
Старо, конечно, не сомневаюсь. Я впервые столкнулся. обработку пришли, пожалуйста, в мыло под ником. Я про такой способ думал в . Надо точно знать что все строки ниже удаленной сдвигаются вверх на 1. Это точно так и есть?
#12 by KAPACb
<><>німєм»нІн»»нн»єиєоєЅн»єін»єйє»єиєѕ№»нин»єоєїєпє»єкєон»єн№»єоєєєйєѕєи№йн»єн№й№№є»№о№є№ин»№»єѕ№іє»№№№инон»ј»н»№№№йн»єк№»єоєиєѕн»№№№ёєнєоєёєон»є№єоєн№»єо№єє»н»єпєі№їєієёє»н»єпєѕн»№єєкє»єјє»єйнон»»№є»єкн»№ј№№єон»єієпєоєёєїє»н»єй№ё№ј№ієѕн»єєєйєѕє№є»№№№инин»№јєѕєин»єёєоє№єо№»єі№№№иноЯ‹Я
#13 by jurii
Ну не веришь проверь ручками. Что мешает?
#14 by swilf
Нет, некоторые остаются на месте, и в таблице значений появляются ДЫРКИ!
#15 by Astat
Мои вопросы (уточняющие) - это попытка тебе помочь. А ты в ответ - оскорбляешь, плюс еще проблема твоя - не существующая (пока ты не дашь ответ на мой вопрос). Потому - ламер.
#16 by Jeronimo
Еще один вариант из разряда твердокаменных:-)пиши в массив номера строк, которые надо грохать. По таблице пробежался, а следом еще одним циклом грохаешь ненужные.
#17 by KAPACb
Дурень, я ж уже согласился что я ламер, это так же верно как и то что ты тормозЪ. Чё ж ты повторяешь, себя убедить хочешь?А ответ на твой вопрос в . Не тормози в следующий раз.
#18 by Astat
15 к 12
#19 by который не честный
после таких вопросов по простым алгоритмам и спорят - программисты-ли 1С или нет...
#20 by Astat
2 Программисты, да видать не все.
#21 by KAPACb
Ты тут в дожности шафки? Ничего по сути не сказал, только тупые комментарии. Друк, никто не спорит, 1С-ники НЕ программисты.Для тормозов типа объясняю, дело не в самом способе по "простым алгоритмам", способы я описывал еще в (3,4). А в том чтобы узнать станартное и максимально простое решение данной задачи.
#22 by который не честный
КонецЕслипомоему простое, так как ни одной лишней переменной
#23 by Astat
Хе-хе, какой Карась обидчивый попался ))
#24 by который не честный
пока Тз.номерстроки>0 Цикл_Если надо удалить Тогда______Тз.УдалитьСтроку(Тз.НомерСтроки)___Иначе_____Тз.ПолучитьСтрокуКонецЕслиесли без ошибок
#25 by artbear
и изврат какой-то, честно говоря. будет работать, только если используем метод "ТекущаяСтрока".Все же просто и давно известноДля к = -ТЗ.КоличествоСтрок по -1 Цикл__КонецЕсли;ЗЫ А еще лучше прислушайтесь к КонецЦикла;
#26 by который не честный
artbear, странно, при получении строки Тз.ПолучитьСтрока она и так становится текущая. И работает всё нормально. А, я там забыл 1 строку, извинте...Цикл.........
#27 by artbear
текущей она становится, потому что ты используешь Таблицу, расположенную на форме!Если использовать просто переменную модуля или процедуры, такого не будет,и твой метод работать не будет!
#28 by который не честный
Повторяю - работает нормально.Берётся первая строка.Далее в цикле:Если надо удалить удаляем иначе взять следующую.Что тут не рабочего - не понятно...Или такая схема уже не работает(строка ен становится текущей?)??Тз.Чтото=1;????
#29 by artbear
А что, проверить не судьба?Таб.ТекущаяСтрока = 0ЗЫ Еще раз говорю, твой код будет работать, только если твоя таблица значений - это таблица на формеЗЗЫ ТекущаяСтрока как правило, имеет смысл только для таблиц на форме.Без обид, но учи матчасть :)
#30 by artbear
(29+) for Виноват, смотрел твой код из , дальше не видел .Такой подход также возможен, но мне, честно говоря, не нравится.ИМХО неудобный цикл :(
#31 by МимохожийОднако
Можно конечно ковыряться с удалением строк в ТЗ.Но практичнее открыть новую ТЗ с аналогичной структурой и копировать в нее нужные строки. Удаление строк логично применять только для таблицы значений на форме.А примеров кода уйма в типовых и нетиповых конфигурациях, не считая целого блока на профклубе.Данную ветку я рассматриваю только как разминку для мозгов и ... выплеска эмоций в преддверии праздников
#32 by который не честный
хорошо...выдаётся123456789101235678910
#33 by который не честный
30 понятно...
#34 by Slawa
Да который не често победил. (ИМХО)Я думаю его метод более оптимальный, в плане производительности.век живи век учись
#35 by корум
___тз.получитьстрокупоНомеру(й);___если (твоё условие)=1 тогда___й=й-1;ИМХО, так проще будет...конецЦикла;
#36 by AVP
А один из простых вариант (не мой):
#37 by LDR
я поступал одним из трех способов.либо заводил доп. колонку НужноУдалять. по условию ее помечал или нет. потом доп. циклом пробегался.либо (если не смертельно) пробегал с конца таблицы.либо делал так:
#38 by Волшебник
интересный вариант!
#39 by Slawa
в классный способ, но мне кажется такой-же как и .Кстати кажется и один и второй страдают неопределенностью.Где гарантия что после УдалитьСтроку следующая станет текущей ?Тогда метод с ПолучитьСтрокуПоНомеру предпочтителен, т.к. будет работать всегда.ИМХО.
#40 by 1er
См. у Митичкина:ТабЗнач.Выбратьстроки;
#41 by Alex74
Вы что совсем того?Задом наперед их надо удалять, с последней и по первую.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям