Домашнее задание №3 базового курса
Третье задание по 0-му блоку базового курса.
Для выполнения рекомендуется изучить следующие главы 0-го блока.
Глава 11. Программный код
Глава 12. Примитивные типы данных
Глава 13. Контекст исполнения кода
Глава 14. Объектная техника
Глава 15. Сервисные средства по написанию кода
Глава 16. Основные объекты конфигурации.
Глава 17. Виды учета.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.
1) Не стал мудрить и сделал с первого раза так, как пришло в голову.
Создал серверную функцию «РассчитатьКоличествоРабочихДнейВГоду», которая вычисляет количество дней для заданного в единственном параметре года.
&НаСервере
Функция РассчитатьКоличествоРабочихДнейВГоду(Год)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить(“Месяц”);
ТЗ.Колонки.Добавить(“ДеньНедели”);
ТЗ.Колонки.Добавить(“ЧислоМесяца”);
ТЗ.Колонки.Добавить(“НомерДняНедели”);
Для Месяц = 1 По 12 Цикл
ДнейВМесяце = День(КонецМесяца(Дата(Год,Месяц,1)));
Для Д =1 По ДнейВМесяце Цикл
ДатаИзСтроки = Дата(Год,Месяц,Д);
НовСтр = ТЗ.Добавить();
НовСтр.ДеньНедели = ОпределитьДеньНедели(ДеньНедели(ДатаИзСтроки));
НовСтр.Месяц = ОпределитьМесяцГода(Месяц);
НовСтр.ЧислоМесяца = Д;
НовСтр.НомерДняНедели = ДеньНедели(ДатаИзСтроки);
КонецЦикла;
КонецЦикла;
Счетчик = 0;
Пока Счетчик < ТЗ.Количество() Цикл
ТекСтрока = ТЗ.Получить(Счетчик);
Если (ТекСтрока.Месяц = “Январь” И ТекСтрока.ЧислоМесяца = 1)
ИЛИ (ТекСтрока.Месяц = “Февраль” И ТекСтрока.ЧислоМесяца = 23)
ИЛИ (ТекСтрока.Месяц = “Март” И ТекСтрока.ЧислоМесяца = 8)
ИЛИ (ТекСтрока.ДеньНедели = “Суббота”) ИЛИ (ТекСтрока.ДеньНедели = “Воскресенье”) Тогда
ТЗ.Удалить(ТекСтрока);
Иначе
Счетчик = Счетчик + 1;
КонецЕсли;
КонецЦикла;
Возврат ТЗ.Количество();
КонецФункции
Дальше вызывал эту функцию в цикле:
Для Год = 2010 По 2011 Цикл
ДнейВГоду = РассчитатьКоличествоРабочихДнейВГоду(Год);
Сообщить(Строка(Год)+” год”+” – “+Строка(ДнейВГоду)+” рабочих дней”);
КонецЦикла;
Результат, возвращаемый функцией, проверил. Количество рабочих дней верное.
2) А вот со структурой «ВыходныеДни» поднапрягся. Но в итоге справился. Пришлось подумать. Сразу не догнал, что надо заменить НПП на пустую строку.
Функция Выходной(ТекДень)
Если
ДеньНедели(ТекДень) >= 6
Или
ТекДень = Дата(Год(ТекДень),01,01)
Или
ТекДень = Дата(Год(ТекДень),02,23)
Или
ТекДень = Дата(Год(ТекДень),03,08)
Тогда
Возврат Истина;
Иначе
Возврат ЛОЖЬ
КонецЕсли;
КонецФункции
Функция ПодсчетВЦикле(ТекГод)
КолДнейВГоду = ?((ТекГод%4) = 0, 366, 365);
ТекДата = НачалоГода(Дата(ТекГод,01,01));
Счетчик = 0;
Для Итератор = 1 По КолДнейВГоду Цикл
Если Не Выходной(ТекДата) Тогда
Счетчик = Счетчик + 1;
КонецЕсли;
ТекДата = ТекДата + (24*3600);
КонецЦикла;
Возврат Счетчик;
КонецФункции
Функция Выходной(ТекДень) Если ДеньНедели(ТекДень) >= 6 Или ТекДень = Дата(Год(ТекДень),01,01) Или ТекДень = Дата(Год(ТекДень),02,23) Или ТекДень = Дата(Год(ТекДень),03,08) Тогда Возврат Истина; Иначе Возврат ЛОЖЬ КонецЕсли; КонецФункции
Функция ПодсчетВЦикле(ТекГод) КолДнейВГоду = ?((ТекГод%4) = 0, 366, 365); ТекДата = НачалоГода(Дата(ТекГод,01,01)); Счетчик = 0; Для Итератор = 1 По КолДнейВГоду Цикл Если Не Выходной(ТекДата) Тогда Счетчик = Счетчик + 1; КонецЕсли; ТекДата = ТекДата + (24*3600); КонецЦикла; Возврат Счетчик;КонецФункции
Выполнила через перебор дней в году, корпела над лишним пробелом который на поверку оказался НПП – очень полезная инфа думается. Проверку праздников сделала через функцию.
Домашнее задание выполнила. Количество рабочих дней изначально считала через вложенные циклы
1. Цикл Год =2010 по 2019
1.1. цикл Месяц=1 по 12
1.1.1. КоличествоДней=(КонецМесяца+1-НачалоМесяца)/24/3600, где КонецМесяца=КонецМесяца(Дата(Год,Месяц,01)) и НачалоМесяца=НачалоМесяца(Дата(Год,Месяц,01))
цикл день=1 по количествоДней.Далее проверка на день недели и праздники. Особых затруднений не было.
Ознакомилась с решением , открыла для себя функцию ДеньГода()
Выполнил. Помнил про решение через остаток от деления, но делал через цикл. Если это ошибка – переделаю.
При создание ключа структуры использовал Формат(Год,”ЧГ=0″), раньше делал СтрЗаменить(Строка(Год),Символы.НПП,””) – культура потихоньку растёт.
Выполнил, но со структурой не сразу понял в чем ошибка была
выполнено
Сделал через простой перебор всех дней в году.
Выполнил
Наконец-то сделал. Лучше поздно, чем никогда! :))
Выполнил
Задание выполнено!
ДЗ № 3 выполнено.
Выполнил давно
Выполнено
выполнил.
в решении отчитался.
Выполнено
Выполнил.
ДЗ №3 сделано
выполнено
Сделал, уже давно
Выполнено.
Отчитываюсь: ДЗ сделал, когда его выложили. В июле. Забыл отчитаться (
Готово
сделано.
Выполнено
Готово
Тоже выполнил…
Было сделано, однако.
ДЗ N3 выполнил.
Наконец-то сделано.