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

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

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

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

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

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

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

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

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

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

  1. stormalter 13.04.2011 в 09:46

    <code>
    ТДата = НачалоГода(ТекущаяДата());
    ДатаКонец = ДобавитьМесяц(ТДата,12*10);
    КолвоРабочихДней = 0;

    Пока ТДата<=ДатаКонец Цикл

    п1 = Дата(Год(ТДата),01,01);
    п2 = Дата(Год(ТДата),02,23);
    п3 = Дата(Год(ТДата),03,08);

    Если (ДеньНедели(ТДата)<6)и
    (ТДата<>п1) и
    (ТДата<>п2) и
    (ТДата<>п3) Тогда

    КолвоРабочихДней = КолвоРабочихДней+1;    

    КонецЕсли;

    Если КонецДня(ТДата)=КонецГода(ТДата) Тогда

    Сообщить(“В “+Год(ТДата)+ ” году “+КолвоРабочихДней+ ” рабочих дней”);
    КолвоРабочихДней = 0;

    КонецЕсли;

    ТДата = ТДата + 86400;

    КонецЦикла;
    </code>
    результат:
    В 2 011 году 258 рабочих дней
    В 2 012 году 259 рабочих дней
    В 2 013 году 259 рабочих дней
    В 2 014 году 260 рабочих дней
    В 2 015 году 259 рабочих дней
    В 2 016 году 258 рабочих дней
    В 2 017 году 258 рабочих дней
    В 2 018 году 258 рабочих дней
    В 2 019 году 259 рабочих дней
    В 2 020 году 261 рабочих дней
     

  2. Александр 13.04.2011 в 05:35

    Задание выполнено через перебор дней года с исключением праздничных.
    Из пожеланий: хотелось бы побольше заданий для самостоятельной работы, например,
    ежедневно по мелкому заданию с разбором решения на следующий день
    (отчитываться о выполнении дополнительных домашних заданий не обязательно)

  3. Сделано.Но была маленькая сложность. Не подумал с начало. Записал праздничные в строку
    “1Январь,23Февраль,8Март” и хотел с помощью Найти(СтрокаПраздничных,СтрокаПоиска) найти их, но не получилось каждый результат был меньше на 1. После минут 15 в отладчике увидел ,что 3Февраля он тоже находит. Пришлось переделать все на условия.
    1.Нового ,много узнал. Наконец услышал нормальное определение и объяснение ,что такое метаданные .Что за структура файла 1СD и как все храниться ну и тд.
    2.Затруднений не было.
     

  4. Немного упростил себе обработку результата, сделав регистр сведений ПроизводственныйКалендарь и перечисление ВидыДней.
    <code>

    Процедура ЗаполнитьКалендарь(ГодНачало, ГодОкончание, ДеньНедели) Экспорт

    НаборЗаписей = РегистрыСведений.ПроизводственныйКалендарь.СоздатьНаборЗаписей();
    НаборЗаписей.Записать();

    Для Год = ГодНачало По ГодОкончание Цикл

    Праздники = Новый Массив;
    Праздники.Добавить(Дата(Год, 1, 1));
    Праздники.Добавить(Дата(Год, 2, 23));
    Праздники.Добавить(Дата(Год, 3, 8));

    Для Месяц = 1 По 12 Цикл

    КоличествоДней = День(КонецМесяца(Дата(Год, Месяц, 1)));

    Для День = 1 По КоличествоДней Цикл

    Дата = Дата(Год, Месяц, День);

    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Год = Год;
    НоваяЗапись.Дата = Дата;
    НоваяЗапись.ВидДня = ?(Праздники.Найти(Дата) <> Неопределено, Перечисления.ВидыДней.Праздник,
    ?(ДеньНедели < 6, Перечисления.ВидыДней.Рабочий, Перечисления.ВидыДней.Выходной));

    ДеньНедели = ?(ДеньНедели = 7, 1, ДеньНедели + 1);

    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    НаборЗаписей.Записать();

    КонецПроцедуры
    Процедура ЗаполнитьКалендарь(ГодНачало, ГодОкончание, ДеньНедели) Экспорт

    НаборЗаписей = РегистрыСведений.ПроизводственныйКалендарь.СоздатьНаборЗаписей();
    НаборЗаписей.Записать();

    Для Год = ГодНачало По ГодОкончание Цикл

    Праздники = Новый Массив;
    Праздники.Добавить(Дата(Год, 1, 1));
    Праздники.Добавить(Дата(Год, 2, 23));
    Праздники.Добавить(Дата(Год, 3, 8));

    Для Месяц = 1 По 12 Цикл

    КоличествоДней = День(КонецМесяца(Дата(Год, Месяц, 1)));

    Для День = 1 По КоличествоДней Цикл

    Дата = Дата(Год, Месяц, День);

    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Год = Год;
    НоваяЗапись.Дата = Дата;
    НоваяЗапись.ВидДня = ?(Праздники.Найти(Дата) <> Неопределено, Перечисления.ВидыДней.Праздник,
    ?(ДеньНедели < 6, Перечисления.ВидыДней.Рабочий, Перечисления.ВидыДней.Выходной));

    ДеньНедели = ?(ДеньНедели = 7, 1, ДеньНедели + 1);

    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    НаборЗаписей.Записать();

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

    </code>
    Расчет количества рабочих дней сделал запросом:
    <code>

    “ВЫБРАТЬ
    | ПроизводственныйКалендарь.Год,
    | СУММА(ВЫБОР
    | КОГДА ПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДней.Рабочий)
    | ТОГДА 1
    | ИНАЧЕ 0
    | КОНЕЦ) КАК РабочиеДни
    |ИЗ
    | РегистрСведений.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь
    |
    |СГРУППИРОВАТЬ ПО
    | ПроизводственныйКалендарь.Год”

    </code>
    Результат получился:

    Год 2 010 – 258 рабочих дней
    Год 2 011 – 258 рабочих дней
    Год 2 012 – 259 рабочих дней
    Год 2 013 – 260 рабочих дней
    Год 2 014 – 259 рабочих дней
    Год 2 015 – 258 рабочих дней
    Год 2 016 – 258 рабочих дней
    Год 2 017 – 258 рабочих дней
    Год 2 018 – 259 рабочих дней
    Год 2 019 – 260 рабочих дней
    Год 2 020 – 259 рабочих дней

    • Таки да, задвоилась процедура :)
      Обратная связь:
      1. Не один год работаю с 1С, но для себя нашел довольно много полезной информации. Возможно, без откровений, но общая картина стала еще немного более целостной. На будущее решил более подробно изучить механизмы, на которых построена платформа, и, соответственно, методы их оптимизации. С 8.2 только начинаю знакомиться, по этой платформе вся полученная информация была актуальна.
      2. Да, в общем-то, не было затруднений.
      3. Понравились рассмотренные в уроках варианты оптимизации кода, о которых раньше даже не задумывался. Было бы интересно узнать ещё о каких-то “фишках”, описание которых не всегда встретишь в книгах.

  5. Евгений, здравствуйте.
    В одном из уроков (Конвертация конфигураций с платформы “1С Предприятие 8.1”) говорилось, что для конвертации в 8.2 необходимо провести проверку некоторых алгоритмов конфигурации, чтобы стали доступны все возможности новой платформы. В следующих уроках или в мастер группе нами будут рассмотрены упомянутые проверки?
     

    • Эта тема будет рассмотрена в тематической сессии мастрер-группы №5.

  6. Для Год1 = Год(ТекущаяДата()) По Год1+10 Цикл
    Дней = 0;
    Дата1 = Дата(Год1,01,01);
    Пока (Дата1 <= Дата(Год1,12,31)) Цикл
    Если (ДеньНедели(Дата1)<>6) И (ДеньНедели(Дата1)<>7)
    И НЕ((День(Дата1) = 01) И (Месяц(Дата1) = 01))
    И НЕ((День(Дата1) = 23) И (Месяц(Дата1) = 02))
    И НЕ((День(Дата1) = 08) И (Месяц(Дата1) = 03)) Тогда
    Дней = Дней + 1;
    КонецЕсли;
    Дата1 = КонецДня(Дата1)+1;
    КонецЦикла;
    Сообщить(“”+Год1+”год”+” – “+Дней+” рабочих дней”);
    КонецЦикла;

  7. Задание выполнил. Сложностей нет, подсчитываем дни в цикле, пользуемся функциями работы с датами.

    В целом изложение материалов понравилось, понятно, что блок ознакомительный и дальше будет подробное изложение многих моментов, поэтому вопросов пока нет.

  8. Решение “в лоб”, простым перебором всех дней в десяти годах:
    &НаКлиенте
    Процедура ВычислениеРабочихДней(Команда)
    Для ТекущийГод = 2010 По 2019 Цикл
    ДатаПоследнегоДня = Дата(ТекущийГод, 12, 31);
    Праздник1 = Дата(ТекущийГод, 1, 1);
    Праздник2 = Дата(ТекущийГод, 2, 23);
    Праздник3 = Дата(ТекущийГод, 3, 8);
    ТекущаяДата = НачалоГода(ДатаПоследнегоДня);
    КоличествоДней = 0;
    Пока ТекущаяДата <= ДатаПоследнегоДня Цикл
    Если ДеньНедели(ТекущаяДата) > 5 ИЛИ ТекущаяДата = Праздник1 ИЛИ ТекущаяДата = Праздник2 ИЛИ ТекущаяДата = Праздник3 Тогда  
    Иначе
    КоличествоДней = КоличествоДней + 1;
    КонецЕсли;
    ТекущаяДата = ТекущаяДата + 3600 * 24;
    КонецЦикла;
    Сообщить(“”+ТекущийГод+” год – “+КоличествоДней+” рабочих дней”);
    КонецЦикла;
    КонецПроцедуры
    Обратная связь.
    1. Любопытный материал про приведение типов, опросил знакомых 1С-ников, путаются практически все.
    2. Затруднений не было.
    3. Для нулевого вводного блока имеющейся информации предостаточно. Есть, правда, предложение, сделать “минус первый блок” – азы программирования, переменные, условия, циклы и прочая. Я знаю достаточно людей, в основном девушек, пытающихся продвинуть себя в 1С, имеющих определенные затруднения именно с основами.

    • Предложение запишем..

    • Тимур 05.05.2011 в 19:58

      > Любопытный материал про приведение типов, опросил знакомых 1С-ников, путаются практически все
       
      Это не потому, что 1Сники неквалифицированные, а потому что приведения типов – не только в 1С, но и во многих языках – похожи на жонглирование: знать это любопытно, иногда интересно порешать задачи с ними в качестве гимнастики ума, но дело в том что в реальных задачах учета такие замороченности с преобразованиями не встречаются.
       
      Фокусы с использованием преобразований очень запутывают код, т.к. для их понимания необходимо держать в голове особенности языка. А одна из главных задача при написании кода – сделать код как можно проще для понимания.

  9. Решил уменьшить количество проходов по циклу, и считал исходя из количество недель в году
    ПервыйГод = 2012;

    Для СчетчикГодов = ПервыйГод по ПервыйГод+10 Цикл
    КоличествоРабочихДней = 0;
    ДатаГода = Дата(СтрЗаменить(СчетчикГодов,СИмвол(160),””)+”0101″);
    НачалоПериода = НачалоНедели(НачалоГода(ДатаГода)+6*86400);
    КонецПериода = НачалоНедели(КОнецГода(ДатаГода));
    КоличествоНедель = (КонецПериода-НачалоПериода)/86400/7 ;
    КоличествоРабочихДней = КоличествоРабочихДней+КоличествоНедель*5;

    ВремДата = НачалоГода(ДатаГода);
    Пока ВремДата < НачалоПериода Цикл
    Если ДеньНедели(ВремДата)<6 Тогда
    КоличествоРабочихДней = КоличествоРабочихДней+1;
    КонецЕсли;
    ВремДата = ВремДата + 86400;
    КонецЦикла;    
    ВремДата = КонецПериода;
    Пока ВремДата <= КонецГода(ДатаГода) Цикл
    Если ДеньНедели(ВремДата)<6 Тогда
    КоличествоРабочихДней = КоличествоРабочихДней+1;
    КонецЕсли;
    ВремДата = ВремДата + 86400;
    КонецЦикла;    
    Если ДеньНедели(Дата(СтрЗаменить(СчетчикГодов,СИмвол(160),””)+”0223″))<6 Тогда
    КоличествоРабочихДней = КоличествоРабочихДней-1;
    КонецЕсли;
    Если ДеньНедели(Дата(СтрЗаменить(СчетчикГодов,СИмвол(160),””)+”0101″))<6 Тогда
    КоличествоРабочихДней = КоличествоРабочихДней-1;
    КонецЕсли;
    Если ДеньНедели(Дата(СтрЗаменить(СчетчикГодов,СИмвол(160),””)+”0308″))<6 Тогда
    КоличествоРабочихДней = КоличествоРабочихДней-1;
    КонецЕсли;
    Сообщить(“”+СтрЗаменить(СчетчикГодов,СИмвол(160),””)+” год – ” + КоличествоРабочихДней + ” рабочих дней”);
    КонецЦикла;    

  10. Друмов Александр 12.04.2011 в 21:58

    В цикле перебрал годы начиная с текущей даты. Вычтя из конца года начало года, разделив это на 84600 и прибавив единицу получил кол-во дней в году. Откинул первую неполную неделю, при этом учтя кол-во откинутых выходных. Результат разделил на семь и целую часть умножил на 2. Проверил последний день года и если его день недели равен шести прибавил еще единицу. Проверил праздники и если день недели был меньше шести прибавил еще по единице для каждого. Результат вычел из общего кол-ва дней и получил ко-во рабочих дней.
    1) Все чем 8.2 отличается от 8.1. Особенно порадовали возможности тонкого клиента, пересмотрел свое отношение к организации удаленных рабочих мест(сейчас все работает на распределенке). Вынашиваю планы по переходу на 8.2 и переводу складов на работу через тонкого клиента.
    2) Пока темы простые и затруднений не вызывают.
    3) Хотелось бы получить больше информации по переходу с 8.1 на 8.2, особенно о проверке алгоритмов перед отключением режима совместимости. Надеюсь это будет дано более развернуто в дальнейшем. 

    • Да, тема перехода будет развернута в тематической мастер-группе.

  11. 1. Обработка
    &НаКлиенте
    Процедура Сформировать(Команда)
    // Вставить содержимое обработчика.

    начДата = Дата(2011,1,1);
    конечныйГод = 2021;

    старыйГод = Год(НачДата); колДней=-1;
    Пока НачДата <> Дата((конечныйГод+2),1,1) Цикл

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

    Если     НачДата <> Дата(текГод,1,1)
    И    НачДата <> Дата(текГод,2,23)
    И    НачДата <> Дата(текГод,3,8)    
    И    ДеньНедели(НачДата) <> 6
    И     ДеньНедели(НачДата) <> 7 Тогда

    колДней = колДней + 1;

    Если старыйГод <> текГод Тогда

    сообщить(строка(старыйГод) + ” : ” + строка(колДней));
    старыйГод = текГод;
    колДней = 0;

    КонецЕсли;

    КонецЕсли;    

    НачДата = КонецДня(НачДата)+1;
    КонецЦикла;

    КонецПроцедуры
    2. По 0-му блоку.
    Представленная информация приятно удивила мощностью технологий 8.2 управляемых форм.
    На лицо качественный прорыв в технологичности линейки платформ 1С.

  12. Здравствуйте.
    Задание выполнила, собственно получилось вот так:
    &НаКлиенте
    Процедура РассчитатьКоличествоДней(Команда)

    ТекущийГод = Год(ТекущаяДата());
    Индекс = 0;
    Пока Индекс < 10 Цикл         
    КолДней = ПолучитьКоличествоРабочихДней(ТекущийГод + Индекс);
    Сообщить(Строка(КолДней)+ ” рабочих дней в ” + Строка(ТекущийГод + Индекс) + ” году”);
    Индекс = Индекс + 1;
    КонецЦикла;    

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

    Функция ПолучитьКоличествоРабочихДней(ТекущийГод)
    ДатаНачала = Дата(ТекущийГод,1,2,0,0,0);
    ДатаКонца  = КонецГода(ДатаНачала);

    Март_8 =  Дата(ТекущийГод,3,8,0,0,0);
    Февраль_23 = Дата(ТекущийГод,2,23,0,0,0);

    Счетчик = 0;    
    Пока  ДатаНачала < ДатаКонца Цикл
    Если ДеньНедели(ДатаНачала) = 6 или ДеньНедели(ДатаНачала) = 7 или НачалоДня(ДатаНачала) = Март_8 или НачалоДня(ДатаНачала) = Февраль_23 Тогда
    ДатаНачала = ДатаНачала + 86400;
    Продолжить;
    КонецЕсли;    

    Счетчик = Счетчик +1;
    ДатаНачала = ДатаНачала + 86400;
    КонецЦикла;    

    Возврат Счетчик;
    КонецФункции    

    Ответы на вопросы:
    1. Глобально нового в нулевом блоке не было, уже давно работаю с платформой 8.  Но обнаружились некоторые моменты, которые существенно облегчают работу, такие как автозамена, закладки в модулях (раньше вообще не понимала зачем это надо, а как выяснилось очень полезная штука для анализа кода), возможность сохранить файл, в котором прописаны пути к базам, например перед переустановкой системы + возможности настройки списков в управляемых формах  и множественное выделение объектов очень порадовали.  Нулевой блок оказался очень полезным, так-как позволил все имеющиеся знания упорядочить и закрепить, “разложить по полочкам” в голове.
    2. Задание со сложением строк оказалась неожиданно очень сложным, разобралась в итоге только после прочтения комментариев и видео с решением.
    3. По поводу мастер-группы пока ничего не могу сказать.

  13. Комментарии к нулевому блоку:
    1. Много небольших нюансов открыл для себя. Нравятся домашние задания.
    2. Трудностей в освоении нулевого блока не возникло. При просмотре даже через конфигурацию мышкой приходится работать (сбивается регулировка громкости в видеоуроках)
    3. Пока не готов ответить.

  14. 1.Глава “Работа в пользовательском режиме” понравилась, да и  тонкости именно 8.2 полезно было понять
    2.Затруднений не испытал.
    3.Работа с синтакс- помощником. Как то уж очень ловко у Вас получается в нём всё находить. Видимо вещь хорошая, но после 7’ки трудно привыкнуть. Хорошо бы этому отдельную главу посвятить

    • Синтакс-помощник рассмотрим в 1-ом блоке.

  15. Цикл по годам от функции Год(<Дата>)
    внутри цикл по дням с начала года до конца года, где
    суммируем рабочие дни:
    <code>
    РД=РД+?(ДеньНедели(ТекДата)<6,НЕ((ТекДата=Дата(Сч,01,01))ИЛИ (ТекДата=Дата(Сч,02,23)) ИЛИ (ТекДата=Дата(Сч,03,08))),0 );
    </code>

  16. Отчитался ранее, а и вот обратная связь
    Материал изложен доходчиво, умело приправлен фичами,  на творческое исполнение ДЗ вдохновили с первого ДЗ. Просмотрел последнюю главу «Виды учета»,выдохнул и решил окинуть взглядом инструмент разработки (конфигуратор): Не осталось ли у меня темных пятен? Пятна имеются … меню Конфигурация, пункты: Поддержка, Хранилище конфигурации, Поставка.  Предвижу ответ, рассматривать будем позже, но общее представление (не детальное) пригодилось бы сейчас.

    • >Предвижу ответ, рассматривать будем позже, но общее представление
      Не просто позже, а в продвинутом курсе.
      В базовом хватает другого материала.

      • Буду стараться одолеть базовый и добраться до продвинутого.

  17. Юрий Торговцев 12.04.2011 в 17:28

    Мой вариант решения задачи с помощью перебора всех дней года в цикле:Процедура РабочихДнейВГоду() 
    Для ТекущийГод=Год(ТекущаяДата()) По ТекущийГод+10 Цикл
    ДатаТекущийДень = Дата(ТекущийГод,01,01);
    РабочихДней = 0;
    Для ТекущийДень=1 По ДеньГода(Дата(ТекущийГод,12,31)) Цикл
    Если НЕ(ДеньНедели(ДатаТекущийДень) = 6
    ИЛИ ДеньНедели(ДатаТекущийДень) = 7
    ИЛИ ДатаТекущийДень = Дата(ТекущийГод,01,01)
    ИЛИ ДатаТекущийДень = Дата(ТекущийГод,02,23)
    ИЛИ ДатаТекущийДень = Дата(ТекущийГод,03,08)) Тогда
    РабочихДней = РабочихДней + 1;
    КонецЕсли;
    ДатаТекущийДень = ДатаТекущийДень + 24*60*60;
    КонецЦикла;
    Сообщить(Строка(ТекущийГод) + ” год – ” + РабочихДней + ” – ” + ” рабочих дней”);
    КонецЦикла;
    КонецПроцедуры

  18. kuznetsovimail 12.04.2011 в 15:26

    <code>

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

  19. Надежда 12.04.2011 в 15:12

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

  20. Надежда 12.04.2011 в 14:37

    Задание выполнено. Программа в цикле обращается к функции подсчета числа раб дней конкретного года и выводит сообщение. Функция перебирает последовательно все даты конкретного года, если день недели не больше 5 и дата не относится к указанным праздничным дням, то счетчик числа дней увеличивается на 3600*24 (1 сутки). Особых сложностей при таком подходе не возникло, но если пыталась  решить задачу более универсально, например, указывая праздничные даты на форме обработки – то возникают сложности, думаю, от недостатка начальных знаний, поэтому к этой задаче для себя еще вернусь.

  21. Добрый день!
    Ответы на вопросы:
    1) Тщательнейшим образом проработал данный блок. Не могу сказать, что узнал много нового, но общее количество пометок, которые сделал себе = 69. :)
    2) Некоторые затруднения вызывали те места, где приходилось общаться с интерфейсом 1С:8.2 . Помогает преодолеть упорство и покадровый пуск-стоп-назад-пуск просмотр отдельных роликов.
    3) Собственно, вытекает из 2-го
    – отличия интерфейсов 8.2 от 8.1. 
    Еще хотелось бы более подробно раскрыть работу с доп.параметрами запуска ИБ (Block0-030-part2-add.avi)

  22. <code>Процедура ВыполнитьДЗНомер_03()
    ТекГод = Год(ТекущаяДата());

    Для СчетчикЛет = ТекГод + 1 По ТекГод + 10 Цикл
    лГодВисокосный = ОпределитьВисокосностьГода(СчетчикЛет);

    КолвоВыходных = 0;

    Если лГодВисокосный Тогда
    ВсегоДнейВГоду = 366;
    Иначе
    ВсегоДнейВГоду = 365;
    КонецЕсли;

    ТекДата = Дата(Формат(СчетчикЛет, “ЧГ=”) + “0101”);
    Для СчетчикДней = 0 По ВсегоДнейВГоду – 1 Цикл
    ДеньНеделиТекДаты = ДеньНедели(ТекДата);
    Если (ДеньНеделиТекДаты = 6) Или
    (ДеньНеделиТекДаты = 7) Или
    Праздник(ТекДата, СчетчикЛет) Тогда

    КолвоВыходных = КолвоВыходных + 1;
    КонецЕсли;

    ТекДата = ДобавитьДень(ТекДата, 1);
    КонецЦикла;

    Сообщить(Формат(СчетчикЛет, “ЧГ=”) + ” год – ” + (ВсегоДнейВГоду – КолвоВыходных) + ” рабочих дней”);
    КонецЦикла;
    КонецПроцедуры // ВыполнитьДЗНомер_03()

    Функция ОпределитьВисокосностьГода(ГодДляПроверки)

    Возврат День(КонецМесяца(Дата(Формат(ГодДляПроверки, “ЧГ=”) + “0201”))) = 29;

    КонецФункции // ОпределитьВисокосностьГода()

    Функция Праздник(ДатаДляПроверки, ТекГод)

    Если (ДатаДляПроверки = Дата(Формат(ТекГод, “ЧГ=”) + “0101”)) Или
    (ДатаДляПроверки = Дата(Формат(ТекГод, “ЧГ=”) + “0223”)) Или
    (ДатаДляПроверки = Дата(Формат(ТекГод, “ЧГ=”) + “0308”)) Тогда

    Возврат Истина;
    Иначе
    Возврат Ложь;
    КонецЕсли;
    КонецФункции // Праздник()

    Функция ДобавитьДень(ТекДата, ДобавитьДней)
    Возврат ТекДата + ДобавитьДней * 86400;
    КонецФункции // ДобавитьДень()</code>

  23. Вячеслав 12.04.2011 в 13:49

    <code>
    &НаКлиенте
    Процедура Рассчитать(Команда)
    ДатаНачалаПериода = НачалоГода(ТекущаяДата());
    ДатаОкончанияПерида = ДобавитьМесяц(ДатаНачалаПериода, 12*10);
    ТекДата = ДатаНачалаПериода;
    КоличествоРабочихДней = 0;
    Праздники = Новый Массив;
    Праздники.Добавить(ДеньГода(‘00010101’));
    Праздники.Добавить(ДеньГода(‘00010223’));
    Праздники.Добавить(ДеньГода(‘00010308’));
    Пока ТекДата <= ДатаОкончанияПерида Цикл
    Если ДеньНедели(ТекДата) < 6 и Праздники.Найти(ДеньГода(ТекДата)) = Неопределено Тогда
    КоличествоРабочихДней = КоличествоРабочихДней + 1;
    КонецЕсли;
    Если КонецДня(ТекДата) = КонецГода(ТекДата) Тогда
    Сообщить(“В “+Год(ТекДата)+ ” году “+КоличествоРабочихДней+ ” р/д”);
    КоличествоРабочихДней = 0;
    КонецЕсли;
    ТекДата = ТекДата + 86400;
    КонецЦикла;
    КонецПроцедуры
    </code>
    Результат:
    В 2 011 году 258 р/д
    В 2 012 году 259 р/д
    В 2 013 году 259 р/д
    В 2 014 году 260 р/д
    В 2 015 году 259 р/д
    В 2 016 году 258 р/д
    В 2 017 году 258 р/д
    В 2 018 году 258 р/д
    В 2 019 году 259 р/д
    В 2 020 году 261 р/д
    Евгений, а почему год в сообщении выводится как бы в числовом формате (с отступом после двойки)? Нельзя ли на это повлиять?

    • На это мы будем влиять в четвертом домашнем задании.
      Цель – поменять формат отображения числа.

  24. &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Год = 2010;
    НачГода = НачалоГода(Дата(Год,01,01));
    КонГода = КонецГода(Дата(Год,01,01));
    КолДн  = (КонГода-НачГода)/86400;
    КолРобДней=0;
    Пока НачГода<=КонГода Цикл
    НачГода=НачГода+86400;
    Если (ДеньНедели(НачГода)<6) и (НачГода<>Дата(Год(НачГода),01,01)) и (НачГода<>Дата(Год(НачГода),02,23)) и (НачГода<>Дата(Год(НачГода),03,08)) Тогда
    КолРобДней=КолРобДней+1;
    КонецЕсли;
    КонецЦикла;
    Сообщить (КолРобДней);
    КонецПроцедуры
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Год = 2010;
    КонГод = Год + 10;
    Пока Год <= КонГод Цикл
    НачГода = НачалоГода(Дата(Год,01,01));
    КонГода = КонецГода(Дата(Год,01,01));
    КолДн  = (КонГода-НачГода)/86400;
    КолРобДней=0;
    Пока НачГода<=КонГода Цикл
    НачГода=НачГода+86400;
    Если (ДеньНедели(НачГода)<6) и (НачГода<>Дата(Год(НачГода),01,01)) и (НачГода<>Дата(Год(НачГода),02,23)) и (НачГода<>Дата(Год(НачГода),03,08)) Тогда
    КолРобДней=КолРобДней+1;
    КонецЕсли;
    КонецЦикла;
    Сообщить(“” + Год + ” = ” + КолРобДней);
    Год = Год + 1;
    КонецЦикла;
    КонецПроцедуры
    1. Нового очень много, поскольку я только начинаю работать в этой ситсеми.
    2. Вообще для меня трудно дается именно программирование, т.е. написаниемодуля (синтаксис, использование операторов), поскольку до этого никогда не сталкивался с программированием. Для их преодоления приходится Баготдополнительно искать информацию в Интернете в книжках чтобы выполнить ДомЗадача
    3. Именно и ету тему с синтаксисом и изпользование операторов хотелось би розсмотреть детальние.

    • Извините за лишнюю инфу, код моего модуля начинается з второго &НаСервере

      • Это проблема блога, при вставке из буфера происходит задвоение, если вставленный фрагмент редактируется.

    • >Именно и ету тему с синтаксисом и изпользование операторов хотелось би розсмотреть детальние.
      Синтаксис, свойства и методы объектов мы будем подробно рассматривать по ходу курса.
      Вам же советую особое внимание обратить на решение домашних заданий.

  25. <code>

    Праздники = “0101, 0223, 0308”;
    ТекГод = Год(ТекущаяДата());

    Для Год = ТекГод + 1 По ТекГод + 10 Цикл
    День = Дата(Год, 1, 1);
    РабочихДней = 0;
    Пока Год(День) = Год Цикл
    Если ДеньНедели(День) < 6 И Не Найти(Праздники, Формат(День, “ДФ=MMdd”)) Тогда
    РабочихДней = РабочихДней + 1;
    КонецЕсли;
    День = День + 86400;
    КонецЦикла;
    Сообщить(Формат(Год, “ЧГ=0″) + ” год – ” + РабочихДней + ” рабочих дней”);
    КонецЦикла;
    Праздники = “0101, 0223, 0308”; ТекГод = Год(ТекущаяДата()); Для Год = ТекГод + 1 По ТекГод + 10 Цикл День = Дата(Год, 1, 1); РабочихДней = 0; Пока Год(День) = Год Цикл Если ДеньНедели(День) < 6 И Не Найти(Праздники, Формат(День, “ДФ=MMdd”)) Тогда РабочихДней = РабочихДней + 1; КонецЕсли; День = День + 86400; КонецЦикла; Сообщить(Формат(Год, “ЧГ=0″) + ” год – ” + РабочихДней + ” рабочих дней”); КонецЦикла;
    </code>

    • Беда со вставкой комментариев. Нужно наверное отдельное видео, как это делать правильно :о)
      1. Впечатления от 0-го блока отличные. Узнал много нового (все новшества платформы 8.2 для меня откровение).
      2. Особенных затруднений не было. Разве что при просмотре видео часто приходится мышкой работать – уж очень короткие некоторые ролики.
      3. Планирую сегодня закончить просмотр курса – возможно потребность в более детальном рассмотрении какой-то темя и появится.
      Спасибо.

      • >Нужно наверное отдельное видео, как это делать правильно
        никак не можем победить эту проблему.
        > Разве что при просмотре видео часто приходится мышкой работать
        .avi файлы можно собрать в плей-лист, ну а для .exe файлы удобно просматривать в конфигурации (функция Непрерывный просмотр).

    • Переделал код, получилось вот так:

      Для Год = 2011 По 2020 Цикл
      ДН = ДеньНедели(Дата(Год, 1, 1));

      Если ДеньГода(Дата(Год, 12, 31)) = 366 Тогда
      Если ДН = 2 Или ДН = 3 Тогда
      РабочихДней = 261;
      ИначеЕсли ДН = 5 Или ДН = 6 Тогда
      РабочихДней = 258;
      Иначе
      РабочихДней = 259;
      КонецЕсли;
      Иначе
      Если ДН = 3 Тогда
      РабочихДней = 260;
      ИначеЕсли ДН = 2 Или ДН = 4 Тогда
      РабочихДней = 259;
      Иначе
      РабочихДней = 258;
      КонецЕсли;
      КонецЕсли;

      Сообщить(Формат(Год, “ЧГ=0″) + ” год – ” + РабочихДней + ” рабочих дней”);
      КонецЦикла;
      Для Год = 2011 По 2020 Цикл ДН = ДеньНедели(Дата(Год, 1, 1)); Если ДеньГода(Дата(Год, 12, 31)) = 366 Тогда Если ДН = 2 Или ДН = 3 Тогда РабочихДней = 261; ИначеЕсли ДН = 5 Или ДН = 6 Тогда РабочихДней = 258; Иначе РабочихДней = 259; КонецЕсли; Иначе Если ДН = 3 Тогда РабочихДней = 260; ИначеЕсли ДН = 2 Или ДН = 4 Тогда РабочихДней = 259; Иначе РабочихДней = 258; КонецЕсли; КонецЕсли; Сообщить(Формат(Год, “ЧГ=0″) + ” год – ” + РабочихДней + ” рабочих дней”); КонецЦикла;

  26. &НаКлиенте
    Процедура ВычислитьКолРабДней()
    Если (ЗначениеЗаполнено(ДатаНач)=0) или (ЗначениеЗаполнено(ДатаКон)=0) Тогда
    Сообщить(“Не задана одна из дат!”);
    Возврат;
    КонецЕсли;
    ДатаНач2=НачалоГода(ДатаНач);
    ДатаКон2=КонецГода(ДатаКон);

    ДатаСчетчик=ДатаНач2;
    //ДеньНедели:
    //1-понедельник
    //2-вторник
    //……….
    //6-суббота
    //0-воскресенье
    ДеньНедели=ДеньНедели(ДатаСчетчик)%7;
    //счетчик рабочих дней в текущем году
    СчетчикПоГоду=0;
    СтарыйГод=Год(ДатаСчетчик);
    СекундВДне=24*3600;

    Пока ДатаСчетчик<=ДатаКон2 Цикл
    ТекГод=Год(ДатаСчетчик);
    Если ТекГод<>СтарыйГод Тогда
    Сообщить(“”+СтарыйГод+” год – “+СчетчикПоГоду+” рабочих дней.”);
    СчетчикПоГоду=0;
    КонецЕсли;

    Если НЕ ((ДеньНедели=6) или (ДеньНедели=0) или (Найти(“01.01,23.02,08.03”,Сред(“”+ДатаСчетчик,1,5))>0)) Тогда
    СчетчикПоГоду=СчетчикПоГоду+1;
    КонецЕсли;

    СтарыйГод=ТекГод;
    ДатаСчетчик=ДатаСчетчик+СекундВДне;
    ДеньНедели=(ДеньНедели+1)%7;
    КонецЦикла;
    Сообщить(“”+СтарыйГод+” год – “+СчетчикПоГоду+” рабочих дней.”);
    КонецПроцедуры
    1. Все что было в Нулевом блоке я в основном уже знал. Просто систематизировал знания.
    2. Особых затруднений пока не возникало.
    3. Темы связанные с контекстом исполнения кода.

  27. http://www.imagepost.ru/images/888/JX593.jpg
    Оценка нулевого блока:
    1)Не знал про шаблоны и переход с помощью {}. Удобно, теперь использую.  Понравилось второе задание из ДЗ №2.
    2)Трудностей в освоении материала пока нет.
    3)Все доступно изложено.

  28. Nikolay_Km 12.04.2011 в 10:03

    <code>
    &НаКлиенте
    Процедура РаспечататьГод(Год1)
     КоличествоРабочихДней = 0;
     СекундВСутках = 60*60*24;
     Дата1 = Дата(Год1,1,1);
     Пока Год(Дата1) = Год1 Цикл
      ДатаФ = Формат(Дата1,”ДФ=dd.MM”);
      Если ДатаФ = “01.01” или ДатаФ = “23.02” или ДатаФ = “08.03” Тогда
       Дата1 = Дата1 + СекундВСутках; 
       Продолжить;
      КонецЕсли;
      Если ДеньНедели(Дата1) < 6 Тогда
       КоличествоРабочихДней = КоличествоРабочихДней + 1; 
      КонецЕсли;   
      Дата1 = Дата1 + СекундВСутках; 
     КонецЦикла;
     ОстатокДней = КоличествоРабочихДней % 10;
     Если ОстатокДней <= 4 и ОстатокДней > 0 Тогда
      строкаДней = ” рабочих дня”;
     Иначе
      строкаДней = ” рабочих дней”;
     КонецЕсли;
     Сообщить(Формат(Год1,”ЧЦ=4; ЧГ=”)+ ” – ” + КоличествоРабочихДней + строкаДней);
    КонецПроцедуры

    &НаКлиенте
    Процедура Печать()
     Для Счетчик = 2012 По 2021 Цикл
      РаспечататьГод(Счетчик);
     КонецЦикла;
    КонецПроцедуры
    </code>

  29.  
    2010 258 дней
    2011 258 дней
    2012 259 дней
    2013 259 дней
    2014 260 дней
    2015 261 дней
    2016 260 дней
    2017 258 дней
    2018 259 дней
    2019 259 дней
    2020 260 дней
     
     

    2010 258 дней
    2011 258 дней
    2012 259 дней
    2013 259 дней
    2014 260 дней
    2015 259 дней
    2016 258 дней
    2017 258 дней
    2018 258 дней
    2019 259 дней
    2020 261 дней
     
    <code>
    &НаСервере
    Процедура Рассчитать()
    ДеньТек = ‘20100101’;
    ПраздДень1 = ‘20100101’;
    ПраздДень2 = ‘20100223’;
    ПраздДень3 = ‘20100308’;


    Пока ДеньТек < ‘20210101’ Цикл
    Рабдень = 0;
    Пока КонецДня(ДеньТек)<= КонецГода(ПраздДень3) Цикл
    Если ДеньНедели(ДеньТек)= 6 Тогда
    РабДень = РабДень+0;
    ИначеЕсли ДеньНедели(ДеньТек)= 7 Тогда
    РабДень = РабДень+0;
    ИначеЕсли  ДеньТек = ПраздДень1 Тогда
    РабДень = РабДень+0;
    ИначеЕсли ДеньТек= ПраздДень2 Тогда
    РабДень = РабДень+0;
    ИначеЕсли ДеньТек =  ПраздДень3 Тогда
    РабДень = РабДень+0;
    Иначе
    РабДень = РабДень+1;
    КонецЕсли;

    ДеньТек = ДеньТек + 86400;
    КонецЦикла;
    Сообщить(Формат(Год(ПраздДень3), “ЧГ=0″)+” “+ РабДень + ” дней”);

    ПраздДень1 = ДобавитьМесяц(ПраздДень1,12);
    ПраздДень2 = ДобавитьМесяц((ПраздДень2),Число(“12”));
    ПраздДень3 = ДобавитьМесяц(ПраздДень3,Число(“12”));
    КонецЦикла;
    КонецПроцедуры
    </code>

    1) В Основном новые для меня были курсы “со звездочкой”, как работает контекстная подсказка и “горячие клавиши”
    2) Всегда путалась, где нужна процедура, а где функция. И где на Сервере, где на Клиенте

     

     

    • Первый блок ответа – неправильный, попал по ошибке.

  30. Упсс..код продублировал дважды.Не хотел я этого…

  31. <code>

    Для ТекГод = 2011 По 2020 Цикл
    НачГода = Дата(ТекГод,01,01);
    ДеньНеделиНачГода = ДеньНедели(НачГода);
    ВсегоДнейВГоду = ДеньГода(КонецГода(НачГода));
    //Количество субботних и воскресных дней в обычном году
    Если ВсегоДнейВГоду = 365 Тогда
    КолВыхДнейВГоду = ?(ДеньНеделиНачГода = 6,105,104);
    КонецЕсли;
    //Количество субботних и воскресных дней в високосном году
    Если ВсегоДнейВГоду = 366 Тогда
    Если ДеньНеделиНачГода = 6
    Тогда
    КолВыхДнейВГоду = 106
    ИначеЕсли ДеньНеделиНачГода = 5 Или ДеньНеделиНачГода = 7
    Тогда
    КолВыхДнейВГоду = 105
    Иначе
    КолВыхДнейВГоду = 104
    КонецЕсли;
    КонецЕсли;  
    //Количество праздничных дней в году не совпадающих с выходными
    ПраздничныеДни = Новый Структура(“НовыйГод,ДеньЗащитника,ЖенскийДень”,”0101″,”0223″,”0308″);
    ТекГод = Формат(ТекГод,”ЧГ=0″);  
    КолДопВыходных = 0;  
    Для каждого Праздник Из ПраздничныеДни Цикл
    ДеньНеделиПраздника = ДеньНедели(Дата(ТекГод+Праздник.Значение));
    Если (ДеньНеделиПраздника <> 6) И (ДеньНеделиПраздника <> 7)  Тогда  
    КолДопВыходных = КолДопВыходных +1;
    КонецЕсли;
    КонецЦикла;
    КолРабочихДнейВГоду = ВсегоДнейВГоду – (КолВыхДнейВГоду + КолДопВыходных);
    Сообщить(“В “+ТекГод+” году рабочих дней:”+КолРабочихДнейВГоду);
    КонецЦикла;
    Для ТекГод = 2011 По 2020 Цикл НачГода = Дата(ТекГод,01,01); ДеньНеделиНачГода = ДеньНедели(НачГода); ВсегоДнейВГоду = ДеньГода(КонецГода(НачГода)); //Количество субботних и воскресных дней в обычном году Если ВсегоДнейВГоду = 365 Тогда КолВыхДнейВГоду = ?(ДеньНеделиНачГода = 6,105,104); КонецЕсли; //Количество субботних и воскресных дней в високосном году Если ВсегоДнейВГоду = 366 Тогда Если ДеньНеделиНачГода = 6 Тогда КолВыхДнейВГоду = 106 ИначеЕсли ДеньНеделиНачГода = 5 Или ДеньНеделиНачГода = 7 Тогда КолВыхДнейВГоду = 105 Иначе КолВыхДнейВГоду = 104 КонецЕсли; КонецЕсли;   //Количество праздничных дней в году не совпадающих с выходными ПраздничныеДни = Новый Структура(“НовыйГод,ДеньЗащитника,ЖенскийДень”,”0101″,”0223″,”0308″); ТекГод = Формат(ТекГод,”ЧГ=0″);   КолДопВыходных = 0;   Для каждого Праздник Из ПраздничныеДни Цикл ДеньНеделиПраздника = ДеньНедели(Дата(ТекГод+Праздник.Значение)); Если (ДеньНеделиПраздника <> 6) И (ДеньНеделиПраздника <> 7)  Тогда   КолДопВыходных = КолДопВыходных +1; КонецЕсли; КонецЦикла; КолРабочихДнейВГоду = ВсегоДнейВГоду – (КолВыхДнейВГоду + КолДопВыходных); Сообщить(“В “+ТекГод+” году рабочих дней:”+КолРабочихДнейВГоду); КонецЦикла;
    </code>
    Ответы:
    1. Изучаю с нуля, до этого посетил курсы в УЦ №1. Ваша подача материала то что нужно , был приятно удивлен. Появилась надежда добиться необходимых результатов.
    2. На вторую задачу, в задании №2, потратил существенное время на эксперименты, помогли Ответы на вопросы слушателей.
    3. Думаю для начала темы изложены оптимально.
    Единственно что удручает  – не работает конфигурация на платформе для обучения. Посоветуйте какую лучше поставку 1С  приобрести для решения этой проблемы. Любую базовую или…

  32. Виталий Межаков 11.04.2011 в 23:03

    Решение:

    Гиперссылкой на скрин кода обработки(открывается при помощи ctrl + right mouse click)

    На всякий случай и листинг:

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

    ТекДата = Дата(2010,01,01);
    Пока ТекДата < Дата(2020,01,01) Цикл

    НоваяСтрочка = ТЗ.Добавить();
    НоваяСтрочка.Год = Год(ТекДата);

    НоваяСтрочка.ЧислоРабочихДней =
    Число(
    Не (
    (ДеньНедели(ТекДата) = 6) ИЛИ
    (ДеньНедели(ТекДата)=7) ИЛИ
    (Лев(ТекДата,5) = “01.01”) ИЛИ
    (Лев(ТекДата,5) = “08.03”) ИЛИ
    (Лев(ТекДата,5) = “23.02”)
    )
    );

    ТекДата = ТекДата + 24*60*60;

    КонецЦикла;

    ТЗ.Свернуть(“Год”,”ЧислоРабочихДней”);

    Для Каждого Строчка Из ТЗ Цикл
    Сообщить(“” + Формат(Строчка.Год,”ЧГ=”) + ” год – ” + Строчка.ЧислоРабочихДней + ” рабочих дней”);
    КонецЦикла;

    Можно ли выкладывать решения только ссылкой на картинку с кодом? А то уж очень нетривиальное форматирование у нас в блоге =)
    Обратная связь:

    Все, что касается управляемых форм, было новым и полезным. Полезной также была карта приоритетов выполнения операций в сложных выражениях.
    Особых сложностей не возникло.
    Все было рассмотрено достаточно подробно.

     

    • Виталий Межаков 11.04.2011 в 23:08

      Ставил-ставил нумерованные списки в отчете, и все форматирование вместе с отступами слетело при добавлении.. Поэтому, пардон за кривизну оформления.

    • Да, можно выкладывать код картинкой.

  33. <code>ТекДата = НачалоГода(ТекущаяДата());
    КонДата = КонецГода(ДобавитьМесяц(ТекДата,12*10));
    Пока ТекДата <= КонДата Цикл
    КонецГода = КонецГода(ТекДата);
    ТекГод = Год(ТекДата);
    РабочихДней = 0;
    Пока ТекДата <= КонецГода Цикл
    Если НЕ (ДеньНедели(ТекДата) = 6 ИЛИ ДеньНедели(ТекДата) = 7) Тогда
    Если НЕ (ТекДата = Дата(ТекГод,1,1)
    ИЛИ ТекДата = Дата(ТекГод,2,23)
    ИЛИ ТекДата = Дата(ТекГод,3,8)) Тогда
    РабочихДней = РабочихДней + 1;
    КонецЕсли;
    КонецЕсли;
    ТекДата = ТекДата + 24*60*60;
    КонецЦикла;
    Сообщить(Формат(КонецГода,”ДФ=’yyyy “”год””‘”)+” – “+РабочихДней+” рабочих дней”);
    КонецЦикла;</code>
    Обратная связь:
    1.  Систематизация знаний
    2.  Проблем не было
    3. Сервисные возможности конфигуратора после выхода 8.2.14
     

    • 3. Такую тему мы рассмотрим, когда выйдет 14-й релиз.

  34. Майор 11.04.2011 в 22:14

    Обратная связь:
    1) Новым и полезным стали нюансы работы в конфигураторе (горячие клавиши, автоподсказка и т.п.).
    2) затруднений не было, пока… но я всё же выскажусь, хоть это и не касается нулевого блока ))) Каким образом изучать Первый блок прикажете, если на сайте половина видео в .exe выложено и открываться никак не хочет?
    3) на мой взгляд – достаточно подробно всё изложено, по крайней мере, у меня прямо каких-то сильных вопросов по изложенному материалу не возникало…

    • 2. Затруднений не будет.
      Сейчас принимаем решение по этому вопросу.

      • Майор 12.04.2011 в 23:27

        Надеемся и ждём )))
        Судя по информации на сайте ЕМS – посылку до сих пор из Москвы не выслали :’-(

  35. Hrisoploka 11.04.2011 в 22:10

    Обратная связь по нулевому блоку
    1. Новое в нулевом блоке – это возможность одновременного существования версий платформы 8.2, приоритеты арифметических операций (а также существование унарных операций и операции остаток от деления во встроенном языке), разница между оператором присваивания и равенства, директивы препроцессора, подробности клиент-серверной архитектуры, четкое объяснения понятия оперативного, управленческого, регламентированного учета.
    2. Наибольшие затруднения были при выполнении д/з № 2 и преодолевались внимательным изучением видеоуроков и чтением комментариев участников мастер-группы:-)
    3. Подробнее хотелось бы раскрыть тему о том, какие процедуры и функции лучше выполнять на сервере, а какие на клиенте, но возможно речь об этом пойдет дальше.

    • Верно о исполнении кода в разных контекстах (клиент, сервер) мы будем говорить далее.

  36. Yuri Golovko 11.04.2011 в 22:05

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

    О 8-ке читал много, бывал на курсах. Но практики работы не имею – работаю с 7.7. Поэтому знаний не то что стало намного больше, чем раньше, но они стали более упорядоченными. Представления о многих вещах стали ощутимо четче. Еще, думаю, необходимо со временем возвращаться к уже просмотренным материалам, глубже прорабатывать отдельные моменты. И так много раз, пока вся информация из видеоуроков не перейдет на интуитивный уровень.
    Работать труднее всего было с логическими выражениями и преобразованиями типов. Видимо потому, что с ними нечасто сталкивался раньше. В других курсах об этом мало рассказывают. Как преодолевал? Еще раз пересматривал видеоролики, думал, пробовал. Обращался к ситакс-помощнику.
    Так как блок по характеру вводный, то, на мой взгляд, тем в нем раскрыто достаточно. Если еще учесть ограниченность времени, отведенного на изучение, то информации вообще огромное количество – с первого раза можно утонуть. Откровенно говоря, на более-менее приемлемом уровне я усвоил не более 10-ти процентов. Четкое ощущение того, о чем хотелось бы узнать больше, я думаю, появится ближе к концу курса.

  37. &НаКлиенте
    Процедура ВычеслениеРабочихДней(Команда)
    // Вставить содержимое обработчика.
    НачалоГ = НачалоГода(ТекущаяДата());
    ГодН = Год(ТекущаяДата());
    ГодО = ГодН+10;
    Для Год=Годн По ГодО Цикл
    Сообщить(Строка(Год)+” год – “+Строка( ВозвратКоличДней(Год))+” рабочих дней”);

    КонецЦикла;       

    КонецПроцедуры
    &НаСервере
    Функция ВозвратКоличДней(Год1)
    Праздники = 0; РабДни=0;
    Для Месяц = 1  По 12 Цикл
    ДнейВМесяце = День(КонецМесяца(Дата(Год1, Месяц, 1)));
    Для День = 1  По ДнейВМесяце Цикл
    Если ((День = 1) и (Месяц = 1))
    или ((День = 23) и (Месяц = 2))
    или ((День = 8) и (Месяц = 3))
    или ( ДеньНедели(Дата(Год1, Месяц, День)) = 6)
    Или ( ДеньНедели(Дата(Год1, Месяц, День)) = 7)
    Тогда  Праздники=Праздники+1;
    Иначе
    РабДни=РабДни+1;

    КонецЕсли;
     
     

  38. Hrisoploka 11.04.2011 в 22:03

    Решила примитивно в лоб, наверняка есть какой-нибудь способ умнее:-)
    <code>
    &НаСервере
    Функция ПолучитьКоличествоРабДней(Год)
     ТекДата = Дата(Год, 1, 2, 0, 0, 0);
     КонГода = Дата(Год, 12, 31, 23, 59, 59);
     КолРабДней = 0;
     Пока ТекДата <= КонГода Цикл
      
      Если ДеньНедели(ТекДата) < 6 Тогда
       Если (НЕ (День(ТекДата) = 23 И Месяц(ТекДата) = 2)) И (НЕ ((День(ТекДата) = 8 И Месяц(ТекДата) = 3))) Тогда
        КолРабДней = КолРабДней + 1; 
       КонецЕсли;
      КонецЕсли;
      ТекДата = ТекДата + 86400; 
     
     КонецЦикла;   
     
     Возврат КолРабДней;
     
    КонецФункции // ПолучитьКоличествоРабДней()
     
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
     
     ТекГод = Год(ТекущаяДата()); 
     Для Сч=1 По 10 Цикл
      КолРабДней = ПолучитьКоличествоРабДней(ТекГод);
      Сообщить(Строка(ТекГод) + ” год – “+Строка(КолРабДней) + ” рабочих дней”);
      ТекГод = ТекГод + 1; 
     КонецЦикла;
    КонецПроцедуры
    </code>

  39. <code>
    &НаКлиенте
    Процедура Команда1(Команда)
    Для счетчик = 0 По 9 Цикл
    год = Год(ТекущаяДата())+счетчик;     
    сообщить(“”+год+” год – “+КолвоРабДнейВГоду(год)+” дней”);    
    КонецЦикла;                    
    КонецПроцедуры

    &НаКлиенте
    Функция КолвоРабДнейВГоду(ГодВывода)
    перДеньГода = Дата(ГодВывода,01,01);
    ОдинДень = 24*60*60;
    КолвоДней = 0;
    КонецГодаВывода = КонецГода(Дата(ГодВывода,01,01));
    Пока перДеньГода <= КонецГодаВывода Цикл
    Если НЕ ДеньНедели(перДеньГода)=6 И НЕ ДеньНедели(перДеньГода)=7
    И НЕ перДеньГода= Дата(ГодВывода,01,01) И НЕ перДеньГода= Дата(ГодВывода,02,23)
    И НЕ перДеньГода= Дата(ГодВывода,03,08) Тогда
    КолвоДней= КолвоДней+1;    
    КонецЕсли;                         
    перДеньГода = перДеньГода+ ОдинДень;
    КонецЦикла;

    ВОзврат КолвоДней;
    КонецФункции // КолвоРабДнейВГоду(год)
    </code>
    1) что нового: некоторые новые функции, новый интерфейс, работа с формами. Удивление вызвали матем. операции со строками
    2) пока сильных затруднений не было, кроме путаницы в голове что выполняется на сервере, что на клиенте.
    3)затрудняюсь ответить…

  40. <code>
    Для ТекГод = 2011 По 2020 Цикл 
      
      ТекДата = Дата(ТекГод, 1, 1);
      
      РабочихДней = 0;  
      
      Дата1Января = Дата(ТекГод, 1, 1);
      Дата23Февраля = Дата(ТекГод, 2, 23);
      Дата8Марта = Дата(ТекГод, 3, 8);
      
      Пока Год(ТекДата) = ТекГод Цикл
       
       Если ДеньНедели(ТекДата) < 6 Тогда
        
        Если НЕ (ТекДата = Дата1Января ИЛИ
          ТекДата = Дата23Февраля ИЛИ
          ТекДата = Дата8Марта) Тогда
         РабочихДней = РабочихДней +1;
        КонецЕсли;     
            
       КонецЕсли;
       
       ТекДата = ТекДата + 24* 3600;
       
      КонецЦикла; 
      
      Сообщить(Формат(ТекГод,”ЧГ=0″) + ” год – ” + РабочихДней + ” рабочих дней”);
      
     КонецЦикла;
    </code>

    1. Стало более понятнее с контекстом выполнения (клиент-сервер) по сравнению с 8.1. Не обращал внимания раньше на округление вычислений с предложенной стороны – спасибо, очень полезно. Стало открытием передача параметров по ссылке и значению.
    2. Были сложности с конкантенацией строк. Пересмотрел курсы еще раз, попробовал и разобрался.
    3.  По нулевому блоку вопросов нет.