Как связать мобильное приложение и 1с

Обновлено: 18.04.2024

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

НА СТОРОНЕ ПЛАТФОРМЫ 1С НА WINDOWS

Создана с нуля конфигурация 1С со свойством конфигурации "Назначение использования": приложение для платформы, приложение для мобильной платформы. В конфигурацию добавлены следующие объекты:

- справочники, документы
- Роль с полными правами на все объекты
- Web-сервис для обмена с мобильным клиентом
- План обмена "Мобильный обмен" для регистрации обменов
- Общая команда "Выполнить синхронизацию" для запуска обмена в мобильном клиенте

Наиболее интересные с точки зрения разработки Web-сервис и команда запускающая синхронизацию. На них остановимся подробнее.

WEB-СЕРВИС



В модуль нашего веб-сервиса добавляем две функции:

Функция Синхронизация(Данные)
ОтветКлиенту = ЗарегистрироватьВыгрузку (Данные.Получить () ) ;
Возврат Новый ХранилищеЗначения (ОтветКлиенту, Новый СжатиеДанных (9));

КОМАНДА ВЫПОЛНИТЬ СИНХРОНИЗАЦИЮ

В ветку конфигурации на вкладке Общие находим Общие команды и добавляем команду ВыполнитьСинхронизациюСБД. В модуль команды помещаем следующий код:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

Если ВыполнитьСинхронизациюНаСервере() Тогда
Сообщить("Синхронизация прошла успешно!");
Иначе
Сообщить("При синхронизации были ошибки!");
КонецЕсли;

КонецПроцедуры

В режиме 1С Предприятие создаете узлы Центральной базы и Мобильного клиента. Коды узлов прописываете в коде модуля общей команды.


Чтобы начать обмен с мобильным клиентом нам необходимо:

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

НА СТОРОНЕ МОБИЛЬНОГО КЛИЕНТА

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

- наименование приложения: произвольное название
- адрес обновления: строка состоит из адреса сервера, на котором опубликовано мобильное приложение и из имени мобильного приложения, которое вы указали при публикации мобильного приложения



Дальнейшая наша разработка будет направлена на синхронизацию созданой конфигурации с любой другой конфигурацией 1С через обмен данными. Метод обмена и его реализация будут опубликованы на нашем сайте в разделе Программирование.

В данной статье речь пойдет о том, как быстро наладить взаимодействие конфигурации УТ 11 из мобильной конфигурацией, написанной на 1С 8.3. В качестве примера мы вместе разработаем отчет «Валовая прибыль по месяцам», который сможем запускать из смартфона или планшета под управлением операционной системы Android 4.2. Взаимодействие между информационной базой и мобильным приложением будет осуществляется с помощью web-сервиса.

Вот уже второй месяц я тружусь над логистическим решением, которое основано на взаимодействии мобильной платформы Android и конфигурации УТ 11. Разработку под Android осуществляет подрядчик, но мне всегда тоже очень хотелось написать приложение для модного «гаджета». К счастью, компания 1С, в стремлении сделать свои продуты более мобильными и облачными, выпустила платформу 8.3, с которой мы и будем играть в «мобильное приложение».

Принцип работы приложения представлен на схеме.

Схема работы приложения

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

РАЗРАБОТКА WEB-СЕРВИСА

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

Создадим XDTO-пакет из наименованием CrossProfit следующей структуры.

Пакет XDTO

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

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

Объект Item содержит информацию о валовой прибыли организации за месяц. Соответственно GUID – это уникальный идентификатор элемента справочника, Period – дата, на которую мы получаем оборот, а Revenue и Cost – значения итогов.

Создадим веб-сервис в конфигурации (под таким же именем, как и пакет XDTO). В нашем сервисе будет всего два

  1. GetOrganizationList – метод, который возвращает список организаций. Тип возвращаемого значения OrganizationList.
  2. GetData – метод возвращает информацию по оборотам организаций. Тип возвращаемого значения Items.

При работе с веб-сервисами не забывайте указывать пространство имен и следите за тем, чтобы оно не изменялось во время разработки.

Ниже приведен код работы сервиса. Комментировать его не стану, поскольку создавался в демонстрационных целях и является тривиальным.

OrganizationList = СоздатьФабрикуXDTOПоИмени ( "OrganizationList" );

Запрос = Новый Запрос ( "ВЫБРАТЬ
| Ссылка КАК Ссылка,
| Наименование КАК Наименование
|ИЗ
| Справочник.Организации
|ГДЕ
| Не ПометкаУдаления" );

Выборка = Запрос . Выполнить (). Выбрать ();

Пока Выборка . Следующий () Цикл
Organization = СоздатьФабрикуXDTOПоИмени ( "Organization" );
Organization . GUID = Строка ( Выборка . Ссылка . УникальныйИдентификатор ());
Organization . Name = Выборка . Наименование ;
OrganizationList . Organization . Добавить ( Organization );
КонецЦикла;

Items = СоздатьФабрикуXDTOПоИмени ( "Items" );

Запрос = Новый Запрос ( "ВЫБРАТЬ
| ВыручкаИСебестоимостьПродажОбороты.Период КАК Период,
| АналитикаУчета.Организация КАК Организация,
| СУММА(ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиОборот) КАК Выручка,
| СУММА(ВыручкаИСебестоимостьПродажОбороты.СебестоимостьОборот) КАК Себестоимость
|ИЗ
| РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(, , Месяц, ) КАК ВыручкаИСебестоимостьПродажОбороты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаУчета
| ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам = АналитикаУчета.КлючАналитики

|СГРУППИРОВАТЬ ПО
| ВыручкаИСебестоимостьПродажОбороты.Период,
| АналитикаУчета.Организация
|
|УПОРЯДОЧИТЬ ПО
| ВыручкаИСебестоимостьПродажОбороты.Период,
| АналитикаУчета.Организация.Наименование" );

Выборка = Запрос . Выполнить (). Выбрать ();

Пока Выборка . Следующий () Цикл
Item = СоздатьФабрикуXDTOПоИмени ( "Item" );
Item . GUID = Строка ( Выборка . Организация . УникальныйИдентификатор ());
Item . Period = Выборка . Период ;
Item . Revenue = Выборка . Выручка ;
Item . Cost = Выборка . Себестоимость ;
Items . Item . Добавить ( Item );
КонецЦикла;


Функция СоздатьФабрикуXDTOПоИмени ( Имя )

ТипФабрики = ФабрикаXDTO . Тип ( "http://www.avtomat.biz/crossprofit" , Имя );
Возврат ФабрикаXDTO . Создать ( ТипФабрики );

В примере с веб-сервисом будет работать пользователь из полными правами, однако целесообразно создать дополнительное право, на использование операций веб сервиса.

Осталось только осталось провести публикацию на веб-сервере. Я использую Apache 2.2.

Публикация веб-сервиса на веб-сервере

WSDL описание веб-сервиса

Все наш веб-сервис готов, переходим к разработки клиентского приложения.

РАЗРАБОТКА КЛИЕНТСКОГО ПРИЛОЖЕНИЯ

Как создавать и собирать приложения для Android с помощью 1С 8.3, я не стану, в интернете есть много статей на эту тему, например вот

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

Модель данных веб-сервиса

Теперь все готово для работы с сервисом. Создадим справочник Организации и регистр, где будем сохранять данные. Ниже приведу код общего модуля, для работы с веб-сервисом.


Процедура ЗагрузитьДанныеВРегистр () Экспорт

СписокОрганизаций = ВебСервис . GetOrganizationList (). ПолучитьСписок ( "Organization" );

Для каждого Организация Из СписокОрганизаций Цикл

ИдентификаторОрганизации = Новый УникальныйИдентификатор ( Организация . GUID );
ОрганизацияСсылка = Справочники . Организации . ПолучитьСсылку ( ИдентификаторОрганизации );

Если ПустаяСтрока ( ОрганизацияСсылка . ВерсияДанных ) Тогда
СоздатьЭлементСправочникаОрганизации ( ОрганизацияСсылка , Организация . Name );
КонецЕсли;

Данные = ВебСервис . GetData (). ПолучитьСписок ( "Item" );
НаборЗаписей = РегистрыСведений . ВаловаяПрибыль . СоздатьНаборЗаписей ();
НаборЗаписей . Записать ();

Для каждого ДанныеЗапись ИЗ Данные Цикл
ИдентификаторОрганизации = Новый УникальныйИдентификатор ( ДанныеЗапись . GUID );
ОрганизацияСсылка = Справочники . Организации . ПолучитьСсылку ( ИдентификаторОрганизации );
Если ПустаяСтрока ( ОрганизацияСсылка . ВерсияДанных ) Тогда
Продолжить;
КонецЕсли;
НаборЗаписей = РегистрыСведений . ВаловаяПрибыль . СоздатьНаборЗаписей ();
НаборЗаписей . Отбор . Период . Установить ( ДанныеЗапись . Period );
НаборЗаписей . Отбор . Организация . Установить ( ОрганизацияСсылка );
Запись = НаборЗаписей . Добавить ();
Запись . Период = ДанныеЗапись . Period ;
Запись . Организация = ОрганизацияСсылка ;
Запись . Выручка = ДанныеЗапись . Revenue ;
Запись . Себестоимость = ДанныеЗапись . Cost ;
НаборЗаписей . Записать ();
КонецЦикла;

// Служебные процедуры и функции

Функция ПодключитьВебСервис ()
Прокси = WSСсылки . CrossProfit . СоздатьWSПрокси ( "http://www.avtomat.biz/crossprofit" , "CrossProfit" , "CrossProfitSoap12" );
Прокси . Пользователь = Константы . Пользователь . Получить ();
Прокси . Пароль = Константы . Пароль . Получить ();
Возврат Прокси ;
КонецФункции

Процедура СоздатьЭлементСправочникаОрганизации ( ОрганизацияСсылка , Наименование )

ЭлементСправочник = Справочники . Организации . СоздатьЭлемент ();
ЭлементСправочник . Наименование = Наименование ;

ЭлементСправочник . УстановитьСсылкуНового ( ОрганизацияСсылка );
ЭлементСправочник . Записать ();

Функцию ПодключитьВебСервис используем для создания объекта WSПрокси, заполняются данные для регистрации из соответствующих констант. Процедура ЗагрузитьДанныеВРегистр анализирует полученные данные и записывает их в нужные справочники и регистры.

В конфигурации есть еще три общих формы.

Форма меню, она размещается в рабочей области начальной страницы.

Форма меню программы

Форма настройки, используется для сохранения настроек пользователя.

Форма настроек авторизации

Ну и сама форма отчета.

Форма отчета мобильного приложения

Приведу пример кода, который строит отчет в мобильном приложении.

&НаСервере
Процедура СформироватьОтчетНаСервере ()

Макет = ПолучитьОбщийМакет ( "МакетОтчета" );
ОбластьЗаголовок = Макет . ПолучитьОбласть ( "Заголовок" );
ОбластьСтроки = Макет . ПолучитьОбласть ( "Строки" );

Период = Дата ( Формат ( Год , "ЧГ=0" ) + ПолучитьНомерМесяца () + "01000000" );

НаборЗаписей = РегистрыСведений . ВаловаяПрибыль . СоздатьНаборЗаписей ();
НаборЗаписей . Отбор . Период . Установить ( Период );

Результат . Вывести ( ОбластьЗаголовок );

Для каждого Запись ИЗ НаборЗаписей Цикл
ОбластьСтроки . Параметры . Заполнить ( Запись );
ОбластьСтроки . Параметры . Прибыль = Запись . Выручка - Запись . Себестоимость ;
Результат . Вывести ( ОбластьСтроки );
КонецЦикла;

&НаСервере
Функция ПолучитьНомерМесяца ()

Если Месяц = "Январь" Тогда
Возврат "01" ;
КонецЕсли;

Если Месяц = "Февраль" Тогда
Возврат "02" ;
КонецЕсли;

Если Месяц = "Март" Тогда
Возврат "03" ;
КонецЕсли;

Если Месяц = "Апрель" Тогда
Возврат "04" ;
КонецЕсли;

Если Месяц = "Май" Тогда
Возврат "05" ;
КонецЕсли;

Если Месяц = "Июнь" Тогда
Возврат "06" ;
КонецЕсли;

Если Месяц = "Июль" Тогда
Возврат "07" ;
КонецЕсли;

Если Месяц = "Август" Тогда
Возврат "08" ;
КонецЕсли;

Если Месяц = "Сентябрь" Тогда
Возврат "09" ;
КонецЕсли;

Если Месяц = "Октябрь" Тогда
Возврат "10" ;
КонецЕсли;

Если Месяц = "Ноябрь" Тогда
Возврат "11" ;
КонецЕсли;

Если Месяц = "Декабрь" Тогда
Возврат "12" ;
КонецЕсли;

Как видите, основным неудобством мобильной платформы является отсутствие запросов и СКД, с которыми так удобно работать. Скомпилируем базу и посмотрим что у нас получилось.

Мобильное приложение 1С:Управление нашей фирмой для мобильной работы может использоваться совместно с настольной (ПРОФ или Базовой) или облачной версией приложения 1С:Управление нашей фирмой 8.

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

Ниже показаны эти действия. Их нужно выполнить на локальном компьютере. В примере рассматривается компьютер, работающий под управлением операционной системы Windows:

    Необходимо убедиться, что на компьютере установлен и работает веб-сервер Apache или IIS, а Firewall не блокирует входящие подключения на используемый веб-сервером порт (обычно это 80 или 8080). Подробнее о настройке веб-серверов можно ознакомиться в поставляемой к ним документации.

Необходимо развернуть настольное приложение 1С:Управление нашей фирмой 8 на вашем компьютере. Рекомендуется использовать последнюю версию настольного приложения. Подойдет Базовая или ПРОФ версия.

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

По умолчанию в настольном приложении уже присутствует пользователь Администратор, можно использовать его или завести нового (раздел Администрирование – Настройки пользователей и прав – Пользователи), установив минимально необходимые для синхронизации права – Продажи, Закупки и Деньги.

Snap84_.jpg

  • Необходимо опубликовать веб-сервис MobileService для обмена данными с мобильным приложением. Эта операция выполняется в конфигураторе настольного приложения 1С:Управление нашей фирмой 8. Для этого необходимо воспользоваться пунктом Публикация на веб-сервере… из меню Администрирование.

Snap85_.jpg

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

Snap86_.jpg

После этого необходимо нажать кнопку Опубликовать и согласиться с перезапуском веб-сервера.

После ввода имени пользователя и пароля в браузере должна появиться ссылка на WSDL схему.

Snap87_.jpg

Если мобильное устройство подключается к центральной информационной базе из другой сети через интернет, то необходимо использовать внешний статический IP адрес компьютера. Данную услугу может предоставить интернет-провайдер. Если по каким-то причинам внешний статический IP адрес использовать нельзя, то можно воспользоваться сервисом 1С:Линк (за исключением пользователей базовых версий, для которых сервис не доступен).

После выполнения вышеприведенных действий настройка синхронизации мобильного приложения с настольной версией приложения 1С:Управление нашей фирмой 8 будет завершена.

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

ВСЕ ДЕЛО В АДАПТИВНОСТИ

Веб-клиент 1С

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

Мобильное приложение 1С

Принципиальное отличие мобильного приложения 1С от веб-клиента в адаптивном интерфейсе. Собственно, как и все мобильные приложения, мобильная версия 1С предназначена для переноса функций пользования программным продуктом со стационарного ПК на мобильный телефон. При этом мобильное приложение выполняет главную задачу - адаптивность под мобильное устройство. Все кнопки и меню доступны на экране без прокручивания вверх/вниз, без уменьшения экрана и т.д. При этом мобильная версия 1С является отдельным самостоятельным приложением, которое может работать как самостоятельно (без синхронизации с основной 1С), так и иметь связь посредством обмена данными. По умолчанию мобильную версию 1С можно использовать как отдельный софт для выполнения определенных задач компании. Еще раз подчеркиваем, что мобильное приложение 1С предназначено для удобного выполнения рабочих функций пользователя через телефон, чего не позволяет делать веб-клиент из-за отсутствия адаптивности к размерам экрана устройства.
Не смотря на то, что и та и другая версия 1С предназначены для работы вне офиса, устройства, с которых можно работать разные.

РАЗРАБОТКА

Принципиальное отличие двух приложений в том, что для веб-клиента нет необходимости разработки, а для мобильного приложения нужно разрабатывать интерфейс и план обмена данными. Исключением на данный момент является конфигурация 1С УНФ в поставку которой уже включена возможность использовать параллельно десктопную версию и мобильный клиент. Для синхронизации версий нужно лишь выполнить настройку публикации базы данных.
Таким образом, если у вас есть реальная задача, связанная с необходимостью просто и удобно выполнять на телефоне или планшете рабочие задачи, то вам необходима разработка мобильного приложения 1С.

Наиболее частые функции выполняемые через мобильное приложение 1С

На данный момент есть несколько готовых решений на базе мобильной платформы 1С. Есть бесплатные решения на базе конфигурации УНФ и платные, выпускаемые "Моби-С". Решения "Моби-С" в основном заточены под мобильную торговлю и контроль работы торговых представителей.
Лицензия на одно мобильное рабочее место стоит примерно 115 у.е.
Если у вас возникли вопросы или задачи в области внедрения или разработки мобильного приложения, обращайтесь к нам за консультацией, по контактам, указанным на сайте.

Довелось как-то поучаствовать в одном проекте. Суть участия была настройка синхронизации между мобильным устройством на Android и основной базой. Одним из главных условий было динамическое количество устройств, поэтому планы обмена не подходили. Решено было использовать веб-сервисы.

За время выполнения работы многое было переосмыслено и сейчас понимаю, что некоторые моменты надо было сделать немного иначе, но в целом задача была выполнена и в большинстве своем успешно. Я не буду привязываться к той задаче, поэтому сделаем все на абсолютно чистых базах и конфигурациях. Разберем в качестве примера синхронизацию справочников, как основной вид хранения информации.

Итак, создадим в чистой конфигурации справочники Номенклатура и, например, Категории. В номенклатуру добавим реквизит Категория с типом СправочникСсылка.Категории.

screen1

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

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

Итак, наша задача передать данные обоих справочников на мобильное устройство с учетом того, что реквизит справочника является ссылкой на элемент другого справочника. Введем немножко сокращений: мобильное приложение - МП, главная база - ЦБ(центральная база).

В ЦБ создаем объект конфигурации XDTO-пакет следующего вида

screen2

В данном пакете мы описываем структуру передаваемых нами данных. Свойства типов Code и Name у нас имеют тип string и означают Код и Наименование соответственно. Сами типы CategoryString и ProducString соответствуют строке элемента справочника. Типы ProductTable и CategoryTable представляют из себя массивы строк соответствующих справочников. Для того, чтобы тип стал массивом, в свойствах его свойства(ProductStr например) необходимо максимальное значение указать как "-1". Свойства CategoryStr и ProductStr имеют тип CategoryString и ProducString соответственно. И последнее оставшееся свойство это Category, которое имеет тип CategoryStr. Далее нам необходимо создать веб-сервис и операцию с типом возвращаемого объекта ProductTable. почему именно с этим типом, потому что он содержит необходимые нам категории.

screen3

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

Теперь наш веб-сервис готов к публикации и после этого, можно приступать к настройке МП. Напомню, там мы на данный момент имеем только два справочника аналогичных ЦБ. Для простоты, в МП создадим объект обработка из которой и будем вызывать нашу синхронизацию. Добавим на форме обработки всего одну кнопку, которая и будет вызывать процедуру синхронизации, на это подробно останавливаться не буду. Код процедуры ниже:

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

Читайте также: