Для Счетчик = 1 По КолвоНеобрабДнейВГоду Цикл
ТекущийДень = Дата(Год,1, Счетчик);
Если ДеньНедели(ТекущийДень)<6 Тогда
КолВоРабочихДнейВГоду = КолВоРабочихДнейВГоду + 1;
КонецЕсли;
КонецЦикла;
КолВоРабочихДнейВГоду = КолВоРабочихДнейВГоду – ПроверитьРабочийДень(Январь01) –
ПроверитьРабочийДень(Февраль23) – ПроверитьРабочийДень(Март08);
Сообщить(Строка(Год)+ ” Год – ” +КолВоРабочихДнейВГоду+ ” Рабочих Дней в этом Году”);
КонецЦикла;
КонецПроцедуры
</code>
Для работы указанного кода создадим Процедуру на Клиенте:
<code>
&НаКлиенте
Функция ПроверитьРабочийДень(День)
Если ДеньНедели(День)<6 Тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // ПроверитьРабочийДень()
</code>
Мне кажется, что требуется ответ на вторую часть домашнего задания(может правильно понял):
1. Я самостоятельно постигаю эту область знаний. Считал, что будет гораздо проще: ну разработать учётную системы по Продаже, ну по Бух., ну по Расчёту Зарплаты и что такого сложного…. Поражает глубина и почти безграничность возможностей сложной обученной созданной Платформы.
2. Темы самого механизма программирования, хотя это и не Фортран, не Ассемблер, не Алгол и др., которые были в ВУЗе и остались очень сильно забытыми, всё же с размаху не понять. Очень сильно помог курс по Быстрому старту, там есть моменты детального разбора. После курса по Быстрому старту появилась уверенность и прибавилось оптимизма.
3. В Мастер-группе хотелось бы подробнее рассмотреть темы: 1. Контекст исполнения кода, когда на Клиенте когда на Сервере и когда с контекстом и без контекста. Понятно, что об этом уже говорили… 2. Подробнее послушать о работе с Синтакс-помощником. Я так понимаю, в нём содержатся, как в специальном справочнике/путеводителе все Алгоритмы, Методы, События, невероятные всякие Способы со всеми возможными объектами. И самое главное, хочется с помощью Синтакс-помощника научиться читать уже созданные кем-то программные коды.
Спасибо Вам за Ваш труд; А вообще без Ваших курсов самостоятельно даже по книжкам, например, Радченко Максима понять эту сферу деятельности самостоятельно невозможно.
<code>
Год=10;
Пока Год<21 Цикл
ГодНачало=”20″+Строка(Год)+”0101000000″;
ГодСледующий= “20”+Строка(1+Год)+”0101000000″;
ТекущаяДата=Дата(ГодНачало);
ПоследняяДата=Дата(ГодСледующий);
РабочиеДни=0;
Пока ТекущаяДата<ПоследняяДата Цикл
Выходной=ДеньНедели(ТекущаяДата);
Если (Выходной<>6) и (Выходной<>7) и (ТекущаяДата<>Дата(“20″+Строка(Год)+”0101000000”))
и (ТекущаяДата<>Дата(“20″+Строка(Год)+”0223000000”)) и
(ТекущаяДата<>Дата(“20″+Строка(Год)+”0308000000”)) Тогда
РабочиеДни=РабочиеДни+1;
КонецЕсли;
ТекущаяДата=ТекущаяДата+86400;
КонецЦикла;
Сообщить(“20″+Строка(Год) +” год – ” + РабочиеДни + ” рабочих дней”);
Год=Год+1
КонецЦикла;
</code>
<code>
&НаСервере
Перем Год;
&НаКлиенте
Процедура Рассчитать(Команда)
Для Год = 2010 по 2019 Цикл
КоличествоДней = ДеньГода(Дата (Год,12,31));
КоличествоРабочихДней = Цел((КоличествоДней)/7)*5;
ОсталосьДней = КоличествоДней%7;
Для СчетчикОсталось = 1 По ОсталосьДней Цикл
ОстаткиДней = Дата(Год, 1, СчетчикОсталось);
Если ДеньНедели(ОстаткиДней) <6 Тогда
КоличествоРабочихДней = КоличествоРабочихДней+1;
КонецЕсли;
КонецЦикла;
Если ДеньНедели(Дата(Год,1,1)) < 6 Тогда КоличествоРабочихДней = КоличествоРабочихДней-1;
КонецЕсли;
Если ДеньНедели(Дата(Год,2,23)) < 6 Тогда КоличествоРабочихДней = КоличествоРабочихДней-1;
КонецЕсли;
Если ДеньНедели(Дата(Год,3,08)) < 6 Тогда КоличествоРабочихДней = КоличествоРабочихДней-1;
КонецЕсли;
Сообщить (Строка(Год)+” год – “+КоличествоРабочихДней+” рабочих дней!”);
КонецЦикла;
КонецПроцедуры
</code>
<code>
&НаСервере
Функция КоличествоРабочихДней(Год)
КоличествоРабочихДней = 0;
// Цикл перебора месяцев
Для Месяц = 1 По 12 Цикл
НачалоМесяца = Дата(Год,Месяц,1);
ОкончаниеМесяца = День(КонецМесяца(НачалоМесяца));
// Цикл перебора дней
Для День= 1 По ОкончаниеМесяца Цикл
ДеньНедели = ДеньНедели(Дата(Год,Месяц,День));
Если (ДеньНедели > 5) ИЛИ (Месяц = 1 И День = 1)
ИЛИ (Месяц = 2 И День = 23)
ИЛИ (Месяц = 3 И День = 8) Тогда
Продолжить;
КонецЕсли;
КоличествоРабочихДней = КоличествоРабочихДней + 1;
КонецЦикла;
КонецЦикла;
Возврат КоличествоРабочихДней;
КонецФункции
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Для Год = 2010 По 2020 Цикл
Сообщить(Строка(Год) + ” год – ” + КоличествоРабочихДней(Год) + ” рабочих дней”);
КонецЦикла;
КонецПроцедуры
</code>
//Определим праздники
Праздники=Новый Массив;
Праздники.Добавить(Дата(Год,1,1));//1 января
Праздники.Добавить(Дата(Год,2,23));//23 февраля
Праздники.Добавить(Дата(Год,3,8));//8 марта
КолРабДней=0;
//Цикл по месяцам
Для Месяц=1 По 12 Цикл
//Цикл по дням
Для День=1 По День(КонецМесяца(Дата(Год,Месяц,1))) Цикл
ТекДата=Дата(Год,Месяц,День);
Если НЕ ДеньНедели(ТекДата)=6 И НЕ ДеньНедели(ТекДата)=7 И Праздники.Найти(ТекДата)=Неопределено Тогда
КолРабДней=КолРабДней+1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить(Строка(Год)+” кол. дн. : “+КолРабДней);
Конецпроцедуры
//*****************************************************************************************************
&НаКлиенте
Процедура ОК(Команда)
//Цикл по годам
Для Н=0 По 9 Цикл
РассчитатьКоличествоДней(Н);
КонецЦикла;
КонецПроцедуры
Здравствуйте!
Мой отчет по домашнему заданию
<code>
&НаСервере
Функция КоличествоРабочихДней(Год)
КоличествоРабочихДней = 0;
// Цикл по месяцам
Для Месяц = 1 По 12 Цикл
ТекМесяцНачало = Дата(Год,Месяц,1);
ТекМесяцКонец = День(КонецМесяца(ТекМесяцНачало));
Для ДеньМесяца = 1 По ТекМесяцКонец Цикл
ДеньНедели = ДеньНедели(Дата(Год,Месяц,ДеньМесяца));
Если (ДеньНедели > 5) ИЛИ (Месяц = 1 И ДеньМесяца = 1) ИЛИ (Месяц = 2 И ДеньМесяца = 23) ИЛИ (Месяц = 3 И ДеньМесяца = 8) Тогда
Продолжить;
КонецЕсли;
КоличествоРабочихДней = КоличествоРабочихДней + 1;
КонецЦикла;
КонецЦикла;
Возврат КоличествоРабочихДней;
КонецФункции // КоличествоРабочихДней()
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Для Год = 2010 По 2020 Цикл
Сообщить(Строка(Год) + ” год – ” + КоличествоРабочихДней(Год) + ” рабочих дней”);
КонецЦикла;
КонецПроцедуры
</code>
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
Создаём внешнюю обработку. Код пишем в Клиентской процедуре.
<code>
&НаКлиенте
Процедура ПосмотретьКолвоРабочихДнейВГоду(Команда)
Для Год = 2010 По 2019 Цикл
КонецГода = Дата(Год,12,31);
КолвоДнейВГоду = ДеньГода(КонецГода);
КолвоПолныхНедельВГоду = Цел(КолвоДнейВГоду/7);
КолвоНеобрабДнейВГоду = КолвоДнейВГоду%7;
Январь01 = Дата(Год,1,1);
Февраль23 = Дата(Год,2,23);
Март08 = Дата(Год,3,8);
КолВоРабочихДнейВГоду = КолвоПолныхНедельВГоду * 5;
Для Счетчик = 1 По КолвоНеобрабДнейВГоду Цикл
ТекущийДень = Дата(Год,1, Счетчик);
Если ДеньНедели(ТекущийДень)<6 Тогда
КолВоРабочихДнейВГоду = КолВоРабочихДнейВГоду + 1;
КонецЕсли;
КонецЦикла;
КолВоРабочихДнейВГоду = КолВоРабочихДнейВГоду – ПроверитьРабочийДень(Январь01) –
ПроверитьРабочийДень(Февраль23) – ПроверитьРабочийДень(Март08);
Сообщить(Строка(Год)+ ” Год – ” +КолВоРабочихДнейВГоду+ ” Рабочих Дней в этом Году”);
КонецЦикла;
КонецПроцедуры
</code>
Для работы указанного кода создадим Процедуру на Клиенте:
<code>
&НаКлиенте
Функция ПроверитьРабочийДень(День)
Если ДеньНедели(День)<6 Тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // ПроверитьРабочийДень()
</code>
Мне кажется, что требуется ответ на вторую часть домашнего задания(может правильно понял):
1. Я самостоятельно постигаю эту область знаний. Считал, что будет гораздо проще: ну разработать учётную системы по Продаже, ну по Бух., ну по Расчёту Зарплаты и что такого сложного…. Поражает глубина и почти безграничность возможностей сложной обученной созданной Платформы.
2. Темы самого механизма программирования, хотя это и не Фортран, не Ассемблер, не Алгол и др., которые были в ВУЗе и остались очень сильно забытыми, всё же с размаху не понять. Очень сильно помог курс по Быстрому старту, там есть моменты детального разбора. После курса по Быстрому старту появилась уверенность и прибавилось оптимизма.
3. В Мастер-группе хотелось бы подробнее рассмотреть темы: 1. Контекст исполнения кода, когда на Клиенте когда на Сервере и когда с контекстом и без контекста. Понятно, что об этом уже говорили… 2. Подробнее послушать о работе с Синтакс-помощником. Я так понимаю, в нём содержатся, как в специальном справочнике/путеводителе все Алгоритмы, Методы, События, невероятные всякие Способы со всеми возможными объектами. И самое главное, хочется с помощью Синтакс-помощника научиться читать уже созданные кем-то программные коды.
Спасибо Вам за Ваш труд; А вообще без Ваших курсов самостоятельно даже по книжкам, например, Радченко Максима понять эту сферу деятельности самостоятельно невозможно.
Losick, ваш отчет принят. Изучите наше решение.
Спасибо за обратную связь, пожелания записаны.
Отчет по домашнему заданию
<code>
Год=10;
Пока Год<21 Цикл
ГодНачало=”20″+Строка(Год)+”0101000000″;
ГодСледующий= “20”+Строка(1+Год)+”0101000000″;
ТекущаяДата=Дата(ГодНачало);
ПоследняяДата=Дата(ГодСледующий);
РабочиеДни=0;
Пока ТекущаяДата<ПоследняяДата Цикл
Выходной=ДеньНедели(ТекущаяДата);
Если (Выходной<>6) и (Выходной<>7) и (ТекущаяДата<>Дата(“20″+Строка(Год)+”0101000000”))
и (ТекущаяДата<>Дата(“20″+Строка(Год)+”0223000000”)) и
(ТекущаяДата<>Дата(“20″+Строка(Год)+”0308000000”)) Тогда
РабочиеДни=РабочиеДни+1;
КонецЕсли;
ТекущаяДата=ТекущаяДата+86400;
КонецЦикла;
Сообщить(“20″+Строка(Год) +” год – ” + РабочиеДни + ” рабочих дней”);
Год=Год+1
КонецЦикла;
</code>
Сергей, ваш отчет принят.
<code>
&НаСервере
Перем Год;
&НаКлиенте
Процедура Рассчитать(Команда)
Для Год = 2010 по 2019 Цикл
КоличествоДней = ДеньГода(Дата (Год,12,31));
КоличествоРабочихДней = Цел((КоличествоДней)/7)*5;
ОсталосьДней = КоличествоДней%7;
Для СчетчикОсталось = 1 По ОсталосьДней Цикл
ОстаткиДней = Дата(Год, 1, СчетчикОсталось);
Если ДеньНедели(ОстаткиДней) <6 Тогда
КоличествоРабочихДней = КоличествоРабочихДней+1;
КонецЕсли;
КонецЦикла;
Если ДеньНедели(Дата(Год,1,1)) < 6 Тогда КоличествоРабочихДней = КоличествоРабочихДней-1;
КонецЕсли;
Если ДеньНедели(Дата(Год,2,23)) < 6 Тогда КоличествоРабочихДней = КоличествоРабочихДней-1;
КонецЕсли;
Если ДеньНедели(Дата(Год,3,08)) < 6 Тогда КоличествоРабочихДней = КоличествоРабочихДней-1;
КонецЕсли;
Сообщить (Строка(Год)+” год – “+КоличествоРабочихДней+” рабочих дней!”);
КонецЦикла;
КонецПроцедуры
</code>
Максим, ваш отчет принят.
<code>
&НаСервере
Функция КоличествоРабочихДней(Год)
КоличествоРабочихДней = 0;
// Цикл перебора месяцев
Для Месяц = 1 По 12 Цикл
НачалоМесяца = Дата(Год,Месяц,1);
ОкончаниеМесяца = День(КонецМесяца(НачалоМесяца));
// Цикл перебора дней
Для День= 1 По ОкончаниеМесяца Цикл
ДеньНедели = ДеньНедели(Дата(Год,Месяц,День));
Если (ДеньНедели > 5) ИЛИ (Месяц = 1 И День = 1)
ИЛИ (Месяц = 2 И День = 23)
ИЛИ (Месяц = 3 И День = 8) Тогда
Продолжить;
КонецЕсли;
КоличествоРабочихДней = КоличествоРабочихДней + 1;
КонецЦикла;
КонецЦикла;
Возврат КоличествоРабочихДней;
КонецФункции
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Для Год = 2010 По 2020 Цикл
Сообщить(Строка(Год) + ” год – ” + КоличествоРабочихДней(Год) + ” рабочих дней”);
КонецЦикла;
КонецПроцедуры
</code>
novikovpa, ваш отчет принят. Ознакомьтесь с нашей версией.
<code>
&НаСервере
Процедура РассчитатьКоличествоДней(Н)
ТекДата=ДобавитьМесяц(ТекущаяДата(),12*Н);
Год=Год(ТекДата);
//Определим праздники
Праздники=Новый Массив;
Праздники.Добавить(Дата(Год,1,1));//1 января
Праздники.Добавить(Дата(Год,2,23));//23 февраля
Праздники.Добавить(Дата(Год,3,8));//8 марта
КолРабДней=0;
//Цикл по месяцам
Для Месяц=1 По 12 Цикл
//Цикл по дням
Для День=1 По День(КонецМесяца(Дата(Год,Месяц,1))) Цикл
ТекДата=Дата(Год,Месяц,День);
Если НЕ ДеньНедели(ТекДата)=6 И НЕ ДеньНедели(ТекДата)=7 И Праздники.Найти(ТекДата)=Неопределено Тогда
КолРабДней=КолРабДней+1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить(Строка(Год)+” кол. дн. : “+КолРабДней);
Конецпроцедуры
//*****************************************************************************************************
&НаКлиенте
Процедура ОК(Команда)
//Цикл по годам
Для Н=0 По 9 Цикл
РассчитатьКоличествоДней(Н);
КонецЦикла;
КонецПроцедуры
</code>
alexut, ваш отчет принят.
Здравствуйте!
Мой отчет по домашнему заданию
<code>
&НаСервере
Функция КоличествоРабочихДней(Год)
КоличествоРабочихДней = 0;
// Цикл по месяцам
Для Месяц = 1 По 12 Цикл
ТекМесяцНачало = Дата(Год,Месяц,1);
ТекМесяцКонец = День(КонецМесяца(ТекМесяцНачало));
Для ДеньМесяца = 1 По ТекМесяцКонец Цикл
ДеньНедели = ДеньНедели(Дата(Год,Месяц,ДеньМесяца));
Если (ДеньНедели > 5) ИЛИ (Месяц = 1 И ДеньМесяца = 1) ИЛИ (Месяц = 2 И ДеньМесяца = 23) ИЛИ (Месяц = 3 И ДеньМесяца = 8) Тогда
Продолжить;
КонецЕсли;
КоличествоРабочихДней = КоличествоРабочихДней + 1;
КонецЦикла;
КонецЦикла;
Возврат КоличествоРабочихДней;
КонецФункции // КоличествоРабочихДней()
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Для Год = 2010 По 2020 Цикл
Сообщить(Строка(Год) + ” год – ” + КоличествоРабочихДней(Год) + ” рабочих дней”);
КонецЦикла;
КонецПроцедуры
</code>
Здравствуйте. Evgeny, ваш отчет принят.