gifts2017

Как с помощью конкретной технологии решить конкретную задачу? Или опыт разработки мобильного приложения на платформе 8.3.

Опубликовал Андрей Лео (Leo_A) в раздел Программирование - Мобильные приложения

Если существует технология и задача, то ответ напрашивается сам собой – взять и решить поставленную задачу. Именно об этом я бы и хотел рассказать вам в этой статье.
Сравнительно недавно передо мной встала задача автоматизации деятельности торговых агентов крупного оптового дистрибьютора. Казалось бы, что может быть проще? Существует множество готовых решений, бери и пользуйся, но все было бы хорошо, если бы не ряд требований заказчика.

Задача:

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

  • Приложение должно быстро загружать из базы остатки, цены, дебиторку.
  • Обработка заявок и обратный ответ должны происходить в режиме реального времени.
  • Приложение должно уметь работать со всем прайсом, а именно (~20 000 позиций номенклатуры и ~150 000 характеристик)
  • Приложение должно уметь отображать изображения товаров (~18 000 изображений)
  • В приложении должна существовать удобная и эргономичная форма подбора товаров
  • Приложение должно контролировать местоположение агентов
  • В приложении должна быть возможность контроля просроченной задолженности клиентов.

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

Если нет готового решения удовлетворяющего ВСЕ требования клиента, решение очевидно – необходимо разработать индивидуальное решение для конкретного заказчика. Но что делать, если бюджет и сроки весьма сжаты? Вот тут-то мы и подошли к вопросу о технологии.

Технология:

Писать приложение совсем с нуля дело не простое и не быстрое, но если взять платформу адаптированную под написание подобных приложений – дело пойдет значительно быстрее, именно поэтому наш выбор пал на относительно новую технологию разработки приложений для мобильных устройств от фирмы 1С «Мобильная платформа 1С:Предприятия 8».

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

Покопав демонстрационные приложения на новой платформе – мне понравилось все, мучал только один вопрос, а сможет ли эта платформа обработать такие объемы информации и на сколько быстрым будет процесс обмена с центральной базой. Именно это первым делом я и решил выяснить.

Чтобы не изобретать велосипед, за основу приложения был взят демо-пример mademo.cf, поставляемый фирмой 1С со своей мобильной платформой. Вариантов обмена мобильного приложения с центральной базой не мало, но т.к. стояла задача получения ответа realtime обмен с базой было решено выполнять с использованием web сервисов. В указанном демо-примере обмен уже был реализован именно таким образом. Минус заключался в том, что обмен с центральной базой выполнялся объектами с идентичными метаданными. В моем же случае в мобильной базе состав реквизитов был существенно урезан, поэтому пришлось доработать процедуры выгрузки/загрузки данных с использованием конвертации данных. Попытка выгрузки всех необходимых объектов привела к тому, что скорость обмена не удовлетворила бы не только заказчика, но и меня, поэтому было принято решение - все необходимые для работы на мобильном устройстве данные по максимуму помещать в регистры сведений и в таком виде выгружать их на устройства. Используя данную модель хранения данных получилось ускорить процесс выгрузки/загрузки данных в СОТНИ раз. Первая маленькая победа, все необходимые данные для работы агентов попали в мобильное устройство. Теперь мне предстояло проверить, как быстро сможет мобильная платформа эти данные отображать и обрабатывать. Набросав примитивную форму подбора я убедился в том, что платформа успешно справилась и с этой задачей. Осталось дело за малым, набросать нужные формы и заложить в них необходимый требуемый заказчику функционал, кстати стоит отметить, что демо пример от 1С содержит примеры всех особенностей работы мобильной платформы – это и работа с мультимедиа, с геопозиционированием,  а так же с функциями мобильного устройства (набор номера из приложения 1С). При этом данные возможности постоянно расширяются с появлением свежих платформ.

Из особенностей, которые хотелось бы отметить, я выделю следующее:

  • Разработка ведется в привычном Конфигураторе 1С, не пришлось тратить время на изучение новых средств разработки.
  • В возможности платформы зашит большой функционал учитывающий работу на мобильном устройстве.
  • Очень удобное обновление конфигурации мобильных устройств. Буквально 1 клик и на всех устройствах уже новая конфигурация, что очень сильно разгружает отдел ИТ.
  • Возможность использования web сервисов для обмена.
  • Скорость работы с большими объемами данных (при грамотной организации модели данных).

Скорость работы нашего приложения полностью удовлетворила клиента, так что поставленную цель можно считать достигнутой. Первый обмен с центральной базой выполнялся через интернет соединение и занял ~10 минут (8 из которых заняла загрузка изображений), дальнейшие регулярные обмены занимают 10-30 секунд, что в большинстве своем зависит от качества интернет соединения. В ближайших планах - написание нового функционала для реализованного приложения. Реализация данного решения заняла порядка 50 часов, при условии, что пришлось потратить значительную часть времени на некоторые эксперименты, связанные с большим объемом данных. По финансовым затратам разработка нового приложения оказалась ниже, чем оцениваемые клиентом затраты на покупку адаптированных решений, плюс данное решение всегда можно доработать или поправить с весьма незначительными трудозатратами.

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Maxim Goncharov (maxx) 31.03.15 21:55
Интересно спасибо!
Единственное так и не понял за счёт чего все-таки ускорился обмен. Только лишь за счёт того вместо справочников воспользовались регистрами сведений? А почему как вы думаете?
2. Алексей (pablo_escobar) 31.03.15 23:19
Я так понимаю обмен ускорился за счет того, что при использовании справочников выгружались остатки по все номенклатуре, а при использовании регистров сведений только изменившееся данные? Leo_A, вы что запустили в работу на мобильной платформе 8.3.6 (судя по скринам)? На 8.3.4 и 8.3.5 наблюдались ли произвольные вылеты приложения? Разрушение базы? У нас порядка 20 агентов, у всех периодически вылеты моб. платформы (1-2 раза в день) Иногда портится база, но это редко. Планшеты разные.
3. Ruslan (flyer) 01.04.15 08:03
Автор молодец! однозначно плюс. вижу что версия 8.3.6 не всякий бы решился на тестовой версии внедрять. если не сложно напишите про функционал подбора товара. что удобного сделано. была аналогичная задача. и на каких устройствах ставили программу.
4. Андрей Лео (Leo_A) 01.04.15 10:01
(1) maxx, ускорение при использовании регистров сведений заключается в том, что все необходимые данные выгружаются одним набором, а не пообъектно, т.е. в структуре регистра сведений содержится вся необходимая информация и ссылка на объект - соответственно не нужно передавать справочник как объект, достаточно его ссылки.

(2) pablo_escobar, про ускорение написал выше, а про версию платформы пожалуй расстрою Вас, т.к. на 8.3.6 делались только скрины, запуск же делался на 8.3.5. Но проблем с вылетами и убиванием базы проблем совсем не было. Устройства у всех агентов samsung galaxy tab 2. Про другие устройства к сожалению вообще ничего не скажу, т.к. это первый опыт. Единственное, запускал приложение на телефоне lenovo s860, но активно не работал.

(3) flyer, спасибо, я не волшебник, я только учусь :) Запускались на 8.3.5, в ближайшее время, если тестовая эксплуатация 8.3.6 пройдет хорошо, перейдем на нее, уж больно она глаз радует. С подбором пришлось немного похитрить, т.к. у клиента товар с характеристиками. Получилось все уложить в пределы одного экрана, чтобы не бегать между окнами, в остальном вроде все стандартно, кнопки ввода количества, отображение остатков и подобранного количества в таблице, открытие картинки товара по кнопке. Цели сделать универсальный механизм небыло, все писалось индивидуально, под требования клиента, а так, можно конечно расширить функционал подбора, например: подбор в упаковках, история продаж, выделение категорий товаров.
5. Максим Кузнецов (Makushimo) 01.04.15 11:38
Это введение к циклу статей?
6. tixis1c tixis1c (qwed557) 01.04.15 12:55
Тоже интересует ответ на вопрос с порчей базы, У нас тоже бывало что портились базы у агентов, верней пока то случилось только один раз, но было сильно неприятно, когда потерялись заявки. Пока решили архивировать заявки за день в xml чтобы можно было быстро восстановить. Сколько по времени и как интенсивно работают агенты?
7. Андрей М (_Z1) 01.04.15 14:49
(0) Скажите а в каком формате хранит мобильное приложение данные ?
т.е. это бд sqlite или что-то другое.
8. Дмитрий Шерстобитов (DitriX) 01.04.15 19:21
(7) в том же, что и стационарная файловая.
По поводу регистров - не до конца понятно: вы вообще не пользовались справочниками или там хранили только ссылки?
9. Maxim Goncharov (maxx) 01.04.15 21:13
(4)так и не понял по скорости насчет регистров и справочников. С точки зрения выгрузки что 100 элементов справочника выгружать или 100 записей регистра думаю скорость будет одинаковой. С точки зрения загрузки , тут да запись 100 элементов будет медленней чем одна запись набора записей, но это речь идет о первоначальной загрузке только?
10. Андрей Лео (Leo_A) 02.04.15 07:03
(5) Makushimo, возможно. Если будет достаточно времени - постараюсь причесать приложение и выложу с кодом на обозрение.
(6) qwed557, агенты работают уже с полгода, интенсивность не сильно высокая, заявок по 5-10 в день.
(8) DitriX, в мобильное приложение выгружались все справочники, кроме номенклатуры и характеристик. Точнее справочник номенклатуры выгружался, но выгружались только группы, для сохранения иерархии, в регистре есть отдельное измерение "Родитель", по которому делается отбор.
(9) maxx, не совсем так, выгрузка 100 элементов справочника выполняется в разы медленнее, чем выгрузка одного набора записей со 100 строками. Это особенность конвертации данных, возможно если писать свою выгрузку, большой разницы не будет. Теперь на счет загрузки. Как раз основной прирост скорости получился на этапе загрузки, по объектная запись 200 000 элементов выполнялась больше 20 часов, точно уже не скажу, просто в один момент устал следить за процессом и убрал планшет в стол, потом через пару дней увидел, что процесс завершился и даже удачно. Загрузка регистра с таким же количеством записей выполнилась за несколько секунд, я по началу даже подумал, что данные не выгрузились, но когда увидел, что они все же есть, приятно удивился. Еще один положительный момент в том, что размер файла выгрузки сильно меньше и всегда есть возможность при сбое выполнить полную очистку и загрузку данных прямо "в поле". Опять же, если писать обмен руками, размеры файлов думаю отличаться не будут, но скорость загрузки думаю не сильно вырастит.
nsirotkin@mail.ru; +1 Ответить
11. Андрей Лео (Leo_A) 02.04.15 07:07
(6) qwed557, кстати до этого много работал с расширением для карманных компьютеров (РКК) от 1С на win mobile. Для одного из клиентов тоже писал выгрузку заявок в текстовый файл, т.к. база редко но падала.
12. Анаит Бадалян (LaNaite) 07.04.15 19:05
А проблема с "порчей базы" популярна, да? У меня она появилась недавно, после того как переписала с 8.3.4 на 8.3.5 с использованием фоновой передачи данных. Каждые 3 минуты из регистра сведений "сливалась" информация на сервер (порядка 50-100 записей). В этом регистре периодически появлялись строки с ошибкой "Объект не найден", и при очередной попытке записи - закрывалась текущая форма, и выкидывало на рабочий стол. Пересматриваю код, не могу понять к чему придраться. Использую не планы обмена, а web-сервисы.
13. Андрей Лео (Leo_A) 08.04.15 09:35
(12) LaNaite, какого плана информация сливается из РС, данные по заявкам от клиентов? Для какого типа объектов появляется надпись "Объект не найден"?
Просто использование web-сервисов и планов обмена - понятия немного не связанные. Планы обмена предназначены для регистрации изменений, а web-сервисы для миграции данных.
Опять же нужно смотреть код, каким образом ссылки выгружаются из одной базы в другую, тогда возможно станет понятна причина возникновения "Объект не найден".
14. Анаит Бадалян (LaNaite) 09.04.15 12:47
(13) Спасибо за отклик на проблему!
У меня два регистра: "Контакты" и "КонтактыПереданные".

РС "Контакты" не подчинен регистратору, периодичность "в пределах секунды".
Измерения: "Отчет" - ссылка на одноименный документ.
Ресурс: "Результат контакта" - ссылка на перечисление.
"КонтактыПереданные" - дублирует регистр "Контакты".

За 3 минуты в регистре может накопиться порядка 50-70 записей.
Раз в 3 минуты я передаю все записи из регистра "Контакты" на сервер, дублирую их в регистр "КонтактыПереданные" и очищаю первый.
(Все в транзакции).
На веб-сервер передаю записи не по одной, а пакетом (таблицей).

Одновременно могут работать около 100 пользователей.

Для какого типа объекта появляется надпись "Объект не найден" - не могу понять. Если на планшете открыть регистр, то в нем сначала отображаются, например, 3 записи. Если отсортировать по любой колонке, то появятся еще несколько! Поле <Объект не найден 78921789hejkwh879> в ячейках отсутствует. Казалось бы нет битых объектов. Но при попытке открыть запись, появляется ошибка "Объект не найден".

Я склоняюсь к корявому коду в реализации фоновых заданий. Может они в параллели как-то идут и конфликтуют. Буду ковырять пока здесь, т.к. до этого - проблем не было.
15. Андрей Лео (Leo_A) 09.04.15 19:13
(14) LaNaite, всегда рекомендую при явно воспроизводимой ошибке писать в 1С, это поможет и вам избавиться от проблемы и другим в будущем не напороться.
Что касается ошибки, тип определить не сложно, достаточно вызвать ТипЗнч и даже для битой ссылки оно вернет корректный тип, можно начать с этого.
Опять же не совсем понял, Объект не найден появляется на мобильном устройстве или в базе, в которую переносятся данные?
16. Яна Фролова (Яна44) 19.04.15 18:17
Leo_A, расскажите подробней пожалуйста как вы реализовали обмен приложения с центральной базой, если у них различные метаданные. Как вы доработали процедуры выгрузки/загрузки данных с использованием конвертации данных. Очень интересует этот вопрос, так как пишу диплом и передо мной стоит та же проблема обмена.
17. Андрей Лео (Leo_A) 20.04.15 18:59
(16) Яна44,
Если Вы про доработку демо базы от 1С, то выгрузка/загрузка была реализована с использованием механизма конвертации. Правила для обмена пишутся с помощью конфигурации "Конвертация данных", куда выгружаются обе структуры конфигураций. В процедурах загрузки/выгрузки, с использованием типовой обработки встроенной во все типовые конфигурации "УниверсальныйОбменДаннымиXML" выполняется чтение пакета и этой же обработкой выполняется выгрузка в обратную сторону. Сжатое сообщение обмена передаются через пакет XDTO в переменной типа "DataStorge".
Вот и вся концепция.
18. Murad Karimov (k4rimov) 21.04.15 18:13
Интересно.
Вот только момент, что справочник Номенклатура загружается на устройство только в виде Групп.. а дальше, как подобрать конкретный элемент Номенклатуры? Или реализована on-line прогрузка данных по группе?
Для работы в "поле" может быть критично, если данные не доступны offline, касательно торговых агентов, которые могут прийти к клиенту на Торговую точку в "подвал" или еще куда)
А так есть куда расти - мерчендайзинг, предварительный сбор заказов, расширение CRM, майнинг лидов и тп.
Будем последить)
19. Андрей Лео (Leo_A) 23.04.15 09:13
(18) k4rimov,
Не совсем так, группы загружаются только для того, чтобы сохранилась иерархия справочника, все данные и ссылки на номенклатуру хранятся в регистре, т.е. в регистре есть измерение "Родитель"-по нему делается фильтр при переходе между группами и "Номенклатура"-ссылка на номенклатуру без фактического наличия объекта, а наименование, коэффициенты упаковок и прочая нужная информация для отображения и расчетов содержатся в ресурсах регистра. Никаких дополнительных подгрузок данных в поле не осуществляется, максимум загрузка свежих остатков при необходимости.
20. Murad Karimov (k4rimov) 25.04.15 17:36
(19) Leo_A,
и "Номенклатура"-ссылка на номенклатуру без фактического наличия объекта, а наименование, коэффициенты упаковок и прочая нужная информация для отображения и расчетов содержатся в ресурсах регистра

А ну понятно) Фактически, объект это совокупность его реквизитов и код) Вы просто грузите необходимые реквизиты объекта в регистр.
Еще вопрос - т.е. все данные по одной номенклатуре у вас находятся в одном регистре? И единица измерения с коэффициентами и наименованием единицы тоже? Почему отказались от второго регистра, типа ЕдиницыИзмерения со списком всех единиц, и не стали хранить КлючЗаписи регистра ЕдиницИзмерения (описывающий экземпляр единицы изм.) в общем регистре с Номенклатурой?
21. Андрей Лео (Leo_A) 25.04.15 23:09
(20) k4rimov,
Почему отказались от второго регистра, типа ЕдиницыИзмерения со списком всех единиц

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