Базовый курс. Занятие №3

Третье занятие по нулевому блоку базового курса.

Необходимо изучить следующие главы 0-го блока.

Глава 16. Основные объекты конфигурации.
Глава 17. Виды учета.

Также нужно выполнить домашнее задание, текст которого доступен на странице.

ps. Участники курса без доступа в мастер-группу отчитаться по домашним заданиям не получиться.

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

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

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

комментариев 176 на “Базовый курс. Занятие №3”

  1. &НаКлиенте
    Процедура Сформировать(Команда)
    Для СчетчикГод = 10 По 20 Цикл
    РабочихДнейВГоду = 0;
    Праздник1 = Дата(“20″+СокрЛП(СчетчикГод) + “0101”);
    Праздник2 = Дата(“20″+СокрЛП(СчетчикГод) + “0223”);
    Праздник3 = Дата(“20″+СокрЛП(СчетчикГод) + “0308”);

    //Проверяем на високосность года
    ФеральТекГода = “20”+СокрЛП(СчетчикГод)+”0201″;
    Если День(КонецМесяца(ФеральТекГода)) = 29 Тогда
    ЧислоДнейВГоду = 366;
    Иначе
    ЧислоДнейВГоду = 365;
    КонецЕсли;
    СекундВСутках = 0;

    //86400 – число секунд в сутках
    Для СчетчикДень = 1 По ЧислоДнейВГоду Цикл
    ТекДата = Дата(“20″+СокрЛП(СчетчикГод) + “0101”) + СекундВСутках;
    ТекДеньНедели = ДеньНедели(ТекДата);

    Если НЕ((ТекДеньНедели = 6) или (ТекДеньНедели = 7)) Тогда
    Если НЕ((ТекДата = Праздник1) или (ТекДата = Праздник2) или (ТекДата = Праздник3)) Тогда
    РабочихДнейВГоду = РабочихДнейВГоду + 1;
    КонецЕсли;
    КонецЕсли;
    СекундВСутках = СекундВСутках + 86400;
    КонецЦикла;

    Сообщить(“20″+СокрЛП(СчетчикГод) + ” “+ СокрЛП(РабочихДнейВГоду)+” рабочих дней”);
    КонецЦикла;
    КонецПроцедуры

  2. Вот ответы
    2011 год 258 рабочих дней
    2012 год 259 рабочих дней
    2013 год 259 рабочих дней
    2014 год 260 рабочих дней
    2015 год 259 рабочих дней
    2016 год 258 рабочих дней
    2017 год 258 рабочих дней
    2018 год 258 рабочих дней
    2019 год 259 рабочих дней
    2020 год 261 рабочих дней
    2021 год 258 рабочих дней

  3. В 2020 больше всех рабочих дней
     НачальныйГод = Год(ТекущаяДата());
     Для СчетчикЛет = НачальныйГод По НачальныйГод + 10 Цикл
     
      МассивПраздников = Новый Массив;
      МассивПраздников.Добавить(Формат(СчетчикЛет,”ЧГ=0″) + “0101”);
      МассивПраздников.Добавить(Формат(СчетчикЛет,”ЧГ=0″) + “0223”);
      МассивПраздников.Добавить(Формат(СчетчикЛет,”ЧГ=0″) + “0308”);
      СтрокаПервоеЧислоГода = Формат(СчетчикЛет,”ЧГ=0″) + “0101”;
      ПервыйДеньГода = ДеньГода(НачалоГода(СтрокаПервоеЧислоГода));
      ПоследнийДеньГода = ДеньГода(КонецГода(СтрокаПервоеЧислоГода));
      КоличествоРабДней = 0;
     
      Для СчетчикМесяцев = 1 По 12 Цикл
      
       Для СчетчикДней = 1 По День(КонецМесяца(ДобавитьМесяц(НачалоГода(СтрокаПервоеЧислоГода), СчетчикМесяцев – 1))) Цикл
        ТекДень = Формат(СчетчикЛет,”ЧГ=0″) + Прав(“0” + СчетчикМесяцев, 2) + Прав(“0″ + СчетчикДней, 2);
       
        Если (ДеньНедели(ТекДень) < 6) И (МассивПраздников.Найти(ТекДень) = Неопределено) Тогда
         КоличествоРабДней = КоличествоРабДней + 1;
        КонецЕсли;
       
       КонецЦикла;
      
      КонецЦикла;
     
      Сообщить(Формат(СчетчикЛет,”ЧГ=0″) + ” год ” + КоличествоРабДней + ” рабочих дней”);
     
     КонецЦикла;
    Евгений, при решении задач что важнее
    правильность решения задачи или красивое решение?
    Не смотрел ни одного решения пока сам не прорешал.
    Очень полезно иногда такие задачки решать.
    1. Работа с отладчиком стала более понятна.
    2. В первом задании после просмотра решения от Евгения свое теперь кажеться не правильны
    Наверное не совсем понял смысл.
    Во втором домашнем задание 2 задание много ошибок получилось. Как говорится век живи..
    3. Работа с запуском 1с из командной строки с различными параметрами.

    • >что важнее правильность решения задачи или красивое решение
      Все-таки важнее правильность решения :)

  4. //Год – Строковое или числовое значение, СписокПраздников – Список, содержащий своими значениями праздничные даты
     <code> &НаСервере
    Функция РабочихДнейВГоду(Год, СписокПраздников = Неопределено)
     
     НачальныйМоментВремениГода = Дата(Число(Год),1,1);
     ТекущееЗначениеДня = НачальныйМоментВремениГода;
     ОдинДень = 24*60*60;
     ВсегоРабочих = 0;
     Пока НачалоГода(ТекущееЗначениеДня) = НачальныйМоментВремениГода Цикл
      Если ДеньНедели(ТекущееЗначениеДня) <> 6 И ДеньНедели(ТекущееЗначениеДня) <> 7 Тогда
       ВсегоРабочих = ВсегоРабочих + 1;
      КонецЕсли;  
      ТекущееЗначениеДня = ТекущееЗначениеДня + ОдинДень;
     КонецЦикла;
     
     Если ТипЗнч(СписокПраздников) = Тип(“СписокЗначений”) Тогда
      Для Каждого Элемент Из СписокПраздников Цикл
       Если ДеньНедели(Элемент.Значение) <> 6 И ДеньНедели(Элемент.Значение) <> 7 Тогда
        ВсегоРабочих = ВсегоРабочих – 1;
          КонецЕсли;
      КонецЦикла;
     КонецЕсли;
     
     Возврат ВсегоРабочих;
     
    КонецФункции
    &НаКлиенте
    Процедура Команда1(Команда)
     СписокПраздников = Новый СписокЗначений;
     
     Для ы = 0 По 9 Цикл
      ТекущийГод = ы + 2010;
      СписокПраздников.Очистить();
      СписокПраздников.Добавить(Дата(Число(ТекущийГод),1,1));
      СписокПраздников.Добавить(Дата(Число(Текущийгод),2,23));
      СписокПраздников.Добавить(Дата(Число(ТекущийГод),3,8));
      
      Сообщить(“Число рабочих дней в “+ТекущийГод+” году:”+РабочихДнейВГоду(ТекущийГод,СписокПраздников));
     КонецЦикла;
    КонецПроцедуры </code>
    Все легко и просто, сначала циклом проходим дни(прибавляем количество секунд в одном дне = 84400), проверяем день недели, в зависимости от результатов проверки изменяем переменную ВсегоРабочих, аналогично со списком содержащем значения праздничных дней. Алгоритм написан в командном интерфейсе, функция РабочихДнейВГоду универсально работает с любым годом, воспринимаемым системой и с любым списком значений из праздников.

  5. Задачу решил так. Цикл по годам. Определяю начало года рабочий  день или нет, если раб то узнаю сколько по его порядковому номеру сколько еще после него раб. дней. В счетчик дней кладу число полученных раб. дней + 2 выходных. Вычитаю их из 365 и делю на 7 *5 Получаю число раб. дней, далее анализирую отстаток(365 – счетчик – 365 и делю на 7 *7) если <= 5 тогда раб. дней + остаток иначе раб. дней + 5. Затем вычитаю праздники: раб.дней  – 3(если праздник выходной тогда перенос, если раб. то тоже необходимо вычесть)

  6. С задержкой, но все же:Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    Для Год = 2011 По 2021 Цикл
    РабДней = 0;
    Для Месяц = 1 По 12 Цикл
    КонецМесяца = КонецМесяца(Дата(Год, Месяц, 1));
    КолДней = День(КонецМесяца);
    Для День = 1 По КолДней Цикл
    Дата = Дата(Год, Месяц, День);
    Если ЭтоВыходной(Дата) Или ЭтоПраздник(Дата, Год) Тогда
    Продолжить;
    КонецЕсли;
    РабДней = РабДней + 1;
    КонецЦикла;
    КонецЦикла;
    Сообщить(“” + Год + ” год – ” + РабДней + ” рабочих дней”);
    КонецЦикла;

    КонецПроцедуры

    Функция ЭтоВыходной(Дата)
    Возврат ДеньНедели(Дата) = 6 Или ДеньНедели(Дата) = 7;
    КонецФункции

    Функция ЭтоПраздник(Дата, Год)
    Возврат Дата = Дата(Год, 1, 1) Или Дата = Дата(Год, 2, 23) Или Дата = Дата(Год, 3, 8);
    КонецФункции
     

  7. ДЗ выполнил
    Пока много сложностей с написанием кода (у меня практически нет опыта программирования)
    Если понимать код, еще более-менее получается, то чтобы написать, что-нибудь, не всегда понимаю, с чего начинать

    • Первые шаги всегда самые сложные…успехов!

  8. eavechorek 02.02.2011 в 23:30

    Извините, что долго, но на работе не просто цейтнот, а подготовка к переходу на 8.2 :о)))
    Вот решение, несколько корявое, но буквально на коленке:
    <code>
    &НаКлиенте
    Процедура Сформировать(Команда)

    ДатаНачала = НачалоГода(ТекущаяДата());
    ДатаКонца = КонецГода(ТекущаяДата());
    СледующийДень = 60 * 60 * 24;

    Для i = 2011 По 2021 Цикл
    Рабочий = 0;
    Пока ДатаНачала <= ДатаКонца Цикл
    ДеньДатыНачала = День(ДатаНачала);
    МесяцДатыНачала = Месяц(ДатаНачала);
    ДеньНеделиДатыНачала = ДеньНедели(ДатаНачала);
    Если ((МесяцДатыНачала = 1) И (ДеньДатыНачала = 1))
    ИЛИ ((МесяцДатыНачала = 2) И (ДеньДатыНачала = 23))
    ИЛИ ((МесяцДатыНачала = 3) И (ДеньДатыНачала = 8)) Тогда
    Иначе
    Если (ДеньНеделиДатыНачала <> 6) И (ДеньНеделиДатыНачала <> 7) Тогда
    Рабочий = Рабочий + 1;
    КонецЕсли;
    КонецЕсли;
    ДатаНачала = НачалоДня(ДатаНачала) + СледующийДень;
    КонецЦикла;

    Сообщить(СокрЛП(i) + ” год – ” + Рабочий + ” рабочих дней”);

    ДатаКонца = КонецГода(ДатаНачала);
    КонецЦикла;
    КонецПроцедуры

    </code>

  9. Максим Ефимов 01.02.2011 в 17:04

    Прошу прощения, что так долго, но просто не было времени. Вот моё решение:
    &НаСервере
    Процедура Подсчитать()
    ТекГодНачало = НачалоГода(ТекущаяДата());

    ВыходныеДни = Новый ТаблицаЗначений;
    ВыходныеДни.Колонки.Добавить(“День”);
    ВыходныеДни.Колонки.Добавить(“Месяц”);

    НоваяСтрока = ВыходныеДни.Добавить();
    НоваяСтрока.День = 1;
    НоваяСтрока.Месяц = 1;

    НоваяСтрока = ВыходныеДни.Добавить();
    НоваяСтрока.День = 23;
    НоваяСтрока.Месяц = 2;

    НоваяСтрока = ВыходныеДни.Добавить();
    НоваяСтрока.День = 8;
    НоваяСтрока.Месяц = 3;

    Для Сч = 1 По КоличествоЛет Цикл
    ЧислоРабочихДней = 0;
    КоэфНачало = 8-ДеньНедели(ТекГодНачало);

    ТекГод1 = ТекГодНачало + КоэфНачало*60*60*24;
    КоэфКонец = ДеньНедели(КонецДня(ТекГодНачало));
    КоэфКонец = ?(КоэфКонец=7,0,КоэфКонец);
    ТекГод2 = КонецГода(ТекГодНачало) – КоэфКонец*60*60*24;

    ЧислоРабочихДней = (ТекГод2 – ТекГод1)/(60*60*24);

    ЧислоРабочихДней = ЧислоРабочихДней + (?(КоэфНачало > 2, КоэфНачало – 2, 0) + ?(КоэфКонец>5,5,КоэфКонец)) – ЧислоРабочихДней/7*2;

    Для Каждого Стр Из ВыходныеДни Цикл
    Если ДеньНедели(Дата(Год(ТекГодНачало),Стр.Месяц,Стр.День)) < 6 Тогда
    ЧислоРабочихДней = ЧислоРабочихДней – 1;
    КонецЕсли;    
    КонецЦикла;

    Сообщить(“” + Год(ТекГодНачало) + ” – ” + Окр(ЧислоРабочихДней));

    ТекГодНачало = ДобавитьМесяц(ТекГодНачало, 12);        
    КонецЦикла;    
    КонецПроцедуры    

  10. <code>
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    КонецГода = КонецГода(ТекущаяДата());
    Для сч = 1 по 10 Цикл
    Сообщить(“Год “+Формат(Год(КонецГода),”ЧГ=0″)+” – “+КоличествоРабочихДней(КонецГода));
    КонецГода = ДобавитьМесяц(КонецГода,12);
    КонецЦикла;

    КонецПроцедуры
    &НаСервере
    Функция КоличествоРабочихДней(КонецГода)

    ВыходныеДни = НеделяГода(КонецГода)*2;

    Год = Формат(Год(КонецГода),”ЧГ=0”);

    ВыходныеДни = ВыходныеДни + ?(ДеньНедели(“”+Год+”0223”)<6,1,0);
    ВыходныеДни = ВыходныеДни + ?(ДеньНедели(“”+Год+”0308”)<6,1,0);

    Если ДеньНедели(“”+Год+”0101”) < 6 Тогда
    ВыходныеДни = ВыходныеДни + 1;
    ИначеЕсли ДеньНедели(“”+Год+”0101”) > 6 Тогда
    ВыходныеДни = ВыходныеДни -1;
    КонецЕсли;

    Если ДеньНедели(КонецГода) < 6 Тогда
    ВыходныеДни = ВыходныеДни – 2;
    ИначеЕсли ДеньНедели(КонецГода) = 6 Тогда
    ВыходныеДни = ВыходныеДни -1;
    КонецЕсли;

    Возврат ДеньГода(КонецГода) – ВыходныеДни;

    КонецФункции // КоличествоРабочихДней()
    </code>

  11. &НаКлиенте
    Процедура РабочДни(Команда)
    Для г=2010 по 2020 цикл
    Год=Дата(г,01,1);
    Выходные=0;
    Рабочие=0;
    Праздники=Дата(г,01,01) ;
    Праздники1= Дата(г,02,23);
    Праздники2= Дата(г,03,08);

    Для ш=1 по 365 цикл  ;
    ДатаГод=Год+(24*3600)*ш;
    Если деньНедели(ДатаГод)=6 или
    деньНедели(ДатаГод)=7 или
    ДатаГод=праздники    или
    ДатаГод=праздники1 или
    ДатаГод=праздники2
    тогда
    выходные=выходные+1;
    иначе
    рабочие=рабочие+1;
    КонецЕсли;
    КонецЦикла;
    Сообщить(год);
    Сообщить(выходные );
    Сообщить(Рабочие );
    КонецЦикла;
    КонецПроцедуры

  12. Рещил задание так:
    Процедура Сформировать(Команда)
    День = 24*60*60;
    ЧислоДнейВГоду = (Дата(ТекГод+1, 1,1) – Дата(ТекГод,1,1))/День;
    ЧРД = Цел(ЧислоДнейВГоду*5/7);

    Если ДеньНедели(Дата(ТекГод,2,23)) <= 5 Тогда
    ЧРД = ЧРД – 1;
    КонецЕсли;

    Если ДеньНедели(Дата(ТекГод,3,8)) <= 5 Тогда
    ЧРД = ЧРД – 1;
    КонецЕсли;

    Сообщить(ЧРД);
    КонецПроцедуры

    Из нулевого блока:
    1. Нового – научился пользоваться табло, операции сравнения для разных типов данных, очень хорошо что даете горячие клавиши и способы быстрого написания кода.
    2. Особых затруднений с материалом не было.
    3. Тема мастер группы.  С этим я уже опоздал.

    • В цикле и с указанием номера года будет так:
      Процедура Сформировать(Команда)
      Для НомерГода = 10 По 20 Цикл
      ТекГод = 2000+НомерГода;
      День = 24*60*60;
      ЧислоДнейВГоду = (Дата(ТекГод+1, 1,1) – Дата(ТекГод,1,1))/День;
      ЧРД = Цел(ЧислоДнейВГоду*5/7);

      Если ДеньНедели(Дата(ТекГод,2,23)) <= 5 Тогда
      ЧРД = ЧРД – 1;
      КонецЕсли;

      Если ДеньНедели(Дата(ТекГод,3,8)) <= 5 Тогда
      ЧРД = ЧРД – 1;
      КонецЕсли;
      Сообщить(Строка(ТекГод) + ” – ” + Строка(ЧРД));
      КонецЦикла;
      КонецПроцедуры

  13. Основаня функция расчета получилась такая
    День = 24*60*60;
     ВсегоДней = (КонецГода(ТекГод)+1-ТекГод)/День;
     Если ВсегоДней = 365 тогда
      высокосный = 1;
     иначе
      высокосный = 0;
     КонецЕсли;
     РабДней = Цел(ВсегоДней/7)*5;
     
     День1Янв   = ДеньНедели(ТекГод);
     День31дек  = ДеньНедели(КонецГода(ТекГод));
     День23фев  = ДеньНедели(ТекГод+День*53);
     День8марта = ДеньНедели(ТекГод+День*66+высокосный);
     Если День1Янв<6 тогда
      РабДней = РабДней +1;
     КонецЕсли;
     Если высокосный = 1 и День31дек<6 тогда 
      РабДней = РабДней +1;
     КонецЕсли; 
     Если День23фев<6 тогда
      РабДней = РабДней -1;
     КонецЕсли;
     Если День8марта<6 тогда
      РабДней = РабДней -1;
     КонецЕсли;
     Сообщить(“Год:”+Формат(ТекГод,”ДФ=yyyy”)+” Рабочих дней:”+РабДней);

  14. И опаздавшие 
    главная трудность была в строке, где проверял остаток дней в году, не вошедшие в 7(дней)*52(недели)
    Январь1 – день недели начала года
    никак не мог понять, что здесь
    ДеньНед=(Январь1-1)+тмр; //это следующий за ним день недели
    надо вычитать было 1, писал сначала так и часа 2 провозился с этой единицей.
    ДеньНед=Январь1+тмр
    (Январь1-1)

    &НаКлиенте
    Процедура Сформировать(Команда)
     Сч=0;
     //кол-во недель в году всегда 52
     //52*7=364 дней в 52 неделях  (+ 1 или 2 дня остатка)
     //52*5=260 максимальное количество раб дней в 52 неделях
     ВыходныеДни = новый Структура(“Год,КолПраздников”);
     Пока Сч<10 Цикл
      знГод=Год(‘20100101000000’);
      знГод=знГод+Сч;
      КоличествоДнейВГоду=ДеньГода(Дата(знГод,12,31,23,59,59));
      ПраздникВВых=0; 
      Январь1=ДеньНедели(Дата(знГод,01,01,23,59,59));
      Февраль23=ДеньНедели(Дата(знГод,02,23,23,59,59));
      Март8=ДеньНедели(Дата(знГод,03,08,23,59,59));
      //если праздники все не попали на вых, то кол раб дней уменьшается на 3,
      РабочихДней=257; //если бы все праздники не попали на вых в 52 неделях
      //если праздник попал на вых, то кол раб дней растет на 1
      //Сколько праздников попало на выходные
      ПраздникВВых= (Январь1=6)+(Январь1=7)
                   +(Февраль23=6)+(Февраль23=7)
                   +(Март8=6)+(Март8=7);
      РабочихДней=РабочихДней+ПраздникВВых;
      ВыходныеДни.Вставить(“Год”,ЗнГод);
      ВыходныеДни.Вставить(“КолПраздников”,ПраздникВВых);
      //далее пользуемся периодичностью – проверяем 1 или 2 дня остатка раб они или нет
      ОстатокДнейВГоду=КоличествоДнейВГоду-364;//= либо 1, либо 2 каждый 4-й год
      тмр=0;
      Пока тмр<ОстатокДнейВГоду Цикл
       тмр=тмр+1;
       //Январь1+364 дня в 52 неделях это тот же день недели
       ДеньНед=(Январь1-1)+тмр; //это следующий за ним день недели
       Если ДеньНед<6 или ДеньНед>7 Тогда
         РабочихДней=РабочихДней+1;
       КонецЕсли; 
      КонецЦикла; 
      Сообщить(Строка(знГод)+” год; Рабочих дней:”+Строка(РабочихДней));
            Сообщить(“Год “+ВыходныеДни.Год + ” праздников “+ВыходныеДни.КолПраздников);
      Сч=Сч+1;
     КонецЦикла; 
    КонецПроцедуры

  15. Разумеется существует множество вариантов решения, мне пришло в голову следующее:
    &НаСервере
    Функция РабочиеДниВГоду(Год)
    Год = Дата(Год,01,01);
    ПервыйДеньГода =  ДеньГода(НачалоГода(Год));
    ПоследнийДеньГода = ДеньГода(КонецГода(Год));

    ТекДата = НачалоГода(Год);

    Дни = 0;
    Для Счетчик=ПервыйДеньГода По ПоследнийДеньГода Цикл
    Если (ДеньНедели(ТекДата) <> 6 И ДеньНедели(ТекДата) <> 7)  Тогда
    Если  НЕ ((Месяц(ТекДата)=1 и День(ТекДата)=1) ИЛИ (Месяц(ТекДата)=2 и День(ТекДата)=23) ИЛИ (Месяц(ТекДата)=3 и День(ТекДата)=8) ) Тогда
    Дни = Дни+1;
    КонецЕсли;
    КонецЕсли;
    ТекДата = КонецДня(ТекДата)+1;
    КонецЦикла;

    Возврат Дни;

    КонецФункции // РабочиеДниВГоду()

  16. А. Решение задачи
    &НаКлиенте
    Процедура Рассчитать(Команда)

    Праздники = Новый Массив;
    Праздники.Добавить(“0101”);
    Праздники.Добавить(“0223”);
    Праздники.Добавить(“0308″);

    Для ТекГод = 2010 По 2020 Цикл
    стргод = Формат(ТекГод,”ЧГ=4″);
    рабочихдней = цел(деньгода(стргод+”1231″)/7)*5;
    остатокдней = деньгода(стргод+”1231”)%7;
    для день = 1 по остатокдней цикл
    если ДеньНедели(Дата(текгод,1,день))<6 Тогда
    РабочихДней = РабочихДней + 1;
    КонецЕсли;
    конеццикла;
    Для каждого дата Из Праздники Цикл
    если ДеньНедели(Дата(стргод+дата))<6 Тогда
    РабочихДней = РабочихДней – 1;
    КонецЕсли;
    КонецЦикла;
    Сообщить(“”+ТекГод+” – “+РабочихДней+” рабочих дней”)
    КонецЦикла;

    КонецПроцедуры
    Б. Обратная связь
    1. При наличии опыта в рабте с v7.7 – новое все, что касается отличий для v8.2
    2. Трудностей не было, материал вполне доступен
    3. Пока не определился

  17. Шнитов Андрей 30.01.2011 в 07:59

    Для определения дня недели по дате, месяцу и году использовал одну из известных формул, имеющихся в открытом доступе. Как выяснилось уже после отладки – в платформе есть свои функции для работы с датой и вычисления дня недели (и, наверное, надо было использовать их). Поэтому получился небольшой велосипед, конечно. Хотя с другой стороны, при доведении этого алгоритма до работоспособного состояния и отладке получил очень хороший опыт работы с отладчиком и понимание некоторых нюансов работы с переменными, массивами и циклами. Опишу в общих чертах мой алгоритм. В функцию расчета рабочих дней передаем номер года. Далее в функции обнуляем количество рабочих дней. Формируем массив из 12 элементов, содержащий количество дней в месяце для не високосного года. Затем по формуле проверяем год на «високосность». Если год високосный, то в массиве заменяем количество дней в феврале на 29. Далее идут два вложенных цикла. Внешний цикл перебирает элементы в массиве, содержащем количество дней в каждом месяце. Внутренний цикл со счетчиком от 1 до количества дней в месяце перебирает дни в месяце. Далее по формуле вычисляется день недели от 1-понедельник до 7-воскресенье. Затем в условии проверяется рабочий ли это день и не выпадает ли он на один из праздников. Если день рабочий, то счетчик дней увеличивается на 1. После завершения всех циклов, функция возвращает количество рабочих дней.

    • >получил очень хороший опыт работы с отладчиком и понимание некоторых нюансов работы с переменными, массивами и циклами
      Это ценный навык.