Практика разработки мобильного приложения 1С 8.3 (часть 1)

19.05.15

Разработка - Мобильная разработка

В данной статье речь пойдет о том, что довелось перепробовать и на какие грабли наступить, прежде чем удалось сделать более-менее нормальное приложение для планшетников. Приложение изначально затачивалось только под Андроид, за основу взята конфигурация 1С: Заказы, и мобильное приложение для разработки.

Практика разработки мобильного приложения 1С 8.3 (часть 1)

 

В данной статье речь пойдет о том, что довелось перепробовать и на какие грабли наступить, прежде чем удалось сделать более-менее нормальное приложение для планшетников. Приложение изначально затачивалось только под Андроид, за основу взята конфигурация 1С: Заказы, и мобильное приложение для разработки.

 

Изначально был выбран «неправильный» подход с компилированием приложения и закидыванием его на планшетник вручную. Напомню, что для сборки мобильных приложений используется «Помощник создания мобильного приложения» (MobileAppWizzard). Затем на одном из форумов было найдено красивое решение с использованием мобильного приложения для разработки. Это приложение входит в комплект установки мобильной платформы. На момент разработки использовалась платформа версии 8.3.3.24. В папке «Android» можно найти файл 1cem.apk. Это и есть мобильное приложение для разработки. Его огромнейший плюс, сэкономивший нам уйму времени — в том, что можно опубликовать мобильное приложение на веб-сервере, а на планшетнике указать путь вида http://[Адрес веб-сервера]/[Имя мобильного приложения].

 

На планшетном ПК, в настройках добавленного приложения можно отметить флажок «Обновлять из конфигуратора», и при каждом запуске приложение будет пытаться подключиться к веб-серверу и проверять обновления.

 

После того, как мобильное приложение было развернуто, начался процесс его доработки.

 

Что требовалось:

1. Настроить обмен между центральной базой и мобильным устройством.

2. Организовать асимметричную синхронизацию: из центральной базы выгружать данные о номенклатуре, контрагентах, остатках товаров на складе и взаиморасчетах, а из мобильного приложения загружать только заказы покупателей.

3. Реализовать простой интерфейс для менеджеров, где они смогут быстро просмотреть остатки, цены и взаиморасчеты.

 

На этапе тестирования использовалась промежуточная база «Управляемое приложение», ввиду того что демо-приложение 1С:Заказы изначально заточено на обмен именно с Управляемым приложением.

 

Первый блин вышел комом. В прямом смысле. Для обмена с центральной базой был использован v82.ComConnector. Не буду вдаваться в подробности его настройки, об этом есть куча отдельных материалов. Пройдусь только по тем трудностям, с которыми столкнулся.

1. Использование com-объектов на 64-битной серверной ОС. Для решения проблемы была использована обертка COM+ Applications, которая настраивается в Component Services.

2. Удаленный вызов Com с другого сервера. Вызываемый сервер должен иметь роль Application Server, и у него должно быть настроено COM+ Network Access. Кроме того, сервер Apache должен иметь соответствующие права (т. е. запускаться как сервис от имени авторизованного пользователя)

 

Намучившись с Ком-соединениями, решили переводить рабочую базу на web-сервисы.

О публикации веб-сервисов также написано очень много, но там написано о том, как работает. Как НЕ работает, поделюсь ниже.

 

Рабочая база развернута на платформе 8.2, мобильное приложение, соответственно, на 8.3.

При публикации вначале приложения 8.3, а затем 8.2. периодически выхватывали глюк «Ошибка формата потока» в веб-клиенте 8.3, либо сообщение об ошибке «различаются версии платформы клиента и сервера». Перепубликация не помогает, равно как и перезапуск Apache. А вот отключение публикации и подключение заново — помогает.

 

Далее, поймал забавную ошибку при авторизации пользователя (при создании wsОпределения). При тестировании на компьютере, авторизация с длинным ФИО проходит легко. При попытке авторизации этого же пользователя с планшетника под управлением Android, авторизация заканчивалась, не начавшись. Экспериментальным путем удалось вычислить, что кириллицей длина логина ограничена 22 символами. При этом сочетание кириллических символов и цифр дало авторизоваться с логином длиной 27 символов. Есть подозрение, что это связано с преобразованием кириллических символов. Так, например, в браузере Firefox строка из Википедии «http://ru.wikipedia.org/wiki/Пиво» преобразуется в «http://ru.wikipedia.org/wiki/%D0%9F%D0%B8%D0%B2%D0%BE».

 

Технологически, мобильная платформа 8.3.3 на текущий момент имеет ряд ограничений. Самое ожидаемое, на мой взгляд, нововведение — это поддержка запросов. Но, поскольку произвольные запросы в динамических списках мобильная платформа пока не поддерживает, пришлось «пойти другим путем».

 

Для решения задачи отображения справочника номенклатуры с ценами и остатками был использован следующий подход:

1. В форме справочника номенклатуры созданы две таблицы. Первая — динамический список, собственно сам справочник. Фильтр динамического списка настроен так, чтобы выводились только группы. Вторая таблица — собственно остатки и цены. При активизации строки динамического списка, на сервере происходит заполнение таблицы значений, которая затем и выводится во вторую таблицу. При получении цен и остатков использовалась объектная модель. Все эти танцы с бубном были исполнены только потому, что привычного по толстому клиенту метода «при выводе строки» или «при получении данных» нет, и динамически нарисовать цифры в колонке нельзя.

Аналогичный подход использовался и в форме подбора

2. Для вывода строки с текущими ценами отлично подошла ФорматированнаяСтрока.

Ниже — пример кода.

&НаСервереБезКонтекста

Функция ОстаткиПриАктивизацииСтрокиНаСервере(ном)

НаборЗаписей = РегистрыСведений.ЦеныТоваров.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Товар.Значение = ном;

НаборЗаписей.Отбор.Товар.Использование = Истина;

НаборЗаписей.Прочитать();

МассивФорматированныхСтрок = Новый Массив;

Для Каждого СтрокаНабора Из НаборЗаписей Цикл

МассивФорматированныхСтрок.Добавить(Новый ФорматированнаяСтрока(СтрокаНабора.ВидЦен.Наименование,,WebЦвета.Синий));

МассивФорматированныхСтрок.Добавить(Новый ФорматированнаяСтрока(" " + Строка(СтрокаНабора.Цена) + " "));

КонецЦикла;

Возврат Новый ФорматированнаяСтрока(МассивФорматированныхСтрок);

// Вставить содержимое обработчика.

КонецФункции

 

3. Для загрузки справочников, остатков и цен в мобильное приложение был использован веб-сервис, который на входе получает структуру параметров, а на выходе возвращает хранилище значения. Еще одним неприятным открытием стал вылет обмена при слишком длительной обработке на стороне сервера. Сложилось впечатление, что имеется какой-то таймаут, после которого приложение «считает», что связь прервана (хотя на самом деле все еще идет обработка данных в рабочей базе через ws-соединение), и прекращает обмен с ошибкой.

Чтобы этого избежать, было принято решение дробить полный обмен на порции с возвратом фокуса обратно в мобильное приложение. Т.е. вначале синхронизировать номенклатуру, затем контрагентов, затем остатки, и т. п.

4. Для получения отчетов оставлен тот же подход, что и в конфигурации 1С: Заказы. Вызывается веб-сервис с параметрами, на стороне сервера рабочей базы формируется табличный документ, и затем уже готовый табличный документ возвращается в мобильное приложение.

мобильное приложение android мобильная платформа 8.3

См. также

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн. Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

2880 руб.

03.12.2018    54602    137    102    

161

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    33275    80    157    

174

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Платформа 1С v8.3 Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный терминал сбора данных для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    91932    511    186    

293

Магазин 15 - приемка товара по штрихкодам или инвентаризация в торговом зале

Логистика, склад и ТМЦ Мобильная разработка Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Специализированное программное обеспечение для мобильных устройств со встроенным сканером штрихкодов. Позволяет быстро автоматизировать, оптимизировать рабочие места и бизнес процессы по учету товара в магазине. Например, приемку товара по штрихкодам или инвентаризацию прямо в торговом зале.

12950 руб.

30.05.2023    3387    2    0    

4

Работа с графикой в браузере (SimpleWEB). Векторный редактор

Мобильная разработка WEB-интеграция Мобильная платформа Абонемент ($m)

В SimpleWEB добавились средства для работы с графикой и отслеживание событий мыши, в онлайн редактор https://seditor.ru:1555/ добавился «Векторный редактор» на этом API. Теперь можно нарисовать схемы складов на ПК, сделать карты (*.sug-файлы) для мобильной платформы SimpleUI, выводить данные из 1С в графическом виде. Таким образом, API для работы с векторными файлами теперь есть и в веб- и в мобильной платформе, а также средства для создания и редактирования векторных файлов есть тоже в обеих платформах.

1 стартмани

20.03.2024    1464    0    informa1555    1    

39

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    6807    ROk_dev    56    

37

JavaScript в Simple

Мобильная разработка Бесплатно (free)

В SimpleUI и SimpleWEB, наряду с обработчиками на python и онлайн (1С и т.д.) добавляется интерпретатор JavaScript. В андроид платформе он скорее играет на поле python, т.к. является оффлайновым решением для самостоятельной обработки и расширяет аудиторию разработчиков для разработки самостоятельных решений. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

12.02.2024    1626    informa1555    0    

25
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Makushimo 160 20.09.13 06:43 Сейчас в теме
Начал за здравие и не закончил.
Что это - проба пера?
2. DanilaDru 262 22.09.13 15:55 Сейчас в теме
Автор, вы могли бы заинтриговать и в первой части выложить приблизительное содержание граблей )

От себя добавлю одно интерсное поведение с видимостью элементов в мобильном приложении. Если настраивать видимость у группы, у которой есть элементы, то мобильная платформа падает. Если же настраивать видимость у поэлементно, а не у группы, то отрабатывает нормально. Это было использовано для экономии места на мобильном устройстве и скрытии шапки документа после её заполнения.
realist; axelerleo; +2 Ответить
3. arcomage 25.09.13 11:31 Сейчас в теме
Тоже бьюсь с мобильным приложением. Только у меня подключение идет к 7-ке. Пока битва с 64 битным сервером незакончена. Пробую подключить 7-ку через вызов COM соединения 8.3.
Вот что заметил - проверки синтаксиса в 8.3.3.715 в модуле внешнего соединения нету. Очень не надежна отладка СОМ соединения - часто всё виснет. Пока добился того, что на клиенте всё работет

Данные из 7-ки забираю через Внешние источники данных - там есть свои грабли с авторизацией доступа.

Кстати я отказался от справочника товары - зачем он на наладоннике? Есть регистр регистр сведений - в нем код,наименование, остаток и т.д - динамически обновляется с помощью обмена.

В связи с этим возникла проблема с авто подбором в мобильном приложении - Запроса нет, Компоновки данных нет. Как сделать фильтр "Содержит" в регистре сведений может кто подскажет?

Кстати автоизация, которая приведена в примере - полная туфта - всё передается без шифрования.
По вебсервисам особенно порадовала настройка на другой TCP порт :).
axelerleo; +1 Ответить
4. DanilaDru 262 25.09.13 13:02 Сейчас в теме
(3) arcomage,
Если по вашему варианту идти, то вам надо выбрать записи регистра сведений, перебрать их на вхождение текста в наименование товара.
Проблема вся в том, что произвольные запросы не поддерживаются в мобильной платформе.


Вот как раз тут с товары я бы делал справочником. А потом бы обрабатывал получение данных выбора.
У нас пользователь вводит курьера по номеру. Работает так:
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	Текст = Параметры.СтрокаПоиска;
	ДанныеВыбора = Новый СписокЗначений;
	Если ПустаяСтрока(Текст) Тогда 
		Возврат;
	КонецЕсли;
	МассивКурьеров = ОбщиеПроцедуры.СформироватьМассивКурьеровПоВхождениюТекстаВНаименование(Текст);
	Для Каждого ТекЭлемент Из МассивКурьеров Цикл 
		ДанныеВыбора.Добавить(ТекЭлемент);
	КонецЦикла;
КонецПроцедуры
Показать
5. Fenicss 27.09.13 08:16 Сейчас в теме
В статью бы хотя бы небольшой пример реализации данного мобильно приложения. А то как то все совсем не наглядно. А часть когда сильно информации не несет. Так что жду продолжения статьи))
6. arcomage 30.09.13 17:37 Сейчас в теме
(5) Fenicss, те кто занимался с мобильным приложением - тем понятно. Косяков еще хватает, но есть уверенность, что допилят.
7. arcomage 16.10.13 12:35 Сейчас в теме
А как разблокировать адрес каталога автообновлений?
9. andogskiy 20.12.13 16:32 Сейчас в теме
(7) arcomage, а как он заблокировался?
8. slaviksoft 74 20.10.13 18:55 Сейчас в теме
плюсанул в счет продолжения статьи :-)
10. mzelensky 53 01.03.14 20:23 Сейчас в теме
Мучаюсь с мобильным приложением. Уперся в очень элементарный вопрос, который не могу решить. Мне нужно указать файл (точнее путь к нему). В обычном режиме делается через

ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие)

Но в мобильном приложении НЕТ такого. И никак не могу найти аналог. Как все-таки поступить???
11. пользователь 21.04.14 16:31
Сообщение было скрыто модератором.
...
12. axelerleo 338 21.04.14 16:55 Сейчас в теме
(11) Задача интересная, но увы, временем свободным для разработки не располагаю.
13. Bukaska 140 21.04.14 17:00 Сейчас в теме
За идею однозначно +, но описания мало.. Надеемся и ждем продолжения банкета!
14. Mortiferus 362 19.08.14 11:42 Сейчас в теме
Не знаете, как работают "пользователи" в мобильном? Дело в том, что задав имя пользователя, я не могу привязать к нему определенную роль (есть админская роль на сервере и хотелось бы реализовать менеджерские роли на клиенте, т.е. на мобилах). Установка пользователей на сервере ничего не дает, так как на мобиле я могу указать любое имя пользователя, также и такого, какого нет на сервере, и пользователь благополучно зайдет в программу. Отсюда делаю вывод, что роли пользователей не мигрируют с сервера.
15. ziercool 38 17.11.15 22:20 Сейчас в теме
как вы организовали КОМ соединение в мобильном приложении? "СОМОбъект" - не доступен в мобильном приложении
16. axelerleo 338 18.11.15 09:18 Сейчас в теме
(15) ziercool, В мобильном - никак :)
Использовалась промежуточная база «Управляемое приложение», вот между ней-то и рабочей базой Комплексная Автоматизация и шел обмен через КОМ.
17. Greek26rusa 2 25.12.19 11:38 Сейчас в теме
{ОбщийМодуль.ОбменДаннымиГлобальный.Модуль(35,3)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя)
        <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Установить обновление'"), "e1cib/app/Обработка.ВыполнениеОбменаДанными", (Проверка: Мобильное приложение-клиент)
{ОбщийМодуль.СоединенияИБГлобальный.Модуль(87,3)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя)
        <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"),  (Проверка: Мобильное приложение-клиент)
{ОбщийМодуль.СоединенияИБГлобальный.Модуль(128,4)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя)
            <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), (Проверка: Мобильное приложение-клиент)
{ОбщийМодуль.СоединенияИБГлобальный.Модуль(138,2)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя)
    <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Завершение работы пользователей'"), (Проверка: Мобильное приложение-клиент)
{ОбщийМодуль.СтандартныеПодсистемыГлобальный.Модуль(63,50)}: Переменная не определена (СтатусОповещенияПользователя)
        Пояснение, БиблиотекаКартинок.ЗавершитьРаботу, <<?>>СтатусОповещенияПользователя.Важное); (Проверка: Мобильное приложение-клиент)
{ОбщийМодуль.СтандартныеПодсистемыГлобальный.Модуль(61,2)}: Процедура или функция с указанным именем не определена (ПоказатьОповещениеПользователя)
    <<?>>ПоказатьОповещениеПользователя(НСтр("ru = 'Нажмите, чтобы завершить работу'"),  (Проверка: Мобильное приложение-клиент)
Мобильное приложение содержит синтаксические ошибки.

Показать


при включении галочки использовать мобильнгое приложения в свойствах лезит такая ошибка( помогите если можете.

если я через веб сервис обычный публикую ошибку получаю

Неправильный формат конфигурации
Оставьте свое сообщение