Автоматизация работы торговых представителей часто сталкивается с проблемой ограниченности коробочных решений. Типовые мобильные приложения сторонних разработчиков либо требуют дорогостоящих промежуточных серверов, либо не поддерживают весь спектр маркетинговых акций (подарки, кратные объемы, сегментные условия, динамические скидки), настроенных в учетной системе. Разберем практические архитектурные варианты создания и расширения мобильной торговли на базе экосистемы 1С.
Главная сложность реализации промо-акций на мобильном устройстве — необходимость дублирования тяжелой логики автоматических скидок. В типовых конфигурациях (1С:Управление торговлей 11, 1С:Комплексная автоматизация, 1С:ERP) подсистема скидок и наценок использует сложные пакетные запросы с временными таблицами, проверку сегментов партнеров и номенклатуры, вытеснение и совместное действие условий.
Переносить данный алгоритм «как есть» в локальную базу мобильного приложения нерационально по двум причинам:
Оптимальным решением является онлайн-расчет корзины на стороне сервера через HTTP-сервисы. Проанализируем, как строится этот процесс:
HTTPСоединение на опубликованный HTTP-сервис центральной базы 1С.ЗаказКлиента).Посмотрим на пример структуры серверного обработчика HTTP-сервиса, выполняющего расчет переданной корзины:
Функция РассчитатьКорзину(ЗапросHTTP)
СтрокаJSON = ЗапросHTTP.ПолучитьТелоКакСтроку("UTF-8");
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ДанныеКорзины = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Создаем временный документ в памяти для применения типового расчета
ДокументОбъект = Документы.ЗаказКлиента.СоздатьДокумент();
ДокументОбъект.Партнер = ДанныеКорзины.Партнер;
ДокументОбъект.Соглашение = ДанныеКорзины.Соглашение;
ДокументОбъект.Дата = ТекущаяДатаСеанса();
Для Каждого СтрТовар Из ДанныеКорзины.Товары Цикл
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрТовар.Номенклатура;
НоваяСтрока.Количество = СтрТовар.Количество;
КонецЦикла;
// Вызов типового расчета автоматических скидок
// (наименование процедур зависит от редакции конфигурации)
СкидкиНаценкиСервер.РассчитатьСкидкиНаценки(ДокументОбъект);
// Формируем результат для возврата в мобильное приложение
Результат = Новый Структура("Товары, СуммаДокумента", Новый Массив, ДокументОбъект.СуммаДокумента);
Для Каждого Стр Из ДокументОбъект.Товары Цикл
Результат.Товары.Добавить(Новый Структура(
"Номенклатура, Количество, Цена, ПроцентАвтоматическойСкидки, Сумма",
Стр.Номенклатура, Стр.Количество, Стр.Цена, Стр.ПроцентАвтоматическойСкидки, Стр.Сумма
));
КонецЦикла;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Результат);
ОтветHTTP = Новый HTTPСервисОтвет(200);
ОтветHTTP.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), "UTF-8");
Возврат ОтветHTTP;
КонецФункции
Для разработки собственного мобильного решения с нуля требуются значительные трудозатраты. В качестве открытой основы можно использовать типовую мобильную конфигурацию 1С:Заказы от фирмы «1С».
Выясним преимущества такого подхода:
1С:Управление торговлей.Если торговые представители работают в точках с нестабильным доступом к сети интернет, прямое обращение к HTTP-сервису в момент редактирования строки может быть недоступно. В этом случае применяют комбинированный сценарий:
Помимо разработки автономного мобильного приложения на мобильной платформе 1С, рассмотрим другие варианты реализации мобильной торговли: