Базовый курс. Решение ДЗ №4
Представляем решение четвертого домашнего задания.
16 видео-уроков, рекомендую к просмотру всем участникам базового курса, поскольку в решении рассмотрены несколько подводных камней текущего задания.
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.
Новым оказалось разделение функций на клиентские и серверные. Пришлось смотреть видео. В отличие от решения, на платформе 8.2.13.199 передача ДатаЗапуска в ОбщеиФункцииКлиент.ЗавершениеЗапрещено(ОкончаниеРаботы, ДатаЗапуска) не потребовалось. ДатаЗапуска объявлена экспортной переменной в модуле управляемого приложения.
Это хорошие новости :)
Я, как и многие, упустил и часовые пояса и работу в толстом клиенте. Вынос кода в общие модули не делал.
Решение преподавателя очень понравилось, полезно наблюдать т.н. best practice.
Недоумение вызвало заполнение параметра функции Формат() врукопашную. Там же есть конструктор форматной строки, его очень полезно использовать :)
Да, нужно будет показать этот конструктор :)
Сделал задание, просмотрел решение, не думал что столько моментов упустил: разное время входа и выхода из системы (на другой день), разные режимы, разные часовые пояса.
Здраствуйте!
1. Немного непонятная схема для определения рабочей даты, проще доопределить рабочую дату и не ломать голову в какой день зашел пользователь.
Функция СформироватьДатуРаботыСистемы(ДатаЗапуска, ДатаВозврата)
Возврат Дата(Год(ДатаЗапуска), Месяц(ДатаЗапуска), День(ДатаЗапуска),
Час(ДатаВозврата), Минута(ДатаВозврата), Секунда(ДатаВозврата));
КонецФункции // СформироватьДатуРаботыСистемы()
, где ДатаЗапуска = ТекущаяДата()
ДатаВозврата – содержит время начала или окончания работы с системой.
Результат = Дата, содержащая в составе дату начала работы сеанса, т.е. сегодняшний день, и время, полученное из константы или переменной, ограничивающее время работы пользователя.
2. Согласно решению массив глОбед заполняется в цикле. Проще и нагляднее.
глОбед = Список.ВыгрузитьЗначения();
3. Блокирование окна для выбора значения, не чреватое ли условие.
Немного из практики.
Пользователь когда в последний раз работал, утащил форму списка за область экрана, что делает 1С, она открывает окно за областью видимости пользователя, тем самым показав что она очень умная и помнит где были закрыты формы. Как результат, пользователь не видит что у него просят выбрать обед, но настойтельно блокируют окна. Мало того, в 8.1 была возможность восстановить положение окно в трее окон, если оно не модальное, а в 8.2 это окно вообще нигде не видно. Пользователь просто возьмет, запустит диспетчер устройств и хлопнет процесс. Как результат, если база файловая, то “chdbfl” нам помощник, однако ни всегда он помоч может. Вобщем я категорически против данного алгоритма на 8.2 :)
4. Время сервера, и время клиентской машины никогда ранее не синхронизировал. интересно, спасибо, надо запомнить.
1. Да, соглашусь более простой вариант.
2. Но ведь тогда выгрузятся все значения, а нужно только выбранные.
3. Кажется действия пользователя неадекватны.
>Пользователь когда в последний раз работал, утащил форму списка за область экрана
Он увидел модальное окно, утащил его за область экрана, потом убил процесс диспетчером?
В этом случае система не запомнит положение окна.
Единственные вариант – пользователь сделал выбор обеда, утянул форму за границы экрана, потом методом тыка табуляцией нащупал кнопку ОК, нажал Enter.
С таким пользователем нужно быть аккуратным :)
Но вообще я тоже не за модальные окна.
>С таким пользователем нужно быть аккуратным :)
Да, но это жизненная проблема, и как сотрудник франчей встречаю сплошь и рядом, а БП, ред. 2.0 сама сворачивает периодически окна и куда-то запрятывает, помогает нижний трей восстановления окна. Проблема не так часто встречается, но всё-таки бывает. Человек видит что внизу написано “Номенклатура” и понять не может где окошечко для выбора.
>Но ведь тогда выгрузятся все значения, а нужно только выбранные.
Да, это мой недочёт, я просто в массив выкидывал что там навыбирали, а когда уже надо было обрабатывать, обрабатывал, и не заморачивался с заполнением, тогда получается я делал тоже самое, но в другой последовательности, и зря сжирал ресурсы системы для хранения ненужных данных. У меня такое бывет, где-то детально прослежу что и зачем, а где-то грубо нарушаю рекомендации работы c ПП. Всё-таки 1С в плане работы с ресурсами расслабляет и это сказывается :)
Вот фраза из ТЗ к ДЗ4: “… То есть конфигурацию не удастся запустить в нерабочее время.”
В вашем решении, если пользователь заходит в 00:15 – (0 часов 15 минут, ночь глубокая – время явно не рабочее) – система его не запустит – все правильно. А вот если он заходит на 20 минут раньше (23:55 – все равно еще ночь и время не рабочее ) – система спокойно пропустит такого полуночника. Что противоречит ТЗ.
Хотя, конечно, это скорее замечание к толкованию ТЗ, а не к программированию…
Замечание принимается, неплохо бы вставить еще одну проверку..
Хороший материал, много полезных приемов программирования.
Обращение к элементам структуры, кажется, можно сделать и проще:
х = “Число5”;
Сообщить(структураЧисла[х]);
Да, спасибо, Сергей!
Все четко разъясняется, спасибо Евгений.
Увидел свои промахи при решении ДЗ – вообще никак не учел, что может быть запуск в режиме обычного приложения. Делал под управляемое. Плюс не обратил внимания на нюансы работы со временем (часовой пояс и т.п.)
И это нормально, т.к. в видеокурсе ни раз было сказано что мы работаем с управляемым приложением и просто помним что есть ещё и обычное.
А вот со временем да, я даже и не предпологал его делать, т.к. в ТЗ про часовые пояса вводных данных не было.
А какой пароль у пользователя Админ в выгрузке инфо-базы?
Там еще нет пользователей :)
Видимо Админ был в той базе, куда вы сделали загрузку.
Нужно просто очистить Имя пользователя и войти.
Спасибо :-)
И правда, так и есть. Сори за невнимательность.