Базовый курс. Решение ДЗ №3

Представляем решение третьего домашнего задания.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.

комментариев 5 на “Базовый курс. Решение ДЗ №3”

  1. Добрый день, уважаемые коллеги! Немного опоздал с решением . Укатали меня клиенты 1С по области. Ездил долго и много (конец квартала, однако). Однако попробую  по рассуждать над решением домашнего задания..
    Безусловно, необходимо творить цикл
    Для Год=2010 По 2019 Цикл
    Платформа знает номер каждого дня в ГОДУ. Следовательно, номер последнего дня года может стать для нас количеством дней в году. Соответственно, определяем дату конца года.
    КонецГода = Дата(Год,12,31);
    КоличествоДнейВГоду =ДеньГода(КонецГода);
    Вычисляем количество целых недель и, соответственно, количество рабочих дней в данном количестве целых недель.
    ПолныхНедель = Цел(КоличествоДнейВГоду/7);
    РабочихДней = ПолныхНедель*5;
     
    Помним, что год – не целое количество недель, а  n- количество дней + количество дней меньше целой недели. Вычисляем этот остаток дней
                ОстатокДней =  КоличествоДнейВГоду%7;
    Создаем цикл для вычисления рабочих дней в остатке дней не полной недели.. Не знаю, как у кого, но я не сразу догадался (старею, видно), что речи не идет о понедельниках, вторниках и т.д. Платформа знает нумерацию дней недели.
    Для Сч=1 По ОстатокДней Цикл
                ТекДень = Дата(Год,1, Сч);
                Если ДеньНедели(ТекДень)<6 Тогда
                            РабочихДней = РабочихДней+1;
                            КонецЕсли;  
                КонецЦикла;
     
    Прописываем даты наших праздников (спасибо, что хоть эти оставили)
                Янврь01 = Дата(Год,1,1);
                Февраль23 = Дата(Год,2,23);
                Март08 = Дата(Год,3,8);
     
    Для того, что бы конечная формула расчета рабочих дней выглядела просто, создаем отдельную функцию, которая бы отслеживала «попадания» наших праздников на рабочие дни. Это ещё удобно тем, что потом в данну функцию в качестве параметра передадим праздники.
    Функция РабочийДень(День)
       Если  ДеньНедели(День)<6 Тогда
              Возврат 1 ;
                  Иначе
                              Возврат 0;  
       КонецЕсли;
    КонецФункции
     
    Затем после цикла с ОстатокДней, можно написать формулу рабочих дней.
                РабочихДней = РабочихДней – РабочийДень(Янврь01) – РабочийДень(Февраль23) – РабочийДень(Март08);
     
    И вывести сообщение
                Сообщить(Строка(Год) + “Год – ” + РабочихДней + ” рабочих дней”);

  2. Хм:):) Привычка никогда не считать в алгоритме константные значения сыграла злую шутку. Может мой алгоритм и пооптимальней, но большей части функций работы с датами я не задействовал.
     
    Один вопрос по разбору. Есть-ли причина по которой следует предпочитать с точки зрения оптимальности возвращать значения из функции и оперировать им, а не изменять передаваемое по ссылке значение в процедуре?

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

  3. Евгений, я обратил внимание, что в первом видео текст домашнего задания продолжается “создайте структуру “ВыходныеДни” …” На сайте выложена другая версия, в которой этого условия нет. Я понимаю, что это не особо важно, но все-таки, на сайте в PDF правильная версия?

    • На сайте версия правильная.
      Работа со структурой перенесена в задание №4.