проблема часто не в отсутствии системных знаний. ряд функций человек помнит, только если постоянно их использует Например, те, кто занимается чисто разработкой, обычно не плохо помнят многое, что касается интерфейса, но могут забыть, как настраивается доступ. И наоборот, те, кто основную работу выполняют на поддержке и исправлении, могут напрочь забыть многое из интерфейсных решений. Отдельная тема - помнить подробно настройки и особенности СКД. Я просто гарантирую, что если регулярно не делать отчеты хотя бы пол-года, то скил заметно снижается.
Как вариант можно упорядочить таблицу по полю количество и тогда удалять будет проще. можно выгрузить тч в таблицу значений и оттуда запросом выбрать нужные строки и затем загрузить их в документ можно воспользоваться отбором. это первое что в голову приходит
Про запрос тоже думал, но не стал в видео разбирать, ибо это уже сложнее для новичков, а так да, можно выгрузить в ТЗ и кинуть в запрос, но это уже будет на сервере и отсюда накладные расходы, но для изучения можно рассмотреть и этот вариант. А вот про отбор напишите, как вы предлагаете выбрать строки отбором, ибо там только равно, а не меньше или равно...
@@Денис-1Спрограммист напишите пожалуйста видео о том, какие проблемы могут возникнуть при использовании расширений. Например, если объект кусками описан в 2 разных расширениях, что получится в итоге. Как проверить, что элемент уже где-то описан в расширениях (их может быть 10 и больше) и т.д.
вариант с массивом не понятен почему при удалении строк из массива удаляются эти строки из табличной части? или почему при добавленгии нужной строки в массив она исчазаетиз табличной части?
А если в тч 10 тыс. Строк? Как долго перебирать будет? :) нужно запрос делать, получив все строки удовлетворяющие условию, отсортировать по убыванию номер строки и перебирать только их для того, чтобы удалить)
@@ArtVadan Кросавчег, чё. +Серверный вызов. +Насилие SQL-сервера бессмысленной загрузкой туда параметра большого объема. +Накладные расходы на менеджмент временных таблиц SQL-сервером. Спасибо тебе, благодаря такому коду я недёшево беру за улучшение производительности кастомок.
Фраза, которая застряла в голове: "новичку не хватает системного мышления..." Боже, как мне его не хватает))) над такими задачами по несколько часов сижу, и, бывает, просто не понимаю КАК обратится к переменной или что-то в таком духе. Вот понимаю принцып решения вопроса, а сформулировать на языке не могу... Видимо, это приходит с опытом
Я всегда через НайтиСтроки ищу с отбором строки к удалнию, потому просто удаляю строки в цикле. На видео это второй вариант с массивом в чуть более другой интерпретации.
Где на собеседовании такие задачи дают? Мне дали задачу сделать отчет abc анализ продаж прямьім запросом. Желательно одним запросом к базе. Там вроде оконньіе функции sql надо использовать.
Еще вариант решения. Запросом выбрать из этого же документа содержимое ТЧ по количеству с условием и подгрузить результат в ТЧ заново. Впрочем в комментариях подобный вариант отметили уже оказывается.
Добрый день! Есть одна неточность, если я хочу удалить строки с количеством = 0, то у меня ничего не получится, потому что условие ЗначениеЗаполнено(Число) не выпонится, надо писать Если Число Неопределено
Так много глупых комментариев , скорее всего их пишут разработчики , получается глупые разработчики. Про какие то запросы пишут. Ну это все либо от тупости, что печально, либо от мало опыта, что исправимо. Ну во первых если вы будете писать запрос, вам придется это делать на сервере, во вторых запрос к чему писать вы будете? К табличной части документа, который уже записан? А если пользователь внес строку , но еще не записал документ? Очевидно эта строка не попадет в выборку. Придется закидывать ТЧ как параметр. Чтобы выбрать строки? Ну тупо ведь. Автор все четко сделал. Три разных варианта перебора таблицы показал. Я лично в основном пользуюсь массивом , закидываю туда строки для удаления , потом удаляю. Легко отладить , и глянуть какие строки были , какие удалить , и что получилось. Если вы не способны читать такой код , то это вопрос к вам. Теперь понятно откуда берется говнокод с вашими запросами.
Про цикл с минуса до 0 - было новое, не видел такого. Модифицированность вручную - плохая практика, кнопка будет доступна на форме только для чтения: свойство команды 'изменяет сохраняемые данные'.
@@ru21ru1 в таком случае этот вариант будет сильно похож на вариант про добавление в массив строк с последующим удалением из ТЧ документа, хотя как вариант, можно отработать и такой, для практики почему бы и нет. Я подумал про вариант выгрузить одним действием ТЧ в ТЗ, далее пройтись не по ТЧ, а по ТЗ, удалить там, а потом просто загрузить ТЗ в ТЧ документа, вот такой вариант можно ещё рассмотреть.
Первое видео публиковал на первом своём канале. Он больше про деньги/авито и прочие размышления о жизни, но не про программинг, поэтому для 1С создал отдельный канал, то видео пересниму и выложу сюда. Если хотите посмотреть его, то вот ссылка на него ruclips.net/video/02IxdvKrPrI/видео.html на первом канале.
Запросом по табличной части с отбором по количеству получаем только нужные строки и перезаписываем табличную часть выборкой из запроса. и всё. никаких циклов, кучи проверок и индексов.
Тоже подумал про данный вариант. Кстати, по поводу выполнения на стороне клиента. Это тоже может быть большим вопросом. Когда строк у документа 10 - это одно дело. А когда 10000?
@@8tshk8 сложно представить в каком случае нужно вводить такое количество строк в один документ и в один день. пока такое не встречал даже в магазинах канцелярии. при больших объемах данных в типовых 1с реализована запись частями, а не одним куском.
@@8tshk8 сложно представить в каком случае нужно вводить такое количество строк в один документ и в один день. пока такое не встречал даже в магазинах канцелярии. при больших объемах данных в типовых 1с реализована запись частями, а не одним куском.
Если собесед на стажера, то норм. Но если выше, то лучше на типовую форму типового документа вот так запросто команды и элементы не набрасывать. Плюс свои процедуры и функции модуле типовой формы хорошо бы снабжать префиксами и комментариями. Задача, возможно, потому и дается простая, чтобы сосредоточиться на подобных важных мелочах. И строки, наверное, лучше обработать на сервере и без цикла - не факт, что все строки нужны на клиенте. В общем, тут нужно плясать от того, что хотят проверить, - знание стандартов разработки и "лучших практик" или умение решить хотя бы элементарную задачу.
Спасибо за комментарий, задача тут проверить элементарные знания работы с ТЧ. Конфигурация использовалась Бух3.0 Демо просто, чтобы были хоть какие-то данные, чтобы самому не набивать, не более того. На счёт обработки строк на сервере и без цикла, предложите свой вариант, рассмотрим, тут я так полагаю, вообще нет смысла "гнать" данные на сервер, просто на клиенте всё "почистили", этого достаточно. По сути данная задача оторвана от реальности, но в целом элементарные знания проверяет, плюс видно как человек рассуждает и как он кодит, как называет переменные, процедуры.
@@Денис-1Спрограммист по поводу "гнать" - тут вопрос оптимизации. По месту надо смотреть, что "выгоднее", - гнать на клиент все строки табчасти (а они порциями на клиент в УФ подгружаются - по мере необходимости) и ходить по ним циклом на клиенте, или данные формы на сервер отправить, обработать их без цикла, и на клиенте отобразить результат (без подгрузки всех строк на клиент). Что до обработки на сервере - выгружаем табчасть в тз, отправляем тз в построитель в качестве источника, построителю в отборы добавляем отбор с нужным видом сравнения и значением, а полученный на выходе результат подгружаем в обратно в табчасть. Или, как тут уже предлагали, то же самое, но вместо построителя запрос руками написать и таблицу туда загнать в качестве параметра.
@@alexfox7848 Всего 3 варианта решения: В лоб циклом на клиенте, на сервере в построителе и на сервере в запросе. Оптимальное решение не уходить с клиента, на мой взгляд. Точные механизмы работы построителя я не знаю, а вот с отправкой дальше на сервере в запрос - точно не лучшее решение. Получаем следующую последовательность: клиент -> сервер -> сервер -> клиент", с контекстом (+несколько ТЧ например). При отправке в "запрос" данной ТЗ расчёт не обязательно будет выполнен на этой же машине (если серверов несколько).
Капец как сложно. Выгружаешь строки в массив, идешь по массиву без всяких индексов и удаляешь строки. И да, все что ты написал надо делать на сервере, еще -1 балл
Первое что пришло в голову - это повторять этот цикл до тех пор, пока он не перестал бы удалять строки ) Вообще я сюда подеградировать пришел и позалипать на котиков, а не на задачки по программированию в час ночи. Мое негодование было на столько сильно что пришлось даже подписаться
По сравнению с массивами - производительность - всеми так любимые количество строк кода. - уход на сервер И если изощряться с запросами, то в запросе отобрать только те строки, которые подходят и выгрузить результат запроса в табличное поле.
@@panalike вьігрузка / загрузка в таблицу значений достаточно ресурсоемкая задача. Так же как и помещение таблицьі значения во временную таблицу в запросе.
Если обходить по индексу снизу вверх, но при этом человек поменяет местами индекс нескольких строчек, или ещё хуже, если будут удаляться, дробиться или добавляться строки - то индексы будут не в каком-то правильном порядке, а вообще могут плясать. Например: сделайте упорядочивание строк (стрелочками или через зажатый Shift), то не факт, что всё так и отработает. Поэтому я всегда использую через "МассивСтрокНаУдаление", т.е. через 2 цикла.
Сразу видно, что базового алгоритмического уровня у автора нет. Самый разумный, по сути единственный, вариант в самом конце видео. Смотрим на него по сост на 28:47 Последнюю строку (индекс = индекс -1) помещаем первой в цикле Условие цикла - меняем с >= на > -1 убираем из .... .Количество() - 1 При первом проходе будет 10 - это > 0, тут же сразу уменьшение до 9 и строка берется с индексом 9 Плюсы такие: 1. Команд тупо меньше, программа короче и понятнее 2. Если будут сложные условия и ветвления, то возможно использовать "Пропустить", это никак не будет влиять на изменение индекса, так как он меняется в самом начале цикла
Зачем вы ломаете новичкам мозг! Проще всего и нагляднее, создать массив, пробежать циклом табличную часть и проверить на условие количество < введеное количество, добавляем строки в массив если условие истина. Потом циклом по каждому элементу масива удаляем строку табличной части. УдаляемыеСтроки = Новый массив; Для каждого СтрокаТЧ из ТабличнаяЧасть Цикл Если СтрокаТч.Количество
Вы про применение изменений после правки кода или когда открываю документ заново, чтобы иметь снова оригинал, а не с удалёнными строками? Если второе, то да, можно просто перечитать, привычка, наверное, если первое, то обновить Конфигурацию базы данных без завершения не получится.
Я так понял, что 1С делали русские и они мыслили в категориях русского языка, который невозможно изучить по правилам, а только лишь постоянными употреблением языковых оборотов и тупого заучивания бесконечных особенностей. 🙂
Зачем в начале ролика заикаться относительно системных знаний, если дальше идут подобные рассуждения? В данном случае мы полагаемся на реализацию итератора, которая нам неизвестна и на этом нужно ставить точку. Если вкратце, то данное поведение итератора не документировано, и на его стабильность нельзя полагаться. Индекс строки ни о чем не говорит, так как в данном случае это индекс строки которую выдал итератор, а не индекс который связан с самим итератором. Вообще вполне возможно в какой-нибудь из платформ "неправильный" подход внезапно покажет корректные результаты, а сам подход будет объявлен законным, так как будет регламентирована логика работы итератора. Как пример: ListIterator из java. Поэтому попытки объяснить что происходит просто не имеют смысла. Если рассмотреть пример более глубоко, то по сути мы имеем дело с коллекцией, чья реализация небезопасна в многопоточной среде, так как используемый итератор, полагается на то что коллекция иммутабельна (хотя бы на время его существования), хотя на примере видно, что даже в однопоточной среде мы легко можем изменить коллекцию.
А вот так её решил. Вроде, тоже правильно? Процедура ПослеВводаКоличества(Число, Параметры) Экспорт Если НЕ Число = Неопределено Тогда // создаём бесконечный цикл Пока Истина Цикл
// определяем начальное количество строк в документе НачальноеЧислоСтрок = Объект.ТабличнаяЧасть1.Количество();
// цикл удаления строк по условию количество меньше введённого числа Для Каждого Строка Из Объект.ТабличнаяЧасть1 Цикл
Если Строка.Количество < Число Тогда Объект.ТабличнаяЧасть1.Удалить(Строка); ЭтаФорма.Модифицированность = Истина; КонецЕсли;
КонецЦикла;
// определяем количество строк в документе после выполнения цикла удаления КонечноеЧислоСтрок = Объект.ТабличнаяЧасть1.Количество();
// условие прерывания бесконечного цикла Если НачальноеЧислоСтрок = КонечноеЧислоСтрок Тогда Прервать; КонецЕсли;
проблема часто не в отсутствии системных знаний. ряд функций человек помнит, только если постоянно их использует
Например, те, кто занимается чисто разработкой, обычно не плохо помнят многое, что касается интерфейса, но могут забыть, как настраивается доступ.
И наоборот, те, кто основную работу выполняют на поддержке и исправлении, могут напрочь забыть многое из интерфейсных решений.
Отдельная тема - помнить подробно настройки и особенности СКД. Я просто гарантирую, что если регулярно не делать отчеты хотя бы пол-года, то скил заметно снижается.
Полностью согласен с данным комментарием.
Блин, оказывается это не только у меня так. А я думал, что я просто тупой😅
Хотелось бы больше видео на вашем канале. Очень понравился разбор данной задачи.
Денис, отличное видео, спасибо вам за работу!
Спасибо за отзыв...
А почему больше нет видосов на канале по 1С?
Отличное видео! Спасибо! Ждём ещё роликов
Как вариант можно упорядочить таблицу по полю количество и тогда удалять будет проще.
можно выгрузить тч в таблицу значений и оттуда запросом выбрать нужные строки и затем загрузить их в документ
можно воспользоваться отбором. это первое что в голову приходит
Про запрос тоже думал, но не стал в видео разбирать, ибо это уже сложнее для новичков, а так да, можно выгрузить в ТЗ и кинуть в запрос, но это уже будет на сервере и отсюда накладные расходы, но для изучения можно рассмотреть и этот вариант. А вот про отбор напишите, как вы предлагаете выбрать строки отбором, ибо там только равно, а не меньше или равно...
Добрый день как насчёт выгрузить таблицу в запрос там отбором её уменьшить и после запроса назад загрузить? Намного быстрей и проще
Спасибо большое.
Спасибо за вашу работу! Вы очень доступно объясняете, интересно и полезно!
Великолепное объяснение! Спасибо, что лаконично!
Очень интересно! Спасибо Денис!
Круто! Спасибо, за отличное видео
Понравилось. Отличное понятное видео.
Отлично, благодарю, можно ещё! Хорошая идея, что если стримить свою работу.
Времени писать видео катастрафически не хватает, хотя материала очень много, спасибо за благодарность...
@@Денис-1Спрограммист напишите пожалуйста видео о том, какие проблемы могут возникнуть при использовании расширений. Например, если объект кусками описан в 2 разных расширениях, что получится в итоге. Как проверить, что элемент уже где-то описан в расширениях (их может быть 10 и больше) и т.д.
вариант с массивом не понятен
почему при удалении строк из массива удаляются эти строки из табличной части?
или почему при добавленгии нужной строки в массив она исчазаетиз табличной части?
3 вариант использовали в 7.7, т.к. там других вариантов не было. Вариант 2 классический способ для 8.2, 8.3, используется в типовых механизмах
Спасибо за видео! Когда будут ещё?
А если в тч 10 тыс. Строк? Как долго перебирать будет? :) нужно запрос делать, получив все строки удовлетворяющие условию, отсортировать по убыванию номер строки и перебирать только их для того, чтобы удалить)
Яб выгрузил таблицу в запрос, условием отобрал то что надо оставить и обратно бы загрузил)
@@ArtVadan Кросавчег, чё. +Серверный вызов. +Насилие SQL-сервера бессмысленной загрузкой туда параметра большого объема. +Накладные расходы на менеджмент временных таблиц SQL-сервером. Спасибо тебе, благодаря такому коду я недёшево беру за улучшение производительности кастомок.
Зачем лишний серверный вызов, если можно обойтись без него?
Неужели кто-то ещё перебирает данные циклами. ))
@@TTrimasova_life А какие по-вашему варианты?
Огромное спасибо. Очень понятно
Фраза, которая застряла в голове: "новичку не хватает системного мышления..." Боже, как мне его не хватает))) над такими задачами по несколько часов сижу, и, бывает, просто не понимаю КАК обратится к переменной или что-то в таком духе. Вот понимаю принцып решения вопроса, а сформулировать на языке не могу... Видимо, это приходит с опытом
Попробуйте поготовиться к сдаче тестов на 1С:Профессионал по платформе, думаю у вас многое встанет на свои места.
Отладчик наше ВСЁ!
"ПринцЫп". Это уже диагноз
Отличное видео!! 👍👑 Выпускайте ещё такие видео!!
Хороший разбор методов удаления из ТЧ
Спасибо за вашу оценку.
Денис, пилите ещё видосы по 1с, пожалуйста.
Здравствуйте, подскажите разве в 1с нет запросов на удаление? Как в msAccess. Проще выполнить такой запрос.
Я всегда через НайтиСтроки ищу с отбором строки к удалнию, потому просто удаляю строки в цикле.
На видео это второй вариант с массивом в чуть более другой интерпретации.
Не подходит к предложеной задаче. Как в НайтиСтроки Вы будете искать значение меньше или равно 30?
Здравствуйте, меня заинтересовала покупка вашего канала, как с вами можно связаться?
Где на собеседовании такие задачи дают? Мне дали задачу сделать отчет abc анализ продаж прямьім запросом. Желательно одним запросом к базе. Там вроде оконньіе функции sql надо использовать.
Еще вариант решения. Запросом выбрать из этого же документа содержимое ТЧ по количеству с условием и подгрузить результат в ТЧ заново. Впрочем в комментариях подобный вариант отметили уже оказывается.
Источник говнокода
Для Индекс=-ВГраница По 0 Цикл
- шедевр! очень красиво
Получение элемента коллекции по индеку - гораздо медленнее обхода коллекции через Для Каждого. Говнокод, короче.
Добрый день! Есть одна неточность, если я хочу удалить строки с количеством = 0, то у меня ничего не получится, потому что условие ЗначениеЗаполнено(Число) не выпонится, надо писать Если Число Неопределено
Так много глупых комментариев , скорее всего их пишут разработчики , получается глупые разработчики. Про какие то запросы пишут. Ну это все либо от тупости, что печально, либо от мало опыта, что исправимо. Ну во первых если вы будете писать запрос, вам придется это делать на сервере, во вторых запрос к чему писать вы будете? К табличной части документа, который уже записан? А если пользователь внес строку , но еще не записал документ? Очевидно эта строка не попадет в выборку. Придется закидывать ТЧ как параметр. Чтобы выбрать строки? Ну тупо ведь. Автор все четко сделал. Три разных варианта перебора таблицы показал. Я лично в основном пользуюсь массивом , закидываю туда строки для удаления , потом удаляю. Легко отладить , и глянуть какие строки были , какие удалить , и что получилось. Если вы не способны читать такой код , то это вопрос к вам. Теперь понятно откуда берется говнокод с вашими запросами.
+++ все по фактам
автор, а вы видео удалили и больше не снимаете? Или переехали куда то на другой канал?
Задачка из книги Радченко 1с программирование для начинающих, про массивы)))
Пацаны запомните, не работодатель отбирает кандидата, а вы отбираете работодателя, пусть они делают тестовые задания))
Про цикл с минуса до 0 - было новое, не видел такого. Модифицированность вручную - плохая практика, кнопка будет доступна на форме только для чтения: свойство команды 'изменяет сохраняемые данные'.
Можно рассмотреть вариант пересозданием таблицы значений, и загрузки её в табличную часть.
:-D Выгрузить... Удалить, Загрузить? Вариантов масса, этот тоже можно рассмотреть, почему бы и нет...
@@Денис-1Спрограммист не удалить, а в чистую тз добавить нужные строки.
@@ru21ru1 в таком случае этот вариант будет сильно похож на вариант про добавление в массив строк с последующим удалением из ТЧ документа, хотя как вариант, можно отработать и такой, для практики почему бы и нет. Я подумал про вариант выгрузить одним действием ТЧ в ТЗ, далее пройтись не по ТЧ, а по ТЗ, удалить там, а потом просто загрузить ТЗ в ТЧ документа, вот такой вариант можно ещё рассмотреть.
Спасибо за видео)
А второе видео есть в доступе?))
Тоже не нашел.
@@evgeniuxp2evgeniuxp234 будем надеяться, что когда-нибудь автор предоставит доступ))
Первое видео публиковал на первом своём канале. Он больше про деньги/авито и прочие размышления о жизни, но не про программинг, поэтому для 1С создал отдельный канал, то видео пересниму и выложу сюда. Если хотите посмотреть его, то вот ссылка на него ruclips.net/video/02IxdvKrPrI/видео.html на первом канале.
Спасибо! Доходчиво, осталось запомнить. Круто! Все по взрослому.
Запросом по табличной части с отбором по количеству получаем только нужные строки и перезаписываем табличную часть выборкой из запроса. и всё. никаких циклов, кучи проверок и индексов.
Тоже подумал про данный вариант. Кстати, по поводу выполнения на стороне клиента. Это тоже может быть большим вопросом. Когда строк у документа 10 - это одно дело. А когда 10000?
@@8tshk8 сложно представить в каком случае нужно вводить такое количество строк в один документ и в один день. пока такое не встречал даже в магазинах канцелярии. при больших объемах данных в типовых 1с реализована запись частями, а не одним куском.
@@8tshk8 сложно представить в каком случае нужно вводить такое количество строк в один документ и в один день. пока такое не встречал даже в магазинах канцелярии. при больших объемах данных в типовых 1с реализована запись частями, а не одним куском.
Но есть проблема. Если документ изменен в пользовательского режиме.
Не оптимально вызывать сервер, когда можно обойтись клиентом.
Если собесед на стажера, то норм. Но если выше, то лучше на типовую форму типового документа вот так запросто команды и элементы не набрасывать. Плюс свои процедуры и функции модуле типовой формы хорошо бы снабжать префиксами и комментариями. Задача, возможно, потому и дается простая, чтобы сосредоточиться на подобных важных мелочах. И строки, наверное, лучше обработать на сервере и без цикла - не факт, что все строки нужны на клиенте.
В общем, тут нужно плясать от того, что хотят проверить, - знание стандартов разработки и "лучших практик" или умение решить хотя бы элементарную задачу.
Спасибо за комментарий, задача тут проверить элементарные знания работы с ТЧ. Конфигурация использовалась Бух3.0 Демо просто, чтобы были хоть какие-то данные, чтобы самому не набивать, не более того.
На счёт обработки строк на сервере и без цикла, предложите свой вариант, рассмотрим, тут я так полагаю, вообще нет смысла "гнать" данные на сервер, просто на клиенте всё "почистили", этого достаточно.
По сути данная задача оторвана от реальности, но в целом элементарные знания проверяет, плюс видно как человек рассуждает и как он кодит, как называет переменные, процедуры.
@@Денис-1Спрограммист по поводу "гнать" - тут вопрос оптимизации. По месту надо смотреть, что "выгоднее", - гнать на клиент все строки табчасти (а они порциями на клиент в УФ подгружаются - по мере необходимости) и ходить по ним циклом на клиенте, или данные формы на сервер отправить, обработать их без цикла, и на клиенте отобразить результат (без подгрузки всех строк на клиент).
Что до обработки на сервере - выгружаем табчасть в тз, отправляем тз в построитель в качестве источника, построителю в отборы добавляем отбор с нужным видом сравнения и значением, а полученный на выходе результат подгружаем в обратно в табчасть. Или, как тут уже предлагали, то же самое, но вместо построителя запрос руками написать и таблицу туда загнать в качестве параметра.
@@alexfox7848 Всего 3 варианта решения: В лоб циклом на клиенте, на сервере в построителе и на сервере в запросе. Оптимальное решение не уходить с клиента, на мой взгляд. Точные механизмы работы построителя я не знаю, а вот с отправкой дальше на сервере в запрос - точно не лучшее решение. Получаем следующую последовательность: клиент -> сервер -> сервер -> клиент", с контекстом (+несколько ТЧ например). При отправке в "запрос" данной ТЗ расчёт не обязательно будет выполнен на этой же машине (если серверов несколько).
Почему вы не используете ВвестиЧислоАсинх () ???
В каком релизе он появился? Версию платформы и совместимости нужно учитывать.
Подскажите, пишет ошибку: Ожидается ключевое слово "Тогда" Если Значение "?" заполнено (Число) Тогда (Проверка: Сервер)
ЗначениеЗаполнено() в одно слово пишется
Сразу понял какая ошибка будет. Смещение индексов
Спасибо!
а не проще запросом выгрузить и загрузить?
Самый смешной: за основу берём первый вариант. Перед циклов ставим метку, после удаления строки в ТЧ безусловный переход на метку....
Спасибо большое. Крутой урок.
Добрый день. А Вы не думали над тем, чтобы записать уроки по созданию простой конфигурации учёта оргтехники на фирме?
Капец как сложно. Выгружаешь строки в массив, идешь по массиву без всяких индексов и удаляешь строки. И да, все что ты написал надо делать на сервере, еще -1 балл
30 минут делать видео, который каждый, кто хоть раз писал удаление строк гуглил за пару минут.
Первое что пришло в голову - это повторять этот цикл до тех пор, пока он не перестал бы удалять строки )
Вообще я сюда подеградировать пришел и позалипать на котиков, а не на задачки по программированию в час ночи.
Мое негодование было на столько сильно что пришлось даже подписаться
Почему нельзя просто строки по условию перебрать в массив и позже перебрать массив строк?
А кто сказал что нельзя ? 😂
а можно ли с помощью запросов удалить? типо удалить все строки из табличной части которые содержатся в результате запроса
Получается примерно как в цикле с массивом. Читаем всех кто меньше из результата запроса удаляем их.
По сравнению с массивами
- производительность
- всеми так любимые количество строк кода.
- уход на сервер
И если изощряться с запросами, то в запросе отобрать только те строки, которые подходят и выгрузить результат запроса в табличное поле.
Если документ еще не записан, то не удалишь.
@@DimaVort ну как бы можно выгрузить табличную часть в таблицу значений, передать запросу в качестве источника эту таблицу значений иии всё
@@panalike вьігрузка / загрузка в таблицу значений достаточно ресурсоемкая задача. Так же как и помещение таблицьі значения во временную таблицу в запросе.
Снизу вверх - я до такого не допёр)
Если обходить по индексу снизу вверх, но при этом человек поменяет местами индекс нескольких строчек,
или ещё хуже, если будут удаляться, дробиться или добавляться строки - то индексы будут не в каком-то правильном порядке, а вообще могут плясать.
Например: сделайте упорядочивание строк (стрелочками или через зажатый Shift), то не факт, что всё так и отработает.
Поэтому я всегда использую через "МассивСтрокНаУдаление", т.е. через 2 цикла.
Я ничего не понял
Как же все сложно. Есть более простые способы. Правильно комментаторы говорят массив, запрос + перезапись
Запрос это уже обращение к серверу
В первом варианте, вместо ЕСЛИ используем ПОКА...
Ни разу не программист, чисто пользователь. Почему просто не запустить первый вариант 2 раза?)
А если три строки подряд будут подходить под условие удаления? А если 500? А если все, например, 100500?
@@8tshk8 а какая разница, если шаг 1 строчка. Пропустит, условно четные, следующим циклом их соберет, разве нет🙈
@@dimapetrov84нет
Сразу видно, что базового алгоритмического уровня у автора нет. Самый разумный, по сути единственный, вариант в самом конце видео. Смотрим на него по сост на 28:47
Последнюю строку (индекс = индекс -1) помещаем первой в цикле
Условие цикла - меняем с >= на >
-1 убираем из .... .Количество() - 1
При первом проходе будет 10 - это > 0, тут же сразу уменьшение до 9 и строка берется с индексом 9
Плюсы такие:
1. Команд тупо меньше, программа короче и понятнее
2. Если будут сложные условия и ветвления, то возможно использовать "Пропустить", это никак не будет влиять на изменение индекса, так как он меняется в самом начале цикла
0 - тоже число
Да откуда у Вас такие задачи то.
Это прям основа основ, такое даже спрашивать стыдно.
Ха, но многие допускают такую ошибку в работе, не только на собеседовании
Учитель походу сам не ахти разработчик. Включенные на редактирование на все объекты? Серьезно?
К чему это видео на 30 минут, если правильные ответы можно найти за 15 секунд. Еще можно через запрос, сделай видео на 40 минут!
Зачем вы ломаете новичкам мозг! Проще всего и нагляднее, создать массив, пробежать циклом табличную часть и проверить на условие количество < введеное количество, добавляем строки в массив если условие истина. Потом циклом по каждому элементу масива удаляем строку табличной части.
УдаляемыеСтроки = Новый массив;
Для каждого СтрокаТЧ из ТабличнаяЧасть Цикл
Если СтрокаТч.Количество
Коллега, за такое решение задачи с кнопкой на форме документа Вас просто без слов выставят за дверь. Не позортесь.
Зачем закрывать-открывать документ? Еще - Перечитать.
Вы про применение изменений после правки кода или когда открываю документ заново, чтобы иметь снова оригинал, а не с удалёнными строками? Если второе, то да, можно просто перечитать, привычка, наверное, если первое, то обновить Конфигурацию базы данных без завершения не получится.
Я так понял, что 1С делали русские и они мыслили в категориях русского языка, который невозможно изучить по правилам, а только лишь постоянными употреблением языковых оборотов и тупого заучивания бесконечных особенностей. 🙂
Зачем в начале ролика заикаться относительно системных знаний, если дальше идут подобные рассуждения? В данном случае мы полагаемся на реализацию итератора, которая нам неизвестна и на этом нужно ставить точку. Если вкратце, то данное поведение итератора не документировано, и на его стабильность нельзя полагаться. Индекс строки ни о чем не говорит, так как в данном случае это индекс строки которую выдал итератор, а не индекс который связан с самим итератором. Вообще вполне возможно в какой-нибудь из платформ "неправильный" подход внезапно покажет корректные результаты, а сам подход будет объявлен законным, так как будет регламентирована логика работы итератора. Как пример: ListIterator из java. Поэтому попытки объяснить что происходит просто не имеют смысла.
Если рассмотреть пример более глубоко, то по сути мы имеем дело с коллекцией, чья реализация небезопасна в многопоточной среде, так как используемый итератор, полагается на то что коллекция иммутабельна (хотя бы на время его существования), хотя на примере видно, что даже в однопоточной среде мы легко можем изменить коллекцию.
Красавец! Все термины, которые знаете употребили, или еще остались? Выпендриваетесь, сударь!
@@СергейКапитонов-у1э При этом еще и все перепутал... индекс ему итератор выдает, ага.
На и анале только одно видео
1с - гамно
нрвый канал?
Да, новый канал под 1С программирование.
А вот так её решил. Вроде, тоже правильно?
Процедура ПослеВводаКоличества(Число, Параметры) Экспорт
Если НЕ Число = Неопределено Тогда
// создаём бесконечный цикл
Пока Истина Цикл
// определяем начальное количество строк в документе
НачальноеЧислоСтрок = Объект.ТабличнаяЧасть1.Количество();
// цикл удаления строк по условию количество меньше введённого числа
Для Каждого Строка Из Объект.ТабличнаяЧасть1 Цикл
Если Строка.Количество < Число Тогда
Объект.ТабличнаяЧасть1.Удалить(Строка);
ЭтаФорма.Модифицированность = Истина;
КонецЕсли;
КонецЦикла;
// определяем количество строк в документе после выполнения цикла удаления
КонечноеЧислоСтрок = Объект.ТабличнаяЧасть1.Количество();
// условие прерывания бесконечного цикла
Если НачальноеЧислоСтрок = КонечноеЧислоСтрок Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Во внутренний цикл в Если...КонецЕсли надо тоже Прервать; иначе будет весело 🙂