Разработка алгоритмов с помощью действий Mobile SMARTS
Каждый алгоритм — это заданный набор действий, которые последовательно (или не совсем) выполняет клиент на терминале. Алгоритм определяет логику обработки документов определенного типа, для которого он задан, либо логику работы отдельной операции, которая может вызываться из других алгоритмов.
![]() | ![]() |
Алгоритм в любом типе документа может содержать произвольное количество экземпляров одного и того же действия, каждый из которых может отличаться от другого значениями свойств. Значения свойствам проставляет разработчик операции.
Например, для одного типа документа задано одно и то же действие «Меню» несколько раз, но с разными именами (имя должно быть уникальным для каждого действия) и настройками свойств. Из‑за того, что свойства у действий «Меню» настроены по разному и указаны переходы на разные действия, их алгоритм работы будет отличаться.
![]() | ![]() |
В процессе выполнения алгоритма для обмена данными между действиями существует сессия. Сессия представляет собой хранилище записей. Действия, используя сессию, добавляют, удаляют или вносят изменения в данные записей.
Разр аботка алгоритма в Mobile SMARTS сводится к его компоновке из готовых блоков в визуальном редакторе. Готовые блоки называются действиями. Все доступные действия в Mobile SMARTS делятся на визуальные и невизуальные.
Визуальные и невизуальные действия
Визуальные и невизуальные действия по‑другому можно назвать как «с окошками» и «без окошек».
Визуальные действия являются модальными, т.е. требуют от пользователя какого‑то действия — ввода данных, выбора чего‑то из списка и т.д. (меню, выбор номенклатуры, просмотр записей, редактирование полей). Это те действия, которые представляют некую формочку.
![]() | ![]() |
Практически все визуальные действия содержат свойства, задающие пользовательский интерфейс на терминале — например, «Текст в верхней части окна», «Текст в самом окне» и т.д. Все визуальные действия системы имеют возможности по настройке своего внешнего вида и выводу сопроводительных текстов для пользователя, в том числе с помощью шаблонов и форматирования.
Невизуальные действия (например, группы «Программирование» или «Работа с документом») ничего не требуют (например, присваивание, различные проверки, вызовы, записи), и выполняются одно за другим до тех пор, пока не наступит очередь визуального действия или документ не закроется.
![]() | ![]() |
Значок
напротив некоторых действий в алгоритме означает, что такое действие является визуальным.
Вот как выглядят на ТСД визуальные действия:
![]() | ![]() | ![]() |
Например, текст в верхней части окна задан шаблоном с форматированием.
{GlobalVars.СпрятатьПомощь==True:;<r size="8">(esc) или 01 - меню \| 0 - все товары \| 02 - просмотр строк \| 03 - смена режима</r><hr/>}{SelectedProduct.ОтображаемоеИмя}<DarkRed><b>\{SelectedProduct.КолвоВДокументе:Сканировано (0)}\{SelectedProduct.Packing.Name}</b></DarkRed>{SelectedProduct.ЦенаСклад}![]()
![]()
Свойства визуальных действий
Единственным свойством, общим для всех действий, является имя конкретного экземпляра действия в дереве.
Имя «Сканирование» не будет отображаться на экране ТСД — это не текст в окне, а имя экземпляра действия, по которому это конкретное действие будет идентифицироваться в редакторе. Основное применение имен — адресация в условных и безусловных переходах. В действительности, никто не запрещает давать действиям такие имена как «10», «20» и т.д.
Для визуальных действий существуют свойства, присутствующие во всех действиях такого типа.
| Имя | Имя действия используется для указания перехода на него. Например, при неудачном сканировании товара можно сделать переход на какое‑либо действие. Для этого в соответствующем свойстве «При ошибке ввода» действия выбора номенклатуры нужно указать имя того действия, на которое следует переходить.![]() Имя можно не указывать. В этом случае на такое действие нельзя задать явного перехода по какому‑либо событию или условию. ![]() |
| Текст в верхней части окна | Строка. Информационный текст, отображаемый в заглавии страницы при выполнении действия могут применяться шаблоны ![]() |
| Полноэкранный режим | Зависит от старшего | Да | Нет. Определяет выводить ли окно действия в полноэкранном режиме (без верхних и нижних панелей, меню и т.д.). Полноэкранный режим означает, что не будут отображаться шапка с названием документа и нижние панели, которые в редакторе метаданных называются «Строки подвала». ![]() По умолчанию зависит от старшего, т.е. действия, находящиеся в группе, берут значение полноэкранного режима у группы, та у своей группы и в конечном итоге у типа документа ![]() Например, в действии «Выбор номенклатуры» полноэкранный режим зависит от того, какой режим выбран в типе документа «Сбор штрихкодов». ![]() |
| Полноэкранный режим (значение) | Да | Нет. Отображает будет ли действие выводиться в полноэкранном режиме с учетом указания на полноэкранный режим для родительских действий и типа документа |
| Запомнить на стеке | Да | Нет. Флаг, указывающий, следует ли сохранять состояние сессии перед выполнением данного действия. Позволяет организовывать правильные алгоритмы отмены выполнения действий (подробнее смотрите «Стек действий»). |
| Отмена действия по Escape | Отмена действия | Возврат на одно действие | Завершить документ | Прервать работу с документом | Возврат документа | или переход к любому выбранному действию из списка. (подробнее смотрите «Значение системных действий»). Тип отмены действия при нажатии клавиши Escape. |
Обработчики визуальных действий
В Mobile SMARTS предусмотрена возможность использовать обработчики в визуальных действиях. В обработчике можно задать клавишу или штрихкод, при нажатии на которую (или введя штрихкод) на ТСД будет происходить переход на другое действие которое было задано в свойствах обработчика.
Для добавления обработчика в визуальном действии нужно нажать правой кнопкой мыши на действие и в выпадающем меню выбрать «Добавить обработчик».
После этого в свойствах обработчика выбрать:
- Клавишу для перехода на другое действие. Действие, куда будет выполнен переход при нажатии клавиши или введении штрихкода;
- Ввести штрихкод, при вводе, которого, будет выполнен переход на выбранное действие.
Не обязательно указывать и клавишу и штрихкод, можно указать что‑то одно.
Дополнительно можно указать:
- Контрольную клавишу. Если назначена контрольная клавиша, то переход на заданное действие будет выполняться при одновременном нажатии «Клавиши» и «Контрольной клавиши» (например, Control+H);
- Условие срабатывания. Можно написать условие срабатывания клавиши или штрихкода. Срабатывание происходит, только если условие возвращает True. Если условие не задано, клавиша или штрихкод срабатывают всегда.
Для того, что бы пользователь ТСД знал, какие клавиши или штрихкоды соответствуют переходам и на какие действия, можно разместить помощь в виде текста в верхней части окна или создать там дополнительные управляющие кнопки.
Сессии
В процессе выполнения алгоритма для обмена данными между действиями существует сессия. Сессия представляет собой хранилище записей переменных вида «Имя» — «Данные» (например, Document — Строки документа). Каждое действие имеет набор каких‑то входных данных, с которыми оно работает и какой‑то результат своей работы. Действия, используя сессию, добавляют, удаляют или вносят изменения в данные записей, они берут исходные данные из сессии и по результату своей работы кладут обратно данные по именам.
У нас есть действие «Выбор номенклатуры, которое представляет визуальное действие, с помощью которого пользователь должен выбрать какую‑то позицию номенклатуры (например, отсканировав штрихкод или выбрав позицию из сп иска).
Результат работы этого действия занесение в сессию переменной SelectedProduct (объект, который содержит информацию о товаре, количестве и других дополнительных полях).
После этого процесс происходит дальше по алгоритму.
Следующее действие, которое необходимо выполнить в данном примере это «Правка количества». Теперь действие «Правка количества» использует данные лежащие в сессии. Это тоже визуальное действие, отображающее формочку для ввода количества товара. После того как пользователь ввел данные, действие «Правка количества» вносит изменения в сессию, изменив количество номенклатуры (Молоко «Деревенское» вместо 1 пачки было занесено 6 пачек).
Следующее действие «Занесение в документ». Оно берет данные из сессии и в соответствии со своими настройками, которые мы сделали у этого действия, и заносит запись непосредственно в документ. Документ также лежит в сессии и все действия имеют к нему доступ.
После прекращения работы с документом (завершение или временный выход) сессия прекращает свое существование. Пр и возобновлении работы с документом появляется новая сессия.
Переходы по действиям
Алгоритм программы выполняется шаг за шагом, начиная с первого действия. Каждому действию можно задать уникальное имя, которое потом используется для задания перехода к данному действию.
Если переходы явно не заданы (не указаны переходы по именам), то действия будут идти по порядку. Если у действия не задано имя, то явный переход на него назначить нельзя, оно может быть выполнено, только когда придет его очередь (по порядку).
От одного действия могут быть назначены сразу несколько переходов на другие действия или операции. На какое действие или операцию будет осуществлен переход зависит от введенных данных.
Для удобства переходы показаны разноцветными с трелочками, чтобы видеть, куда могут переходить действия и при каких условиях или откуда может быть осуществлен переход на это действие. Синие стрелочки — переход по обычным действиям. Бордовые стрелочки — переходы по обработчикам. Красные и зеленые переходы по «if», зеленый — условие выполнено, красный — условие не выполнено. Оранжевые — задано неправильно имя перехода (например, удалили действие или переименовали).
Например, при выборе номенклатуры, если отсканированный товар был найден в справочнике номенклатуры, то переход будет на действие с именем «ПрисвоитьШК». Если товар не найден в справочнике номенклатуры, то переход будет осуществлен на действие с именем «10» — вызов операции Обработка неизвестного штрихкода (именовать действия можно используя числа).
Опциональные переходы — не обязательные переходы, зависят от настроек. Если опциональный переход не задан, то действие имеет свой встроенный в Mobile SMARTS алгоритм обработки.
Например, действие «Выбор номенклатуры». Если при выполнении этого действия товар не найден и не задан переход для этого случая, то действие имеет свой собственный уже написанный и встроенный в Mobile SMARTS алгоритм обработки не найденного товара (произвести звук ошибки и вывести сообщение, что товар не найден).
А если нам необходим свой специализированный алгоритм обработки ненайденного товара (например, вызов операции Обработка неизвестного штрихкода), то надо задать переход на него.
Для готовых решений на основе Mobile SMARTS (драйвера терминала сбора данных для «1С:Предприятия»), такой алгоритм уже написан.
Значение системных переходов
В выпадающем списке для действия (группировки действий, операции) кнопки отображаются возможные варианты перехода по нажатию такой кнопки. Вначале этот список заполнен системными переходами.
Для действий внутри алгоритма типа документа
| Системное действие | Латинское название | Описание |
|---|---|---|
| Отмена действия | cancel | Отмена изменений по текущему действию и возврат к предыдущему в стеке (изменения в сессию не сохраняются). |
| Возврат на одно действие | finishproc | Возврат к предыдущему действию в стеке без отмены произведенных изменений (изменения сохраняются в сессию) |
| Завершить документ | return | Выход из документа, документ считается выполненным, у него будет выставлен флаг завершен и при обмене данными он уйдет на сервер. |
| Прервать работу с документом | abort | Выход из документа, документ считается прерванным. Флаг завершения не выставляется, и документ остается на терминале. |
| Возврат документа | release | Отказ от выполнения документа. Если документ не был изменен, то он будет возвращен на сервер, в исходном состоянии, и не будет считаться выполненным. Впоследствии его снова сможет забрать тот же или другой пользователь. Если документ был создан на терминале, то он будет удален. Если документ уже был изменен, то … |
Разница между прерыванием и завершением документа состоит в том, будет ли выставляться флажок «Завершен» в документе.
Для действий внутри алгоритма операции
| Системное действие | Латинское название | Описание |
|---|---|---|
| Отмена д ействия | cancel | Отмена изменений по текущему действию и возврат к предыдущему в стеке (изменения в сессию не сохраняются). |
| Возврат на одно действие | finishproc | Возврат к предыдущему действию в стеке без отмены произведенных изменений (изменения сохраняются в сессию) |
| Завершить операцию | return | Успешное завершение операции (операция выполнена) c возвратом результата. |
| Прервать операцию | abort | Прерывание операции без возврата результата. |
Для действий внутри групп или циклов
| Системное действие | Латинское название | Описание |
|---|---|---|
| Отмена действия | cancel | Отмена изменений по текущему действию и возврат к предыдущему в стеке внутри группы (изменения в сессию не сохраняются). |
| Возврат на одно действие | finishproc | Возврат к предыдущему действию в стеке группы без отмены произведенных изменений (изменения сохраняются в сессию) |
| Продолжить | continue | Для цикла: переход на начало цикла с выбором следующего элемента, или завершение цикла, если элементы цикла закончились. |
| Прервать | break | Прервать текущую группу действий и перейти на следующее действие в основном алгоритме |
| Завершить операцию | return | Завершение выполнения всего алгоритма, в котором находится группа действий. |
| Прервать операцию | abort | Прерывание выполнения всего алгоритма, в котором находится группа действий. |
















