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

  1. Михаил 02.01.2013 в 02:37

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

    Процедура ПередНачаломРаботыСистемы(Отказ)
       
        ОбщийМодульСервер.ПроверкаПользователяПриВходе();
       
        Если Не ОбщийМодульСервер.ПроверкаАдминистратора() Тогда
            Если Не ОбщийМодульСервер.ПроверкаРабочегоВремени() Тогда
                Предупреждение("Вход в конфигурацию во внерабочее время запрещен",10);
                Отказ = Истина;
            КонецЕсли;
        КонецЕсли;
       
    КонецПроцедуры

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

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

    ОбщийМодульСервер

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

    Функция ПроверкаАдминистратора() Экспорт

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

    КонецФункции // ПроверкаАдминистратора()

    Функция ПроверкаОкончанияРабочегоВремени() Экспорт

        РабочееВремя = Истина;
       
        ТекЧас     = Час(ТекущаяДата());
        ТекМинута  = Минута(ТекущаяДата());
        ТекСекунда = Секунда(ТекущаяДата());
       
        КонецРабочегоДня = Константы.КонецРабочегоДня.Получить()+0;
        ПроверяемаяДата =  Дата(1,1,1,ТекЧас,ТекМинута,ТекСекунда);
       
        Если ПроверяемаяДата > КонецРабочегоДня  Тогда
           
            РабочееВремя = Ложь;
       
        КонецЕсли;
       
        Возврат РабочееВремя;

    КонецФункции // ПроверкаРабочегоВремени()

    Функция ПроверкаРабочегоВремени() Экспорт

        РабочееВремя = Истина;
       
        ТекЧас     = Час(ТекущаяДата());
        ТекМинута  = Минута(ТекущаяДата());
        ТекСекунда = Секунда(ТекущаяДата());
       
        НачалоРабочегоДня = Константы.НачалоРабочегоДня.Получить()+0;
        КонецРабочегоДня = Константы.КонецРабочегоДня.Получить()+0;
        ПроверяемаяДата =  Дата(1,1,1,ТекЧас,ТекМинута,ТекСекунда);
       
        Если (ПроверяемаяДата < НачалоРабочегоДня) или (ПроверяемаяДата > КонецРабочегоДня)  Тогда
           
            РабочееВремя = Ложь;
       
        КонецЕсли;
       
        Возврат РабочееВремя;

    КонецФункции // ПроверкаРабочегоВремени()

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

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

    КонецПроцедуры // ЗаписатьОбеды()

    Функция ПроверкаВыбораОбеда() Экспорт

       ОбедВыбран = Ложь;
       НачалоРаботы = НачалоДня(ТекущаяДата());
       ОбедыПользователей = Справочники.ОбедыПользователей.Выбрать(,ВернутьТекущегоПользователя());
       Пока ОбедыПользователей.Следующий() Цикл
           Если ОбедыПользователей.Дата >= НачалоРаботы Тогда
               ОбедВыбран = Истина;
           КонецЕсли;
       КонецЦикла;
       
       Возврат ОбедВыбран;

    КонецФункции // ПроверкаВыбораОбеда()


    Функция ВернутьТекущегоПользователя()

        ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
        ИмяПользователя     = ТекущийПользователь.Имя;
        ТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя);
       
        Возврат ТекущийПользователь;

    КонецФункции // ВернутьТекущегоПользователя()

    ОбщийМодульКлиент

    Функция ВыборОбедаПользователем() Экспорт
       
        СписокОбедов = ОбщийМодульСервер.ЗаполнитьОбеды();
        МассивОбедов = Новый Массив;
        ВыбранОбед = Ложь;
       
        Пока Не ВыбранОбед Цикл
            СписокОбедов.ОтметитьЭлементы("Выберите обед");
            Для каждого Строка Из СписокОбедов Цикл
                Если Строка.Пометка Тогда
                    ВыбранОбед = Истина;
                    МассивОбедов.Добавить(Строка.Значение);
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
       
        ОбщийМодульСервер.ЗаписатьОбеды(МассивОбедов);
       
    КонецФункции // ВыборОбедаПользователем()
  2. Владимир 24.12.2012 в 10:37

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

    Процедура ПередНачаломРаботыСистемы(Отказ)
        ОбщиеФункцииКлиент.УстановитьГрафик();
        Отказ = ОбщиеФункцииКлиент.ЗапускЗапрещен();
    КонецПроцедуры

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

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

    Общий модуль ОбщиеФункцииСервер

    Функция ПолучитьДату() Экспорт
        Возврат МестноеВремя(ТекущаяУниверсальнаяДата());
    КонецФункции // ПолучитьДату() Экспорт()

    Функция ГрафикКонстанты(ДатаЗапуска) Экспорт
        Константы.НачалоРаботы.Установить(Дата(Год(ДатаЗапуска),Месяц(ДатаЗапуска),День(ДатаЗапуска),9,5,38));
        Константы.ОкончаниеРаботы.Установить(Дата(Год(ДатаЗапуска),Месяц(ДатаЗапуска),День(ДатаЗапуска),18,11,42));
    КонецФункции // УстановитьГрафик()

    Функция КонстантуПолучить(Значение) Экспорт
        Возврат  Константы[Значение].Получить();
    КонецФункции // КонстантуПолучить()

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

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

    &НаСервере
    Функция ПроверкаПользователя() Экспорт
        Спр = Справочники.Пользователи;
        Пользователь =  ПользователяПолучить();
        Флаг = Ложь;
        Выборка = Спр.Выбрать();
        Пока Выборка.Следующий() Цикл
            Если Выборка.Наименование = Пользователь Тогда
                Флаг = Истина;
            КонецЕсли;
        КонецЦикла;
        Если Флаг = Ложь Тогда
            НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент();
            НовыйПользователь.Наименование = Пользователь;
            НовыйПользователь.Администратор = ?(Пользователь = "Администратор",Истина,Ложь);
            НовыйПользователь.Записать();
        КонецЕсли;
    КонецФункции // ПолучитьПользователя()

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

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

    Функция ОбедВторойРаз() Экспорт
        Дата = НачалоДня(ПолучитьДату());
        Владелец = Справочники.Пользователи.НайтиПоНаименованию(ПользователяПолучить()).Ссылка;
        Спр = Справочники.ОбедыПользователей;
        Выборка = Спр.Выбрать(,Владелец,,);
        Пока Выборка.Следующий() Цикл
            Если Дата = Выборка.Дата Тогда
                Возврат Ложь;
            КонецЕсли;
        КонецЦикла;
        Возврат Истина;
    КонецФункции // ОбедВторойРаз() Экспорт
    Функция ПолучитьДату() Экспорт
        Возврат МестноеВремя(ТекущаяУниверсальнаяДата());
    КонецФункции // ПолучитьДату() Экспорт()

    Функция ГрафикКонстанты(ДатаЗапуска) Экспорт
        Константы.НачалоРаботы.Установить(Дата(Год(ДатаЗапуска),Месяц(ДатаЗапуска),День(ДатаЗапуска),9,5,38));
        Константы.ОкончаниеРаботы.Установить(Дата(Год(ДатаЗапуска),Месяц(ДатаЗапуска),День(ДатаЗапуска),18,11,42));
    КонецФункции // УстановитьГрафик()

    Функция КонстантуПолучить(Значение) Экспорт
        Возврат  Константы[Значение].Получить();
    КонецФункции // КонстантуПолучить()

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

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

    &НаСервере
    Функция ПроверкаПользователя() Экспорт
        Спр = Справочники.Пользователи;
        Пользователь =  ПользователяПолучить();
        Флаг = Ложь;
        Выборка = Спр.Выбрать();
        Пока Выборка.Следующий() Цикл
            Если Выборка.Наименование = Пользователь Тогда
                Флаг = Истина;
            КонецЕсли;
        КонецЦикла;
        Если Флаг = Ложь Тогда
            НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент();
            НовыйПользователь.Наименование = Пользователь;
            НовыйПользователь.Администратор = ?(Пользователь = "Администратор",Истина,Ложь);
            НовыйПользователь.Записать();
        КонецЕсли;
    КонецФункции // ПолучитьПользователя()

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

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

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

    Общий модуль ОбщиеФункцииКлиент

    Процедура УстановитьГрафик() Экспорт
        ДатаЗапуска = ОбщиеФункцииСервер.ПолучитьДату();
        ОбщиеФункцииСервер.ГрафикКонстанты(ДатаЗапуска);
    КонецПроцедуры

    Функция ЗапускЗапрещен() Экспорт
        ДатаЗапуска = ОбщиеФункцииСервер.ПолучитьДату();
        НачалоРаботы = ОбщиеФункцииСервер.КонстантуПолучить("НачалоРаботы");
        ОкончаниеРаботы = ОбщиеФункцииСервер.КонстантуПолучить("ОкончаниеРаботы");
        Если ДатаЗапуска<НачалоРаботы ИЛИ ДатаЗапуска>ОкончаниеРаботы Тогда
            Предупреждение("Не время работать!", 5);
            Возврат Истина;
        Иначе
            Возврат Ложь;
        КонецЕсли;
    КонецФункции // ЗапускЗапрещен(НачалоРаботы) Экспорт()

    Функция ЗавершениеЗапрещено() Экспорт
        ОкончаниеРаботы = ОбщиеФункцииСервер.КонстантуПолучить("ОкончаниеРаботы");
        ДатаВыхода = ОбщиеФункцииСервер.ПолучитьДату();
        Если ДатаВыхода<ОкончаниеРаботы Тогда
            Если Вопрос("Еще поработаем?!", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да Тогда
                Возврат Истина;
            КонецЕсли;
        КонецЕсли;
        Возврат Ложь;
    КонецФункции // ЗавершениеЗапрещено(ОкончаниеРаботы) Экспорт()

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