Платформа "1С:Предприятие" традиционно ассоциируется с использованием «толстого» клиента: ПК, подключенного к локальной сети. Однако для создания современных распределенных вычислительных систем такого архитектурного решения явно недостаточно. Серьезный шаг к преодолению этого ограничения фирма "1С" (http://www.1c.ru) сделала еще несколько лет назад, выпустив продукт "1С:Web-расширение", который позволяет создавать удаленные рабочие места с доступом через Интернет. Но и технология Web-клиента уже далеко не полностью удовлетворяет потребности заказчиков. Дело в том, что она подразумевает удаленный доступ к централизованным вычислительным ресурсам в режиме постоянного соединения. А сегодня желательно иметь автономные решения, с которыми мобильные сотрудники компаний могли бы работать на различных малогабаритных устройствах, обмениваясь данными с главной системой лишь по мере необходимости.

Именно такой режим работы обеспечивает выпущенный в мае прошлого года новый программный продукт "1С:Предприятие 8.0. Расширение для карманных компьютеров" (1С:РКК), который создан фирмой "1С" совместно с компанией "ДИСКо" (http://www.disco.ru), специализирующейся на разработке Интернет-приложений и решений для PDA-устройств.

Новый пакет позволяет создавать автономные мобильные приложения, работающие с данными информационных баз "1С:Предприятие 8.0" на карманных компьютерах и коммуникаторах под управлением Windows Mobile 2003 или Windows Mobile 5.0 (на базе процессоров Intel ARM), а также на ноутбуках и ПК с ОС Windows 2000 и выше. Ведь для выполнения многих частных задач конкретному пользователю совсем не нужна вся функциональность "1С:Предприятие" и все данные, хранимые в информационной системе. Создаваемые мобильные приложения позволяют ему работать в любом месте, причем через интерфейс, похожий на интерфейс "1С:Предприятие". Например, торговый агент может теперь, находясь у клиента, сформировать заказ с помощью карманного устройства и после этого провести обмен данными с сервером, расположенным в офисе, посредством GPRS или другого способа связи. В результате заказ попадает в информационную базу «1С:Предприятие 8.0», и сотрудники офиса могут сразу же приступать к его обработке. Есть и другой вариант: сотрудник в течение дня объедет группу клиентов, а вечером, вернувшись в офис, перепишет собранные сведения в центральный компьютер, используя связь через ИК-порт или BlueTooth.

Что входит в продукт

В комплект поставки 1С:РКК входят следующие программные компоненты.

Редактор мобильных приложений (РМП). Фактически это среда разработки, функционирующая на ПК и включающая средства визуального проектирования форм приложения и встроенный язык, сходный с языком «1С:Предприятие 8.0», для описания бизнес-логики программы.

Платформа исполнения мобильных приложений, реализованная в двух вариантах — для Windows Mobile и обычной настольной Windows. Во втором случае поддерживается работа с клавиатурой и мышью. С точки зрения интерфейсных решений возможны разные варианты стратегии разработки: создание приложений только для КПК, только для ПК либо для обоих типов устройств.

Сервер мобильных приложений (СМП) обеспечивает связь платформы исполнения мобильных приложений (клиентское устройство) с информационными базами «1С:Предприятие 8.0» (главный компьютер). При этом используются разные способы связи: с помощью стандартного средства ActiveSync, по протоколу TCP/IP (Wi-Fi, GPRS, BlueTooth), через последовательный или ИК-порты. С одной информационной базой «1С:Предприятие 8.0» может работать несколько СМП одновременно.

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

Все программные компоненты, входящие в состав продукта, имеют как русский, так и англоязычный интерфейсы.

Как все это работает

Говоря о логике применения 1С:РКК, нужно напомнить, что вся платформа "1С:Предприятие" в целом реализует БД-ориентированную модель создания ПО. Если прикладная программа в обычном понимании — это "приложение" к ОС, способное работать с разными БД (например, Word может работать с разными документами и не связан жестко с каким-то одним из них), то в рамках архитектуры "1С" прикладная программа — это компонент информационной базы, что-то вроде большой хранимой процедуры для обработки БД.

В качестве ядра прикладного решения на базе "1С:Предприятие" выступает комплекс метаданных (описание используемых объектов и взаимосвязей между ними), вокруг которого формируется, с одной стороны, программный код, а с другой — собственно база данных конкретного заказчика. А все это вместе (метаданные, программы и данные) составляют, в терминологии "1С", информационную базу (ИБ), которая функционирует в среде "1С:Предприятие".

Та же модель используется при создании и применении мобильных приложений с помощью 1С:РКК. Мобильные приложения представляют собой опять-таки программные компоненты ИБ, логически привязанные к ее метаданным и программному коду. Соответственно, несколько упрощенно можно сказать, что мобильные приложения записываются на КПК только на время их применения, т. е. это продукт "разового использования". Точнее, мобильные приложения могут и долго храниться на КПК, но это скорее режим кэширования, который в общем случае требует регулярной синхронизации кода и данных с центральной ИБ. Пожалуй, правильнее было бы говорить даже не о "мобильных приложениях", а о "мобильных расширениях" прикладного решения.

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

Разработка мобильных приложений — выполняется на ПК с помощью РМП, при этом каждое приложение формируется на основе метаданных ИБ "1С:Предприятие", в частности, в нем используются только уже существующие в ИБ объекты. Созданные мобильные приложения записываются в ту же ИБ, которая выступает и как хранилище мобильных приложений.

Формирование программного интерфейса (в виде модуля "Менеджер мобильных приложений»), реализующего логику взаимодействия ИБ "1С:Предприятие" с СМП и через него — с клиентскими устройствами и мобильными приложениями.

Инициализация клиентских устройств — установка на КПК среды исполнения мобильных приложений и активация клиентских лицензий через Web-сайт "1С".

Администрирование СМП — ведение списка ИБ "1С:Предприятие", с которыми возможен обмен, настройка связи с клиентскими устройствами.

Рис. 1. Логика мобильной работы с использованием системы 1С:РКК.

Далее с мобильными приложениями работает пользователь. И тут также нужно выделить два последовательных этапа. Сначала нужно сформировать мобильную информационную базу (МИБ) на клиентском устройстве. Это делается в момент запуска на КПК среды исполнения: устанавливается связь с СМП и после авторизации пользователя на КПК переписывается доступное ему мобильное приложение (если оно не было получено ранее) и нужные данных из ИБ "1С:Предприятие», в результате чего создается экземпляр МИБ. А уже потом пользователь работает в соответствии с логикой мобильного приложения: обменивается данными с центральной ИБ, вводит нужную информацию и т. д.

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

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

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

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

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

Все же не будем забывать — это версия 1.0. И ее можно применять в реальных условиях у конкретных заказчиков.

Пример мобильного приложения

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

Этап 1. Разработка клиентского мобильного приложения

Запускаем редактор мобильных приложений. Добавляем в список приложений новый проект и указываем ИБ "1С:Предприятие", для которой он создается. Для формирования заказов агенту нужен каталог товаров и список клиентов. Поэтому мы откроем справочник "Номенклатура"и создадим для него форму, при помощи которой пользователь будет подбирать нужный товар в заказ. Обратите внимание, что мы размещаем на форме только те данные справочника, которые нужны для решения этой конкретной задачи (рис. 2). Аналогичным образом построим формы для справочников «Контрагенты».

Рис. 2. Создание формы "Номенклатура" в среде редактора мобильных приложений.

Далее нужно создать форму собственно документа «Заказ покупателя». Добавим в нее возможность автоматического расчета суммы, исходя из указанной пользователем цены товара и количества. Для этого назначим колонкам «Количество» и «Цена» обработчики соответствующих событий, вызываемых при изменении значений в этих колонках, и напишем в модуле формы документа код для подсчета суммы:

Процедура ПодсчетСуммы ()
    СтрокаЗаказа = 
	ЭлементыФормы.Товары.ТекущиеДанные;
    СтрокаЗаказа.Сумма = 
	СтрокаЗаказа.Количество*СтрокаЗаказа.Цена;
КонецПроцедуры

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

Этап 2. Формирование интерфейса сервер мобильных приложений — информационная база

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

Взаимодействие редактора и сервера мобильных приложений (СМП) с ИБ "1С:Предприятие" выполняется через фиксированный программный интерфейс (назовем его "Менеджер мобильных приложений", ММП), реализованный со стороны ИБ и состоящий из семи предопределенных методов (рис. 3).

Рис. 3. Схема взаимодействия компонентов 1С:РКК с ИБ "1С:Предприятие".

Физически ММП реализуется в виде обработки (внутреннего программного объекта прикладного решения), доступ к которой со стороны внешних приложений (редактора и СМП) выполняется через фиксированный метод ПолучитьМенеджерМобильныхПриложений. Этот метод должен быть описан в общем модуле, доступном для внешнего соединения с ключевым словом Экспорт.

// Данная функция должна находиться 
// в общем модуле прикладного решения
// Она возвращает обработку 
// "МенеджерУправленияМобильнымиПриложениями"
//
Функция ПолучитьМенеджерМобильныхПриложений() 
	Экспорт 
  МенеджерМобильныхПриложений = 
	Обработки.МенеджерМобильныхПриложений.Создать();	
  Возврат МенеджерМобильныхПриложений;
КонецФункции

Суть же данного этапа заключается в написании программного кода ММП. Для этого есть разные возможности, но мы сейчас просто воспользуемся готовой подсистемой, которая включена в состав демонстрационного примера. Скопируем из него вот такой программный код:

// Передача мобильного приложения из 
// хранилища ИБ на клиентское устройство
Функция ПолучитьМобильноеПриложение
	(ИмяПользователя, 
	КодМобильногоКомпьютера)
// Выполняет запись мобильного приложения 
// в хранилище в виде кодированной строки
Функция ЗаписатьМобильноеПриложение
	(ИмяМобильногоПриложения, 
	ВерсияМобильногоПриложения, 
	МобильноеПриложениеСтрокой,
	ИспользуемыеМетаданные)
// Возвращает данные, выбранные из ИБ 
// в соответствии с заданной для 
// пользователя схемой выборки
Функция ПолучитьДанные
	(ИмяПользователя, 
	КодМобильногоКомпьютера, 
	Знач ПервичнаяИнициализацияИБНаКПК = Ложь)
// Выполняет запись данных, 
// полученных от мобильного приложения, 
// в текущую ИБ
Процедура ЗаписатьДанные 
	(ИмяПользователя, 
	КодМобильногоКомпьютера,
	ДанныеМобильногоПриложения)
// Выполняет проверку, существует ли 
// указанная версия мобильного приложения
Функция ВерсияМобильногоПриложенияСуществует 
	(ИмяМобильногоПриложения, 
	ВерсияМобильногоПриложения)
// Отражает в БД факт получения 
// данных мобильным клиентом
Процедура ЗарегистрироватьПолучениеДанных 
	(ИмяПользователя, 
	КодМобильногоКомпьютера)
// Выполняет аутентификацию 
// мобильного пользователя
Функция ВыполнитьАутентификацию 
	(ИмяПользователя, 
	КодМобильногоКомпьютера, 
	ПарольПользователя)

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

Редактор мобильных приложений (МП) использует только один метод ММП — ЗаписатьМобильноеПриложение, который вызывается при нажатии кнопки "Записать МП" в среде РМП. Внутренний код, реализующий эту операцию, выглядит примерно так:

Внутренний код, реализующий эту операцию, выглядит примерно так:
// Получить экземпляр объекта ММП
ММП = ПолучитьМенеджерМобильныхПриложений;
// Формирование данных о МП
…
// Записать МП
ММП.ЗаписатьМобильноеПриложение
	(ИмяМобильногоПриложения,
	ВерсияМобильногоПриложения, 
	МобильноеПриложениеСтрокой,
	ИспользуемыеМетаданные)

На этот момент следует обратить внимание: прежде чем сохранить мобильное приложение в ИБ, нужно написать программный код этого метода (что само по себе довольно странно). Куда же записывается созданное приложение? Тут могут быть разные варианты, выбор которых отдан на усмотрение разработчика — как он реализует метод ЗаписатьМобильноеПриложение. В нашем случае (мы используем ММП из демонстрационного примера в составе продукта) мобильное приложение будет записываться в специально созданный раздел ИБ под названием "Хранилище МП".

СМП работает с остальными методами, ключевых среди которых три. Посмотрим на них, чтобы понять логику работы всей системы (СМП взаимодействует с ИБ не сам по себе, а передавая соответствующие запросы с КПК).

Работа начинается с аутентификации пользователя:

ВыполнитьАутентификацию
	(ИмяПользователя,
	КодМобильногоКомпьютера, 
	ПарольПользователя) 

Далее следует получение мобильного приложения:

МП = ПолучитьМобильноеПриложение
	(ИмяПользователя, 
	КодМобильногоКомпьютера)

При запуске мобильного приложения на выполнение (или перед запуском) оно должно получить необходимые данные:

ДанныеМП = ПолучитьДанные(ИмяПользователя, 
	КодМобильногоКомпьютера, 
	Знач ПервичнаяИнициализацияИБНаКПК = Ложь)

Отсюда видна любопытная вещь: получается, что данные получает не приложение, а пользователь! Из этого можно сделать вывод: конкретный пользователь на конкретном КПК может работать только с одним мобильным приложением. Понятно, что ММП по полученным параметрам сможет определить, о каком приложении идет речь. Но откуда он узнает, какие данные нужно передавать на мобильный клиент? Это опять же программируется в самом методе ПолучитьДанные. Поскольку мы используем готовую программную конструкцию, которая для определения нужных данных использует механизм ПланыОбмена, нам нужно сделать описание "Плана обмена" для нашего мобильного приложения (рис. 4).

Рис. 4. Описание плана обмена между мобильным приложением и ИБ.

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

ЗаписатьДанные(ИмяПользователя, 
	КодМобильногоКомпьютера, 
	ДанныеМобильногоПриложения)

Теперь подведем итоги: что же конкретно мы должны сделать на этапе 2 для создания программного интерфейса ММП? Нужно:

  • скопировать программный код из демопримера в нашу ИБ;
  • описать «План обмена» для нашего мобильного приложения;
  • сформировать в ИБ специальный список (регистр сведений), в котором мы определим взаимосвязь пользователь — КПК — мобильное приложение — схема обмена данными (рис. 5).

Рис. 5. Описание взаимосвязи пользователь — КПК — мобильное приложение — схема обмена данными.

Правда, не очень понятно, зачем в ММП кодировать на программном уровне схему обмена данными. Тут заметно дублирование выполняемых операций: ведь при описании «Плана обмена» (рис. 4) мы фактически повторили то же самое, что уже проделывали при создании самого приложения (рис. 2). Не говоря уже о том, что при записи приложения в ИБ методом ЗаписатьМобильноеПриложение мы передали четвертый параметр — ИспользуемыеМетаданные, которые содержит XML-файл с перечнем метаданных, используемых приложением.

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

Мы сейчас использовали некий универсальный механизм, который, вполне вероятно, будет неоптимальным для конкретного решения. Чтобы повысить эффективность нашего мобильного клиента, придется разобраться в ММП более серьезно и потратить больше времени на программирование руками.

Этап 3. Инициализация КПК

Данный этап мы не будем обсуждать — это простая операция, хорошо описанная в документации.

Этап 4. Администрирование сервера мобильных приложений

Чтобы мобильный пользователь мог обмениваться данными с ИБ "1С:Предприятие", нам потребуется настроить сервер мобильных приложений. Для этого нужно запустить сервер и в список доступных ИБ добавить информацию о новой базе — каталог базы, способ доступа и ряд других настроек (рис. 6). Способ доступа укажем с использованием протокола TCP/IP — это позволит связываться с сервером посредством Wi-Fi, BlueTooth, GPRS (конечно, при условии, что используемые мобильные устройства поддерживают эти технологии).

Рис. 6. Администрирование сервера мобильных приложений.

Этап 5. Работа пользователя

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

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

Для связи с сервером необходимо указать тип связи и адрес сервера. Мы планируем связь посредством GPRS, используя протокол TCP/IP. Указываем соответствующие настройки — тип связи и IP-адрес компьютера, на котором запущен СМП. Далее нажимаем в диалоге связи кнопку «Старт» и следим за обменом с сервером: мы получаем оттуда нужное текущему пользователю приложение и необходимые данные. По окончании обмена выполняется запуск полученного приложения и отображается стартовая форма (рис. 7). После этого пользователь работает с приложением. Тем, кто имеет опыт работы с "1С:Предприятие", все достаточно привычно (рис. 8).

Рис. 7. Стартовая форма мобильного приложения.

Рис. 8. Интерфейс мобильных приложений по стилю схож с интерфейсом "1С:Предприятие 8.0".

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

В последний час: обновление 1С:PKK

Осенью 2006 г. фирма "1С" выпустила несколько обновленных релизов первой версии продукта "1С:Предприятие 8.0. Расширение для карманных компьютеров", где в основном исправлялись обнаруженные ошибки. А в феврале нынешнего года вышел следующий вариант продукта — 8.1.1, в котором уже реализован ряд функциональных и технологических новшеств. Коротко перечислим, что нового появилось в этой версии.

  • Реализована поддержка работы с ИБ "1С:Предприятие 8.1". При работе с редактором и сервером мобильных приложений пользователь может интерактивно указать, с какой версией системы будет происходить обмен данными — 8.0 или 8.1.
  • Поддерживается работа с ОС Windows CE — в комплект поставки включена отдельная программа установки для этой ОС.
  • Реализована работа с табличным документом, его формирование на основе макетов, созданных средствами «1С:Предприятие» 8-й версии. Сформированный табличный документ можно вывести для просмотра на экран или распечатать.
  • Реализована поддержка внешних компонентов для 1С:РКК. В комплект поставки текущей версии включено описание технологии создания и использования внешних компонентов, а также пример реализации компонента, обеспечивающего работу со встроенным сканером штрихкодов для мобильных устройств Symbol. Во встроенном языке есть возможность обработки внешних событий, вызываемых внешними компонентами.
  • Добавлена возможность обращения средствами встроенного языка к параметрам сеанса обмена данными, обеспечивающая установку параметров связи и установку значений параметров, доступных при обмене данными в конфигурации "1С:Предприятие" 8.х. Реализована также возможность программного запуска процесса обмена данными.
  • Реализовано сжатие пакетов обмена, что сокращает объем данных, передаваемых между сервером и платформой исполнения мобильных приложений.
  • Для справочников, документов и регистров сведений обеспечивается работа с выборками данных объектов из ИБ.
  • Введен прикладной объект РегистрСведенийНаборЗаписей, позволяющий манипулировать наборами записей регистров сведений.
  • Расширен состав встроенных функций языка для работы со значениями типа Строка, Дата, Число.
  • Для строк табличного поля можно задавать оформление строки при ее выводе.
  • При формировании пакета обмена добавлена возможность выполнять очистку таблиц мобильной ИБ по заданному условию путем расширенной настройки секции ClearData пакета обмена.
  • Добавлена возможность индексирования таблиц ИБ по отдельным полям, определяемым прикладным разработчиком.
  • Появилась возможность выгрузки/загрузки текстов программных модулей в редакторе мобильных приложений.