Динамическое изменение/генерация экранной формы.
Вся конфигурация, и экран не исключение, представляет из себя JSON-объект, поэтому можно динамически (т.е. не постоянно, а только на момент вызова) менять содержимое экрана – добавлять кнопки поля ввода и т.д., просто изменяя JSON-структуру экрана. Нет необходимости в каких-то специальных методах – только JSON. Также экран может быть полностью пустой и генерироваться полностью в «При открытии». Это не так удобно, как в конструкторе, но в некоторых случаях (например добавить кнопку в зависимости от условия) это сделать проще чем рисовать отдельную форму. Также, может быть, неких элемент наследования – взяли форму, что то убрали, что то добавили не меняя исходную форму.
JSON можно формировать любым способом – заготовить заранее варианты, менять существующий. Для применения конечного варианта используется команда setJSONScreen В качестве параметра передается JSON-структура
Командой getJSONScreen в переменную JSONScreen можно запросить исходную структуру текущего экрана. Это удобно когда нужно чтото поменять – например убрать какие то элементы
В демо базе, в конфигурации «Примеры элементов 5» есть пример динамического добавления кнопок. Тут сначала читается JSON-структура экрана, а потом копируется одна кнопка и делается 5 кнопок и применяется:
Динамическое изменение конфигурации на лету
Можно менять конфигурацию динамически, то есть на время вызова до следующего считывания – добавлять или убирать процессы, заменять обработчики, формы – полностью все что есть (включая например пример из предыдущего абзаца). То есть конфигурация будет работать с вашими изменениями до тех пор, пока не загрузится из источника. Но дело в том, что изменения можно устанавливать и «При запуске», таким образом изменения будут столько сколько нужно. Это может быть полезным для того чтобы к примеру отключить из меню какие то процессы, не доступные пользователю.
Команды:
getJSONConfiguration - считывает в переменную _configuration текущую конфигурацию
setJSONConfiguration - применяет измененную конфигурацию немедленно.
Файлы-процессы .suip
Платформа Simple UI поддерживает разные варианты хранения и транспортировки данных – в SQL устройства, в NoSQL устройства, в документах и непосредственно на сервере при он-лайн варианте работы (хранение) и различные виды запросов, он-лайн команды, обмен файлами, документами (транспорт). Сейчас добавляется новый вид хранения/транспортировки – «файлы-процессы». Это текстовый файл, состоящий из JSON-строки который включает в себя все необходимое для работы:
• Структуру процесса, со всеми обработчиками и т.д.
• Данные процесса, которыми он может пользоваться и менять, записываю туда же – в файл
• Необходимую информацию для отображения внутри системы – дата последнего изменения, обложка и т.д.
То есть данные и механизмы ввода и обработки данных инкапсулированы в одном объекте.
Таким образом – это как бы самостоятельная мини-конфигурация сразу с данными и всем необходимым в виде suip-файла которую можно послать получателю, который не имеет доступа к вашему веб-сервису и каки либо других настроек, а просто может открыть, поработать и закрыть файл сохраним в свою очередь свои данные и отправить пользуясь инфраструктурой своего устройства. Это можно сравнить с Excel с макросами или PDF-формами и чем то подобным, но с возможностями Simple UI – работа с оборудованием, питоном, дополненной реальностью, AI-штуками и т.д.
Использование существующей инфраструктуры хранения и доставки – это главное удобство такой архитектуры. Например можно использовать мессенджеры или почту где помимо самого suip-файла может быть в произвольном виде описаны пояснения по работе процесса, получена обратная связь
Файлы можно передавать различными способами – как через Интернет, так и например через Bluetooth, при этом не надо пробрасывать вебсервис основной системы наружу.
Работа с suip-файлами
В файлы процессы можно паковать как обычный процесс (с экранами) так и ActiveCV процесс
Регламентируется наличие двух обязательных объектов в корне JSON:
"SimpleUIProcess" – структура процесса
«data» - все данные
Пример файла-процесса:
Также в файл сами добавляются поля last_update и last_update_millis – даты последнего изменения файла, а также можно задать html обложку caption для отображения в программе на закладке «документы». Если ее не задать в файле она будет сгенерирована автоматически по корневым полям объекта data. Эти поля касаются отображения в списке последних открытых файлов и необязательны.
Файл можно создать предварительно из бек-системы или «открепить» обычный процесс, сохраним данные в data.
Создание файла в 1С на примерах двух процессов
Пример 1. Создаем файл-процесс со специальными ценами для контрагента в ActiveCV, посылаем ему по WhatsApp , он открывает и смотрит в дополненной реальности «свои» цены. Никаких настроек и доступов со стороны приложения или 1С не нужно.
Для этого в конструкторе в Процессе и Операции ActiveCV предусмотрены кнопки «Выгрузить основу процесса». Она копируют в буфер обмена JSON- содержимое которое должно быть в SimpleUIProcess и остается его только вставить в макет обработки.
По сути вся обработка записывает поля секции data и затем компонуется файл из SimpleUIProcess и data.
Важно! При открытии файл-процесса содержимое data копируется сразу в Переменные (или hashMap) при этом сам объект data доступен в pyton- обработчиках сразу как словарь _data т.е. его не нужно доставать из строки в json и писаnь обратно. Поэтому для данного примера достаточно сразу определить объекты green_list и object_info_list – они просто сразу запишутся в переменные и будут прочитаны ActiveCV. Получается для данного примера программирования со стороны обработчиков не нужно – только подготовка файла. В комплекте разработчика есть примеры обработок выгрузки процессов.
Пример 2. Отправить клиенту интерактивный перечень для сверки приемки заказа. Клиенты отправляется состав заказа по штрих-кодами, где он может сканировать состав, отмечать фактическое количество в файл, а полученный файл отослать обратно.
Важно. Для того чтобы процесс можно было сохранить или поделиться в конструкторе надо у процесса включить галочку «Самостоятельный процесс»
Тогда у процесса появятся кнопки Сохранить и Отправить
Тут уже используется запись в файл. Товары передаются в виде отображаемой на экране таблицы, а дополнительные данные которые не отображаются (штрихкод) просто добавлены в массив rows. Как вариант можно добавить отдельную структуру для хранения плана и факта, но нет необходимости в данном контексте. Никаких дополнительных действий с _data делать не нужно – она сама записывается в файл.
Создание файла на устройстве из процесса.
Пример 3. Из шаблона «Осмотр ОС» пользователь производит осмотр основного средства, делает фотографии а результат сохраняется в файл или сразу отправляется получателю.
У процесса добавляются галочка «Самостоятельный режим» что дает возможность сохранения самого себя в файл и сохранения data.
Важный момент. Поля ввода на экране не генерируют события (как например галочки, фото, кнопки и т.д.), но их запись сразу в файл желательна, так как пользователь может неожиданно закрыть приложение и чтобы введенная информация не пропала (такое же поведение реализовано Документах) Чтобы не запускать обработчик после каждой введенной буквы применен следующий прием – в data нужно завести поля, можно пустые под те поля ввода из которых должно писаться. При этом переменные полей ввода должны назваться так же. Таким образом запись реализуется автоматически и в момент ввода.
Организуем в «При открытии» пустые поля ввода и настраиваем качество фотографий
Остальные поля записываются в обработчике
Результат файл – с упакованными данными и фотографиями, который можно открыть позже или отослать в основную базу.