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