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

Приступайте к третьему занятию базового курса.

ps. На этой странице не нужно отчитываться о выполнении ДЗ.

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

  1. Создаём внешнюю обработку. Код пишем в Клиентской процедуре.
    <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. Подробнее послушать о работе с Синтакс-помощником. Я так понимаю, в нём содержатся, как в специальном справочнике/путеводителе все Алгоритмы, Методы, События, невероятные всякие Способы со всеми возможными объектами. И самое главное, хочется с помощью Синтакс-помощника научиться читать уже созданные кем-то программные коды.
    Спасибо Вам за Ваш труд; А вообще без Ваших курсов самостоятельно даже по книжкам, например, Радченко Максима понять эту сферу деятельности самостоятельно невозможно.

    • Dobrenko Oleg 02.05.2012 в 15:13

      Losick, ваш отчет принят. Изучите наше решение.
      Спасибо за обратную связь, пожелания записаны.

  2. Сергей Бауэр 26.04.2012 в 08:54

    Отчет по домашнему заданию

    <code>
     Год=10;
     Пока Год<21 Цикл
      ГодНачало=”20″+Строка(Год)+”0101000000″;
      ГодСледующий= “20”+Строка(1+Год)+”0101000000″;
      ТекущаяДата=Дата(ГодНачало);
      ПоследняяДата=Дата(ГодСледующий);
      РабочиеДни=0;
      Пока ТекущаяДата<ПоследняяДата Цикл
       Выходной=ДеньНедели(ТекущаяДата);
       Если (Выходной<>6) и (Выходной<>7) и (ТекущаяДата<>Дата(“20″+Строка(Год)+”0101000000”))
        и (ТекущаяДата<>Дата(“20″+Строка(Год)+”0223000000”)) и
        (ТекущаяДата<>Дата(“20″+Строка(Год)+”0308000000”)) Тогда
        РабочиеДни=РабочиеДни+1;
       КонецЕсли; 
       ТекущаяДата=ТекущаяДата+86400;
      КонецЦикла;
      Сообщить(“20″+Строка(Год) +” год – ” + РабочиеДни + ” рабочих дней”);
      Год=Год+1
     КонецЦикла;
    </code>

  3. Карташев Максим 19.04.2012 в 13:00

    <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>

  4. <code>
    &НаСервере
    Функция КоличествоРабочихДней(Год)
    КоличествоРабочихДней = 0;
    // Цикл перебора месяцев
    Для Месяц = 1 По 12 Цикл
    НачалоМесяца = Дата(Год,Месяц,1);
    ОкончаниеМесяца = День(КонецМесяца(НачалоМесяца));
    // Цикл перебора дней
    Для День= 1 По ОкончаниеМесяца Цикл
    ДеньНедели = ДеньНедели(Дата(Год,Месяц,День));
    Если (ДеньНедели > 5) ИЛИ (Месяц = 1 И День = 1)
    ИЛИ (Месяц = 2 И День = 23)
    ИЛИ (Месяц = 3 И День = 8) Тогда
    Продолжить;
    КонецЕсли;
    КоличествоРабочихДней = КоличествоРабочихДней + 1;
    КонецЦикла;
    КонецЦикла;
    Возврат КоличествоРабочихДней;
    КонецФункции

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Для Год = 2010 По 2020 Цикл
    Сообщить(Строка(Год) + ” год – ” + КоличествоРабочихДней(Год) + ” рабочих дней”);
    КонецЦикла;
    КонецПроцедуры
    </code>

    • Dobrenko Oleg 17.04.2012 в 07:32

      novikovpa, ваш отчет принят. Ознакомьтесь с нашей версией.

  5. <code>

    &НаСервере
    Процедура РассчитатьКоличествоДней(Н)
        ТекДата=ДобавитьМесяц(ТекущаяДата(),12*Н);
        Год=Год(ТекДата);
        
        //Определим праздники
        Праздники=Новый Массив;
        Праздники.Добавить(Дата(Год,1,1));//1 января
        Праздники.Добавить(Дата(Год,2,23));//23 февраля
        Праздники.Добавить(Дата(Год,3,8));//8 марта
        
        КолРабДней=0;
        //Цикл по месяцам
        Для Месяц=1 По 12 Цикл
            //Цикл по дням
            Для День=1 По День(КонецМесяца(Дата(Год,Месяц,1))) Цикл
                ТекДата=Дата(Год,Месяц,День);
                Если НЕ ДеньНедели(ТекДата)=6 И НЕ ДеньНедели(ТекДата)=7 И Праздники.Найти(ТекДата)=Неопределено  Тогда
                    КолРабДней=КолРабДней+1;
                КонецЕсли;    
            КонецЦикла;    
        КонецЦикла;    
        Сообщить(Строка(Год)+” кол. дн. : “+КолРабДней);
    Конецпроцедуры
    //*****************************************************************************************************
    &НаКлиенте
    Процедура ОК(Команда)
        //Цикл по годам
        Для Н=0 По 9 Цикл
            РассчитатьКоличествоДней(Н);
        КонецЦикла;    
    КонецПроцедуры

    </code>

  6. Здравствуйте!
    Мой отчет по домашнему заданию
    <code>
    &НаСервере
    Функция КоличествоРабочихДней(Год)
        КоличествоРабочихДней = 0;
        // Цикл по месяцам
        Для Месяц = 1 По 12 Цикл
            ТекМесяцНачало = Дата(Год,Месяц,1);
            ТекМесяцКонец = День(КонецМесяца(ТекМесяцНачало));
            Для ДеньМесяца = 1 По ТекМесяцКонец Цикл
                ДеньНедели = ДеньНедели(Дата(Год,Месяц,ДеньМесяца));
                Если (ДеньНедели > 5) ИЛИ (Месяц = 1 И ДеньМесяца = 1) ИЛИ (Месяц = 2 И ДеньМесяца = 23) ИЛИ (Месяц = 3 И ДеньМесяца = 8) Тогда
                    Продолжить;
                КонецЕсли;
                КоличествоРабочихДней = КоличествоРабочихДней + 1;
            КонецЦикла;
        КонецЦикла;
        Возврат КоличествоРабочихДней;
    КонецФункции // КоличествоРабочихДней()

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        Для Год = 2010 По 2020 Цикл
            Сообщить(Строка(Год) + ” год – ” + КоличествоРабочихДней(Год) + ” рабочих дней”);
        КонецЦикла;
    КонецПроцедуры
    </code>

    • Dobrenko Oleg 09.04.2012 в 07:35

      Здравствуйте. Evgeny, ваш отчет принят.