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