Modber Сообщество
профессионалов по 1С

1C + офлайн карты на Android



Платформы: 1С:Предприятие 8.3, 1С:Предприятие 8.2
Конфигурации: Другие конфигурации
2013-07-27
2506 
jaffer
1  

Добрый день!

Предлагаем вам продолжить знакомство с фреймворком «FBA Toolkit», а так же рассмотреть очередной пример создания андроид-клиента для 1С. Наше приложение будет называться «Аудит торговой точки». Оно будет прогружать маршрут посещения из 1С и показывать его на карте.

Для создания приложения ваш фреймворк «FBA Toolkit» должен иметь версию 1.03 или выше, а так же обновлена конфигурация 1С.

 

Серверная часть (в базе 1С)

1C + офлайн карты на Android

1. Вам необходимо создать 2 справочника в базе 1С. Они будут нашими источниками данных.

    Реквизиты справочника «Торговые точки»:

·         «Широта» и «Долгота» = число 10.6
·         «Фото» ссылка на справочник «Хранилище дополнительной информации» — ссылка на осн. изображение;
·         прочее


Реквизиты справочника «Хранилище дополнительной информации»:
 

·         «Объект» составного типа в т.ч содержит тип «СправочникСсылка.ТорговаяТочка», определяет объект с доп. информацией.
·         «Хранилище», тип «ХранилищеЗначения», содержит изображение.


2. Отметим, что план обмена под названием «МобильноеПриложениеАудитТочки» теперь добавлен и имеет в себе оба справочника. Авто-регистрация изменений активна.

3. Справочники следует заполнить тестовой информацией.

1C + офлайн карты на Android

Для определенных точек прогружены изображения, код сохранения значений – стандартный для 1С.
 

ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
Хранилище = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));

Путь загружаемого изображения содержится в «ИмяФайла».

4.Теперь следует создать приложение «Аудит торговой точки» и добавить наши справочники.

1C + офлайн карты на Android


Просто ради удобства, имена реквизитов и объектов из латиницы переведены на английский.

1C + офлайн карты на Android

Обмен настроен только на извлечение лишь измененных в 1С объектов:

·  флаг плана обмена установлен
·  Изменяя любую «Торговую точку» в 1С она передастся приложению
·  Справочник с названием «Хранилище дополнительной информации» теперь дополнительно фильтруется, передавая инф. Лишь по торговым точкам.


ВЫБРАТЬ
            ХранилищеДополнительнойИнформацииИзменения.Ссылка КАК Ссылка
ИЗ
            Справочник.ХранилищеДополнительнойИнформации.Изменения КАК ХранилищеДополнительнойИнформацииИзменения
ГДЕ
            ХранилищеДополнительнойИнформацииИзменения.Узел = &УзелОбмена
            И ХранилищеДополнительнойИнформацииИзменения.Ссылка.Объект ССЫЛКА Справочник.ТорговыеТочки

 

«УзелОбмена» — параметр, который будет содержать значение узла для мобильного сотрудника в момент обмена

5. Теперь следует генерировать шаблон приложения Android. Стоимость и порядок приобретения лицензии описаны здесь. Как внести полученные лицензионные данные в 1С написано здесь.

1C + офлайн карты на Android

6. Теперь добавим наше приложение в справочник «Мобильные сотрудники». Обращаем ваше внимание на то, что колонка «Узел обмена» — новый элемент плана обмена.

Обычно каждый сотрудник будет иметь личный узел обмена.

1C + офлайн карты на Android

Данный параметр может быть использован в запросах на выборку данных. Мы рекомендуем создавать отдельный план обмена для каждого приложения.

В 1С мы работа завершена, всю скучную работу на себя берет FBA, а пользователь может концентрироваться на разработке приложения.

 

Мобильное приложение Android

1. На основе сгенерированного шаблона создадим проект, сделать это можно в Eclipse с помощью функции импорт.

2. Приступим к карте. Мы будем использовать BaseRouteMapActivity, который обеспечит отображение точек маршрута и перемещения по ним.

2.1 Создаем свой класс.

Мы отобразим карту Москвы. Ее следует поместить в каталог mnt/sdcard/backup/<имя пакета>. Данный каталог будет создан автоматически при запуске софта. В конце статьи есть указания касательно файла карты и его нахождения.
 

Наша карта будет отцентрирована по координатам при запуске.

Мы можем включить отслеживание координат с помощью requestLocationUpdates(). Настройки частоты обновления координат мы можем задать через getLocationMinDistance() и getLocationMinTime().

В макете activity_route_map.xml размещаем элемент карты:

<org.mapsforge.android.maps.mapview< em=""></org.mapsforge.android.maps.mapview<>

        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

 

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

2.2 Добавить слой с точками маршрута можно при помощи addRouteOverlay. Теперь нам следует подготовить список наших точек.

private void initDummyRoute() throws SQLException {
 
        //DAO для отображения картинки и для записи координат
        mStorageDao = new CatalogAddInfoStorageDao(getConnectionSource());
        mSalesPointDao = new CatalogSalesPointDao(getConnectionSource());
 
        // Выбрать все торговые точки
        CatalogSalesPointDao salePointDao = new CatalogSalesPointDao(getConnectionSource());
        List lst = salePointDao.select();
 
        // Список точек маршрута отображаемый на карте
        routeItems = new ArrayList>();
 
        // Для точек, у которых не установлены координаты
        final double lng = DEFAULT_GEOPOINT_LNG;
        double lat = DEFAULT_GEOPOINT_LAT;
 
        int count = lst.size();
        for (int i = 0; i < count; i++) {
 
                CatalogSalesPoint salesPoint = lst.get(i);
 
                boolean movable = (salesPoint.lat == 0 || salesPoint.lng == 0);
                int resIdDrawable = R.drawable.fba_map_maker_green;
                GeoPoint geoPoint = new GeoPoint(salesPoint.lat, salesPoint.lng);
 
                if (movable) {
                        resIdDrawable = R.drawable.fba_map_marker_red;
                        lat -= 0.003f;
                        geoPoint = new GeoPoint(lat, lng);
                }
 
                //На маркере вывести порядковый  номер
                Drawable marker = MapHelper.makeNumberedMarker(this, resIdDrawable,i + 1);
 
                RouteOverlayItem routePoint = new RouteOverlayItem(
                                geoPoint, marker, salesPoint);
                routePoint.setMovable(movable);
                routePoint.setOrdinal(i + 1);
                routeItems.add(routePoint);
        }
        Drawable defaultMarker = getResources().getDrawable(R.drawable.fba_map_marker_orange);
        addRouteOverlay(mMapView, routeItems, defaultMarker);
}

и добавить вызов метода в init(). 

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

2.3 Добавим реакцию щелчка  по маркеру в обработчик onRouteItemSelect:
 

CatalogSalesPoint salesPoint = (CatalogSalesPoint) item.getData();

inflatePopup(salesPoint);

 

Для отображения всплывающего окна используется макет map_popup.xml:
 

<ru.profi1c.engine.widget.objectview< em=""></ru.profi1c.engine.widget.objectview<>

    android:id="@+id/ovSalesPoint">
        android:id="@+id/ovFotoStorage" >  <textview android:autolink="«phone»" android:id="@+id/tvPhone">

 

На макете отображена информация по одной точке.

Сообщение скрывается при клике на него. При клике на ссылку запустится бразер.
Приложение готово, тестируйте.

 

Где взять карты

Некоторые карты будут размещены на нашем сайте, а так же краткая инструкция по их созданию. Так же вы можете воспользоваться сервисом Google Maps.

В целом мы попытались развеять миф о сложном создании бизнес-приложений.




Бесплатная юридическая
консультация по телефону

8 (499) 350-80-26(Москва)
8 (812) 627-15-62(Спб)

звонок бесплатный

В центре внимания

Комментарии (2)