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

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

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

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

Добавлен: 20.03.2024

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

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

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

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

курсор в тело процедуры и вызовем из контекстного меню конструктор запроса с обработкой результата. Подтвердим, что мы хотим создать новый запрос.
На первой закладке конструктора Обработка
результатов в группе Тип обработки выберем опцию Вывод в табличный документ, все остальные опции оставим без изменения.
Вывод данных запроса в табличный документ с помощью конструктора
Затем определим исходные данные для запроса. На закладке Таблицы и
поля перенесем табличную часть Товары документа Заказ в список источников запроса и выберем из этой таблицы поля:
Товар, Количество и Сумма. Для того чтобы выбрать поля основной таблицы документа Клиент и ДатаДоставки, раскроем поле Ссылка табличной части Товары, выберем эти поля и получим обращение «через точку» от ссылки

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

Вывод данных запроса в табличный документ с помощью конструктора
На закладке Условия зададим условия отбора записей из таблицы заказов.
Перенесем в список условий поля запроса
ЗаказТовары.Ссылка.СтатусЗаказа и ЗаказТовары.Отказ.
Укажем, что условия будут произвольными, и изменим их следующим образом.
Вывод данных запроса в табличный документ с помощью конструктора
ЗаказТовары
Ссылка
СтатусЗаказа
=
ЗНАЧЕНИЕ
(
Перечисление
СтатусыЗаказов
Выполнен
)
ИЛИ
ЗаказТовары
Ссылка
СтатусЗаказа
=
ЗНАЧЕНИЕ
(
Перечисление
СтатусыЗак азов
Закрыт
)
Произвольное условие отбора записей
ЗаказТовары
Отказ
=
ЛОЖЬ
Тем самым мы задали, что в результат запроса будут попадать только заказы, уже обслуженные курьером (со статусом Выполнен или Закрыт), и только те товары из списка заказанных товаров, которые клиент купил.
На закладке Порядок укажем, что записи в результате запроса будут сортироваться по возрастанию поля ДатаДоставки.
Затем перейдем на закладку Итоги и укажем, какие итоги нужно рассчитать для результата запроса. В окно Группировочное поле перенесем поля выборки запроса Клиент и Товар, а в окно Итоговое поле перенесем
поля Количество и Сумма. Тем самым мы указали, что для каждого клиента по каждому товару из документа Заказ нужно подсчитать суммарное количество полей Количество и Сумма.
Вывод данных запроса в табличный документ с помощью конструктора
Нажмем ОК. Конструктор запроса с обработкой результата создаст подчиненный объект обработки АнализЗаказов – макет табличного документа с полями, перечисленными в выборке запроса. Исходя из текста запроса, в макете присутствуют области итоговых группировок Клиент, Товар и область для вывода детальных записей, а также области для вывода заголовка и подвала табличного документа, шапки и подвала таблицы.
В процедуре ЗаполнитьТД() конструктор сформирует следующий код
&НаСервереБезКонтекста
Процедура
ЗаполнитьТД
(
Табдок
)
// {{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора внесенные вручную изменения будут утеряны!!!
Макет
=
Обработки
АнализЗаказов
ПолучитьМакет
(
"Макет"
);
Запрос
=
Новый
Запрос
;
Запрос
Текст
=
"ВЫБРАТЬ
| ЗаказТовары.Ссылка.ДатаДоставки КАК ДатаДоставки,
| ЗаказТовары.Ссылка.Клиент КАК Клиент,
| ПРЕДСТАВЛЕНИЕ(ЗаказТовары.Ссылка.Клиент),
| ЗаказТовары.Товар КАК Товар,
| ПРЕДСТАВЛЕНИЕ(ЗаказТовары.Товар),
| ЗаказТовары.Количество КАК Количество,
| ЗаказТовары.Сумма КАК Сумма
|


|ИЗ
| Документ.Заказ.Товары КАК ЗаказТовары
|
|ГДЕ
| (ЗаказТовары.Ссылка.СтатусЗаказа =
ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен)
| ИЛИ ЗаказТовары.Ссылка.СтатусЗаказа =
ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Закрыт))
| И ЗаказТовары.Отказ = ЛОЖЬ
|
|УПОРЯДОЧИТЬ ПО
| ДатаДоставки
|
|ИТОГИ
| СУММА(Количество),
| СУММА(Сумма)
|ПО
| Клиент,
| Товар"
;
РезультатЗапроса
=
Запрос
.Выполнить();
ОбластьЗаголовок
=
Макет
ПолучитьОбласть
(
"Заголовок"
);
ОбластьПодвал
=
Макет
ПолучитьОбласть
(
"Подвал"
);
ОбластьШапкаТаблицы
=
Макет
ПолучитьОбласть
(
"ШапкаТаблицы"
);
ОбластьПодвалТаблицы
=
Макет
ПолучитьОбласть
(
"ПодвалТаблицы"
);
ОбластьКлиент
=
Макет
ПолучитьОбласть
(
"Клиент"
);
ОбластьТовар
=
Макет
ПолучитьОбласть
(
"Товар"
);
ОбластьДетальныхЗаписей
=
Макет
ПолучитьОбласть
(
"Детали"
);
ТабДок
Очистить
();
ТабДок
Вывести
(
ОбластьЗаголовок
);
ТабДок
Вывести
(
ОбластьШапкаТаблицы
);
ТабДок
НачатьАвтогруппировкуСтрок
();
ВыборкаКлиент
=
РезультатЗапроса
Выбрать
(
ОбходРезультатаЗапроса
ПоГр уппировкам
);
Пока
ВыборкаКлиент
Следующий
()
Цикл
ОбластьКлиент
Параметры
Заполнить
(
ВыборкаКлиент
);
ТабДок
Вывести
(
ОбластьКлиент
,
ВыборкаКлиент
Уровень
());
ВыборкаТовар
=
ВыборкаКлиент
Выбрать
(
ОбходРезультатаЗапроса
ПоГруп пировкам
);
Пока
ВыборкаТовар
Следующий
()
Цикл
ОбластьТовар
Параметры
Заполнить
(
ВыборкаТовар
);
ТабДок
Вывести
(
ОбластьТовар
,
ВыборкаТовар
Уровень
());
ВыборкаДетальныеЗаписи
=
ВыборкаТовар
Выбрать
();

Пока
ВыборкаДетальныеЗаписи
Следующий
()
Цикл
ОбластьДетальныхЗаписей
Параметры
Заполнить
(
ВыборкаДетальныеЗа писи
);
ТабДок
Вывести
(
ОбластьДетальныхЗаписей
,
ВыборкаДетальныеЗаписи
Уровень
());
КонецЦикла;
КонецЦикла;
КонецЦикла;
ТабДок
ЗакончитьАвтогруппировкуСтрок
();
ТабДок
Вывести
(
ОбластьПодвалТаблицы
);
ТабДок
Вывести
(
ОбластьПодвал
);
// }}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
В процедуре ЗаполнитьТД() сначала методом ПолучитьМакет() получается макет табличного документа с именем, указанным в конструкторе. Затем создается и выполняется запрос, определенный в конструкторе. Затем методом ПолучитьОбласть() получаются области табличного документа, заданные в макете. После этого табличный документ ТабДок, переданный в процедуру, очищается, и в него методом Вывести() выводятся области заголовка и шапки таблицы, полученные из макета. Затем начинается автоматическая группировка строк табличного документа методом НачатьАвтогруппировкуСтрок(), так как в конструкторе запроса с обработкой результата была по умолчанию включена опция Группировать строки.
Затем начинается обход трех вложенных друг в друга выборок – итоговых группировок Клиент, Товар и детальных записей. В цикле обхода каждой выборки параметры соответствующих областей табличного документа, определенные в макете, заполняются данными выборок, и затем области с указанием уровня выборки выводятся в табличный документ методом Вывести(). Параметр Уровень этого метода используется для автоматической группировки строк результирующего табличного документа.


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


Процедура
ЗаполнитьДиаграмму
(
Диаграмма
)
// {{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос
=
Новый
Запрос
;
Запрос
Текст
=
"ВЫБРАТЬ
| ЗаказТовары.Товар КАК Товар,
| ПРЕДСТАВЛЕНИЕ(ЗаказТовары.Товар),
| ЗаказТовары.Цвет КАК Цвет,
| ЗаказТовары.Размер,
| ЗаказТовары.Количество КАК Количество
|
|ИЗ
| Документ.Заказ.Товары КАК ЗаказТовары
|
|ГДЕ
| (ЗаказТовары.Ссылка.СтатусЗаказа =
ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Выполнен)
| ИЛИ ЗаказТовары.Ссылка.СтатусЗаказа =
ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.Закрыт))
| И ЗаказТовары.Отказ = ЛОЖЬ
|
|ИТОГИ
| СУММА(Количество)
|
|ПО
| Товар,
| Цвет"
;
РезультатЗапроса
=
Запрос
.Выполнить();
Диаграмма
Обновление
=
Ложь;
Диаграмма
Очистить
();
Диаграмма
АвтоТранспонирование
=
Ложь;
ВыборкаЦвет
=
РезультатЗапроса
Выбрать
(
ОбходРезультатаЗапроса
ПоГруп пировкам
);
Пока
ВыборкаЦвет
Следующий
()
Цикл
Серия
=
Диаграмма
УстановитьСерию
(
ВыборкаЦвет
Цвет
);
Серия
Текст
=
ВыборкаЦвет
Цвет
;
Серия
Расшифровка
=
ВыборкаЦвет
Цвет
;
Если
ВыборкаЦвет
Цвет
Наименование
=
"Красный"
Тогда
Серия
Цвет
=
WEBЦвета
Красный
;

ИначеЕсли
ВыборкаЦвет
Цвет
Наименование
=
"Черный"
Тогда
Серия
Цвет
=
WEBЦвета
Черный
;
ИначеЕсли
ВыборкаЦвет
Цвет
Наименование
=
"Фиолетовый"
Тогда
Серия
Цвет
=
WEBЦвета
Фиолетовый
;
КонецЕсли;
ВыборкаТовар
=
ВыборкаЦвет
Выбрать
(
ОбходРезультатаЗапроса
ПоГруппи ровкам
);
Пока
ВыборкаТовар
Следующий
()
Цикл
Точка
=
Диаграмма
УстановитьТочку
(
ВыборкаТовар
Товар
);
Точка
Текст
=
ВыборкаТовар
ТоварПредставление
;
Точка
Расшифровка
=
ВыборкаТовар
Товар
;
Диаграмма
УстановитьЗначение
(
Точка
,
Серия
,
ВыборкаТовар
Количест во
);
ВыборкаДетальныеЗаписи
=
ВыборкаТовар
Выбрать
();
Пока
ВыборкаДетальныеЗаписи
Следующий
()
Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
КонецЦикла;
КонецЦикла;
КонецЦикла;
Диаграмма
АвтоТранспонирование
=
Истина;
Диаграмма
Обновление
=
Истина;
//}} КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
В процедуре ЗаполнитьДиаграмму() сначала создается и выполняется запрос, определенный в конструкторе. Затем диаграмма Диаграмма, переданная в процедуру, очищается, и на время ее заполнения данными отключаются обновление и автотранспонирование диаграммы. Тип диаграммы здесь не определяется, но по умолчанию он устанавливается как Гистограмма объемная.
Далее начинается обход двух вложенных друг в друга выборок – итоговых группировок Цвет и Товар.
В цикле обхода первой выборки ВыборкаЦвет методом УстановитьСерию() определяются серии