Файл: Методические указания к лабораторным работам по дисциплине Разработка интеллектуальных мобильных приложений и чатботов Самара 2021.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 20.03.2024

Просмотров: 135

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

НоваяСтрока
Сумма
=
НоваяСтрока
Цена
;
КонецЕсли;
КонецПроцедуры
В параметре ДанныеЗаполнения этого обработчика нам доступен объект-основание. В зависимости от типа этого объекта мы реализуем нужный алгоритм действий. Для получения актуальной цены товара и адреса доставки клиента здесь используются фрагменты функций
ПолучитьЦенуТовара() и ПолучитьАдресДоставки(), которые рассматривались ранее.
Также при создании нового заказа автоматически установим дату доставки на следующий день после даты документа. Для этого откроем обработчик события формы ПриОткрытии и изменим его следующим образом.
&НаКлиенте
Процедура
ПриОткрытии
(
Отказ
)
Элементы
ФормаПозвонить
Доступность
=
СредстваТелефонии
Поддерживает сяНаборНомера
();
Элементы
ФормаОтправитьСМС
Доступность
=
СредстваТелефонии
Поддержив аетсяОтправкаSMS
(Истина);
Если
Параметры
Ключ
Пустая
()
Тогда
Объект
ДатаДоставки
=
Объект
Дата
+
24
*
60
*
60
;
КонецЕсли;
КонецПроцедуры
При открытии формы в параметре формы Ключ мы определяем, что создается новый документ, если ссылка на создаваемый объект пустая. В этом случае мы устанавливаем дату доставки следующей датой после даты документа.
Для примера рассмотрим следующую ситуацию. Курьер открывает форму товара. Из меню функций в правом верхнем углу формы курьер может вызвать команду Создать
на
основании, выбрать из подменю команду Заказ и создать новый заказ на основании открытого товара.

В список товаров нового заказа будет добавлена строка, содержащая данный товар, его цену, одинарное количество и посчитанную сумму по товару. А также будет заполнена дата доставки заказа – следующим числом после даты создания заказа. Кроме того, статус заказа будет установлен в значение Открыт перечисления СтатусыЗаказов в соответствии со свойством Значение заполнения для одноименного реквизита документа.
Создание заказа на основании товара
Или же, например, в форме списка клиентов курьер может вызвать контекстное меню у конкретного клиента. Для этого ему нужно выполнить жест пролистывания с правой стороны экрана у нужной строки списка
клиентов, вызвать команду Заказ: создать на основании. В результате будет создан новый заказ на основании текущего клиента.
В поле Клиент нового заказа попадет ссылка на клиента, на основании которого создается заказ, а также будет заполнено поле Адрес
доставки исходя из адресных реквизитов клиента. Дата доставки заказа будет заполнена следующим числом после даты создания заказа. Кроме того, статус заказа будет установлен в значение
Открыт перечисления СтатусыЗаказов в соответствии со свойством Значение заполнения для одноименного реквизита документа.
Создание заказа на основании клиента
Редактирование уже существующего заказа
Сделаем еще одно небольшое, но важное изменение в форме заказа – ограничим возможность изменения информации в заказе, который находится в работе у курьера, так, чтобы курьер мог вводить только информацию об

отказе от товаров и изменять статус заказа. А если заказ уже закрыт или выполнен, нужно, чтобы курьер мог только его просматривать.
Для этого создадим обработчик события формы ПриЧтенииНаСервере, который выполняется только для уже существующих в информационной базе объектов, и заполним его следующим.
&НаСервере
Процедура
ПриЧтенииНаСервере
(
ТекущийОбъект
)
Если
ТекущийОбъект
СтатусЗаказа
=
Перечисления
СтатусыЗаказов
Закрыт
ИЛИ
ТекущийОбъект
СтатусЗаказа
=
Перечисления
СтатусыЗа казов
Выполнен
Тогда
ЭтаФорма
ТолькоПросмотр
=
Истина;
ИначеЕсли
ТекущийОбъект
СтатусЗаказа
=
Перечисления
СтатусыЗак азов
ВРаботе
Тогда
Элементы
Номер
ТолькоПросмотр
=
Истина;
Элементы
Дата
ТолькоПросмотр
=
Истина;
Элементы
ДатаДоставки
ТолькоПросмотр
=
Истина;
Элементы
АдресДоставки
ТолькоПросмотр
=
Истина;
Элементы
Клиент
ТолькоПросмотр
=
Истина;
Элементы
Курьер
ТолькоПросмотр
=
Истина;
Элементы
Склад
ТолькоПросмотр
=
Истина;
Элементы
ДополнительнаяИнформация
ТолькоПросмотр
=
Истина;
Элементы
Товары
ТолькоПросмотр
=
Истина;
КонецЕсли;
КонецПроцедуры
При создании новых заказов данный обработчик вызываться не будет, и новые заказы курьер сможет редактировать, как и ранее созданные заказы со статусом Открыт.
Оповещение об изменении данных
По условию нашей задачи нужно, чтобы после изменения данных в заказе форма оповещала бы об этом мобильное приложение. Для этого создадим клиентский обработчик события формы ПослеЗаписи и заполним его следующим образом.
&НаКлиенте
Процедура
ПослеЗаписи
(
ПараметрыЗаписи
)
Если
ПараметрыЗаписи
РежимЗаписи
=
РежимЗаписиДокумента
Проведение
Т
огда

Оповестить
(
"ИзменилсяЗаказ"
);
КонецЕсли;
КонецПроцедуры
В этом обработчике, если заказ записывается с проведением, то об этом оповещается мобильное приложение.
Работа со средствами мультимедиа
Поскольку мобильные устройства обладают различными мультимедийными возможностями, то было бы удобно, чтобы курьер мог воспользоваться этими возможностями прямо в заказе. Например, мог бы сделать фотоснимки товаров, не понравившихся клиенту, или видео/аудиозапись с отзывом клиента о заказе.
Справочник хранимых файлов
Для этого нам понадобится справочник, в котором будут храниться файлы мультимедиа, сделанные курьером. Создадим в нашей мобильной конфигурации справочник с именем ХранимыеФайлы, представлением объекта Файл и представлением списка Файлы.
Для хранения имени файла и собственно мультимедийного содержимого создадим у этого справочника два реквизита: ИмяФайла
(типа Строка неограниченной длины) и
ДанныеФайла
(типа ХранилищеЗначения). А также увеличим длину основного реквизита справочника Наименование до 50 символов.
Кроме фотоснимков, видео- и аудиозаписей, сделанных курьером, в этом справочнике будут храниться также картинки товаров, которые будут записываться в основном приложении и в процессе обмена данными передаваться на планшет.
Пока в мобильном приложении предусмотрим, что у справочника ХранимыеФайлы могут быть два владельца: справочник
Товары (для просмотра картинок, относящихся к конкретному товару) и справочник Клиенты.


Список владельцев справочника «ХранимыеФайлы»
Чтобы выполнять обмен данными справочника между планшетом и основным приложением, на закладке Обмен данными окна редактирования справочника ХранимыеФайлы включим его в план обмена Мобильные.
Принадлежность справочника к плану обмена «Мобильные»

Фото-, видео- и аудиосъемка
Чтобы реализовать мультимедийные возможности, в форме заказа на закладке Команды добавим команды
СделатьФотоснимок,
СделатьВидеозапись и СделатьАудиоЗапись и перетащим их в командную панель формы.
Сделаем так, чтобы команды для работы со средствами мультимедиа были видны только в меню функций, вызывающемся кнопкой в правом верхнем углу заказа. Для этого установим в палитре свойств соответствующих кнопок командной панели свойство ТолькоВоВсехДействиях в значение Да.
Форма заказа в редакторе формы
Затем создадим клиентские обработчики для команд СделатьФотоснимок, СделатьВидеозапись и СделатьАудиоЗапись и заполним их следующим образом
&НаКлиенте
Процедура
СделатьФотоснимок
(
Команда
)
Если
Объект
Ссылка
Пустая
()
Тогда
ПоказатьПредупреждение
(,
"Данные не записаны!"
);
Возврат;

КонецЕсли;
ДанныеМультимедиа
=
СредстваМультимедиа
СделатьФотоснимок
();
Если
ДанныеМультимедиа
<>
Неопределено
Тогда
СоздатьНовыйФайл
(
ДанныеМультимедиа
ПолучитьДвоичныеДанные
(),
Данны еМультимедиа
РасширениеФайла
,
ДанныеМультимедиа
ТипСодержимого
);
КонецЕсли;
КонецПроцедуры
Обработчик команды «СделатьВидеозапись»
&НаКлиенте
Процедура
СделатьВидеозапись
(
Команда
)
Если
Объект
Ссылка
Пустая
()
Тогда
ПоказатьПредупреждение
(,
"Данные не записаны!"
);
Возврат;
КонецЕсли;
ДанныеМультимедиа
=
СредстваМультимедиа
СделатьВидеозапись
();
Если
ДанныеМультимедиа
<>
Неопределено
Тогда
СоздатьНовыйФайл
(
ДанныеМультимедиа
ПолучитьДвоичныеДанные
(),
Данны еМультимедиа
РасширениеФайла
,
ДанныеМультимедиа
ТипСодержимого
);
КонецЕсли;
КонецПроцедуры
Обработчик команды «СделатьАудиозапись»
&НаКлиенте
Процедура
СделатьАудиозапись
(
Команда
)
Если
Объект
Ссылка
Пустая
()
Тогда
ПоказатьПредупреждение
(,
"Данные не записаны!"
);
Возврат;
КонецЕсли;
ДанныеМультимедиа
=
СредстваМультимедиа
СделатьАудиозапись
();
Если
ДанныеМультимедиа
<>
Неопределено
Тогда
СоздатьНовыйФайл
(
ДанныеМультимедиа
ПолучитьДвоичныеДанные
(),
Данны еМультимедиа
РасширениеФайла
,
ДанныеМультимедиа
ТипСодержимого
);
КонецЕсли;
КонецПроцедуры


В этих обработчиках сначала мы должны убедиться, что данные заказа записаны, так как владельцем данных мультимедиа будет клиент, указанный в заказе.
Затем мы выполняем требуемый метод (СделатьФотоснимок(),
СделатьВидеозапись(), СделатьАудиозапись()) средств мультимедиа, доступ к которым мы получаем с помощью свойства глобального контекста СредстваМультимедиа.
В результате выполнения этих методов мы получаем объект ДанныеМультимедиа. Из этого объекта мы получаем содержимое данных мультимедиа в виде двоичных данных, расширение при сохранении этих данных в файл, тип содержимого и передаем в серверную процедуру СоздатьНовыйФайл() для сохранения данных мультимедиа в справочнике ХранимыеФайлы
&НаСервере
Процедура
СоздатьНовыйФайл
(
Данные
,
Расширение
,
Тип
)
ТипСодержимого
=
Тип
;
Номер
=
Найти
(
ТипСодержимого
,
"/"
);
Если
Номер
>
0
Тогда
ТипСодержимого
=
Лев
(
ТипСодержимого
,
Номер
-
1
);
КонецЕсли;
Файл
=
Новый
Файл
(
СтрЗаменить
(
Строка
(
ТекущаяДата
()),
":"
,
"_"
)
+
"."
+
Расширение
);
ХранимыйФайл
=
Справочники
ХранимыеФайлы
СоздатьЭлемент
();
ХранимыйФайл
Владелец
=
Объект
Клиент
;
ХранимыйФайл
Наименование
=
"Заказ № "
+
Объект
Номер
+
"
"
+
ТипСодержимого
+
" "
+
Строка
(
ТекущаяДата
());
ХранимыйФайл
ИмяФайла
=
Файл
Имя
;
ХранимыйФайл
ДанныеФайла
=
Новый
ХранилищеЗначения
(
Данные
,
Новый
Сжа тиеДанных
());
ХранимыйФайл
Записать
();
КонецПроцедуры
В данной процедуре мы создаем объект Файл с именем, образованным из текущей даты и расширения файла (jpg/mp4/3gp), переданного в процедуру. Затем добавляем новую запись в справочник ХранимыеФайлы.

Имя файла записываем в соответствующий реквизит справочника ИмяФайла, а данные мультимедиа помещаем в хранилище значения и сохраняем в реквизите ДанныеФайла.
Стандартному реквизиту справочника Владелец присваиваем значение ссылки на клиента (Объект.Клиент). Таким образом, конкретные файлы мультимедиа будут относиться к клиенту, указанному в заказе.
Реквизиту Наименование присваиваем строку, состоящую из номера заказа, типа содержимого мультимедиа (image/video/audio) и текущей даты.
После этого записываем созданный элемент справочника
ХранимыеФайлы. При этом надо понимать, что сам файл физически на планшете не создается, но данные мультимедиа в двоичном виде и имя, связанное с этими данными, сохраняются в справочнике хранимых файлов.
При открытии формы заказа установим видимость команд для работы со средствами мультимедиа только в том случае, если мобильное устройство поддерживает такие возможности. Для этого добавим в обработчик события формы ПриОткрытии следующий фрагмент текста.
&НаКлиенте
Процедура
ПриОткрытии
(
Отказ
)

Элементы
ФормаСделатьАудиозапись
Доступность
=
СредстваМультимедиа
П
оддерживаетсяАудиозапись
();
Элементы
ФормаСделатьВидеозапись
Доступность
=
СредстваМультимедиа
П
оддерживаетсяВидеозапись
();
Элементы
ФормаСделатьФотоснимок
Доступность
=
СредстваМультимедиа
По ддерживаетсяФотоснимок
();

КонецПроцедуры
В завершение откроем командный интерфейс нашего мобильного приложения и перетащим команду для открытия справочника ХранимыеФайлы (эта команда автоматически добавилась в командный интерфейс после создания справочника) из группы Панель
навигации.Обычное в группу Панель навигации.См. также.


Командный интерфейс основного раздела
Таким образом, мы увидим команду для открытия списка этого справочника только в главном меню приложения, что нам и нужно.
Поскольку вызывать этот список отдельно, без привязки к конкретным товарам и клиентам, вряд ли потребуется, данная команда не будет отображаться в списке команд основного раздела на мобильном устройстве.
Проверим работу со средствами мультимедиа на планшете. Выполним из меню функций заказа команды
СделатьФотоснимок,
СделатьВидеозапись и СделатьАудиоЗапись.
Затем из главного меню приложения с помощью значка в левом верхнем углу приложения (или жеста пролистывания с левой стороны экрана) вызовем список хранимых файлов, выполнив команду Файлы из группы команд См. также.

Список хранимых файлов
Как мы видим, форма списка файлов нуждается в доработке. Внешне – нужно минимизировать состав ее полей, а функционально – нужно, чтобы при выборе строки списка открывалась бы не форма элемента справочника хранимых файлов, а соответствующий файл мультимедиа.
Этим мы и займемся в следующем разделе, а также создадим форму элемента справочника хранимых файлов и поместим в ней команды для создания и открытия файлов мультимедиа.
1   2   3   4   5   6   7   8   9   10   11