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

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

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

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

  1. Рагим 19.11.2014 в 07:09

    Созданы константы “ВремяНачалаРабочегоДня” и “ВремяОкончанияРабочегоДня”для хранения времени начала и окончания рабочего дня предприятии.

    Создан и заполнен предопределенными элементами справочник “Варианты обедов”

    Создана и настроена роль “ПолныеПрава”

    В списке пользователей созданы пользователи “Администратор” и “Менеджер”, им присвоена роль “ПолныеПрава”

    Создан справочник “Пользователи” с реквизитом “Администратор”

    Создан справочник “ОбедыПользователей”, подчиненный справочнику “Пользователи”, с реквизитами “Дата” и “ВариантОбеда”

    При запуске системы справочник “Пользователи” автоматически синхронизируется со списком пользователей

    /// МодульУправляемого приложения

    Процедура ПриНачалеРаботыСистемы()
        ОбщиеФункцииСервер.ПроверитьПользователяСервер();
               //….
    КонецПроцедуры

    ///ОбщиеФункцииСервер

    Функция ТекущийПользовательИБ() Экспорт
        возврат ПользователиИнформационнойБазы.ТекущийПользователь();
    КонецФункции

    Процедура ПроверитьПользователяСервер() Экспорт
    ТекущийПользователь =  ОбщиеФункцииСервер.ТекущийПользовательИБ();
    НайденнаяСсылка = Справочники.Пользователи.НайтиПоНаименованию(ТекущийПользователь);
    Если НайденнаяСсылка=Справочники.Пользователи.ПустаяСсылка() Тогда
         НоваяЗапись = Справочники.Пользователи.СоздатьЭлемент();
         НоваяЗапись.Наименование=ТекущийПользователь;
         НоваяЗапись.Записать();
    КонецЕсли;  
    КонецПроцедуры

    Проверка при входе и выходе и диалог о запросе обеда для пользователей с флагом Администратор не осуществялется

    /// МодульУправляемого приложения

    Процедура ПриНачалеРаботыСистемы()
        ОбщиеФункцииСервер.ПроверитьПользователяСервер();
        Если не Администратор() Тогда
            Если не ОбщиеФункцииСервер.ОбедСегодняВыбран() Тогда
            глОбед = ОбщиеФункцииКлиент.ВыбратьОбеды();
            ОбщиеФункцииСервер.ЗаписатьОбеды(глОбед);
            КонецЕсли
        КонецЕсли;
    КонецПроцедуры

    Процедура ПередЗавершениемРаботыСистемы(Отказ)
        Если не ОбщиеФункцииСервер.АдминистраторСервер() Тогда
            Отказ = ОбщиеФункцииКлиент.ЗавершениеЗапрещено(ОкончаниеРаботы, ДатаЗапуска);
        КонецЕсли;
    КонецПроцедуры

    ///ОбщиеФункцииСервер

    Функция АдминистраторСервер() Экспорт
         возврат Справочники.Пользователи.НайтиПоНаименованию(ТекущийПользовательИБ()).Администратор;
    КонецФункции

    Функция ТекущийПользовательИБ() Экспорт
        возврат ПользователиИнформационнойБазы.ТекущийПользователь();
    КонецФункции

    Время работы предприятия берется из констант

    ///ОбщиеФункцииКлиент

        Структура = ОбщиеФункцииСервер.ВремяНачалаОкончанияРаботы();
        НачалоРаботы = Дата(Год(ДатаЗапуска),Месяц(ДатаЗапуска),День(ДатаЗапуска),Час(Структура.ВремяНачала),Минута(Структура.ВремяНачала),Секунда(Структура.ВремяНачала));
        ОкончаниеРаботы = Дата(Год(ДатаЗапуска),Месяц(ДатаЗапуска),День(ДатаЗапуска),Час(Структура.ВремяОкончания),Минута(Структура.ВремяОкончания),Секунда(Структура.ВремяОкончания));


    ///ОбщиеФункцииСервер

    Функция ВремяНачалаОкончанияРаботы()  Экспорт
        Структура = Новый Структура;
        Структура.Вставить("ВремяНачала",Константы.ВремяНачалаРабочегоДня.Получить());
        Структура.Вставить("ВремяОкончания",Константы.ВремяОкончанияРабочегоДня.Получить());
        Возврат Структура;
    КонецФункции

    Варианты обеда выбираются из справочника при помощи запроса:

    ///ОбщиеФункцииСервер

    Функция ВыбратьОбедыСервер() Экспорт
        СписокОбедов = Новый СписокЗначений;
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |   ВариантыОбедов.Ссылка
            |ИЗ
            |   Справочник.ВариантыОбедов КАК ВариантыОбедов
            |ГДЕ
            |   ВариантыОбедов.ПометкаУдаления = ЛОЖЬ";
        РезультатЗапроса = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            СписокОбедов.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
        КонецЦикла;
        Возврат СписокОбедов;
    КонецФункции

    Результаты выбора записываются в справочник "ОбедыПользователей"

    Процедура ЗаписатьОбеды(глОбед) Экспорт
        Для Каждого Строка из глОбед Цикл
            Спр = Справочники.ОбедыПользователей.СоздатьЭлемент();
            Спр.Владелец = Справочники.Пользователи.НайтиПоНаименованию(ТекущийПользовательИБ());
            Спр.Дата = ТекущаяДата();
            Спр.Наименование = "" + Строка +" - "+ Строка(ТекущаяДата());
            Спр.ВариантОбеда = Строка;
            Спр.Записать();
        Конеццикла;  
    КонецПроцедуры

    Вопрос о выборе обеда задается только при первом входе

    /// МодульУправляемого приложения

    Процедура ПриНачалеРаботыСистемы()
        ОбщиеФункцииСервер.ПроверитьПользователяСервер();
        Если не ОбщиеФункцииСервер.АдминистраторСервер() Тогда
            Если не ОбщиеФункцииСервер.ОбедСегодняВыбран() Тогда
            глОбед = ОбщиеФункцииКлиент.ВыбратьОбеды();
            ОбщиеФункцииСервер.ЗаписатьОбеды(глОбед);
            КонецЕсли
        КонецЕсли;
    КонецПроцедуры


    ///ОбщиеФункцииСервер

    Функция ОбедСегодняВыбран() Экспорт
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |   ОбедыПользователей.Ссылка
            |ИЗ
            |   Справочник.ОбедыПользователей КАК ОбедыПользователей
            |ГДЕ
            |   ОбедыПользователей.Владелец в (&Владелец)
            |   И ОбедыПользователей.Дата = НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ)";

        Запрос.УстановитьПараметр("Владелец", Справочники.Пользователи.НайтиПоНаименованию(ТекущийПользовательИБ()));
        Запрос.УстановитьПараметр("Дата", ТекущаяДата());
        РезультатЗапроса = Запрос.Выполнить();
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        Возврат ?(ВыборкаДетальныеЗаписи.Количество()>0,истина,ложь);
    КонецФункции
  2. Людмила 26.06.2012 в 16:49

    Домашнее задание №5. Блок 1.
    Создала 2 константы :
    ВремяНачалаРабочегоДняПредприятия
    ВремяОкончанияРабочегоДняПредприятия   -«_
    Типы- Дата, Состав даты – Время
     
    Создала справочник «Варианты обедов». Занесла в него предопределенные элементы
    • Рыба;
    • Мясо;
    • Курица.
    Создала роль, содержащую права на все объекты и для нее отметила
    признак установки полных прав на новые объекты.
    В списке пользователей создала двух пользователей с полными правами: Администратор
    и Менеджер.
    Создала справочник «Пользователи», в нем определила реквизит «Администратор»
    ,тип Булево.Создала интерфес- Полный
    Создала справочник «ОбедыПользователей», подчиненный «Пользователям».
    Реквизиты – Дата тип Дата
    ВариантОбеда тип СправочникСсылка.ВариантыОбедов
    При старте приложения проверила есть ли текущий пользователь в
    справочнике. Если нет-добавляю.Для этого:
     
    В модуле приложения
    Создала вызов общего модуля РаботаСПользователями
    Процедура ПриНачалеРаботыСистемы()
                РаботаСПользователями.ПроверкаТекущегоПользователя();
    КонецПроцедуры
     
    Общий модуль РаботаСПользователями. Его Свойства –Сервер, ВызовСервера (галочка) В модуле
    <code>
     
     
    &НаСервере    
      Функция ПроверкаТекущегоПользователя()Экспорт
                  Если ПустаяСтрока(ИмяПользователя()) Тогда
                              Имя          = “НеАвторизован”;
                              ПолноеИмя   = “Не авторизован”;
                  Иначе
                              Имя          = ИмяПользователя();
                             
                              Если ПустаяСтрока(ПолноеИмяПользователя()) Тогда
                                         ПолноеИмя = Имя;
                              Иначе
                                         ПолноеИмя = ПолноеИмяПользователя();
                              КонецЕсли;
                  КонецЕсли;
                 
                  ДлинаКодаПользователя = Метаданные.Справочники.Пользователи.ДлинаКода;
                 
                  Если СтрДлина(Имя) > ДлинаКодаПользователя Тогда
                              Имя = Лев(Имя, ДлинаКодаПользователя);
                  КонецЕсли;
                  Пользователь = Справочники.Пользователи.НайтиПоКоду(Имя);
                  Если Пользователь = Справочники.Пользователи.ПустаяСсылка() Тогда
                              ОбъектПользователь=Справочники.Пользователи.СоздатьЭлемент();
                              ОбъектПользователь.Код=ИмяПользователя();
                              ОбъектПользователь.Наименование=ПолноеИмя;
                              ОбъектПользователь.Администратор=?(Полноеимя=”Администратор”,Истина,Ложь);
                              ОбъектПользователь.Записать();
                  КонецЕсли;
                  //        Проверка при входе и выходе и диалог о запросе обеда не должны осуществляться
                  //для пользователей с флагом «Администратор»;
                 
                  Пользователь =  Справочники.Пользователи.НайтиПоКоду(Имя);
                  Если  Пользователь.Администратор=Истина Тогда
                              Возврат Истина   ;
                  Иначе
                              //Время работы предприятия берется из констант;
                              ЗнВремяНачалаРабочегоДняПредприятия=Константы.ВремяНачалаРабочегоДняПредприятия.Получить();
                              ЗнВремяОкончанияРабочегоДняПредприятия=Константы.ВремяОкончанияРабочегоДняПредприятия.Получить();
                             
                             
                              ДатаНачалаРабочегоДняПредприятия=Дата(Год(ТекущаяДата()),Месяц( ТекущаяДата()),День(ТекущаяДата()),
                              Час( ЗнВремяНачалаРабочегоДняПредприятия),   
                              Минута( ЗнВремяНачалаРабочегоДняПредприятия),
                              Секунда( ЗнВремяНачалаРабочегоДняПредприятия));                 
                              ДатаОкончанияРабочегоДняПредприятия=Дата(Год(ТекущаяДата()),Месяц( ТекущаяДата()),День(ТекущаяДата()),
                              Час(ЗнВремяОкончанияРабочегоДняПредприятия),
                              Минута(ЗнВремяОкончанияРабочегоДняПредприятия),
                              Секунда(ЗнВремяОкончанияРабочегоДняПредприятия))  ;                      
                             
                              Если ТекущаяДата() < ДатаНачалаРабочегоДняПредприятия ИЛИ
                                         ТекущаяДата() > ДатаОкончанияРабочегоДняПредприятия                  Тогда
                                          Сообщить(” После “+ Час(ЗнВремяОкончанияРабочегоДняПредприятия)+”.”+
                                         Минута(ЗнВремяОкончанияРабочегоДняПредприятия) +”.”+
                                        
                                         ” заходить в  конфигурацию нельзя “);
                                         Возврат ЛОжь;
                              Иначе
                                         // проверяю был ли заказ обеда сегодня
                                         СсылкаСпрОбедыПользователей= Справочники.ОбедыПользователей.НайтиПоРеквизиту(“Дата”,НачалоДня(ТекущаяДата()));
                                         Если СсылкаСпрОбедыПользователей.Пустая() Тогда
                                                     // Варианты обеда выбираются из одноименного справочника, но выбирать нужно
                                                     //элементы, не помеченные на удаление;
                                                    
                                                     Выборка=Справочники.ВариантыОбедов.Выбрать();
                                                     Пока Выборка.Следующий() Цикл
                                                                 Если НЕ Выборка.ПометкаУдаления   Тогда
                                                                             ОБъектСпрВариантыОбедов=Выборка.ПолучитьОбъект();
                                                                             ОбъектСпрВариантыОбедов.ВыборБлюда();
                                                                             Если ОБъектСпрВариантыОбедов.Пометка=Истина Тогда
                                                                                        СсылкаСпрОбедыПользователей= Справочники.ОбедыПользователей.НайтиПоНаименованию(ВЫборка.Наименование);
                                                                                        Если СсылкаСпрОбедыПользователей.Пустая() ИЛИ НачалоДня(СсылкаСпрОбедыПользователей.Дата)=НачалоДня(ТекущаяДата()) Тогда
                                                                                                    новыйСпрОбедыПользователей =   Справочники.ОбедыПользователей.СоздатьЭлемент();
                                                                                                    НовыйСпрОбедыПользователей.Наименование =Выборка.Наименование;
                                                                                                    НовыйСпрОбедыПользователейДатаОбеда=ТекущаяДата();
                                                                                                    НовыйСпрОбедыПользователей.Записать();
                                                                                        КонецЕсли;
                                                                             КонецЕсли;;
                                                                 КонецЕсли;
                                                     КонецЦикла;
                                                     ГлОбед=Новый Массив ;
                                                    
                                                     Пока Выборка.Следующий() Цикл
                                                                
                                                                 Если Выборка.Пометка Тогда
                                                                             ГлОбед.Добавить(Выборка.Наименование);
                                                                 КонецЕсли;
                                                                
                                                     КонецЦикла;
                                                    
                                         КонецЕсли;
                                         Возврат Истина;
                              КонецЕсли;
                  КонецЕсли;
                 
                 
      КонецФункции       
    </code>