Денис - 1С программист
Денис - 1С программист
  • 1
  • 40 430
Задача по 1С с собеседования (видео 2) Удалить строки из Документа программно
В данном видео разберём задачу с подвохом, её часто задают на собеседованиях при приёме на работу 1С Программистом.
Условие задачи: Удалить из Табличной части документа строки, количество в которых меньше или равно количеству, введённому пользователем.
Казалось бы задача простая, но у новичков в 1С она вызывает некоторые трудности, какие, смотри в видео.
Данное видео для Новичков в 1С, если ты крутой 1С Программер, то можешь предложить какую-то более сложную задачу с собеседования или из своей практики, пиши в комментарии или мне в социальные сети, давай порешаем сложные и интересные задачи вместе.
00:00 Приветствие
00:30 Условие задачи
00:48 Разбираем условие задачи
01:28 Решаем как неправильно
09:02 Выясняем, почему неправильно
12:40 Первый правильный вариант
17:10 Вариант с Массивом строк
21:13 Обходим строки снизу вверх Циклом Для
27:37 Решаем задачу циклом Пока
30:50 Завершение
#ДенисПрограммист
#1С
#Программист1С
#1СБухгалтерия
#1ССпециалист
#1ССобеседование
มุมมอง: 40 435

วีดีโอ

ความคิดเห็น

  • @bonjovi8610
    @bonjovi8610 18 วันที่ผ่านมา

    вариант с массивом не понятен почему при удалении строк из массива удаляются эти строки из табличной части? или почему при добавленгии нужной строки в массив она исчазаетиз табличной части?

  • @SergeyBagramov1
    @SergeyBagramov1 3 หลายเดือนก่อน

    Если обходить по индексу снизу вверх, но при этом человек поменяет местами индекс нескольких строчек, или ещё хуже, если будут удаляться, дробиться или добавляться строки - то индексы будут не в каком-то правильном порядке, а вообще могут плясать. Например: сделайте упорядочивание строк (стрелочками или через зажатый Shift), то не факт, что всё так и отработает. Поэтому я всегда использую через "МассивСтрокНаУдаление", т.е. через 2 цикла.

  • @alimuradov
    @alimuradov 5 หลายเดือนก่อน

    Я всегда через НайтиСтроки ищу с отбором строки к удалнию, потому просто удаляю строки в цикле. На видео это второй вариант с массивом в чуть более другой интерпретации.

    • @denfreeman9310
      @denfreeman9310 5 หลายเดือนก่อน

      Не подходит к предложеной задаче. Как в НайтиСтроки Вы будете искать значение меньше или равно 30?

  • @NoName-nt7vj
    @NoName-nt7vj 6 หลายเดือนก่อน

    Коллега, за такое решение задачи с кнопкой на форме документа Вас просто без слов выставят за дверь. Не позортесь.

  • @user-bf2us9ow5c
    @user-bf2us9ow5c 6 หลายเดือนก่อน

    Зачем вы ломаете новичкам мозг! Проще всего и нагляднее, создать массив, пробежать циклом табличную часть и проверить на условие количество < введеное количество, добавляем строки в массив если условие истина. Потом циклом по каждому элементу масива удаляем строку табличной части. УдаляемыеСтроки = Новый массив; Для каждого СтрокаТЧ из ТабличнаяЧасть Цикл Если СтрокаТч.Количество <= введенноеЗначение Тогда удаляемыеСтроки. Добавить(СтрокаТч) КонецЕсли; КонецЦикла; Для каждого удаляемаяСтрока из УдаляемыеСтроки Цикл ТабличнаяЧасть. Удалить(УдаляемаяСтрока) КонецЦикла; Это намного проще воспринимать , чем городить заумные алгоритмы

  • @hacsi1
    @hacsi1 7 หลายเดือนก่อน

    Спасибо большое.

  • @stone_smile
    @stone_smile 7 หลายเดือนก่อน

    Здравствуйте, меня заинтересовала покупка вашего канала, как с вами можно связаться?

  • @mobilitymoon5232
    @mobilitymoon5232 9 หลายเดือนก่อน

    К чему это видео на 30 минут, если правильные ответы можно найти за 15 секунд. Еще можно через запрос, сделай видео на 40 минут!

  • @darwind6675
    @darwind6675 10 หลายเดือนก่อน

    Здравствуйте, подскажите разве в 1с нет запросов на удаление? Как в msAccess. Проще выполнить такой запрос.

  • @ilya2184
    @ilya2184 11 หลายเดือนก่อน

    Про цикл с минуса до 0 - было новое, не видел такого. Модифицированность вручную - плохая практика, кнопка будет доступна на форме только для чтения: свойство команды 'изменяет сохраняемые данные'.

  • @user-vz3ng7fj5q
    @user-vz3ng7fj5q ปีที่แล้ว

    Добрый день! Есть одна неточность, если я хочу удалить строки с количеством = 0, то у меня ничего не получится, потому что условие ЗначениеЗаполнено(Число) не выпонится, надо писать Если Число <> Неопределено

  • @VSergeyV
    @VSergeyV ปีที่แล้ว

    Задачка из книги Радченко 1с программирование для начинающих, про массивы)))

  • @user-vv3wi9nv5w
    @user-vv3wi9nv5w ปีที่แล้ว

    Я так понял, что 1С делали русские и они мыслили в категориях русского языка, который невозможно изучить по правилам, а только лишь постоянными употреблением языковых оборотов и тупого заучивания бесконечных особенностей. 🙂

  • @nullnull557
    @nullnull557 ปีที่แล้ว

    Сразу понял какая ошибка будет. Смещение индексов

  • @tikeyl7563
    @tikeyl7563 ปีที่แล้ว

    Денис, пилите ещё видосы по 1с, пожалуйста.

  • @pavelstepanenko2651
    @pavelstepanenko2651 ปีที่แล้ว

    Снизу вверх - я до такого не допёр)

  • @pavelstepanenko2651
    @pavelstepanenko2651 ปีที่แล้ว

    Круто! Спасибо, за отличное видео

  • @DimaVort
    @DimaVort ปีที่แล้ว

    Где на собеседовании такие задачи дают? Мне дали задачу сделать отчет abc анализ продаж прямьім запросом. Желательно одним запросом к базе. Там вроде оконньіе функции sql надо использовать.

  • @fflakonoff1
    @fflakonoff1 ปีที่แล้ว

    А почему больше нет видосов на канале по 1С?

  • @user-qh5bf5td1d
    @user-qh5bf5td1d ปีที่แล้ว

    автор, а вы видео удалили и больше не снимаете? Или переехали куда то на другой канал?

  • @user-qw1yk1uk2m
    @user-qw1yk1uk2m ปีที่แล้ว

    На и анале только одно видео

  • @evic1025
    @evic1025 ปีที่แล้ว

    0 - тоже число

  • @dimapetrov84
    @dimapetrov84 ปีที่แล้ว

    Ни разу не программист, чисто пользователь. Почему просто не запустить первый вариант 2 раза?)

    • @8tshk8
      @8tshk8 ปีที่แล้ว

      А если три строки подряд будут подходить под условие удаления? А если 500? А если все, например, 100500?

  • @user-rf8dz8sm4o
    @user-rf8dz8sm4o ปีที่แล้ว

    а не проще запросом выгрузить и загрузить?

  • @Rarogg
    @Rarogg ปีที่แล้ว

    Хотелось бы больше видео на вашем канале. Очень понравился разбор данной задачи.

  • @dmitrymedvedd
    @dmitrymedvedd ปีที่แล้ว

    1с - гамно

  • @cgwicio8658
    @cgwicio8658 ปีที่แล้ว

    Зачем в начале ролика заикаться относительно системных знаний, если дальше идут подобные рассуждения? В данном случае мы полагаемся на реализацию итератора, которая нам неизвестна и на этом нужно ставить точку. Если вкратце, то данное поведение итератора не документировано, и на его стабильность нельзя полагаться. Индекс строки ни о чем не говорит, так как в данном случае это индекс строки которую выдал итератор, а не индекс который связан с самим итератором. Вообще вполне возможно в какой-нибудь из платформ "неправильный" подход внезапно покажет корректные результаты, а сам подход будет объявлен законным, так как будет регламентирована логика работы итератора. Как пример: ListIterator из java. Поэтому попытки объяснить что происходит просто не имеют смысла. Если рассмотреть пример более глубоко, то по сути мы имеем дело с коллекцией, чья реализация небезопасна в многопоточной среде, так как используемый итератор, полагается на то что коллекция иммутабельна (хотя бы на время его существования), хотя на примере видно, что даже в однопоточной среде мы легко можем изменить коллекцию.

    • @user-yu8mh7yt5y
      @user-yu8mh7yt5y ปีที่แล้ว

      Красавец! Все термины, которые знаете употребили, или еще остались? Выпендриваетесь, сударь!

    • @denfreeman9310
      @denfreeman9310 5 หลายเดือนก่อน

      @@user-yu8mh7yt5y При этом еще и все перепутал... индекс ему итератор выдает, ага.

  • @denplanchik1523
    @denplanchik1523 ปีที่แล้ว

    3 вариант использовали в 7.7, т.к. там других вариантов не было. Вариант 2 классический способ для 8.2, 8.3, используется в типовых механизмах

  • @user-gq8ub8dk8o
    @user-gq8ub8dk8o 2 ปีที่แล้ว

    Подскажите, пишет ошибку: Ожидается ключевое слово "Тогда" Если Значение "?" заполнено (Число) Тогда (Проверка: Сервер)

    • @evic1025
      @evic1025 ปีที่แล้ว

      ЗначениеЗаполнено() в одно слово пишется

  • @serhii_chechelnytskyi
    @serhii_chechelnytskyi 2 ปีที่แล้ว

    Добрый день. А Вы не думали над тем, чтобы записать уроки по созданию простой конфигурации учёта оргтехники на фирме?

  • @SLikhushin
    @SLikhushin 2 ปีที่แล้ว

    Почему вы не используете ВвестиЧислоАсинх () ???

    • @8tshk8
      @8tshk8 ปีที่แล้ว

      В каком релизе он появился? Версию платформы и совместимости нужно учитывать.

  • @trreg4669
    @trreg4669 2 ปีที่แล้ว

    Для Индекс=-ВГраница По 0 Цикл - шедевр! очень красиво

    • @Mrnuctoh
      @Mrnuctoh ปีที่แล้ว

      Получение элемента коллекции по индеку - гораздо медленнее обхода коллекции через Для Каждого. Говнокод, короче.

  • @PetrovAnton05
    @PetrovAnton05 2 ปีที่แล้ว

    Так много глупых комментариев , скорее всего их пишут разработчики , получается глупые разработчики. Про какие то запросы пишут. Ну это все либо от тупости, что печально, либо от мало опыта, что исправимо. Ну во первых если вы будете писать запрос, вам придется это делать на сервере, во вторых запрос к чему писать вы будете? К табличной части документа, который уже записан? А если пользователь внес строку , но еще не записал документ? Очевидно эта строка не попадет в выборку. Придется закидывать ТЧ как параметр. Чтобы выбрать строки? Ну тупо ведь. Автор все четко сделал. Три разных варианта перебора таблицы показал. Я лично в основном пользуюсь массивом , закидываю туда строки для удаления , потом удаляю. Легко отладить , и глянуть какие строки были , какие удалить , и что получилось. Если вы не способны читать такой код , то это вопрос к вам. Теперь понятно откуда берется говнокод с вашими запросами.

    • @sKlayton
      @sKlayton 2 ปีที่แล้ว

      +++ все по фактам

  • @user-cb8jr3rj7s
    @user-cb8jr3rj7s 2 ปีที่แล้ว

    Пацаны запомните, не работодатель отбирает кандидата, а вы отбираете работодателя, пусть они делают тестовые задания))

  • @RekardoMorales
    @RekardoMorales 2 ปีที่แล้ว

    Понравилось. Отличное понятное видео.

  • @user-bk7tx6vj7h
    @user-bk7tx6vj7h 2 ปีที่แล้ว

    Отличное видео!! 👍👑 Выпускайте ещё такие видео!!

  • @user-yf5jz1rl6h
    @user-yf5jz1rl6h 2 ปีที่แล้ว

    Спасибо за вашу работу! Вы очень доступно объясняете, интересно и полезно!

  • @user-vq5vb7tz8v
    @user-vq5vb7tz8v 2 ปีที่แล้ว

    30 минут делать видео, который каждый, кто хоть раз писал удаление строк гуглил за пару минут.

  • @user-oj6vt8ht6x
    @user-oj6vt8ht6x 2 ปีที่แล้ว

    Отличное видео! Спасибо! Ждём ещё роликов

  • @user-ci1hj1il4h
    @user-ci1hj1il4h 2 ปีที่แล้ว

    А если в тч 10 тыс. Строк? Как долго перебирать будет? :) нужно запрос делать, получив все строки удовлетворяющие условию, отсортировать по убыванию номер строки и перебирать только их для того, чтобы удалить)

    • @ArtVadan
      @ArtVadan ปีที่แล้ว

      Яб выгрузил таблицу в запрос, условием отобрал то что надо оставить и обратно бы загрузил)

    • @Mrnuctoh
      @Mrnuctoh ปีที่แล้ว

      @@ArtVadan Кросавчег, чё. +Серверный вызов. +Насилие SQL-сервера бессмысленной загрузкой туда параметра большого объема. +Накладные расходы на менеджмент временных таблиц SQL-сервером. Спасибо тебе, благодаря такому коду я недёшево беру за улучшение производительности кастомок.

    • @Mrnuctoh
      @Mrnuctoh ปีที่แล้ว

      Зачем лишний серверный вызов, если можно обойтись без него?

    • @TTrimasova_life
      @TTrimasova_life ปีที่แล้ว

      Неужели кто-то ещё перебирает данные циклами. ))

    • @Mrnuctoh
      @Mrnuctoh ปีที่แล้ว

      @@TTrimasova_life А какие по-вашему варианты?

  • @oleg_avgurov
    @oleg_avgurov 2 ปีที่แล้ว

    А вот так её решил. Вроде, тоже правильно? Процедура ПослеВводаКоличества(Число, Параметры) Экспорт Если НЕ Число = Неопределено Тогда // создаём бесконечный цикл Пока Истина Цикл // определяем начальное количество строк в документе НачальноеЧислоСтрок = Объект.ТабличнаяЧасть1.Количество(); // цикл удаления строк по условию количество меньше введённого числа Для Каждого Строка Из Объект.ТабличнаяЧасть1 Цикл Если Строка.Количество < Число Тогда Объект.ТабличнаяЧасть1.Удалить(Строка); ЭтаФорма.Модифицированность = Истина; КонецЕсли; КонецЦикла; // определяем количество строк в документе после выполнения цикла удаления КонечноеЧислоСтрок = Объект.ТабличнаяЧасть1.Количество(); // условие прерывания бесконечного цикла Если НачальноеЧислоСтрок = КонечноеЧислоСтрок Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры

    • @denfreeman9310
      @denfreeman9310 5 หลายเดือนก่อน

      Во внутренний цикл в Если...КонецЕсли надо тоже Прервать; иначе будет весело 🙂

  • @user-hd7hw6gt2m
    @user-hd7hw6gt2m 2 ปีที่แล้ว

    Огромное спасибо. Очень понятно

  • @user-vi1hg5ic5d
    @user-vi1hg5ic5d 2 ปีที่แล้ว

    Я ничего не понял

  • @user-lj9vd9lj7y
    @user-lj9vd9lj7y 2 ปีที่แล้ว

    проблема часто не в отсутствии системных знаний. ряд функций человек помнит, только если постоянно их использует Например, те, кто занимается чисто разработкой, обычно не плохо помнят многое, что касается интерфейса, но могут забыть, как настраивается доступ. И наоборот, те, кто основную работу выполняют на поддержке и исправлении, могут напрочь забыть многое из интерфейсных решений. Отдельная тема - помнить подробно настройки и особенности СКД. Я просто гарантирую, что если регулярно не делать отчеты хотя бы пол-года, то скил заметно снижается.

    • @MrTorfable
      @MrTorfable 4 หลายเดือนก่อน

      Блин, оказывается это не только у меня так. А я думал, что я просто тупой😅

  • @TheCherTolik
    @TheCherTolik 2 ปีที่แล้ว

    Почему нельзя просто строки по условию перебрать в массив и позже перебрать массив строк?

    • @PetrovAnton05
      @PetrovAnton05 2 ปีที่แล้ว

      А кто сказал что нельзя ? 😂

  • @timin040481
    @timin040481 2 ปีที่แล้ว

    Как же все сложно. Есть более простые способы. Правильно комментаторы говорят массив, запрос + перезапись

    • @user-tx3ep1ww3z
      @user-tx3ep1ww3z 2 ปีที่แล้ว

      Запрос это уже обращение к серверу

  • @lazarusdvu
    @lazarusdvu 2 ปีที่แล้ว

    Первое что пришло в голову - это повторять этот цикл до тех пор, пока он не перестал бы удалять строки ) Вообще я сюда подеградировать пришел и позалипать на котиков, а не на задачки по программированию в час ночи. Мое негодование было на столько сильно что пришлось даже подписаться

  • @user-hd2hn3pe5j
    @user-hd2hn3pe5j 2 ปีที่แล้ว

    Запросом по табличной части с отбором по количеству получаем только нужные строки и перезаписываем табличную часть выборкой из запроса. и всё. никаких циклов, кучи проверок и индексов.

    • @8tshk8
      @8tshk8 ปีที่แล้ว

      Тоже подумал про данный вариант. Кстати, по поводу выполнения на стороне клиента. Это тоже может быть большим вопросом. Когда строк у документа 10 - это одно дело. А когда 10000?

    • @user-hd2hn3pe5j
      @user-hd2hn3pe5j ปีที่แล้ว

      @@8tshk8 сложно представить в каком случае нужно вводить такое количество строк в один документ и в один день. пока такое не встречал даже в магазинах канцелярии. при больших объемах данных в типовых 1с реализована запись частями, а не одним куском.

    • @user-hd2hn3pe5j
      @user-hd2hn3pe5j ปีที่แล้ว

      @@8tshk8 сложно представить в каком случае нужно вводить такое количество строк в один документ и в один день. пока такое не встречал даже в магазинах канцелярии. при больших объемах данных в типовых 1с реализована запись частями, а не одним куском.

    • @andreytatarchenkov5146
      @andreytatarchenkov5146 ปีที่แล้ว

      Не оптимально вызывать сервер, когда можно обойтись клиентом.

    • @Gesperid
      @Gesperid ปีที่แล้ว

      @@andreytatarchenkov5146 На клиенте не хранится вся ТЧ, а получается порциями. Поэтому начиная с некоторого (небольшого) количестве строк в ТЧ - обработать её без вызова сервера не получится.

  • @mendicator4319
    @mendicator4319 2 ปีที่แล้ว

    Капец как сложно. Выгружаешь строки в массив, идешь по массиву без всяких индексов и удаляешь строки. И да, все что ты написал надо делать на сервере, еще -1 балл