После выхода версии платформы 8.3.6 у пользователей программы 1С появилась возможность использовать мобильный клиент и мобильное приложение, что значительно расширило функциональное применение программы 1С Предприятие.
Наша задача состояла в разработке решения, с помощью которого на мобильном телефоне можно вносить, просматривать информацию, необходимую для управления бизнесом по оказанию услуг хостинга. То есть пользователь должен иметь возможность работать с одной и той же информацией как с телефона так и с рабочего компьютера в зависимости от возможности и своего физического местоположения.
Задача была реализована на платформе 8.3.13.1644 для ОС Windows и на мобильной платформе 8.3.13.64 для ОС Android. Между десктопной базой данных и мобильным решением был настроен обмен по встроенной в платформу технологии WEB-сервис. Через Apache HTTP Server 2.2 был опубликован мобильный клиент и настроен обмен. Решение реализовано именно через мобильный клиент, так как нам показалось, что создавать полноценное мобильное приложение более проблематично и сложно, чем настроить опубликовать через веб-сервер мобильный клиент. К тому же мобильных приложений нужно разрабатывать минимум два (IOS, Android). А к мобильному клиенту могут подключится с любой ОС, с любого мобильного устройства.
Теперь подробнее как это все создавалось и как это работает.
Создана с нуля конфигурация 1С со свойством конфигурации "Назначение использования": приложение для платформы, приложение для мобильной платформы. В конфигурацию добавлены следующие объекты:
- справочники, документы
- Роль с полными правами на все объекты
- Web-сервис для обмена с мобильным клиентом
- План обмена "Мобильный обмен" для регистрации обменов
- Общая команда "Выполнить синхронизацию" для запуска обмена в мобильном клиенте
Наиболее интересные с точки зрения разработки Web-сервис и команда запускающая синхронизацию. На них остановимся подробнее.
WEB-СЕРВИС
В ветку Конфигурации на вкладке Общие находим Web-сервисы и добавляем новый - WebОбмен с такими параметрами:
- название: WebОбмен
- операции: добавляем данные с типом ValueStorage (http://v8.1c.ru/8.1/data/core)
- URL пространства имен: Data
- пакеты XDTO: http://v8.1c.ru/8.1/data/core
- имя файла публикации: WebОбмен.1cws
В модуль нашего веб-сервиса добавляем две функции:
Функция Синхронизация(Данные)
ОтветКлиенту = ЗарегистрироватьВыгрузку (Данные.Получить () ) ;
Возврат Новый ХранилищеЗначения (ОтветКлиенту, Новый СжатиеДанных (9));
КонецФункции
Функция ЗарегистрироватьВыгрузку (СтрокаСообщения)
ЧтениеХМЛ = Новый ЧтениеXML ;
ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
Отправитель = ЧтениеСообщения.Отправитель;
ПланыОбмена.УдалитьРегистрациюИзменений(Отправитель, Отправитель.НомерПринятого);
Пока ВозможностьЧтенияXML(ЧтениеХМЛ) Цикл
Данные = ПрочитатьXML (чтениеСообщения.ЧтениеXML);
Если НЕ Данные = неопределено Тогда
Данные.ОбменДанными.Отправитель = Отправитель;
Данные.ОбменДанными.Загрузка = Истина;
Данные.Записать ();
КонецЕсли;
КонецЦикла;
ЧтениеСообщения.ЗакончитьЧтение();
ЗаписьХМЛ = Новый ЗаписьXML;
ЗаписьХМЛ.УстановитьСтроку();
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ, Отправитель);
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Отправитель, ЗаписьСообщения.НомерСообщения);
Пока ВыборкаИзменений.Следующий() Цикл
ОбъектОбмена = ВыборкаИзменений.Получить();
ЗаписатьXML (ЗаписьХМЛ, ОбъектОбмена,)
КонецЦикла;
ЗаписьСообщения.ЗакончитьЗапись();
Возврат ЗаписьХМЛ.Закрыть();
КонецФункции
КОМАНДА ВЫПОЛНИТЬ СИНХРОНИЗАЦИЮ
В ветку конфигурации на вкладке Общие находим Общие команды и добавляем команду ВыполнитьСинхронизациюСБД. В модуль команды помещаем следующий код:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Если ВыполнитьСинхронизациюНаСервере() Тогда
Сообщить("Синхронизация прошла успешно!");
Иначе
Сообщить("При синхронизации были ошибки!");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ВыполнитьСинхронизациюНаСервере()
Попытка
ВСОпределение = новый WSОпределения ("http://95.50.114.104:8460/InfoBase/ws/WebОбмен.1cws?wsdl" ); // InfoBase - это имя публикации Через меню Администрирование - Публикация ИБ
ВСервис = ВСОпределение.Сервисы.Получить("Data", "WebОбмен");
ВТочкаВхода = ВСервис.ТочкиПодключения.Получить ("WebОбменSoap");
ВОперация = ВТочкаВхода.Интерфейс.Операции.Получить ("Синхронизация");
Данные = Новый ХранилищеЗначения (ЗарегестрироватьВыгрузку (), новый СжатиеДанных (9) );
ДанныеXDTO = ВСОпределение.ФабрикаXDTO.Создать(ВОперация.Параметры.Получить ("Данные").Тип, Данные);
ВСПрокси = новый WSПрокси (ВСОпределение, "Data", "WebОбмен", "WebОбменSoap");
Ответ = ВСПрокси.Синхронизация (ДанныеXDTO);
ПринятьИзмененияПоПлану (Ответ.Получить ());
Возврат Истина
Исключение
Сообщить (ОписаниеОшибки ());
Возврат Ложь;
КонецПопытки;
КонецФункции
&НаСервере
Процедура ПринятьИзмененияПоПлану (СтрокаСообщения)
ЧтениеХМЛ = Новый ЧтениеXML ;
ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
Пока ВозможностьЧтенияXML (ЧтениеХМЛ) Цикл
Данные = ПрочитатьXML (ЧтениеСообщения.ЧтениеXML);
Если НЕ Данные = неопределено Тогда
Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
Данные.ОбменДанными.Загрузка = Истина;
Данные.Записать ();
КонецЕсли;
КонецЦикла;
ЧтениеСообщения.ЗакончитьЧтение();
КонецПроцедуры
&НаСервере
Функция ЗарегестрироватьВыгрузку ()
ЗаписьХМЛ = новый ЗаписьXML;
ЗаписьХМЛ.УстановитьСтроку();
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
Узел = ПланыОбмена.МобильныйОбмен.НайтиПоКоду("001");
ЗаписьСообщения.НачатьЗапись(ЗаписьХМЛ, Узел);
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(Узел, ЗаписьСообщения.НомерСообщения);
Пока ВыборкаИзменений.Следующий() Цикл
ОбъектОбмена = ВыборкаИзменений.Получить();
ЗаписатьXML (ЗаписьХМЛ, ОбъектОбмена);
КонецЦикла;
ЗаписьСообщения.ЗакончитьЗапись();
Возврат ЗаписьХМЛ.Закрыть();
КонецФункции
В режиме 1С Предприятие создаете узлы Центральной базы и Мобильного клиента. Коды узлов прописываете в коде модуля общей команды.
Чтобы начать обмен с мобильным клиентом нам необходимо:
1. Опубликовать наш WEB-сервис на веб-сервере. Для этого в режиме Конфигуратор заходим в меню Администрирование - Публикация базы на веб-сервере. Если все сделали правильно в окошке публикации будет виден наш web-сервис с названием WebОбмен. Ставите напротив нашего WebОбмен галочку и нажимаете опубликовать. К моменту публикации Apache HTTP Server 2.2 должен быть настроен и находится в рабочем состоянии. Как запустить Apache, если что.
2. Опубликовать мобильный клиент. Для этого в режиме Конфигуратор заходим в меню Конфигурация - Мобильное приложение - Публиковать. Параметры, которые необходимо указать смотрите на скриншоте:
После выполнения подготовки конфигурации к обмену можно приступить к загрузке конфигурации в мобильный клиент и настройке обмена данными. Для этого на мобильном телефоне (планшете) уже должна быть установлена мобильная платформа. При запуске мобильной платформы необходимо добавить информационную базу с помощью кнопки плюс и указать параметры подключения:
- наименование приложения: произвольное название
- адрес обновления: строка состоит из адреса сервера, на котором опубликовано мобильное приложение и из имени мобильного приложения, которое вы указали при публикации мобильного приложения
После успешного подключения к базе данных с мобильного устройства необходимо выполнить синхронизацию для загрузки справочников и документов и для проверки работы обмена в принципе. При успешном результате обмена на устройстве появится соответствующее сообщение. Apache при этом должен быть всегда включен на компьютере, где опубликована база. В нашем случае сервер Apache был развернут на виртуальном сервере, который мы арендовали.
Дальнейшая наша разработка будет направлена на синхронизацию созданой конфигурации с любой другой конфигурацией 1С через обмен данными. Метод обмена и его реализация будут опубликованы на нашем сайте в разделе Программирование.