Базовый курс. Домашнее задание №4

Первое задание по 1-му блоку базового курса.

Для выполнения рекомендуется изучить следующие главы 1-го блока.
Глава 1. Типы данных
Глава 2. Контекст выполнения кода
Глава 3. Модули
Глава 4. Синтакс-помощник

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

комментариев 115 на “Базовый курс. Домашнее задание №4”

  1. kontovskiy 14.01.2011 в 23:12

    <code>
    &НаКлиенте
    Процедура Команда1(Команда)

    Для Год=2010 По 2019 Цикл

    КонецГода = Дата(Год,12,31);
    КолвоДнейВГоду = ДеньГода(КонецГода);
    ЦелыхНедель = Цел(КолвоДнейВгоду/7);
    НеобработаноДней = КолвоДнейВгоду%7;
    Январь01 = Дата(Год,1,1);
    Февраль23 = Дата(Год,2,23);
    Март08 = Дата(Год,3,8);

    РабочихДней = ЦелыхНедель*5;
    Для Сч=1 По НеобработаноДней Цикл

    ТекДень = Дата(Год, 1, Сч);
    Если ДеньНедели(ТекДень)>6 Тогда
    РабочихДней = РабочихДней+1;
    КонецЕсли;

    КонецЦикла;

    РабочихДней = РабочихДней – РабочийДень(Январь01)
    – РабочийДень(Февраль23) – РабочийДень(Март08);

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

    КонецЦикла;

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

    &НаКлиенте
    Функция РабочийДень(День)

    Если ДеньНедели(День)<6 Тогда

    Возврат 1;
    Иначе
    Возврат 0;

    КонецЕсли;
    КонецФункции

    </code>

  2. Андрей 05.01.2011 в 18:29

    Кстати, в видеоуроке посвящённой описанию создания Ролей, рассазывается про 2 чек-бокса: “устанавливать права для новых объектов” и “устанавливать права для реквизитов и табличных частей по умолчанию”. Но в моём релизе (8.2.13.202) этих чек-боксов уже три. Если не сложно – осветите плз тему “с чем едят” чек-бокс “независимые права подчинённых объектов”. Заранее спасибо :-)

    • Ок, выпустим отдельную тематическую сессию МГ по изменениям релиза 8.2.13.

  3. Андрей 05.01.2011 в 17:15

    Пытаюсь “догнать уходящий поезд”. На практике потренировался на запросной модели обращения к справочникам. В часности сделал такой вариант функции “СинхронизацияПользователей”
    <code>
    Функция СинхронизацияПользователей () Экспорт
     
     Запрос = Новый Запрос;
     Запрос.Текст = “ВЫБРАТЬ
                    | Пользователи.ПометкаУдаления,
                    | Пользователи.Код,
                    | Пользователи.Наименование
                    |ИЗ
                    | Справочник.Пользователи КАК Пользователи
                    |ГДЕ
                    | Пользователи.ПользовательИБ = &ПользовательИБ”;
     
     Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
     Запрос.УстановитьПараметр(“ПользовательИБ”, Пользователь.УникальныйИдентификатор);
     
     Выборка = Запрос.Выполнить().Выбрать();
     
     // Порверяем – есть ли такой ГУИД пользователя
     Если Выборка.Количество() = 0 Тогда
      
      //Гуид отсутствует – проверяем есть такое имя уже в справочнике
      ЗапросИмени = новый Запрос;
      ЗапросИмени.Текст = “ВЫБРАТЬ
                    | Пользователи.ПометкаУдаления
                    |ИЗ
                    | Справочник.Пользователи КАК Пользователи
                    |ГДЕ
                    | Пользователи.Код = &Код”;
     
      ЗапросИмени.УстановитьПараметр(“Код”, Пользователь.Имя);
     
      ВыборкаИмени = ЗапросИмени.Выполнить().Выбрать();
      
      Если ВыборкаИмени.Количество() = 0 Тогда
       
       //ГУИД отсутствует и такого имени в справочнике нет
       //  – Создаём новый элемент справочника “Пользователи”
          НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент();
       НовыйПользователь.ПользовательИБ = Пользователь.УникальныйИдентификатор;
       НовыйПользователь.Код = Пользователь.Имя;
       НовыйПользователь.Наименование = Пользователь.ПолноеИмя;
       Попытка
        НовыйПользователь.Записать();
       Исключение
        // Проблема записи в справочник “Пользователи”
        Возврат Ложь;
       КонецПопытки;
       
       Возврат Истина;
      Иначе
       // ГУИД отсутствует, но пользователь с таким именем существует (видно заведён ранее вручную)
       //  – Заполняем отсутствующий ГУИД
          СуществующийПользователь = Справочники.Пользователи.НайтиПоКоду(Пользователь.Имя).ПолучитьОбъект();
       СуществующийПользователь.ПользовательИБ = Пользователь.УникальныйИдентификатор;
       Попытка
        СуществующийПользователь.Записать();
       Исключение
        // Проблема записи в справочник “Пользователи”
        Возврат Ложь;
       КонецПопытки;
       
       Возврат Истина;
      КонецЕсли;
     Иначе
      
      // такой ГУИД в нашей базе есть обрабатываем на предмет “пометка на удаление”
      Пока Выборка.Следующий() Цикл
       Если Выборка.ПометкаУдаления Тогда
        // Пользователь в справочнике помечен на удаление – вход не возможен
        Возврат Ложь;
       Иначе
        // Проверяем – не изменилось ли имя пользователя в конфигураторе
        Если Выборка.Код <> Пользователь.Имя Тогда
         // Синхронизируем имя в справочнике по значению имени сеанса
            СуществующийПользователь = Справочники.Пользователи.НайтиПоРеквизиту(“ПользовательИБ”, Пользователь.УникальныйИдентификатор).ПолучитьОбъект();
         СуществующийПользователь.Код = Пользователь.Имя;
         Попытка
          СуществующийПользователь.Записать();
         Исключение
          // Проблема записи в справочник “Пользователи”
          Возврат Ложь;
         КонецПопытки;
        Конецесли;
        
        Если Выборка.Код <> Пользователь.Имя Тогда
         // Синхронизируем имя в справочнике по значению имени сеанса
            СуществующийПользователь = Справочники.Пользователи.НайтиПоРеквизиту(“ПользовательИБ”, Пользователь.УникальныйИдентификатор).ПолучитьОбъект();
         СуществующийПользователь.Наименование = Пользователь.ПолноеИмя;
         Попытка
          СуществующийПользователь.Записать();
         Исключение
          // Проблема записи в справочник “Пользователи”
          Возврат Ложь;
         КонецПопытки;
        Конецесли;
        
        Возврат Истина;    
       КонецЕсли;
      КонецЦикла;
      
     КонецЕсли;
    КонецФункции
    </code>

    • >Если Выборка.Количество() = 0 Тогда
      Я бы рекомендовал использовать следующий подход.
      Результат = Запрос.Выполнить();
      Если НЕ Результат.Пустой() Тогда
      Выборка = Результат.Выбрать();
      КонецЕсли;