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