Домашнее задание №4 базового курса
Первое задание по 1-му блоку базового курса.
Для выполнения рекомендуется изучить следующие главы 1-го блока.
Глава 1. Типы данных
Глава 2. Контекст выполнения кода
Глава 3. Модули
Глава 4. Синтакс-помощник
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.
Задание сделал. Время взял в виде дробного числа ЧЧ.ММ
Функция РабочееВремя()
Дата = ТекущаяДата();
ТекВремя = Час(Дата) + Минута(Дата)/100;
Если 9.30 <ТекВремя и ТекВремя<=18.00 Тогда
4-е задание сделано
ДЗ4 выполнил
Выполнено
ДЗ4 готово. После таких подробных уроков, сложностей не возникло.
Дз 4 Выполнил
ДЗ №4 выполнил
ДЗ №4 сделал.
Улыбнула идея :)
Выполнено
ДЗ 4 выполнил
Сделано
выполнено
Получилось, если не использовать параметры сеанса.
Сделала проверку в модуле сеанса, какой пользователь, с установкой параметров сеанса. Хотела еще сделать разный вход для пользователей – администратор без ограничений и остальные только в рабочее время – именно через установку параметров в модуле сеанса.
А взять эти параметры из модуля управляемого приложения – не получилось, даже при указании сервера.
ДЗ №4 сделал. Тормознул на списке значений. Помог повторный просмотр, и синтакс- помощник.
При решении ДЗ особых проблем не возникло. Практически все есть в видеоуроках (и про множественный интерактивный выбор из списка значений и про события модуля управляемого приложения).
Сделал. Сначала не знал про метод ОтметитьЭлементы(). Поэтому сначала решил 2-мя способами:
1 способ: В ПриНачалеРаботыСистемы() открываю обработку с формой, на которой разместил список с пометками.
2 способ: Из этой же процедуры открываю общую форму (тоже со списком на форме)
Ну и решил для себя усложнить задание. Чтобы пользователь в любое время мог редактировать список блюд (т.е. возможность повторного вызова формы со списком блюд)
Возникло два вопроса:
1. Есть ли возможность интерактивно открыть общую форму (из панели навигации или панели действий)? Вроде в состав подсистемы включил, а отображения не вижу в пользовательском режиме.
2. Существует ли разница или особенность применения методов по открытию формы?
ФормаВыбораОбеда = ПолучитьФорму(“ОбщаяФорма.ФормаВыбораОбеда”);
ФормаВыбораОбеда.Открыть();
Или:
ОткрытьФорму(“ОбщаяФорма.ФормаВыбораОбеда”);
Итак и так работает. А в чем изюминка?
И ещё вопрос (может не в тему):
Для чего существует возможность установить принадлежность к подсистеме общего модуля?
ДЗ №4 готово
Задание сделал.
Дз №4 Выполнено.
Задание выполнено, проблем не возникло. Использовал доп. функцию, т.к. вызывается в двух местах:
Функция РабочееВремя()
ТекущийЧас = Час(ТекущаяДата());
Если ТекущийЧас >= 9 И ТекущийЧас < 18 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции // РабочееВремя()
Вроде бы не совсем хорошо зашивать время в код функции, к тому же могут быть часы и минуты. Но в задании сказано "с 9.00 до 18.00", поэтому пока не будем делать ЗУП :)
Задание сделал. Правда еле вспомнил про метод ОтметитьЭлементы() для множественного выбора.
Решено.
Да. Было не сложно.
Сделано.
ДЗ № 4 выполнил, проблем не возникло.
Сделано.
Проверка времени работы:
ТекЧас = Час(ТекущаяДата());
Если (ТекЧасглВремяОкончанияРаботы) Тогда
Предупреждение("Вы пытаетесь работать в нерабочее время!", 15);
Отказ=Истина;
Возврат;
КонецЕсли;
КонецПроцедуры
Выбор обеда через метод ОтметитьЭлементы
Задание сделал
ДЗ выполнил сложностей не возникло. Модуль упр. приложения:
Перем глОбед Экспорт;
Процедура ПередНачаломРаботыСистемы(Отказ)
Ч=Час(ТекущаяДата());
Если (ч17)Тогда
Кнопки=РежимДиалогаВопрос.ОК;
Вопрос(“В конфигурацию нельзя заходить в нерабочее время”,Кнопки,20);
Отказ=Истина;
КонецЕсли;
КонецПроцедуры
Процедура ПриНачалеРаботыСистемы()
СЗ=Новый СписокЗначений;
СЗ.Добавить(“Курица”);
Сз.Добавить(“Рыба”);
Сз.Добавить(“Мясо”);
Если СЗ.ОтметитьЭлементы(“Выберите обед”) ТОгда
Для каждого Эл ИЗ СЗ Цикл
Если Эл.Пометка Тогда
глОбед.Добавить(Эл.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ПередЗавершениемРаботыСистемы(Отказ)
Ч=Час(ТекущаяДата());
Если ч<18 Тогда
Кнопки=РежимДиалогаВопрос.ДаНет;
Ответ=Вопрос("Рабочий день не закончился, вы точно желаете выйти из программы?",Кнопки);
Если Ответ=КодВозвратаДиалога.Нет ТОгда
Отказ=Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
глОбед=Новый Массив;
Задачу решил.
Выполнено. Выбор из списка значений сделала в общей форме.
Попробуй СписокЗначений.ОтметитьЭлементы()
Не, я специально. Повышала навыки общения с управляемыми формами :) Пока с трудом получается.
Через ОтметитьЭлементы() все понятно.
ДЗ4 Выполнил
Задание сделал.
Сделано.
Задание выполнено. Столкнулся с проблемой, что глобальная переменная глОбед(объявлял в модуле управляемого приложения) не видна через контекстную подсказку, но присвоение ей значения отрабатывает нормально.
ДЗ4 Выполнил сложностей не возникло
ДЗ №4 выполнил.
Ваши задание абсолютно практичны – подобное лет 10 назад я реализовывал на 1С 7.7
ДЗ№4 Выполнено.
Для вывода запроса обеда использовал метод СпискаЗначений:
Обед.ОтметитьЭлементы(“Что вы будете сегодня на обед?”)
Очень редко работаю с датами, посему были сложности:
Как получить значение типа дата в формате ЧЧ:ММ:СС? Функция Дата() требует обязательного указания года, месяца и дня.
Если использовать функцию Формат(), то она возвращает ЧЧ:ММ:СС, но это строка. И результат сравнения например “9:18:13” < "18:00:00" будет ложью (почему ложь – для меня так же осталось загадкой… пока не осознал).
Таким образом повезло что в условии начало и конец рабочего дня – это четко 9 и 18 часов, а не, например, 9:20 и 17:53.
Время и так содержится в типе Дата, зачем его выделять?
Встроенные функции языка (Script functions)
Час (Hour)
Синтаксис:
Час()
Параметры:
(обязательный)
Тип: Дата. Исходная дата.
Возвращаемое значение:
Тип: Число. Час в указанной дате.
Описание:
Определяет час в указанной дате.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.
Пример:
Сообщить(Час(ТекущаяДата()));
Через час и сделал. Как быть если день начинается в 9:23:13? Использовать условия на Час(), Минута(), Секунда()? :)
Может через Формат?
Про формат я писал еще в исходном сообщении :)
Как вариант:
ВремяНачало = НачалоДня(ТекущаяДата()) + 9*3600;
ВремяОкончания = НачалоДня(ТекущаяДата()) + 18*3600;
А в условии проверять, что значение ТекущаяДата() попадает в интервал между ВремяНачало и ВремяОкончания
ВремяНачало = НачалоДня(ТекущаяДата()) + 9*3600;
ВремяОкончания = ВремяНачало + 18*3600;
Чтобы не тратить времени на выполнение функции ТекущаяДата().
Точнее ВремяОкончания = ВремяНачало + 9*3600
Это все понятно… Но.. Ладно, видимо так и придется с секундами ) Думал может есть что-то красивее
Функция Час() – вернет час без минут, а вдруг работаем с 8:30
Можно сделать так
НачалоРаботы = ДатаВремяНач – НачалоДня(ДатаВремяНач);
КонецРаботы = ДатаВремяКон – НачалоДня(ДатаВремяКон);
ТекВремя = ТекущаяДата();
ТекВремя = ТекВремя – НачалоДня(ТекВремя);
Примерно так -)))
А ДатаВремяНач, ДатаВремяКон откуда берёте?
ДЗ4 Готово.
Единственно что не нашел, так это как сделать чтобы в списке были галочки напротив выбираемых значений. Поэтому обошелся множественным выбором.
Дошло. Сделал.