Практикум. Работа с файлами. Настройка виджета поводник (начальный уровень)
Описание практикума
Учебная бизнес-задача
Бизнес-кейс предназначен для демонстрации использования виджета «Проводник» для целей работы с прикрепляемыми файлами сразу в несколько объектов системы по принципу одного окна.
В рамках текущего кейса необходимо настроить систему для ведения договоров с клиентами на услуги доставки писем и посылок. В карточке клиента с помощью виджета «Проводник» будет осуществляться фиксация получаемых/выдаваемых клиенту файлов по всем договорам и посылкам в рамках каждого договора.
Изучаемые инструменты платформы GreenData
Перечень инструментов платформы GreenData, продемонстрированных в настоящем практикуме:
МОДУЛЬ ПЛАТФОРМЫ | ИНСТРУМЕНТЫ ПЛАТФОРМЫ |
---|---|
Авторизация и навигация на стенде |
|
Модель данных |
|
Экранные формы |
|
Пользователи и группы доступа |
|
Бизнес-правила |
|
Администрирование |
|
Создание объектной модели
Необходимо зайти в среду проектирования и разработки бизнес-приложений GreenData пользователем с правами бизнес-администратора.
После успешной авторизации будет открыта рабочая область среды разработки бизнес-приложений.
Сервисы по работе с объектами располагаются в меню в разделе «https://docs-public.gdcloud.org/platform/ru/administration-module.html[Администрирование]» платформы.
Для создания новых типов объектов (классов) необходимо зайти в раздел «Администрирование» → «Управление объектами» → «Типы объектов».
Для создания нового типа объекта в открывшейся форме необходимо нажать на кнопку «Создать».
В результате появится окно создания нового типа объекта.
Важно корректно заполнить поля, выделенные красным цветом, так как после сохранения данного объекта, изменить их будет нельзя.
В шапке данной формы расположены поля, отвечающие за наименование объекта, его отражение в БД в качестве реляционной таблицы, а также указывается объект родитель, с которого будут унаследованы базовые атрибуты.
Родитель «Объект» - является самым абстрактным объектом, содержащим минимально необходимый набор атрибутов.
В нижней части формы на первой вкладке расположены атрибуты объекта. При создании нового объекта на данной вкладке располагаются атрибуты, унаследованные от родителя. Чтобы их посмотреть необходимо, установить чек-бокс «Показать атрибуты родительского объекта».
Ко всем наименованиям объектов необходимо добавлять префикс в соответствии с ФИО пользователя (создателя объектов). Например, пользователя зовут Иванов Сергей Петрович. Тогда мой объект «Информация о посылке» будет называться как «ИСП. Информация о посылке». |
Системные типы объектов, используемые при настройке
Для корректной настройки проводника, хранящего в себе файлы согласно иерархии, в системе применяются объекты следующих типов:
-
Ключевые:
-
Настройка иерархического представления файлов
-
Физическое лицо
-
-
Вспомогательные:
-
Алгоритм. Условие фильтрации для выбора элементов
-
Автонумерация
-
Все типы объектов, кроме типа «Физическое лицо» являются системными, т.е. изменение атрибутивного состава типов недоступно – работа с ними должна осуществляться в рамках работы с экземплярами типов объектов.
Создание типов – справочников
В соответствии с условиями данного кейса основные типы объекта, с которыми мы будем работать и которые необходимо создать, – «Договор» и «Информация о посылке». Их создание будет описано в пункте Создание типов «Договор» и «Информация о посылке».
Перед созданием основного типа объекта необходимо подготовить справочники с почтовыми сервисами, видами посылок и статусами посылок и договоров. Ссылки на данные справочники будут добавлены в основные типы, как объектные атрибуты.
Создание справочника «Почтовые сервисы»
В реестре типов объектов создадим справочник «Почтовые сервисы». Заполним поля «Наименование» («Почтовые сервисы») и «Наименование таблицы» («EMAIL_SER») согласно рисунку. Поле «Родитель» заполнится автоматически, необходимо проверить его значение.
Сохраним созданный тип объекта.
В созданный тип добавим существующие атрибуты «Порядок» («ORD») и «Сист. Идентификатор» (IDENT).
После нажатия кнопки выберем вариант «Выбор атрибута из полного списка атрибутов», через поиск найдем нужный нам атрибут и выберем его, нажав на кнопку «Добавить». Атрибут «Сист. Идентификатор» добавляется аналогично.
Перейдем в реестр типа объекта с помощью кнопки «Открыть реестр».
При помощи кнопки «Создать» добавим в реестр экземпляры данного справочника. Впоследствии при заполнении карточки расчёта пользователь будет выбирать подходящее значение из значений данного справочника.
В карточке справочника заполним поле «Наименование» и сохраним созданный объект.
Далее создаем другие экземпляры данного справочника. Общий список экземпляров следующий:
-
Boxberry
-
СДЭК
-
PONY EXPRESS
-
Деловые линии
-
DHL
-
DPD
-
ПЭК
-
EPS
В результате реестр экземпляров будет выглядеть аналогично рисунку.
Создание справочника «Вид посылки»
Создадим справочник «Вид посылки». Заполним поля «Наименование» («Вид посылки») и «Наименование таблицы» («PACK_TYPE») согласно рисунку. Поле «Родитель» заполнится автоматически, необходимо проверить его значение.
Аналогично пункту Создание справочника «Почтовые сервисы» добавим существующие атрибуты «Порядок» («ORD») и «Сист. Идентификатор» (IDENT).
Перейдем в реестр и создадим список экземпляров:
-
Письмо
-
Стандартная
-
Нестандартная
-
Посылка 1-ого класса
-
Посылка EMS
В результате реестр экземпляров будет выглядеть аналогично рисунку:
Создание справочника «Статус посылки»
Создадим справочник «Статус посылки». Заполним поля «Наименование» («Статус посылки») и «Наименование таблицы» («PACK_STATUS») согласно рисунку. Поле «Родитель» заполнится автоматически, необходимо проверить его значение.
Аналогично пункту Создание справочника «Почтовые сервисы» добавим существующие атрибуты «Порядок» («ORD») и «Сист. Идентификатор» (IDENT).
Перейдем в реестр и создадим список экземпляров:
-
В обработке
-
В пути
-
На распределении
-
Ожидает заказчика
В результате реестр экземпляров будет выглядеть аналогично рисунку:
Создание справочника «Статус договора»
Создадим справочник «Статус договора». Заполним поля «Наименование» («Статус посылки») и «Наименование таблицы» («CONTRACT_STATUS») согласно рисунку. Поле «Родитель» заполнится автоматически, необходимо проверить его значение.
Аналогично пункту Создание справочника «Почтовые сервисы» добавим существующие атрибуты «Порядок» («ORD») и «Сист. Идентификатор» (IDENT).
Перейдем в реестр и создадим список экземпляров:
-
На согласовании
-
Выполняется
-
Выполнен
-
Отклонен
В результате реестр экземпляров будет выглядеть аналогично рисунку:
Создание типов «Договор» и «Информация о посылке»
Создание типа объекта «Информация о посылке» и его атрибутов
В соответствии с условиями данного кейса создадим тип объекта под названием «Информация о посылке». Впоследствии в него будут добавлять документы сотрудники службы доставки. Указанные документы будут отображаться в проводнике – инструменте для отображения файлов клиента из разных типов.
Заполним поля «Наименование» («Информация о посылке») и «Наименование таблицы» («PACK_INFORMATION») согласно рисунку.
Помимо унаследованного атрибута «Наименование» потребуется создать атрибуты, ссылающиеся на справочники, которые были созданы ранее, а также атрибут, в котором будут храниться прикрепленные файлы.
Полный список атрибутов, которые нужно создать:
Создание атрибутов осуществляется с помощью кнопки «Создать» на панели инструментов. Подробнее создание каждого атрибута описано в далее. Создание атрибута с договором будет описано после создания соответствующего типа объекта.
Атрибут «Вид посылки»
Создадим атрибут «Вид посылки». Это атрибут типа «Объект», который позволит нам выбирать ранее заполненные виды посылок.
Заполним данные согласно рисунку.
Заполним поля «Наименование» («Вид посылки») и «Наименование поля для таблицы» («PACK_TYPE_ID»). В типе объекта выберем «Вид посылки». Сохраним атрибут с помощью кнопки «ОК».
Атрибут «Вес»
Создадим атрибут «Вес». Этот атрибут типа «Числовой», в нем будет храниться информация о весе посылки.
Заполним поля «Наименование» («Вес») и «Наименование поля для таблицы» («PACK_WEIGHT») согласно рисунку.
Атрибут «Высота»
Аналогично атрибуту «Вес» создадим атрибут «Высота». Атрибут предназначен для хранения информации о высоте посылки. Заполним поля «Наименование» («Высота») и «Наименование поля для таблицы» («PACK_HEIGHT»).
Атрибут «Ширина»
Перейдем к созданию атрибута «Ширина». В нем будет храниться информация о ширине посылки. Заполним поля «Наименование» («Ширина») и «Наименование поля для таблицы» («PACK_WIDTH»).
Атрибут «Длина»
Создадим атрибут для еще одной физической характеристики посылки – «Длина». Заполним поля «Наименование» («Длина») и «Наименование поля для таблицы» («PACK_LENGH»).
Атрибут «Номер посылки»
Атрибут «Номер посылки» необходим для создания автоматического порядка будущих посылок. Выберем тип «Целое число», в «Наименовании поля для таблицы» укажем «Номер посылки», в «Наименовании поля для таблицы» - «PACKAGE_NUMBER» .
Атрибут «Отправитель»
Атрибут «Отправитель» будет объектным. Его создание необходимо для осуществления связи между типами «Информация о посылке» и «Лицо». В «Наименовании» указываем «Отправитель», в «Наименовании поля для таблицы» - «SENDER_ID». В качестве типа объекта выбираем «Лицо».
Атрибут «Получатель»
Создание атрибута «Получатель» будет осуществляться аналогично пункту 2.3.1.7: он также будет объектным. В «Наименовании» укажем «Получатель», в «Наименовании поля для таблицы» - «RECIPIENT_ID». В качестве типа объекта выберем «Лицо».
Атрибут «Статус»
Перейдем к созданию еще одного объектного атрибута. Атрибут «Статус» необходим для связи с созданным ранее справочником. В «Наименовании» укажем «Статус», в «Наименовании поля для таблицы» - «PACK_STATUS_ID». В качестве типа объекта выберем «Статус посылки».
Атрибут «Прикрепленные файлы»
Создадим атрибут «Прикрепленные файлы», в котором будут храниться файлы с информацией о посылках. Заполним поля «Наименование» («Прикрепленные файлы») и «Наименование поля для таблицы» («ATTACHED_FILES_PACK_ID»). В качестве типа объекта укажем «Файл», также отметим «Множественный выбор» в переключателе ниже.
Далее перейдем на вкладку «Визуал» и в поле «Визуальное представление для атрибута типа «Объект» установим значение «Виджет для файлов», в «Виджете» выберем «Прикрепленные файлы».
Создание экземпляров типа «Автонумерация»
Прежде чем перейти к созданию выражений, заблаговременно создадим экземпляры типа «Автонумерация». Далее они будут использоваться для формирования порядкового номера экземпляров договоров и посылок.
Откроем тип «Автонумерация» и перейдем в реестр. Для создания нового экземпляра нажмем кнопку «Создать».
Перейдем к созданию экземпляров для наших будущих типов. Заполним поля «Наименование» («Номер посылки») и «Идентификатор» («PACKAGE_NUM»). В качестве текущего значения ставим «1».
Аналогично создаем для типа «Договор».
Настройка выражений для типа «Информация о посылке»
Далее перейдем к настройке выражения, которое будет отвечать за формирование наименований посылок. Для этого откроем вкладку «Выражения».
Перейдем к алгоритму, на основе которого считается выражение. Для этого необходимо выбрать строку с атрибутом «Наименование» и нажать на кнопку «Переопределить алгоритм».
Откроется карточка создания алгоритма. В «Наименовании алгоритма» укажем «Заполнение наименования посылки», в «Идентификаторе» − «ALG_FOR_PACK_NAME». В качестве базового типа объектов выберем «Информация о посылке».
Рассмотрим алгоритм:
-
На вкладке «Работа с текстом» выберем функцию «text». В качестве значения укажем «Посылка от»
-
Далее перейдем на вкладку «Работа с датами». Выберем функцию «dateFormat». В качестве первого параметра нам необходимо выбрать атрибут с датой создания. Для этого откроем вкладку «Источники и справочники» и выберем функцию «attr», где отметим нужный нам атрибут. В качестве второго параметра выберем нужный вариант даты: «dd.MM.yy».
-
Возвращаемся на вкладку «Работа с текстом», снова выберем функцию «text», в значении укажем «, № ».
-
Далее перейдем на вкладку «Дополнительные». Выбираем функцию «sequenceNextVal», в качестве последовательности выбираем созданную ранее «Номер посылки» (раздел Создание экземпляров типа «Автонумерация»).
-
Сохраним алгоритм.
После создания алгоритма нужно двойным щелчком мышки нажать на выражение для «Наименования» и открыть настройку. В поле «Автоматический пересчет выражения» следует выбрать значение «При изменении атрибутов, используемых в алгоритме».
После сохраним настройку выражения и карточку типа объекта.
Настройка визуала карточки типа «Информация о посылке»
Далее необходимо настроить внешний вид карточки «Информация о посылке».
В реестре указанного типа необходимо создать новый экземпляр с помощью кнопки «Создать».
В открывшейся карточке необходимо нажать на кнопку «Настройка визуального представления».
Удалим ряд с элементами, предложенными по умолчанию. В пустой форме расположим элементы и атрибуты в соответствии с рисунком. Наполнение вкладок, а также особенности настройки некоторых атрибутов будут описаны далее.
Создание алгоритма видимости для поля «Высота»
Настроим алгоритм видимости для атрибута «Высота». Указанное поле не должно отображаться при выборе вида посылки «Письмо».
Создадим алгоритм, нажав на кнопку «Видимость».
В открывшейся форме необходимо заполнить поля аналогично рисунку. В поле «Наименование алгоритма» укажем «Алгоритм видимости для высоты», в качестве базового типа объекта выберем «Информация о посылке».
В поле «Формула/алгоритм» последовательно напишем формулу:
На вкладке «Логические» выберем функцию «iif».
В качестве первого параметра необходимо задать равенство между атрибутом «Вид посылки» и значением из справочника «Письмо». На вкладке «Основные» нажмем на «attr», далее выберем нужный нам атрибут. После знака «=» используем функцию «dict», в качестве типа объекта выберем «Вид посылки», в качестве объекта – «Письмо».
Во втором параметра укажем «false», в третьем «true».
Сохраним алгоритм.
Аналогичные алгоритмы нужно добавить для атрибутов «Длина» и «Ширина».
Создание типа объекта «Договор» и его атрибутов
Далее перейдем к созданию второго типа объекта под названием «Договор». В него также будут добавляться документы сотрудником службы доставки.
Заполним поля «Наименование» («Договор») и «Идентификатор» («CONTRACT») согласно рисунку.
Аналогично типу «Информация о посылке» необходимо создать атрибуты, ссылающиеся на справочники, которые были созданы ранее, а также атрибут, в котором будут храниться прикрепленные файлы.
Полный список атрибутов, которые нужно создать:
Создание атрибутов осуществляется с помощью кнопки «Создать» на панели инструментов. Подробнее создание каждого атрибута описано далее.
После создания типа «Договор» необходимо вернуться к типу «Информация о посылке» и добавить объектный атрибут.
Заполним поля «Наименование» («Договор») и «Наименование поля для таблицы» («CONTRACT_ID»).
Атрибут «Адрес доставки»
Вернемся к созданию атрибутов типа «Договор». В первую очередь добавим существующий атрибут «Адрес доставки». В нем будет храниться информация о том, по какому адресу клиент отправляет посылку.
Атрибут «Дата заявки»
Далее создадим атрибут «Дата заявки». Укажем для него тип «Дата». В нем будет храниться информация о том, когда была создана заявка на отправку.
В «Наименовании» укажем «Дата заявки», в «Наименовании поля для таблицы» - «APP_DATE» .
Атрибут «Дата получения»
Аналогично «Дате заявки» создадим атрибут «Дата получения». В нем будет храниться информация о том, когда посылка была доставлена. В «Наименовании» укажем «Дата получения», в «Наименовании поля для таблицы» - «REC_DATE» .
Атрибут «Информация о Посылке»
Для добавления информации о посылке в договор необходимо использовать атрибут типа «Дочерний объект». Заполним «Наименование» («Информация о посылке») и «Наименование поля для таблицы» («INFORM_ABOUT_PACK_LIST»). В качестве типа объекта укажем «Информация о посылке», а в связи – выберем атрибут «Договор».
Атрибут «Клиент»
В атрибуте «Клиент» выберем тип «Объект». В качестве типа объекта укажем «Лицо». В «Наименовании» - «Клиент», в «Наименовании поля для таблицы» - «CLIENT_ID» .
Атрибут «Номер Договора»
Атрибут «Номер договора» необходим для внесения номера договора. Выберем тип «Целое число», в «Наименовании» укажем «Номер договора», в «Наименование поля для таблицы» - «CONTRACT_NUMBER» .
Атрибут «Почтовый сервис»
Атрибут «Почтовый сервис» создадим с типом «Объект». В «Наименовании» укажем «Почтовый сервис», в «Наименовании поля для таблицы» - «EMAIL_SER_ID». В качестве типа объекта выберем ранее созданный справочник с названиями почтовых сервисов.
Атрибут «Прикрепленные файлы»
Создадим атрибут «Прикрепленные файлы», в котором будут храниться файлы с информацией о выполнении договора. Заполним поля «Наименование» («Прикрепленные файлы») и «Наименование поля для таблицы» («ATTACHED_FILES_ID»). В качестве типа объекта выберем «Файл», а также для данного атрибута необходимо отметить «Множественный выбор» в переключателе ниже.
Перейдем на вкладку «Визуал», в поле «Визуальное представление для атрибута типа «Объект» выберем значение «Виджет для файлов», а в «Виджете» - «Прикрепленные файлы».
Атрибут «Статус договора»
Перейдем к созданию еще одного объектного атрибута. Атрибут «Статус» необходим для связи с созданным ранее справочником. В «Наименовании» укажем «Статус договора», в «Наименовании поля для таблицы» - «CONTRACT_STATUS_ID». В качестве типа объекта выберем «Статус договора».
Необходимо обязательно сохранить карточку типа после добавления атрибутов.
Настройка выражений для типа «Договор»
Далее перейдем к настройке выражения для автоматического формирования наименования договора. Его создание и настройка будет аналогичной пункту Настройка выражений для типа «Информация о посылке». Откроем вкладку «Выражения», выберем строку с атрибутом «Наименование». Далее нажмем на «Переопределить алгоритм» и перейдем к написанию.
В «Наименовании алгоритма» укажем «Заполнение наименования посылки», в «Идентификаторе» – «ALG_FOR_PACK_NAME». В качестве базового типа объектов выберем «Информация о посылке».
Рассмотрим алгоритм:
-
На вкладке «Работа с текстом» выберем функцию «text». В качестве значения укажем «Договор от »
-
Далее перейдем на вкладку «Работа с датами». Выберем функцию «dateFormat». В качестве первого параметра необходимо выбрать атрибут с датой создания. Для этого откроем вкладку «Источники и справочники» и выберем функцию «attr», где отметим нужный атрибут. В качестве второго параметра выберем нужный вариант даты: «dd.MM.yy».
-
Вернемся на вкладку «Работа с текстом», снова выберем функцию «text», в значении укажем «, № ».
-
Далее перейдем на вкладку «Дополнительные». Выберем функцию «sequenceNextVal», в качестве последовательности выберем созданную ранее «Номер договора»
-
Сохраним алгоритм.
Откроем настройку данного выражения. В поле «Автоматический пересчет выражения» нужно отметить «При изменении атрибутов, используемых в алгоритме».
Сохраним настройку выражения и карточку типа объекта.
Настройка визуального представления «Договора»
Аналогично пункту Настройка визуала карточки типа «Информация о посылке» перейдем к настройке визуального представления для «Договора».
Удалим ряд с элементами, предложенными по умолчанию. В пустой форме расположим элементы и атрибуты в соответствии с рисунком. Наполнение вкладок, а также особенности настройки некоторых атрибутов будут описаны далее. На вкладках «Информация о посылке» и «Прикрепленные файлы» вынесем атрибуты с аналогичными названиями.
Использование виджета «Лейбл (по атрибуту)»
Виджет «Лейбл (по атрибуту)» предназначен для отображения значения, выбранного в соответствующем атрибуте. Виджет применятся для акцентного отображения значения, а также не предполагает ручного изменения значения (в отличие от атрибута, в котором пользователь может сменить значение).
Перейдем к настройке виджета, в котором будет отображаться статус договора. На вкладке «Виджеты» выберем «Лейбл (по атрибуту)». Сделаем активными настройки «Выводить значение в новой строке» и «Показывать наименование атрибута». В качестве атрибута выберем «Статус договора».
Настройка событий для типа «Информация о посылке»
В рамках бизнес-кейса необходимо реализовать следующую логику: статус договора в целом зависит от статуса каждой посылки, созданной в рамках договора: если хотя бы одна посылка находится в обработке, в пути или на распределении, то статус договора нужно фиксировать как «Выполняется». Если все посылки доставлены, то статус договора - «Выполнен».
Реализация данной логики технически предполагает пересчет статуса договора при изменении информации о посылке. В связи с этим алгоритмы будут написаны для типа «Информация о посылке».
Дополнительно необходимо помнить, что изменение информации о посылке – самый простой случай. Необходимо также пересчитывать статус договора при создании новой посылки или при удалении неактуальной посылки из договора.
Для обеспечения корректной логики расчета будет создан алгоритм, привязанный к типу объекта «Информация о посылке» в блоке: «Событие после сохранения» (для случаев создания новой и изменения существующей посылки).
Алгоритм события после сохранения
Рассмотрим порядок создания алгоритма для пересчета статуса договора при создании/изменении информации о посылке. Указанный алгоритм впоследствии будет привязан к событию после сохранения в тип объекта «Информация о посылке».
Подготовительные настройки
Предварительно необходимо создать алгоритм фильтрации, который впоследствии будет использован внутри основного алгоритма. Назначение алгоритма фильтрации − отобрать только посылки, привязанные к указанному договору.
Для создания алгоритма фильтрации откроем реестр типов объектов, найдем тип «Алгоритм. Условие фильтрации для выбора элементов». Нажмем «Открыть реестр».
Создадим новый алгоритм фильтрации. Поля «Наименования алгоритма» («Фильтрация посылок») и «Тип объекта, элементы которого нужно отфильтровать» («Информация о посылке») заполним согласно рисунку.
Для алгоритма нужно создать параметр в соответствующей вкладке.
При добавлении параметра выберем тип «Параметры объекта (фильтр)». Карточку заполним согласно рисунку. В качестве наименования укажем «Договор». Данный параметр будет использоваться для передачи информации о договоре, по которому следует отфильтровать информации о посылках.
Далее перейдем непосредственно к созданию формулы. Результат должен выглядеть согласно рисунку.
Разберем построчно:
-
Сначала укажем атрибут, значение которого будет сравниваться с передаваемым параметром. Используем функции «attr». Она находится на вкладке «Источники».
-
Далее с помощью функции «param» выберем созданный ранее параметр.
Создание основного алгоритма
Вернемся к типу объекта «Информация о посылке». Перейдем на вкладку «События». Алгоритм необходимо добавить в поле «Событие после сохранения».
Нажмем на кнопку «Добавить» для создания нового экземпляра.
Заполним наименованием алгоритма («Автоматическое заполнение статуса договора») и идентификатор («AUTO_FILL_CONTR_STATUS»), в качестве базового типа объекта выберем «Информацию о посылке».
Перейдем к созданию алгоритма. Разберем его построчно:
-
Для начала создадим переменную для фиксации итогового статуса договора. Используем функцию «var» во вкладке «Алгоритмы». В поле «Создать новую переменную» введем «status» и сохраним.
-
Далее аналогично создадим 5 переменных, каждая из которых будет соответствовать статусу договора: «process», «way», «disturb», «waitfororderer», «declined». Каждой из созданных переменных с помощью знака «:=» присваиваем значением «0».
-
Далее на вкладке «Алгоритмы» выберем функцию «forEach». Она необходима для того чтобы в цикле проверить все посылки, привязанные к договору.
-
В качестве первого параметра создадим новую переменную «pack» аналогично пункту 1 (переменная необходима для поэлементного обращения к каждому экземпляру информации о посылке внутри цикла).
-
Для второго параметра на вкладке «Источники и справочники» выберем функцию «objectsWithOptions».
-
В качестве объекта для функции выберем «Информация о посылке».
-
В качестве второго параметра нужно выбрать созданный ранее алгоритм фильтрации. Для этого следует использовать функцию «filterAlg», она находится на вкладке «Источники и справочники», выберем соответствующий алгоритм, созданный ранее.
Функция будет автоматически вставлена с параметром, который следует заполнить в основном алгоритме для корректной фильтрации объектов в цикле. В качестве значения параметра следует использовать атрибут «Договор» с помощью функции «attr». Идея состоит в том, что при изменении конкретной посылки из данного атрибута система получит информации о том, к какому договору посылка привязана и благодаря этому сможет найти все прочие посылки, привязанные к этому договору.
-
-
-
Далее следует зафиксировать статусы по всем посылкам. Для этого используем переменные, созданные ранее, и проверим статусы с помощью функции «if» (расположена на вкладке «Логические»). Создадим условия равенства значений статусов посылок и договоров. Используем функцию «аttrByVar»: для каждой посылки проверяем значение атрибута «Статус посылки» – сравнение будет осуществлять со статичным значением справочника с помощью функции «dict» на вкладке «Источники и справочники». При обнаружении совпадения записываем объект в созданную ранее переменную (счетчик).
-
Пропишем все условия согласно рисунку.
-
-
После того как была получена информации о статусах всех посылок можно перейти к проверке соответствия для выбора итогового статуса договора. Для выполнения проверок используем функцию «else if» на вкладке «Логические». Последующие строки заполним аналогично рисунку.
-
После добавления всех условий нужно занести значения в соответствующий объект.
-
После добавления всех условий нужно записать значение итогового статуса в соответствующий договор. Создадим переменную «docObj» и запишем в нее целиком объект «Договор», чтобы мы могли обратиться к атрибутам договора. Для этого используем функцию «getObject» на вкладке «Работа с объектами». В качестве первого параметра выберем атрибут «Договор.Код» с помощью функции «attr».
Не забудьте выбрать атрибуты типа для оптимального кеширования функции: мы будем использовать атрибут «Статус договора», поэтому его необходимо выбрать при вставке функции «getObject».
-
Далее выберем функцию «attrByVar», активируем настройку «Установить значение», в скобках вынесем созданную в 1 пункте переменную «status», т.к. именно в нее записан итоговый результат расчетов всего алгоритма.
-
Для сохранения статуса договора следует добавить функцию «save», которая расположена на вкладке «Алгоритмы». В качестве параметра функции передадим значение переменной «docObj».
-
Сохраним алгоритм.
Создание групп доступа и пользователей
Каждая объектная модель предполагает настройку ролевого доступа для разграничения прав для работы с отдельными объектами системы. В рамках бизнес-кейса нам необходимо разграничить доступ к договорам и информациям о посылках.
Для этого требуется создать группы доступа и пользователей, которые будут осуществлять работу по договорам и посылкам.
Создание групп доступа
Для целей бизнес-кейса создадим следующие группы доступа: «Сервис оформления заказов» и «Сервис доставки». Чтобы создать новую группу доступа, перейдем в пункт меню Администрирование → Управление доступом → Группы доступа.
С помощью кнопки «Добавить» создадим новую группу доступа и в поле наименование укажем «Сервис оформления заказов». Сохраним новую группу доступа с помощью кнопки «Сохранить».
Аналогичные действия нужно проделать для второй группы доступа «Сервис доставки».
Создание пользователей
Чтобы создать нового пользователя, последовательно перейдем в разделы меню: «Администрирование» → «Управление доступом» → «Пользователи». Откроется реестр пользователей. Нажмем кнопку «Добавить».
В карточке нового пользователя с помощью кнопки «плюс» справа от поля «сотрудник» создадим нового сотрудника.
Заполним основные данные о сотруднике (фамилия, имя, подразделение), сохраним и закроем карточку с помощью кнопки «ОК».
Далее в карточке создания пользователя необходимо заполнить параметры пользователя, присвоив ему логин и пароль, а также добавить пользователю созданную ранее группу доступа «Сервис оформления заказов» с помощью кнопки «Добавить». Сохранить карточку пользователя с помощью кнопки «Сохранить».
Далее создадим еще одного сотрудника, добавим ему группу доступа «Сервис доставки».
Настройка виджета «Проводник»
Виджет «Проводник» предназначен для работы с файлами (прикрепление/замена/удаление/перемещение) сразу в несколько объектов системы по принципу одного окна.
С помощью виджета «Проводник» будет осуществляться фиксация получаемых/выдаваемых клиенту файлов по всем договорам и посылкам в рамках каждого договора. Для примера в рамках текущего кейса клиентами будут выступать физические лица.
Для настройки виджета необходимо открыть тип объекта «Физическое лицо» и перейти в реестр. Далее создадим новый экземпляр с помощью кнопки «Добавить».
Выберем «Частное лицо» и перейдем в настройку визуального представления.
В группировках выберем «Вкладка» и вынесем ее на визуал. Поменяем название на «Документы по заказам».
В списке виджетов найдем значение «Проводник» и вынесем его на визуал:
Перейдем к настройке виджета. Все элементы должны быть заполнены согласно рисунку:
По логике, заложенной в бизнес-кейс, доступ к файлам должен быть только у клиентов и специалистов сервиса оформления заказов, в то время как специалисты сервиса доставки не должны иметь доступа к файлам. Создадим алгоритм, который будет блокировать доступ к просмотру файлов для пользователей, входящих в группу «Сервис доставки»:
Наименование алгоритма («Алгоритм видимости файлов») и идентификатор («alg_files_visibility») заполним согласно рисунку.
Разберем алгоритм:
-
На вкладке «Логические» выберем функцию «iif». В качестве первого параметра нужно использовать функцию «currentUserHasGroup», она находится на вкладке «Работа с пользователями». Далее в скобках с помощью «dict» вынесем значение группы доступа «Сервис доставки».
-
Вместо второго и третьего параметра укажем «false» и «true» именно в этой последовательности.
-
Сохраним алгоритм.
Создание экземпляра типа «Настройка иерархии файлов»
Настройка иерархии файлов – ключевая сущность для настройки правил отображения файлов из других объектов в виджете.
Создадим экземпляр типа «Настройка иерархии файлов». Для этого откроем опции виджета «Проводник» и нажмем на кнопку «Добавить»:
Заполним карточку: в «Наименовании» укажем «Заявки клиентов доставки», в качестве типа объекта – «Физическое лицо». В поле «Режим просмотра по умолчанию» выберем значение «Табличный».
Cоздание вершины «Информация о получении»
Перейдем к созданию вершин − каждая вершина, это объект системы, в котором хранится свой комплект прикрепленных файлов. В вершине «Информации о получении» будут храниться документы по полученным клиентом посылкам.
Для создания новой вершины необходимо нажать кнопку «Добавить».
В наименовании укажем «Информация о получении». Заполним тип объекта и атрибут типа согласно рисунку. В поле «Классификации» выберем все из предложенных.
Сделаем активной настройку «Скрыть в правой части папки классификаций» для того, чтобы сразу видеть в вершине список файлов без проваливания в отдельные папки.
Перейдем к созданию алгоритма определения объектов. Перед созданием алгоритма необходимо создать алгоритм фильтрации, который будет использоваться в нем. Откроем тип объекта «Алгоритм. Условие фильтрации для выбора элементов» и создаем новый экземпляр.
Поля «Наименования алгоритма» («Клиент-получатель») и «Тип объекта, элементы которого нужно отфильтровать» («Информация о посылке») заполним согласно рисунку.
Для алгоритма создадим параметры в соответствующей вкладке. При добавлении параметра выберем «Параметры объекта (фильтр)». Карточку заполним согласно рисунку. В качестве наименования укажем «Клиент доставки», в поле «Сист. Идентификатор» – «DELIVERY_CL», в системном типе объекта – «Физическое лицо».
Далее перейдем непосредственно к алгоритму. Результат должен выглядеть согласно рисунку.
Разберем подробно:
-
Сначала введем переменную с помощью функции «attr». Она находится на вкладке «Источники».
-
Далее выберем с помощью функции «param» выбираем созданный ранее параметр.
Перейдем к основному алгоритму: откроем реестр типа «Алгоритм. Карточки объектов» и создадим новый экземпляр. Заполним наименование алгоритма («Алгоритм для информации о получении») и идентификатор («alg_for_inform_about_rec»). В качестве базового типа объекта выберем «Информация о посылке».
Разберем алгоритм:
-
def files_from_rec
Для начала создадим переменную для вывода результата. Используем функцию «var» во вкладке «Алгоритмы». В поле «Создать новую переменную» введем «files_from_rec». C помощью знака «:=» присвоим ей значение «[ ]». Это означает, что в переменную будет записываться массив элементов.
-
Далее на вкладке «Алгоритмы» выберем функцию «forEach». Она нам будет нужна для создания цикла.
-
В качестве первого параметра создадим новую переменную «rec» аналогично пункту 1. Для второго параметра на вкладке «Источники и справочники» выберем функцию «objectsWithOptions», в качестве объекта выберем «Информация о посылке». В качестве второго параметра нужно выбрать созданный алгоритм фильтрации. Для этого используем функцию «filterAlg», она находится на вкладке «Источники и справочники», выберем соответствующий алгоритм. В качестве значения после «:» вынесем атрибут с помощью функции «attr».
-
В следующей строке с помощью функции «var» выведем переменную, созданную в первой строке, далее вручную добавим «.add». В скобках добавим значение, используя функцию «attrByVar»: в качестве переменной выбираем «rec», в качестве атрибута – «Код».
-
На вкладке «Алгоритмы» выберем функцию «return» и аналогично пункту 4 выведем переменную.
-
Сохраним алгоритм.
Cоздание вершины «Информация об отправлении»
Перейдем к созданию второй вершины. В вершине «Информация об отправлении» будут храниться документы по отправленным клиентом посылкам.
В наименовании укажем «Информация об отправлении». Заполним тип объекта и атрибут типа согласно рисунку. В поле «Классификации» выберем все из предложенных. Активизируем настройку «Скрыть в правой части папки классификаций».
Для создания алгоритма определения объектов нам снова необходим алгоритм фильтрации. Откроем тип объекта «Алгоритм. Условие фильтрации для выбора элементов» и создаем новый экземпляр.
Поля «Наименования алгоритма» («Клиент-отправитель») и «Тип объекта, элементы которого нужно отфильтровать» заполняем согласно рисунку («Договор»).
Для алгоритма создадим параметры в соответствующей вкладке. При добавлении параметра выберем «Параметры объекта (фильтр)». Карточку заполним согласно рисунку. В качестве наименования укажем «Клиент доставки», в системном типе объекта – «Физическое лицо».
Далее перейдем непосредственно к алгоритму. Результат должен выглядеть согласно рисунку.
Разберем подробно:
-
Сначала введем переменную с помощью функции «attr». Она находится на вкладке «Источники».
-
Далее с помощью функции «param» выберем созданный раннее параметр.
Вернемся к основному алгоритму: откроем реестр типа «Алгоритм. Карточки объектов» и создадим новый экземпляр. Заполним наименование алгоритма («Алгоритм для информации об отправлении») и идентификатор («alg_for_inform_about_send»). В качестве базового типа объекта выберем «Договор».
Разберем алгоритм:
-
def files_from_send
Создадим переменную для вывода результата. Используем функцию «var» во вкладке «Алгоритмы». В поле «Создать новую переменную» вводим «files_from_send». C помощью знака «:=» присвоим ей значение «[ ]».
-
Далее на вкладке «Алгоритмы» выберем функцию «forEach». Она нам будет нужна для создания цикла.
-
В качестве первого параметра создадим новую переменную «send» аналогично пункту 1. Для второго параметра на вкладке «Источники и справочники» выберем функцию «objectsWithOptions», в качестве объекта выберем «Информация о посылке». В качестве второго параметра нужно выбрать созданный алгоритм фильтрации. Для этого используем функцию «filterAlg», она находится на вкладке «Источники и справочники», выберем соответствующий алгоритм. В качестве значения после «:» вынесем атрибут с помощью функции «attr».
-
В следующей строке с помощью функции «var» выведем переменную, созданную в первой строке, далее вручную добавим «.add». В скобках добавим значение, используя функцию «attrByVar»: в качестве переменной выберем «send», в качестве атрибута – «Код».
-
На вкладке «Алгоритмы» выберем функцию «return» и аналогично 4 пункту выведем переменную.
-
Сохраним алгоритм.
Cоздание вершины «Информация о посылках»
Следующая вершина будет дочерней от вершины «Клиент доставки». В ней будут храниться документы на посылки, входящие в договоры.
В наименовании укажем «Информация о посылках». Заполним тип объекта и атрибут типа согласно рисунку. В поле «Классификации» выберем все из предложенных.
Данную вершину необходимо скрыть, чтобы она не отображалась в карточке клиента.
Перейдем к созданию алгоритма для определения объектов. В наименовании укажем «Алгоритм для определения посылок в договоре», в идентификаторе – «alg_for_determining_pack». В качестве базового типа выберем «Договор».
В данном алгоритме на вкладке «Источники и справочники» выберем функцию «attr», и с помощью нее выведем цепочечный атрибут «Информация о посылке.Код».
В результате настроенных выше алгоритмов загруженные файлы будут отображаться в карточках экземпляров типа «Частное лицо» на вкладке «Документы по заказам». При добавлении и удалении файлов через «Проводник» фактически их хранение будет осуществляться в экземплярах типов «Договор» и «Информация о посылке» при условии, что прикрепление/удаление файла было осуществлено к конкретной вершине.
Создание пунктов меню
Создадим отдельные пункты меню для каждого из реестров, участвующих в процессе формирования карточки расчета, с целью более удобного и быстрого доступа к реестрам основных типов.
Последовательно перейдем по вкладкам главного меню: Администрирование → Управление доступом → Настройки → Настройка меню.
Создание пункта меню «Клиенты доставки»
Создадим пункт меню «Клиенты доставки». При создании нового пункта в окне уточнения типа выберем «Пункт меню.Реестр».
Заполним поля в соответствии с рисунком. Заполним поле «Наименование» («Клиенты доставки») – название пункта меню для пользователя. Заполним поле «Идентификатор» («CLIENT»). Значение в поле «Порядок» определяет местоположение создаваемого пункта меню среди пунктов, имеющих одного родителя.
Пункт меню настроен. Сохраним его с помощью кнопки «Сохранить» на панели инструментов. Обновим страницу и проверим его наличие в структуре главного меню.
Создание пункта меню «Договор»
Создадим еще один пункт меню «Договор». При создании нового пункта в окне уточнения типа выберем «Пункт меню. Реестр».
Заполним поля в соответствии с рисунком. Заполним поле «Наименование» («Договор») – название пункта меню для пользователя и «Идентификатор» («CONTRACT»). Значение в поле «Порядок» определяет местоположение создаваемого пункта меню среди пунктов, имеющих одного родителя.
Создание пункта меню «Посылки»
Создадим еще один пункт меню «Посылки». При создании нового пункта в окне уточнения типа выберем «Пункт меню. Реестр». Заполним поля в соответствии с рисунком: наименование – «Посылки», идентификатор – «PACKAGE».
Пункт меню настроен. Сохраним его с помощью кнопки «Сохранить» на панели инструментов. Обновим страницу и проверим его наличие в структуре главного меню.
Настройка прав доступа
Настроим права доступа для созданной ранее группы доступа. Для этого перейдем через главное меню по разделам: Администрирование → Управление доступом → Доступ к объектам системы.
Выдача прав доступа на пункты меню
Выдадим права на доступ группе «Сервис оформления посылок» к созданным ранее пунктам меню.
В карточке настройки, которая открылась при переходе в соответствующий пункт меню в поле «Дочерние типы объектов» по умолчанию будет указано значение «Меню», его не нужно менять. В появившемся реестре с помощью поиска найдем необходимые пункты меню, поочередно выделим каждый в реестре и нажмем на кнопку «Добавить группу или пользователя», выберем группу «Сервис оформления посылок» и раздадим права на чтение и запись, сохраним изменения, нажав на кнопку «Сохранить».
Также необходимо раздать права группе «Сервис доставки» на пункт меню «Клиенты доставки», чтобы пользователи могли видеть информацию о заказах: даты, адреса.
Выдача прав доступа на типы объектов
Кроме того, выдадим права на типы объектов «Физическое лицо» (а именно «Частное лицо»), «Информация о посылках» и «Договор» группе «Сервис оформления заказов, а также на все созданные ранее справочники. После выдачи всех прав пользователь, добавленный в группу «Сервис оформления заказов» сможет самостоятельно создавать экземпляры новых посылок и договоров, прикреплять к ним нужные файлы и при необходимости вносить какое-либо изменения.
Для этого в типе объекта выбираем «Тип объекта» и находим нужные типы.
Аналогичные права нужно настроить для типов «Информация о посылках», «Договор» и всех справочников, созданных в рамках кейса.
Тестирование настроек под пользователем
Проведем тестирование осуществленных в рамках данного практикума настроек под созданным пользователем.
Необходимо зайти на стенд под учетной записью созданного нами пользователя (ivanov /123456). Предварительно необходимо выйти из учетной записи текущего пользователя, нажав на кнопку «Выход», в меню, которое появляется в правом верхнем углу интерфейса при нажатии левой клавишей мыши на «Администратор (ОРГ)».
Заходя под новым пользователем, нужно открыть реестр типа «Договор» и создать новый экземпляр.
Заполним нужные поля:
Далее перейдем на вкладку «Прикрепленные файлы» и добавим новый документ:
В качестве классификации файлов выберем «Все файлы»:
Сохраним карточку.
Добавление файлов для посылки осуществляется аналогично. Откроем реестр типа «Информация о посылке» и создадим новый экземпляр. Заполним все поля, с помощью кнопки «Прикрепить файл» добавим новый файл. В качестве классификации также выберем «Все файлы».
Далее перейдем на карточку клиента и проверим, отобразились ли в виджете все созданные нами посылки и договоры, а также прикрепленные к ним файлы:
В том случае, если все добавленные документы отобразились в виджете в карточке клиента, все настройки осуществлены корректно, кейс пройден.
При некорректном отображении файлов стоит обратить внимание на алгоритмы вершин и права групп доступа.