Практика разработки мобильного приложения 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С v8.3 1С:Конвертация данных Платные (руб)

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

13200 руб.

27.12.2021    38280    108    161    

202

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

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

3000 руб.

03.12.2018    59360    193    103    

172

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

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

2000 руб.

22.04.2019    97373    589    189    

323

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

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

3450 руб.

28.04.2023    9517    15    0    

9

Мобильная разработка Платформа 1С v8.3 Конфигурации 1cv8 Финансовые услуги, инвестиции Управленческий учет Платные (руб)

Мобильное приложение и конфигурация 1С для автоматической торговли на бирже через API Тинькофф банка. Достаточно задать настройки, нажать «Пуск», и робот сам торгует ежедневно.

7000 руб.

25.05.2022    4683    1    0    

6

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

Экспериментальный релиз и простенький скрипт к нему закрывает потребности в любых видах синхронизации между устройствами Simple и между Simple и бек-системами (например 1С). По сути – это очень простой python-скрипт, который можно запустить на доступной машине, сервере или VPS и он будет связывать клиентские устройства между собой и с 1С или другими бек-системами. В самой платформе появилось для этого множество доработок для поддержки стабильного постоянного соединения, докачки больших файлов и работе в фоне. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

23.08.2024    1242    6    informa1555    1    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 75 20.10.13 18:55 Сейчас в теме
плюсанул в счет продолжения статьи :-)
10. mzelensky 53 01.03.14 20:23 Сейчас в теме
Мучаюсь с мобильным приложением. Уперся в очень элементарный вопрос, который не могу решить. Мне нужно указать файл (точнее путь к нему). В обычном режиме делается через

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

Но в мобильном приложении НЕТ такого. И никак не могу найти аналог. Как все-таки поступить???
11. пользователь 21.04.14 16:31
Сообщение было скрыто модератором.
...
12. axelerleo 346 21.04.14 16:55 Сейчас в теме
(11) Задача интересная, но увы, временем свободным для разработки не располагаю.
13. Bukaska 140 21.04.14 17:00 Сейчас в теме
За идею однозначно +, но описания мало.. Надеемся и ждем продолжения банкета!
14. Mortiferus 363 19.08.14 11:42 Сейчас в теме
Не знаете, как работают "пользователи" в мобильном? Дело в том, что задав имя пользователя, я не могу привязать к нему определенную роль (есть админская роль на сервере и хотелось бы реализовать менеджерские роли на клиенте, т.е. на мобилах). Установка пользователей на сервере ничего не дает, так как на мобиле я могу указать любое имя пользователя, также и такого, какого нет на сервере, и пользователь благополучно зайдет в программу. Отсюда делаю вывод, что роли пользователей не мигрируют с сервера.
15. ziercool 40 17.11.15 22:20 Сейчас в теме
как вы организовали КОМ соединение в мобильном приложении? "СОМОбъект" - не доступен в мобильном приложении
16. axelerleo 346 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 = 'Нажмите, чтобы завершить работу'"),  (Проверка: Мобильное приложение-клиент)
Мобильное приложение содержит синтаксические ошибки.

Показать


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

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

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