Как реализовать удаленное согласование скидок в 1С:Розница через мобильное устройство?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Управленческий учет Торговля и дистрибуция
← На главную

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

Архитектура решения: три основных подхода

Для реализации данной задачи в 1С:Розница 2.2 можно выделить три основных пути, каждый из которых имеет свои преимущества и технические нюансы:

  1. Использование Telegram-бота: Самый быстрый и надежный способ. Не требует разработки полноценного мобильного приложения и публикации сложных интерфейсов.
  2. Собственное мобильное приложение на платформе 1С: Позволяет создать брендированный интерфейс и глубоко интегрироваться с бизнес-логикой через HTTP-сервисы.
  3. Система взаимодействия 1С: Нативный механизм платформы, поддерживающий Push-уведомления и интерактивные кнопки.

Рассмотрим подробно каждый из этих вариантов, разберем необходимые настройки и примеры программного кода.

Решение №1: Интеграция с Telegram-ботом

Этот вариант считается оптимальным, так как мессенджер Telegram уже установлен у большинства руководителей. Мы будем использовать Inline-кнопки, которые позволяют отправить ответ в 1С прямо из чата.

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

Шаг 2: Отправка сообщения из РМК.
В модуле формы РМК при нажатии кнопки «Запросить скидку» необходимо создать запись в регистре и отправить HTTP-запрос к Telegram API. Проанализируем пример кода для отправки сообщения:


Процедура ОтправитьЗапросВTelegram(ИдентификаторЗапроса, ТекстСообщения)
    Токен = "ВАШ_ТОКЕН_БОТА";
    ID_Чата = "ID_РУКОВОДИТЕЛЯ";
    
    // Формируем кнопки
    Кнопки = "[{'text': 'Разрешить', 'callback_data': 'allow_" + ИдентификаторЗапроса + "'}, 
               {'text': 'Отказать', 'callback_data': 'deny_" + ИдентификаторЗапроса + "'}]";
    Клавиатура = "{'inline_keyboard': [" + Кнопки + "]}";
    
    ПараметрыЗапроса = "chat_id=" + ID_Чата + "&text=" + ТекстСообщения + "&reply_markup=" + Клавиатура;
    
    Соединение = Новый HTTPСоединение("api.telegram.org", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
    Запрос = Новый HTTPЗапрос("/bot" + Токен + "/sendMessage?" + ПараметрыЗапроса);
    Ответ = Соединение.Получить(Запрос);
КонецПроцедуры

Шаг 3: Обработка ответа через HTTP-сервис.
Для получения ответа от Telegram нужно опубликовать HTTP-сервис в основной базе 1С. Telegram будет присылать Webhook-запрос при нажатии кнопки. В обработчике этого сервиса мы находим запись в ОчередьСогласованияСкидок по Идентификатору и меняем статус.

Решение №2: Мобильное приложение 1С и Push-уведомления

Если шеф настаивает на использовании именно 1С-приложения, нам потребуется реализовать связку: Основная база — HTTP-сервис — Push-сервис — Мобильное приложение.

Важный технический нюанс: Как было отмечено в обсуждении на форуме, само мобильное приложение на Android/iOS не может выступать в роли сервера (принимать входящие HTTP-запросы). Оно должно либо само опрашивать базу (что неэффективно), либо получать Push-уведомления.

Разберем алгоритм настройки Push-уведомлений:

  1. В основной базе при создании запроса на скидку вызывается процедура отправки Push через сервис 1С или Google Firebase (FCM).
  2. Используем метод ДоставитьПушУведомление.
  3. Руководитель получает системное уведомление на смартфоне. При клике на него открывается мобильное приложение.
  4. Мобильное приложение при запуске запрашивает данные из основной базы через HTTP-сервис (используя HTTPСоединение).

Пример отправки уведомления из основной базы:


Процедура ОтправитьPush(ИдентификаторПодписчика, Текст)
    Уведомление = Новый ДоставляемоеУведомление;
    Уведомление.Текст = Текст;
    Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещениеДоставляемогоУведомления.ПоУмолчанию;
    
    // ИдентификаторПодписчика получается при регистрации мобильного приложения в сервисе Push
    ДоставитьПушУведомление(ИдентификаторПодписчика, Уведомление);
КонецПроцедуры

Решение №3: Работа кассира в режиме ожидания

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

Алгоритм действий в РМК:

  1. После нажатия кнопки «Запросить скидку» на форме включается флаг ОжиданиеСогласования = Истина.
  2. Подключается обработчик ожидания: ПодключитьОбработчикОжидания("ПроверитьСтатусСкидки", 5); (проверка каждые 5 секунд).
  3. В процедуре ПроверитьСтатусСкидки выполняется запрос к регистру сведений.
  4. Если статус изменился на «Разрешено», обработчик отключается, скидка применяется к строкам чека, и кассир продолжает работу.

Проанализируем пример кода для проверки статуса:


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

Безопасность и публикация

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

Резюме: Если вам нужно внедрить функционал максимально быстро, используйте Telegram-бота. Это избавит вас от необходимости поддержки мобильных платформ (Android/iOS) и обеспечит мгновенную доставку уведомлений руководителю. Если же требуется интеграция в существующее мобильное приложение компании, используйте Push-уведомления и HTTP-сервисы, не забывая про асинхронную обработку ответов в РМК через обработчики ожидания.

← На главную