Базовый курс. Домашнее задание №5

Второе задание по 1-му блоку базового курса.

Для выполнения рекомендуется изучить следующие главы 1-го блока.
Глава 4. Синтакс-помощник
Глава 5. Свойства конфигурации
Глава 6. Подсистемы
Глава 7. Константы
Глава 8. Справочники

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

комментариев 99 на “Базовый курс. Домашнее задание №5”

  1. iporozhnyakov 19.01.2011 в 16:42

    Добавил функцию синхронизации (вынесли в общий модуль), которая срабатывает при начале работы системы:

    Функция Синхронизация() Экспорт
     Юзер = ПользователиИнформационнойБазы.ТекущийПользователь();
     Проверка = Справочники.Пользователи.НайтиПоНаименованию(Юзер);
     Если Проверка = Справочники.Пользователи.ПустаяСсылка() Тогда
      НовЮзер = Справочники.Пользователи.СоздатьЭлемент();
      НовЮзер.Наименование = Юзер;
      НовЮзер.Записать();    
     КонецЕсли;
    КонецФункции

    Также добавили проверку флага администратор и вынесли время в константы. Запись выбранного обеда в справочник также реализована.

  2. Сделал почти как на видео, только проверку на то что обед уже был не догадался сделать запросом и то гуид пользователя тоже позабыл в остальном проблем особых не было, не сразу понял что дату надо приводить к началу дня и долго провозился со сравнением, дат с константой в итоге сделал как и было у меня в пред задании только с константами
    ВремяНачала = Константы.ВремяНачалаРаботы.Получить() – НачалоДня(Константы.ВремяНачалаРаботы.Получить());
    ВремяОкончания = Константы.ВремяОкончанияРаботы.Получить() – НачалоДня(Константы.ВремяОкончанияРаботы.Получить());
    ВремяНачала = Константы.ВремяНачалаРаботы.Получить() – НачалоДня(Константы.ВремяНачалаРаботы.Получить()); ВремяОкончания = Константы.ВремяОкончанияРаботы.Получить() – НачалоДня(Константы.ВремяОкончанияРаботы.Получить());
    Если Выход Тогда
    Если ТекущееВремя < ВремяОкончания Тогда
    Возврат Истина;
    КонецЕсли;
    Иначе
    Если (ТекущееВремя < ВремяНачала) ИЛИ (ТекущееВремя > ВремяОкончания ) Тогда
    Возврат Истина;
    КонецЕсли;
    КонецЕсли;

  3. Андрей 06.01.2011 в 06:40

    Догоняю :-)

    Задание выполнил. Про открытие формы модально не догадался, тут оставил выбор меню из задания 4. Вообще-то тема классная, жаль, что в самом задании это не было явно проговорено.

  4. Задание выполнил.
    В отличие от преподавательского решения при синхронизации справочника пользователей использовал поиск по наименованию, поиск записанных обедов в справочнике обедов пользователей сделал через поиск по реквизиту “Дата” и т.п. Вообщем понял, что особое внимание следует уделить рациональности кода.

  5. Выполнил задание. Сложности были в работе с объектами метаданных, т.к. первый раз, разбирался с расположением серверных и клиентских вызовов. Синхронизация по ГУИД понравилась. Обратило внимание, что  МестноеВремя( ЛокальноеВремя) без указания пояса (а в решении временной пояс не указывался)  приводит время к Гринвичу.

  6. Мнээ. Сделала. Почти. Тяп-ляп, конечно. С подглядкой в ГДЗ.
    Забавно, что в таком простом по смыслу задании столько нюансов. Что, где, в каком модуле. И сервер то лишний раз вызывать не надо. По хорошему, надо бы повторить за преподавателем. Надеюсь, потом.
    В данном конкретном задании ГУИД не показался обязательным. Но, идея понятна. И, обязательно, закрыть для редактирования.

  7. Задание выполнил.
    Даты начала и окончания работы сравнивал следующим образом:
    НачДня = НачалоДня(ТекущаяДата());
    ВремяНачала = Константы.НачалоРабочегоДня.Получить();
    ВремяОкончания = Константы.ОкончаниеРабочегоДня.Получить();
    НачалоРабДня =  НачДня + Час(ВремяНачала) * 3600 + Минута(ВремяНачала)* 60 + Секунда(ВремяНачала);
    КонецРабДня = НачДня + Час(ВремяОкончания) * 3600 + Минута(ВремяОкончания)* 60 + Секунда(ВремяОкончания);

    Сразу не заметил, что в конце задания была пометка.что не нужно сделать только под тонким клиентом, поэтому сделал оба варианта, включая работу из толстого клиента.
    С вызовом процедур и функций из клиентского общего модуля и серверного разобрался без особых затруднений.
    Синхронизацию пользователей со справочником Пользователи делал по наименованию (потом просмотрел решение, убедился, что по УИД – конечно правильнее)
    Заступорился на последнем этапе, когда надо было записывать в справочник ОбедыПользователей Выбранные Обеды.
    Долго не мог сообразить, почему при передаче в качестве параметра массива выбранных значений обедов в серверную процедуру, программа выдавала ошибку о неправильной передаче от клиента на сервер:
    глОбед = Новый Массив;
    Пока ГлОбед.Количество() = 0 Цикл

    Если СписокОбедов.ОтметитьЭлементы(“Выберите, что желаете сегодня на обед?”) Тогда
    Для каждого Элемент из СписокОбедов Цикл
    Если Элемент.Пометка Тогда
    глОбед.Добавить(Элемент);            
    КонецЕсли;
    КонецЦикла;
    Затем нашел-таки ошибку в строчке
    глОбед.Добавить(Элемент);     

    сделал:
    глОбед.Добавить(Элемент.Значение);     

     

  8. comradeegor 06.12.2010 в 02:15

    Задание выполнил, сложностей особых не возникло, зато немного закрепил навыки по разделению функционала на клиент и на сервер. Каждый раз приходилось задумываться:
    1. Где должна эта строчка выполняться?
    2. Какими типами данных я могу оперировать?
    3. Какой контекст мне сейчас доступен?
    и т.д.
    Полезное Дз

  9. Задание выполнил. Искал по наименованию пользователя, понимая, что не лучший вариант. Посмотрел решение – действительно есть более правильный.  Пока больше борюсь с отнесением прогрммного кода к кленту и к серверу.

  10. Задание сделано. Пользователя проверяла поиском по наименованию, обеды заполняла перебором справочника в СписокЗначений.  Само задание затруднений не вызвало. Немного не привычно, что практически всегда нужно вызывать серверные процедуры. Тяжеловато “менять мышление” :))

  11. Здравствуйте. Задание выполнила. Сложностей особенных не возникало. Интересны были материалы по запросы, в частности, об оптимальном преобразовании в список значений результатов запроса, я сначала сделала через выборку элементов справочника. Также  сначала немножко неправильно сделала в части синхронизации со списком пользователей, делала поиск через наименование, но теперь я знаю про  то, что и у пользователя есть свой уникальный идентификатор. Единственное, не сильно мне нравиться запись в подчиненный справочник обедов, ведь если пользователей сотни, и база будет вестись долгие годы, то мне и представить страшно, какой объем, она будет занимать:(

    • Размеры современных ИБ 1С уже подходят к 1Тб.
      Хотя согласен, что информация, о том что брал на обед Иванов И.И. 17.03.1998 г., наверное, не очень то и ценна :)
      Поэтому можно ввести процедуру “архивирования” обедов – удалять все данные месячной давности.

  12. Выполнено

  13. ДЗ № 5. Задание выполнил. Больших проблем не возникло. Были трудности с разбиением модулей,  методов и типов данных на клиентские и серверные. Пришлось полазить по синтаксис-помошнику и видеоурокам. Почему-то нет (или я не смог увидеть) “явной, прозрачной логики” в этом разбиении в платформе…

  14. Задание выполнил

  15. Вячеслав Вязигин 28.11.2010 в 13:16

    Задание выполнено. Затруднений не возникло.

  16. ДЗ выполнил

  17. Задание выполнил. У меня почему то при запуске отладчика перестал предоставляться выбор пользователя. Отладка запускается под тем пользователем под которым запущен конфигуратор. не могу разобраться в чем дело…

    • Это штатное поведение системы.
      А чтобы при запуске из конфигуратора запрашивался пользователь нужно сделать настройку:
      Сервис – Параметры – Запуск 1С:Предприятия – Пользователь – Имя.
      И в качестве имени ничего не указывать, тогда будет появляться диалог выбора.

  18. Сергей Войстрик 22.11.2010 в 18:20

    Задание затруднений не вызвало. Создал общий серверный модуль с флагом «вызов сервера», все обращения к справочникам и константам проводил из него. Пользователя храню в параметрах сеанса, инициализирую в модуле сеанса. Пришлось повозиться что откуда вызывать, но очень познавательно.

  19. Sergey.Volkov 22.11.2010 в 17:59

    Задание выполнил. Сложности были в части синхронизации справочника со списком пользователей. Первоначально пытался сделать без использования класса МенеджерПользователейИнформационнойБазы.