Собеседование на программиста 1С. Задача 1. Распределение в таблице значений.

Поделиться
HTML-код
  • Опубликовано: 19 дек 2024

Комментарии • 56

  • @saddyleb
    @saddyleb 11 месяцев назад +4

    Обычно делаю вот так (вроде понятнее):
    КоэффициентРаспределения = РаспределяемаяСумма/Таб.Итог("Количество");
    Для Каждого Стр Из Таб Цикл
    Если Таб.Индекс(Стр)=Таб.Количество()-1 Тогда
    СуммаКРаспределению = РаспределяемаяСумма;
    Иначе
    СуммаКРаспределению = Окр(Таб.Количество()*КоэффициентРаспределения,2);
    КонецЕсли;
    РаспределяемаяСумма = РаспределяемаяСумма - СуммаКРаспределению;

    Таб.Сумма = Таб.Сумма + СуммаКРаспределению;
    КонецЦикла;

    • @mdilshod91
      @mdilshod91 6 месяцев назад

      а если в последней строке база 0? )

  • @nanami265
    @nanami265 11 месяцев назад +2

    Я накидал в Excel таблицу с вашим алгоритмом и "классическим" из начала видео, ваш показал себя более точным, так что возьму его на вооружение, спасибо.
    НО! Если ввести сумму распределения с копейками, то он распределяет большего нужного в последней строке, поэтому я бы для проверки ввёл новую переменную:
    СуммаИзменения = Мин(СуммаКРаспределению, РаспределяемаяСумма);
    И уже значение этой переменной использовать для сложения с Стр.Сумма и вычитания в РаспределяемаяСумма
    Надеюсь понятно описал

    • @nanami265
      @nanami265 11 месяцев назад

      Поправка, я накосячил)) нельзя использовать метод "Мин", т.к. округления может быть в меньшую сторону.
      Нужно для последней строки распределять всю сумму остатка, тут в комментариях как раз есть такой пример

    • @mdilshod91
      @mdilshod91 6 месяцев назад

      @@nanami265 суть его метода (на мой взгляд) как раз в том, что не нужно парится с последней строкой. и копейки не зависнут потому что в послдней строке базы у тебя всегда будет коэффициент распределения равен 1. То есть останется распределить на одну строку поэтому распределится вся сумма.

    • @Forest_dahfksd
      @Forest_dahfksd Месяц назад

      @@mdilshod91 не всегда

  • @sergio_khb
    @sergio_khb Год назад +3

    Спасибо, можно ещё примеры для собеседований

  • @romamyasnikov9760
    @romamyasnikov9760 10 месяцев назад

    2 вопроса к видео, 1) как писсали выше - 100 длинна количества и суммы вроде как не ровны 10 (если это опись, а не задумывалось как дезинформация, то все ок, все мы люди)
    2) а зачем пускать 3 раза цикл ради сообщить, можно же одним же обходом сначала сообщить исходное писать, ниже сразу пересчитанное в этом же цикле, если хочется выделить отдельно то что дано, то также минус цикл (последний цикл лишний, все можно в пересчете). Чем меньше циклов, тем быстрее работает код, ну да и люди смотрят разные, те кто начинает (а значит будут также повторять циклы пускать лишние, там где они и не нужны были по факту).
    Ну и есть минивопрос: если итоги делаются по тз и перед ним шел цикл по тз, а не проще ли было прогоняя сообщение, сразу собирать итог по количеству?

    • @РоманЧип-с5ч
      @РоманЧип-с5ч 8 месяцев назад

      Сообщения - способ показать работу алгоритма, чтобы отделить логику алгоритма распределения от вывода и проверки результата ,ясное дело в реальной задаче будет 1 цикл с обработкой ТЧ документа.

  • @domrachevconsulting
    @domrachevconsulting  Год назад +4

    Друзья. Скажите, пожалуйста, нужно выкладывать данные обработки куда-нибудь?

  • @Serg-s3d
    @Serg-s3d 9 месяцев назад +2

    На какую позицию был собес с данной задачей? Заранее благодарен

    • @domrachevconsulting
      @domrachevconsulting  6 месяцев назад +1

      Добрый день. На программиста (200 000 рублей удаленно). но там было три задачи. (это одна из них).

  • @AlexandrPuzakov
    @AlexandrPuzakov Год назад +7

    Как всё запущено) В библиотеке стандартных подсистем есть готовая функция ОбщегоНазначения.РаспределитьСуммуПропорциональноКоэффициентам()

    • @domrachevconsulting
      @domrachevconsulting  Год назад +3

      Спасибо за комментарий. Запущено не запущено - это решение задачки на собеседовании - а если будет пустая база (создаешь ее сам - там этой БСП не будет). Даже если через БСП напишешь - то уже провалил собеседование. Советую уточнить на собеседовании а можно так или нельзя. Удачи)

    • @Игорь-б4я7я
      @Игорь-б4я7я Год назад

      Катати там на вход подается КоэффициентыРаспределения , а тут показано как расчитать его. Задача простая , но интересно.

    • @Anastasiya-tm3rd
      @Anastasiya-tm3rd 11 месяцев назад

      ​@@domrachevconsultingвпустую базу можно подключит бсп. Для чего эта база будет создаваться-то?

    • @domrachevconsulting
      @domrachevconsulting  11 месяцев назад +1

      @@Anastasiya-tm3rd Добрый день. Я привел задачи для тестирования на испытательном. Дают вам ноут. там пустая база. говорят сделать то-то. БСП установить можно - но откуда вы ее возьмете на собеседовании - будете на ИТС заходить вводить пароли (а если интернета нет или доступа к ИТС) или с флешки (а если прав администраторских нет на установку - так и потерял 10 минут на все - при чем собеседующий может все это видеть - а поставит вопрос о профессионализме.)

    • @mariashapovalova9810
      @mariashapovalova9810 9 месяцев назад +2

      Да, очень важно уточнить вводные: я бы это решение оценила как ‘спасибо за креатив, вы знаете алгоритмы, но мне нужно ещё и знание БСП чтобы не тратить время на изобретение велосипеда’

  • @Forest_dahfksd
    @Forest_dahfksd Месяц назад

    Если распределяемая сумма будет не 40, а напр 41 то будет ошибка?

  • @ДаянЯмгуров
    @ДаянЯмгуров Год назад +1

    А что за такая запись таб.колонки.добавить()- выглядит как будто два вызова методов?

    • @domrachevconsulting
      @domrachevconsulting  Год назад +1

      Привет. Здесь крупный объект встроенного языка 1с (ил можно назвать коллекция) "таб", у него есть объекты ".колонки", а метод последний ".добавить()".

  • @olegshpilevoy
    @olegshpilevoy Год назад +2

    А просто РаспределяемуюСумму нельзя разделить на Итог Количество и получить сумму на единицу количества? Зачем этот коэффициент?

    • @domrachevconsulting
      @domrachevconsulting  Год назад +2

      Добрый день. Спасибо за вопрос. Здесь без переменной не обойтись, т.к. мы в последней строке в теле цикла вычитаем уже распределенную сумму. т.е. нам где то нужно хранить остаток для распределения, поэтому только переменная.
      Примечание: если бы не было такой операции, все равно в цикле лучше присвоить вызов функции переменной (в нашем случае .Итог()), т.к. каждый шаг цикла будет выполняться вызов функции и вычисляться по новой. Это опять же время и совсем не красиво. Вызов и выполнение функции всегда дольше по времени чем обращение к (получение значения) переменной. Качественный код начинается с таких мелочей. Удачи.)

    • @olegshpilevoy
      @olegshpilevoy Год назад

      @@domrachevconsulting &НаСервереБезКонтекста
      Функция РаспределитьНаСервере(ЗНАЧ СуммаКРаспределению)
      ТЗ = Новый ТаблицаЗначений;
      ТЗ.Колонки.Добавить("Товар",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(100)));
      ТЗ.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,3)));
      ТЗ.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2)));
      МассивСумм = СтрРазделить("0,100,130,150",",");

      ТекстСообщения = "Исходные данные таблицы:" + Символы.ПС;
      Для ш = 1 по 3 Цикл
      нс = ТЗ.Добавить();
      нс.Товар = "Номенклатура" + ш;
      нс.Количество = ш;
      нс.Сумма = МассивСумм[ш];
      КонецЦикла;

      ДополнитьТекстСообщенияСтрокойСообщения (ТекстСообщения, ТЗ);
      ТекстСообщения = ТекстСообщения + "Измененные данные таблицы:" + Символы.ПС;

      СуммаНаЕдиницуКоличества = СуммаКРаспределению / ТЗ.Итог("Количество");
      СуммаСРаспределениемИтоговая = ТЗ.Итог("Сумма") + СуммаКРаспределению;
      Для Каждого стр из ТЗ Цикл
      стр.Сумма = стр.Сумма + Окр(стр.Количество * СуммаНаЕдиницуКоличества,0);
      КонецЦикла;
      стр.Сумма = стр.Сумма + СуммаСРаспределениемИтоговая - ТЗ.Итог("Сумма") ;

      ДополнитьТекстСообщенияСтрокойСообщения (ТекстСообщения, ТЗ);
      Сообщить(ТекстСообщения);
      КонецФункции
      &НаСервереБезКонтекста
      Процедура ДополнитьТекстСообщенияСтрокойСообщения(ТекстСообщения, ТЗ)
      Для Каждого стр из ТЗ Цикл
      ТекстСообщения = ТекстСообщения + СтрШаблон("%1 %2 %3",стр.Товар, стр.Количество, стр.Сумма) + Символы.ПС;
      КонецЦикла;
      КонецПроцедуры
      //Как то так я имел в виду

    • @domrachevconsulting
      @domrachevconsulting  Год назад

      @@olegshpilevoy Можно - это первое что в голову приходит. В вашем решении возможны отклонения из-за округлений и распределиться может не та сумма которая по условию.

  • @Nice_One_Me
    @Nice_One_Me Год назад +1

    А как округлиться 0,5 и что с этим делать?

    • @domrachevconsulting
      @domrachevconsulting  Год назад +2

      В какой момент? - не понял.

    • @domrachevconsulting
      @domrachevconsulting  Год назад +2

      Добрый день. Спасибо за вопрос. Здесь в функции округления Окр() второй параметр 0, т.е. округление будет происходить до целого числа (согласно условию задачи).
      Коэффициент по мере выполнения цикла будет стремиться к 1, т.е. на последнем шаге будет равен 1.
      Если я не понял вопроса, то расскажите что вы хотели спросить.)

    • @Nice_One_Me
      @Nice_One_Me Год назад

      @@domrachevconsulting 14:01 РаспределяемаяСумма = 63, количество в 3 строке сделать единицу. Там округление идет от 0,5 - 2 раза должно в большую сторону округлить, не будет ли превышение суммы. Вот в чем вопрос.

  • @evgenievgeni2016
    @evgenievgeni2016 11 месяцев назад +1

    А этот пример хороший. Со срезом последних вообще никуда не годилось. Видео про срез последних и предпоследних лучше удалить, чтобы дерзкие молодые головы не ссылались на него как на эталон.

  • @F114able
    @F114able Год назад

    Я не понимаю.
    Говорит, сделаем точность числа = 10 и пишет 100.
    Как можно быть невнимательным в программировании?

    • @domrachevconsulting
      @domrachevconsulting  Год назад +3

      Добрый день. Это было специально сделано - вы первый кто за полгода это увидели (или по крайней мере прокомментировали). Вас ждет приз. Да в программировании может быть много ошибок - не ошибается только тот кто ничего не делает.

    • @F114able
      @F114able Год назад

      @@domrachevconsulting Доброе утро!
      У меня был реальный кейс с ошибочной точностью числа, которая привела к "округлению" одной из величин ВГХ товара до нуля и при расчете объема тоже получилось якобы 0, что не позволило назначить рейсу транспорт. Поэтому теперь я очень внимательно за этим слежу :)

    • @mnnovikov845
      @mnnovikov845 11 месяцев назад +1

      Я тоже не понимаю, как в слове длина можно услышать "точность числа". - "Тщательней надо, ребята."

    • @domrachevconsulting
      @domrachevconsulting  11 месяцев назад

      @@mnnovikov845 Спасибо за комментарий. Не помню в каком контексте сказал. Но "точность числа" распространённый оборот (можете в Google набрать). И в целом примечание: "Неидеальное действие лучше идеального бездействия."

    • @domrachevconsulting
      @domrachevconsulting  11 месяцев назад

      Добрый день. У вас личные сообщения отключены. Можете написать на почту admin@domrachev.ru или +7(916)509-65-16 watsap. Нужно имя и адрес для отправки. Андрей Домрачев.

  • @Игорь-б4я7я
    @Игорь-б4я7я Год назад +2

    Подскажите по Коэффициентам это алгебра 6 класс или пораньше? просто интересно стало. Спасибо за пример!

    • @domrachevconsulting
      @domrachevconsulting  Год назад +2

      Добрый день. Я не помню - давно закончил и наверно все поменялось в программе.

  • @Алексей-в1в3п
    @Алексей-в1в3п Год назад +3

    Это точно задача с собес по 1с? Скорее собеседование по экселю

    • @domrachevconsulting
      @domrachevconsulting  Год назад +1

      Привет. Да. Иногда полезно владеть Excel - при миграции данных, меппинге данных. Аналогов еще нет.

  • @ЕвгенийК-ц4д
    @ЕвгенийК-ц4д Год назад +6

    Абсолютно бесполезная задача, на собесе давать ее смысла никакого. На собесе спрашивают знание типовых.

    • @ЕвгенийК-ц4д
      @ЕвгенийК-ц4д Год назад +2

      @@Игорь-б4я7я а ты по всей видимости вообще не работал

    • @domrachevconsulting
      @domrachevconsulting  Год назад +2

      Привет. Бывают разные собеседования. Знание типовых тоже хорошо. Но в 1с сейчас деление идет специалистов на программистов и на консультантов-аналитиков. Последние как раз и работают с бизнесом (пользователями) и должны переложить бизнес-процессы на типовую. чего не хватает дописывает программист.

    • @Anastasiya-tm3rd
      @Anastasiya-tm3rd 11 месяцев назад

      ​@@domrachevconsulting на фикси далеко не всегда есть и аналитик и программист, обычно в одном лице все

    • @domrachevconsulting
      @domrachevconsulting  11 месяцев назад

      @@Anastasiya-tm3rd Да такое возможно - у меня был период в жизни где я делал "все абсолютно" в компании (сеть, сервера, компы, кассы, возил технику в сервис, закупал, админил, прокладывал новую сеть, менял картриджи, возил бухгалтера в налоговую).
      Мое мнение делать карьеру в известных компаниях, на проектах, где есть разделение обязанностей - собственно и зарплаты большие. Занимаюсь подбором программистов и консов - довольно часто вижу: "Хочу 300 000 рублей" - смотришь 10 лет на одном месте сидел (что там делать?)- внедрение из коробки - компания "Без имени", в команде не работал, управление проектами не знает - но гонору и амбиций до кучи.

    • @Anastasiya-tm3rd
      @Anastasiya-tm3rd 11 месяцев назад +2

      @@domrachevconsulting я не про делал все, а про обязанности специалиста 1с, обычно это не просто кодер, чистый кодер никому не нужен. Замена картриджей очевидно не обязанность специалиста 1с

  • @AllaGoriannikova
    @AllaGoriannikova Год назад +1

    какая чепуха

    • @domrachevconsulting
      @domrachevconsulting  Год назад

      Алла, добрый день. Критика должна быть обоснована! Думал может на вашем канале можно поучиться делать не чепуху. Ничего не нашел. Удачи. Самоутверждайтесь в другом месте.