Практика разработки мобильного приложения 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.х Управленческий учет Платные (руб)

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

2880 руб.

03.12.2018    57019    180    103    

169

SALE! 25%

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

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

13200 9900 руб.

27.12.2021    35728    94    161    

190

1С-программирование Мобильная разработка Программист Стажер Платные (руб)

Данный онлайн-курс предусматривает изучение базовых принципов создания приложений для операционной системы Android, работающих на мобильной платформе “1С:Предприятие”. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие” при разработке прикладных решений для “обычных” компьютеров, но пока ещё не занимался разработкой 1С-приложений, предназначенных для работы на мобильных устройствах.

12900 руб.

08.06.2023    7815    6    0    

49

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 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    94248    547    187    

311

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

В этом релизе собрано много нового из области интерфейса, связи, хранения и важные новые способы управления. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

1 стартмани

25.06.2024    1880    18    informa1555    0    

33

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

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

1 стартмани

20.03.2024    2001    1    informa1555    1    

44

Мобильная разработка Языки и среды 1С:Элемент Программист Бесплатно (free)

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

19.03.2024    13010    ROk_dev    69    

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

Показать


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

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

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