Алгоритм удаления строки из табличной части
ฝัง
- เผยแพร่เมื่อ 28 ส.ค. 2024
- Поддержать донатом: donate.stream/...
Алгоритм удаления строки из табличной части - это
один из самых простых и популярных алгоритмов, который знать просто обязательно. Может сэкономить кучу времени и сил (но это не точно).
Может быть легко обобщен до алгоритма удаления элемента из практически любой коллекции (типа массива и т.д.)
В этом видео решил поэкспериментировать со вставками. Вроде круто получилось) А вы как считаете?
Мои контакты:
ВКонтакте: ilyaleontyev
Фэйсбук: illeontev
С удовольствием добавлю вас в друзья при условии, что вы не будете меня грузить своими рабочими вопросами :)
Нам нужно БОЛЬШЕ алгоритмов - коротких и простых))
это точно)))
@@user-lj4dm9gs7v Первый раз слышу от девушки, что им нужно больше - "коротких"))
Щ
Илья спс)) наткнулся на видео, взял за основу тобой рассмотренный пример для удаления строк с одинаковой номенклатурой из табличной части, оставляя только одну и накапливая в ней всё количество))
Спасибо за видео, Илья. Как всегда по делу и всё чётко.
В голове хвалебный текст крутится на страницу А4 десятым шрифтом, но нет времени. Надо учиться. Поэтому так: "Здорово! "
Класс! Спасибо! Именно практика интересна! Я консультант, программировать учусь с нуля. Мне было интересно!
Хорошая идея разбирать алгоритмы. Жду новых видео
Илья, Спасибо за видео. Очень помогло решить эту "нерешаемую" задачу))
Илья, респект за видео, для начинающих полезно бесспорно. Но всё же нужно уходить на темную сторону), делать запрос к ТЧ по условию и выборке удалить нужные строки. Думаю будет оптимальнее) решением.
Спасибо за видео, такие разборы алгоритмов конечно нужны
Спасибо Илья. Очень интересная идея видосов про алгоритмы.
Благодарю )
как сформулировать условие на поиск максимальной строки?
На самом деле поразительно, что так лаконично, с ржомбами и так мало просмотров(
Я тоже каждый раз удивляюсь все новым извращениям. Твой алгоритм интересен, но я не согласен )
Лучший алгоритм - это тот который легко читается и легко модифицируется.
Поэтому я для удаления выбрал перебор таблицы снизу уменьшая итератор. Больше никаких условий не нужно и ни за какими переменными не нужно следить. Просто уменьшаете индекс и удаляете нужные строки по пути. И в этот же обход можно добавить код не связанный с удалением.
Особую улыбку вызывают те кто предлагают передавать в метод НайтиСтроки структуру с отбором и после обходить полученный массив) Удар по скорости и масшатиборванию. Потом встречаешь такое место где нужно добавить новое условие или дополнить код и переписываешь весь такой подход) Чем они думают?
Жопой :)
Правильный алгоритм удаления снизу вверх, что бы данные проваливались сверху вниз.
Здравствуйте, Илья! Спасибо за ваши ролики, я их с удовольствием изучаю и узнаю очень много полезного. Скажите, почему для удаления строки вы использовали цикл "Пока" играя с индексами строки вместо цикла "Для Каждого" удаляя текущую строку по условию Если? Отдельное спасибо за ролики о нетиповом обновлении конфигураций. Собственно, этот комментарий, я наверное, больше написал чтобы выразить благодарность за вашу работу в youtube-сообществе 1с. Что так, что так будет верно, кто как хочет, так и ... как говориться :)
мне нравится!
Илья, я начинающий. Объясните пожалуйста, почему процедуру создаёте на клиенте? Ведь на клиент передаются не все строки документа табличной части, а только видимые в данный момент, а остальные подгружаются. Что я не правильно понимаю?
Сечете фишку ) Действительно при таком раскладе будет происходить постепенное считывание строк с сервера на клиент, что будет создавать неоправданные лишние серверные вызовы. Поэтому удаление строк лучше выполнить в серверном методе, вызвав его с клиента.
Но цель этого видео была именно в демонстрации алгоритма - не хотел вызывать лишних вопросов.
@@IlyaLeontyev
Спасибо, а то я начал сомневаться, правильно ли я понимаю клиент серверное взаимодействие системы. Спасибо за ответ. )
снова напишу, почему раньше этого не видел)))) дикую дичь писал на сервере))
Функцию ПредопределенноеЗначение() оптимальнее вынести из цикла. Она производит обращение к серверу.
Она производит вызов к серверу один раз, затем кеширует это значение. Поэтому оптимальней не станет.
@@IlyaLeontyev буду знать теперь)
А че не на сервере? Так же быстрее
Почём чёрный квадрат с иероглифами? Кто автор? Какой век?
Не знаю, он прилагался к съемной квартире )
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("СтавкаНДС", ПредопределенноеЗначение("Перечисление.СтавкиНДС.БезНДС"));
МассивСтрок = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
Для Каждого ЭлементМассива Из МассивСтрок Цикл
ИндексСтроки = Объект.Товары.Индекс(ЭлементМассива);
Объект.Товары.Удалить(ИндексСтроки);
КонецЦикла;
А не вот это вот всё....
По-твоему, этот алгоритм проще? :)
Я так не думаю.
Но подход интересный, спасибо.
Ок. что если у тебя удаление строки проходит по 10 критериям? 10 условий Если...КонецЕсли напишешь?
Этот подход единственно верный, быстрый и лаконичный.
А если тебе понадобится выполнить проверку на неравенство, что будешь делать?
Допустим, нужно будет удалить строки, в которых ставка НДС не равна 18%.
Молодец, соскочил с темы чотко! На неравенство уж точно не буду делать через индексы.
Вмешаюсь немного в такой спор :), какой получился именно с этого вопроса-коммента
Если рассматривать ТабЧасть как частный пример работы с Коллекциями, тогда в рамках Коллекций действительно может быть много примеров, в которых гораздо оптимальней установить отбор по большому ( больше одного ) составу параметров отбора. И затем с этим результатом отбора в виде Массив возникает большое многообразие способов их использования.
Но самое интересное, что позволяет указать использование результатов отбора в виде массива, это демонстрация того, что Табличная часть является фактической коллекцией из ссылочных значений на Строки ТЧ, т.е. Строки ТабЧасти это такие специфические объекты, у которых всегда имеются ссылки и из них собираются коллекции, если в этом есть необходимость... А это все означает, что в данной коллекции (называемой ТабЧастью) можно выполнять удаление каждой строки в произвольном, хаотичном порядке, а не последовательным перебором "вперед" или "назад".
Если же только что изложенное применять в жизни, то можно по условию удалить строчки из Коллекций, т.е.
Для Каждого СтрокаТЧ из ТабЧасть Цикл
Илья, здравствуйте! помогите, пожалуйста, если алгоритм в следующем: мне надо удалить все строки через одну...т.е. удаляем первыю, вторую оставляем, третью-удаляеми т.д. Буду очень благодарна за ответ
Татьяна, можно, например, просто поменять условие в моем примере. Вам надо не ставку НДС проверять в условном операторе, а четность индекса строки (Если ИндексСтроки%2 = 0 Тогда).
@@IlyaLeontyev благодарю за ответ!
С таким условием удалиться все строки кроме первой, по-моему.
@@alekseyo279 попробуйте )
А я с конца цикл делаю.
Согласен я так же делаю. Хотя на вкус и цвет, товарищей нет. Пример:
ДокОбъект = Объект.ПоступлениеТоваровУслуг.ПолучитьОбъект();
КоличествоСтрок = ДокОбъект.Услуги.Количество()-1;
Для Инд=0 По КоличествоСтрок-1 Цикл
Строка = ДокОбъект.Услуги[КоличествоСтрок-Инд];
Если Строка.Сумма = 52 Тогда
ДокОбъект.Услуги.Удалить(Строка);
КонецЕсли;
КонецЦикла;
ДокОбъект.Записать();
+
Жуть... теперь понятно, откуда ко мне на собеседование такие "программисты" приходят. В пять строк это делается с отрицательным итератором.
Пасть закрой недоносок и научись разработке иди