Правильно удалить текущую строку в ТЗ #766366


#0 by gorilla
добрый вечер,подскажите как правильно удалить строку в ТЗ?
#1 by Попытка1С
Удалять надо с конца.
#2 by Lexey_
правильно обратным циклом, гугли, на твой вопрос есть не один ответ
#3 by gorilla
это как
#4 by gorilla
я циклом сначала иду.как с конца идти?
#5 by Злопчинский
программирование совсем непонятная для тебя вещь?
#6 by Garykom
в очередной раз повторю правильное удаление строки из ТЗ, это: Перенос в новую ТЗ только тех строк которые не нужно удалять
#7 by marvak
можно НайтиСтроки(<Отбор>) и потом удалить все из получившегося массива строк
#8 by Alex S D
правильнее не удалять а не помещать их туда
#9 by Garykom
+5
#10 by MishaD
Хотеть не вредно. Ну вот например Тз как результат запроса. Если добавить нужное условие, то не попадаешь в индекс.
#11 by Garykom
сложно сделать второй запрос который вернет только нужное?
#12 by ДенисЧ
Вот ты знаешь, что сейчас сказал? Ты сказал "я вообще ни разу не умею писать запросы, зато знаю умное слово индекс"...
#13 by Garykom
ха может чтобы узнать "индекс" сначала нужно получить ТЗ из запроса и для каждой строчки индивидуально функциями обработать...
#14 by MishaD
Самомнение штука хорошая Ну или вариант 2 - загрузка из Excel
#15 by marvak
Да ладно, может он ТЗ пользователю показывает, а тот уже решает что там удалять.
#16 by Defender aka LINN
Я удаляю выбрав строки в массив. Можно ссылку на то, что я это делаю неправильно?
#18 by kosts
чуть не так
#19 by youalex
Если обход строк по индексу - удалять с конца, если по ссылкам (Для Каждого Из) - без разницы. Еще можно через ПостроительЗапроса/ИсточникДанных/Отбор )
#20 by zak555
напиши запрос так, чтобы ничего не удалять
#21 by Лефмихалыч
Варианта два: 1. Удалять с конца 2. НайтиСтроки, которые не нужны, и сложить их в массив (или циклом собрать эти строки), потом удалить мороки в цикле для каждого по этому массиву Вариант типа - хрень, ибо производительность его будет уменьшаться экспоненциально с ростом размера таблицы
#22 by МимохожийОднако
Отбор, НайтиСтроки и обходи полученный массив. Удалять не обязательно
#23 by alle68
Есть замеры, подтверждающие "хреновость" варианта?
#24 by Записьдампа
Гм. А чем твой вариант №2 отличается от . Фатальный недостаток?
#25 by фобка
фатальный недостаток в том что он ищет строки для каждой итерации
#26 by Лефмихалыч
у меня поиск в таблице или перебор один раз происходит, в 18 каждую строку приходится искать заново. Хотя, при учете, что при построчном удалении таблица скорее всего перстраивается целиком, все варианты с последовательным удалением одинаково хреновые и оптимальнее всего, как уже было отмечено выше, сформировать новую ТЗ из строк, которые должны остаться. Лет пять назад вроде был тут целый холивар на тему, как правильнее всего удалять строки. Сотрясли кубометры воздуха, но универсального варианта на все времена не еашли
#27 by Лефмихалыч
а, в найтиСтроки. Пардон - тогда он идентичен моему второму варианту. Если платформа не вызывает этот найтиСтроки на каждой итерации.
#28 by Serg_1960
- Удалять надо с конца. - Это как?
#29 by Фрэнки
не слишком вглядываясь в ранее написанное. НайтиСтроки возвращает массив. Его нужно задать в виде переменной перед циклом МассивДляУдаления. В условии цикла поставить Из МассивДляУдаления. В самом цикле и массиве будут использоваться значения массива, а это ссылки на строки. Ссылки эти остаются постоянными, даже после удаления других строк из таблицы значений, которая как бы источник значений. Так что все равно в каком направлении обходить массив, но не все равно в каком направлении использовать индексы. в значениях ссылок индексов нет.
#30 by MishaD
Хотел бы я посмотреть, как вы будете найтистроки использовать при удалении по сложному условию.
#31 by Фрэнки
#32 by Фрэнки
у кого посмотреть хочешь?
#33 by Serg_1960
Автор в обращается к строке для условия удаления - и потому
#34 by Фрэнки
условие можно вставить и в том виде, как в 31 сделано. А я всего лишь дал упрощенную форму для условия цикла.
#35 by Фрэнки
просто он отрицательного значения индекса глаза выворачиваются :) - для субботы это слишком тяжко
#36 by Serg_1960
Классика жанра (из типовых) Для Каждой Строка Из Строки Цикл ...
#37 by Serg_1960
Ты прав, что-то я не подумал про субботу :)
#38 by Записьдампа
Можно и без отдельного массива. Читаться будет сложнее, работать точно также. В пока >= 0 надо проверять Суббота - не твой день =)
#39 by Записьдампа
Хе, и не мой =)
#40 by Фрэнки
:)
#41 by Mort
Строки к удалению в отдельный массив неважно как, а дальше стандартно.
#42 by marvak
Для подробно, что то он пропал куда то
#43 by marvak
поправил
#44 by Web00001
Ветку не читай комментарии пиши, я думаю мой способ будет самый правильный и никто еще не разу про него не написал. В общем так: 1. Сначала получаем массив строк с помощью "Найти строки" или еще каким либо путем, неважно 2. С помощью цикла "Для каждого Из" удаляем строки из ТЗ, те которые есть в этом массиве 3. Я гениален! Наверняка из предыдущих 40 постов этого никто не предложил :)
#45 by marvak
Шутку поняли. Смешно. Ты офигенный юморист!
#46 by marvak
->
#47 by kosts
Все конечно читать лень, но хотя бы пару последних постов прочитал бы...
#48 by kosts
> Вариант типа - хрень, ибо производительность его будет уменьшаться экспоненциально с ростом размера таблицы Я возможно и не прав, но вот сколько раз будет вызвана функция?
#49 by Enterprise
неправда, ищет один раз Конструкция из имеет право на существование и в скорости не уступает, есть замеры
#50 by EvgeniuXP
Так с конца идешь: Можешь сначала в массив закинуть нужные строки, а потом разом их и грохнуть.
#51 by EvgeniuXP
если не умеешь, закинь ТЗ в запрос, отфильтруй и выгрузи ТЗ :)
#52 by EvgeniuXP
можешь отбором по строкам и грохнуть разом
#53 by kosts
Жаль, что в языке нету удаления массива строк, это был бы самый быстрый вариант
#54 by EvgeniuXP
напиши свою удобную процедуру :)
#55 by фобка
если в цикле добавить новую строку удовлетворяющую условиям отбора, она будет удалена?
#56 by Enterprise
У цикла будет столько итераций, сколько было изначально элементов
#57 by kosts
скорости это не прибавит
#58 by Lexey_
а я разве сказал, что все остальные способы неправильные?
#59 by фобка
как-то ты ушел от ответа. Строка будет удалена?
#60 by alle68
Он же ответил неявно - нет.
#61 by Garykom
Скопировать (Copy) Вариант синтаксиса: Скопировать строки Синтаксис: Скопировать(<Строки>, <Колонки>) Параметры: Тип: Массив. Массив строк для копирования. Если не указан, копируются все строки таблицы значений. Тип: Строка. Список колонок для копирования в формате: "Колонка1, Колонка2...". Описание варианта метода: Если указаны строки и колонки, то только они будут скопированы. Если не указаны, то будет создана полная копия таблицы значений. Вариант синтаксиса: Скопировать по отбору Синтаксис: Скопировать(<ПараметрыОтбора>, <Колонки>) Параметры: Тип: Структура. Ключ структуры - идентификатор колонки, а значение структуры - значение отбора. Тип: Строка. Список колонок для копирования в формате: "Колонка1, Колонка2...". Описание варианта метода: Если указан отбор, то только строки из отбора будут скопированы. Если отбор не указан, то будут скопированы все строки таблицы значений. Если указаны колонки, то только эти колонки будут скопированы. Иначе, будут скопированы все колонки таблицы значений. Возвращаемое значение: Тип: ТаблицаЗначений. Описание: Создает копию исходной таблицы значений. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Пример:
#62 by Garykom
если нет четкого признака в отдельной колонке "для удаления" то простейше это добавляем новую колонку, в нужные "для удаления" строки пишем нечто затем копируем только те строки через "ПараметрыОтбора" куда ничего не проставили
#63 by Записьдампа
И в процессе "написания нечто" перебираем все строки? =)
#64 by Garykom
1 раз и еще 1 раз они "переберутся" при копировании а если удалять по одной строке, то каждое удаление вызывает "перебор" части строк т.е. сколько строк удалили - столько раз и "перебрали"
#65 by Записьдампа
Ну если тебя производительность выделения память так беспокоит и хочется именно копию таблицы получить, то делай наоборот - при проверке условия запоминай строки, которые надо оставить =)
#66 by Garykom
очень рекомендую попробовать создать ТЗ в несколько сотен тысяч строк а потом попробовать удалить из нее половину строк через ТЗ.Удалить(Строка|Индекс)
#67 by ДенисЧ
Очень рекомендую сильно думать перед созданием "ТЗ в несколько сотен тысяч строк" Говорят, иногда помогает быстрее работать программе...
#68 by Записьдампа
Несколько сотен тысяч из которых половина не нужна? Герой!
#69 by Garykom
так эту "ТЗ" не я создавал а другие "программисты" предлагается лезти в их "код" и переписывать? ну да все как обычно: "Сначала создаем себе трудности, а потом героически их преодолеваем"
#70 by Enterprise
В тз она останется
#71 by ice777
Просто собрать строки к удалению, например, в массив, а потом удалить. Я в шоке от тупизма.
#72 by ice777
+ и читайте про коллекции. А если впадлу- то просто работайте, слушайтесь и не выеж..)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С