Домашнее задание №5 базового курса
Второе задание по 1-му блоку базового курса.
Для выполнения рекомендуется изучить следующие главы 1-го блока.
Глава 4. Синтакс-помощник
Глава 5. Свойства конфигурации
Глава 6. Подсистемы
Глава 7. Константы
Глава 8. Справочники
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.
Создал все объекты метаданных в соответствие с заданием.
Проверку времени начала работы и времени окончания переделал. Убрал запрос. Сделал обычным сравнением.
Синхронизацию пользователя со справочником «Пользователи» производил по UUID.
Выбор обеда сделал с помощью списка значений. В данной ситуации наверно самый удобный вариант.
В целом с заданием проблем не возникло.
Модуль управляемого приложения
————————————-
Перем глОбед Экспорт;
Процедура ПередНачаломРаботыСистемы(Отказ)
Если Не РаботаСПользователями.ПользовательАдминистратор() Тогда
Если НЕ РаботаСПользователями.РазрешитьЗапуск() Тогда
Отказ = Истина;
Предупреждение(“Сейчас ” + Прав(ТекущаяДата(), 8)+ ” Пора спать!”);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриНачалеРаботыСистемы()
Пользователь = РаботаСПользователями.СнихронизироватьПользователей();
СписокОбедов = РаботаСПользователями.СписокОбедов();
Если СписокОбедов.ОтметитьЭлементы() Тогда
Для каждого Элемент Из СписокОбедов Цикл
Если Элемент.Пометка Тогда
РаботаСПользователями.ДобавитьОбедПользователю(Пользователь, ТекущаяДата(), Элемент.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПередЗавершениемРаботыСистемы(Отказ)
Если Не РаботаСПользователями.ПользовательАдминистратор() Тогда
Если РаботаСПользователями.РазрешитьЗапуск() Тогда
Если Вопрос(“Действительно выйти?”, РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Выполнил. Синхронизацию сделал по имени, после просмотра переделал. Сделал серверных вызовов больше, чем нужно и долго разбирался с выбором через форму справочника (стал сразу делать через форму выбора).
Задание выполнила.
В модуле управляемого приложения
1.Процедура ПередНачаломРаботыСистемы(Отказ)
Если НЕ ОбщийМодуль1.ПроверкаНаличияПользователя() тогда
Отказ= ОбщийМодуль1.ПроверкаВходаВыходаНаСервере();
КонецЕсли;
КонецПроцедуры
2.Процедура ПриНачалеРаботыСистемы()
СписокВариантовОбедов=ОбщийМодуль1.ПолучитьВариантыОбедов();
Если СписокВариантовОбедов.ОтметитьЭлементы(“Выберите обед”) тогда
ОбщийМодуль1.ЗаписатьВариантыОбедов(СписокВариантовОбедов);
Иначе
Сообщить(“Обед не выбран”);
КонецЕсли
КонецПроцедуры
3. П роцедура ПередЗавершениемРаботыСистемы(Отказ)
Если ОбщийМодуль1.ПроверкаВходаВыходаНаСервере() тогда
режим=РежимДиалогаВопрос.ДаНет;
Ответ=Вопрос(“Рабочий день не завершился. Вы действительно желаете выйти?”,Режим,0);
Если Ответ=КодВозвратаДиалога.Да тогда
Отказ=Истина
КонецЕсли;
КонецЕсли;
КонецПроцедуры
В ОбщемМодуле1 объявила
1. Функция ПроверкаВходаВыходаНаСервере() Экспорт;
НачалоРабочегоДня=Формат(Константы.НачалоРабочегоДня.Получить(),”ДЛФ=В”);
КонецРабочегоДня=Формат(Константы.НачалоРабочегоДня.Получить(),”ДЛФ=В”);
ТекущееВремя=Формат(ТекущаяДата(),”Длф=в”);
Возврат Не(ТекущееВремя>=НачалоРабочегоДня и ТекущееВремя<=КонецРабочегоДня);
КонецФункции
2. Функция ПолучитьВариантыОбедов()
реализую через перебор элементов справочника ВариантыОбедов, если стоит отметка добавляю в список значений СписокВариантовОбедов. Возврат СписокВариантовОбедов
3. Функция ПроверкаНаличияПользователя()
ТекущийПользователь =Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
Далее если в справочнике Пользователи не определен элемент с ТекущийПользователь.Наименование , добавляем его в справочник. Возврат реквизит Администратор (справочника Пользователи)
4. Процедура ЗаписатьВариантыОбедов(СписокВариантовОбедов).
Осталось сверить с эталонным решением.
Задание выполнил.
Основная сложность была при передаче параметров между клиентом и сервером., т.к. данные БД мы читаем только на сервере, а дилинговые окна делаем на клиенте.
Помнил что в эталонном решении синхронизация пользователей идёт по УникальномуИдентификатору – но повторить не смог (работал с UUID справочника, а не пользователя), сделал по наименованию, после просмотра – сделал как надо.
В 4-ом задании говорилось что пользователь может выбрать несколько обедов, в 5-ом: определите реквизит Варианты обедов (ссылка на соответствующий справочник), возможно нужно было делать не реквизит, а табличную часть.
Выполнил.
Долго соображал, как обратиться к серверу из модуля упр. приложения без использования флажка “Вызов сервера”. В итоге понял, что никак. После этого процесс пошел. Основные трудности состояли в разнесении операций между сервером и клиентом.
Выполнил. Заморочился минимизацией серверных выозов, унификацией и минимальным числом передаваемых параметров. Потом стал смотреть на эти вещи проще – и легко сделал. Да, открыл для себя комбинацию клавиш Ctrl-Пробел. ))
выполнил, но синхронизацию только делал по именам как в типовых.
Готово
Выполнил. Очень непривычно разделение на клиент и сервер. Никак не могу привыкнуть
Все впереди :)
Задание выполнено!
ДЗ № 5 выполнено.
Сделано. Интересно, а реально в таком режиме где-нибудь обеды заказывают?
Готово
Комментариев 109, но я их не вижу. На всякий случай пишу – выполнено.
Выполнил.