Базовый курс. Решение ДЗ №4

Представляем решение четвертого домашнего задания.

16 видео-уроков, рекомендую к просмотру всем участникам базового курса, поскольку в решении рассмотрены несколько подводных камней текущего задания.

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментариев 17 на “Базовый курс. Решение ДЗ №4”

  1. Новым оказалось разделение функций на клиентские и серверные.  Пришлось смотреть видео.  В отличие от решения, на платформе 8.2.13.199  передача ДатаЗапуска в ОбщеиФункцииКлиент.ЗавершениеЗапрещено(ОкончаниеРаботы, ДатаЗапуска) не потребовалось.  ДатаЗапуска объявлена экспортной переменной  в модуле управляемого приложения.

  2. comradeegor 05.12.2010 в 22:54

    Я, как и многие, упустил и часовые пояса и работу в толстом клиенте. Вынос кода в общие модули не делал.
    Решение преподавателя очень понравилось, полезно наблюдать т.н. best practice.
    Недоумение вызвало заполнение параметра функции Формат() врукопашную. Там же есть конструктор форматной строки, его очень полезно использовать :)

    • Да, нужно будет показать этот конструктор :)

  3. Сделал задание, просмотрел решение, не думал что столько моментов упустил: разное время входа и выхода из системы (на другой день), разные режимы, разные часовые пояса.

  4. Здраствуйте!
    1. Немного непонятная схема для определения рабочей даты, проще доопределить рабочую дату и не ломать голову в какой день зашел пользователь.
    Функция СформироватьДатуРаботыСистемы(ДатаЗапуска, ДатаВозврата)
    Возврат Дата(Год(ДатаЗапуска), Месяц(ДатаЗапуска), День(ДатаЗапуска),
    Час(ДатаВозврата), Минута(ДатаВозврата), Секунда(ДатаВозврата));
    КонецФункции // СформироватьДатуРаботыСистемы()
    , где ДатаЗапуска = ТекущаяДата()
    ДатаВозврата – содержит время начала или окончания работы с системой.
    Результат = Дата, содержащая в составе дату начала работы сеанса, т.е. сегодняшний день, и время, полученное из константы или переменной, ограничивающее время работы пользователя.
    2. Согласно решению массив глОбед заполняется в цикле. Проще и нагляднее.
    глОбед = Список.ВыгрузитьЗначения();
    3. Блокирование окна для выбора значения, не чреватое ли условие.
    Немного из практики.
    Пользователь когда в последний раз работал, утащил форму списка за область экрана, что делает 1С, она открывает окно за областью видимости пользователя, тем самым показав что она очень умная и помнит где были закрыты формы. Как результат, пользователь не видит что у него просят выбрать обед, но настойтельно блокируют окна. Мало того, в 8.1 была возможность восстановить положение окно в трее окон, если оно не модальное, а в 8.2 это окно вообще нигде не видно. Пользователь просто возьмет, запустит диспетчер устройств и хлопнет процесс. Как результат, если база файловая, то “chdbfl” нам помощник, однако ни всегда он помоч может. Вобщем я категорически против данного алгоритма на 8.2 :)
    4. Время сервера, и время клиентской машины никогда ранее не синхронизировал. интересно, спасибо, надо запомнить.

    • 1. Да, соглашусь более простой вариант.
      2. Но ведь тогда выгрузятся все значения, а нужно только выбранные.
      3. Кажется действия пользователя неадекватны.
      >Пользователь когда в последний раз работал, утащил форму списка за область экрана
      Он увидел модальное окно, утащил его за область экрана, потом убил процесс диспетчером?
      В этом случае система не запомнит положение окна.
      Единственные вариант – пользователь сделал выбор обеда, утянул форму за границы экрана, потом методом тыка табуляцией нащупал кнопку ОК, нажал Enter.
      С таким пользователем нужно быть аккуратным :)

      Но вообще я тоже не за модальные окна.

      • >С таким пользователем нужно быть аккуратным :)
        Да, но это жизненная проблема, и как сотрудник франчей встречаю сплошь и рядом, а БП, ред. 2.0 сама сворачивает периодически окна и куда-то запрятывает, помогает нижний трей восстановления окна. Проблема не так часто встречается, но всё-таки бывает. Человек видит что внизу написано “Номенклатура” и понять не может где окошечко для выбора.
        >Но ведь тогда выгрузятся все значения, а нужно только выбранные.
        Да, это мой недочёт, я просто в массив выкидывал что там навыбирали, а когда уже надо было обрабатывать, обрабатывал, и не заморачивался с заполнением, тогда получается я делал тоже самое, но в другой последовательности, и зря сжирал ресурсы системы для хранения ненужных данных. У меня такое бывет, где-то детально прослежу что и зачем, а где-то грубо нарушаю рекомендации работы c ПП. Всё-таки 1С в плане работы с ресурсами расслабляет и это сказывается :)

  5. Вот фраза из ТЗ к ДЗ4:  “… То есть конфигурацию не удастся запустить в нерабочее время.”
    В вашем решении, если пользователь заходит в 00:15 – (0 часов 15 минут, ночь глубокая – время явно не рабочее) – система его не запустит – все правильно. А вот если он заходит на 20 минут раньше (23:55 – все равно еще ночь и время не рабочее ) – система спокойно пропустит такого полуночника. Что противоречит ТЗ.
    Хотя,  конечно,  это скорее замечание к толкованию ТЗ, а не к программированию…

    • Замечание принимается, неплохо бы вставить еще одну проверку..

  6. Sergey.Volkov 19.11.2010 в 18:14

    Хороший материал, много полезных приемов программирования.
    Обращение к элементам структуры, кажется, можно сделать и проще:
    х = “Число5”;
    Сообщить(структураЧисла[х]);

  7. Все четко разъясняется, спасибо Евгений.
    Увидел свои промахи при решении ДЗ – вообще никак не учел, что может быть запуск в режиме обычного приложения. Делал под управляемое. Плюс не обратил внимания на нюансы работы со временем (часовой пояс и т.п.)

    • И это нормально, т.к. в видеокурсе ни раз было сказано что мы работаем с управляемым приложением и просто помним что есть ещё и обычное.
      А вот со временем да, я даже и не предпологал его делать, т.к. в ТЗ про часовые пояса вводных данных не было.

  8. Андрей 18.11.2010 в 13:57

    А какой пароль у пользователя Админ в выгрузке инфо-базы?

    • Там еще нет пользователей :)
      Видимо Админ был в той базе, куда вы сделали загрузку.
      Нужно просто очистить Имя пользователя и войти.

      • Андрей 18.11.2010 в 14:08

        Спасибо  :-)

        И правда, так и есть. Сори за невнимательность.