Как организовать синхронизацию статусов ремонта из 1С 7.7 в облако для информирования клиентов

Программист 1С v7.7 Управленческий учет Сфера услуг, туризм и социальный сектор
← На главную

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

Выбор архитектуры: мессенджеры или веб-сайт

Проанализируем ситуацию: классическая отправка Email часто игнорируется, а SMS-рассылки требуют постоянных затрат на шлюзы. Наиболее удобным и бюджетным вариантом является отправка ссылки или уведомления в мессенджеры (Viber, Telegram). Рассмотрим основные подходы:

  1. Интеграция с мессенджерами через ботов: При приеме устройства в ремонт 1С генерирует уникальную ссылку и отправляет её клиенту в Viber или Telegram. По этой ссылке клиент в любой момент может увидеть статус: «Диагностика», «Ожидание запчастей», «Готов».
  2. Синхронизация с Google Sheets: Использование Google-таблиц в качестве промежуточной базы данных. 1С выгружает реестр заказов в таблицу, а клиент видит информацию через простой веб-интерфейс или Low-code приложение (например, AppSheet).
  3. Микросервис: Создание небольшого сервера на Go или PHP, который обращается к базе 1С и отдает клиенту готовую веб-страницу.

Реализация отправки уведомлений в Viber

Для 1С 7.7 отправка сообщений в Viber реализуется через HTTP-запросы. Разберем по шагам, как это сделать. Вместо использования устаревшей v7plus.dll, которая часто приводит к «падению» системы при работе с XML и HTTP, мы рекомендуем использовать системный объект WinHttp.WinHttpRequest.5.1.

Рассмотрим пример функции для отправки сообщения:


Процедура ОтправитьВViber(Токен, ИД_Пользователя, ТекстСообщения)
    Попытка
        WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
        WinHttp.Open("POST", "https://chatapi.viber.com/pa/send_message", 0);
        WinHttp.SetRequestHeader("X-Viber-Auth-Token", Токен);
        WinHttp.SetRequestHeader("Content-Type", "application/json");
        
        ТелоЗапроса = "{
        |""receiver"":""" + ИД_Пользователя + """,
        |""type"":""text"",
        |""text"":""" + ТекстСообщения + """
        |}";
        
        WinHttp.Send(ТелоЗапроса);
        Если WinHttp.Status <> 200 Тогда
            Сообщить("Ошибка отправки: " + WinHttp.Status + " " + WinHttp.ResponseText);
        КонецЕсли;
    Исключение
        Сообщить("Ошибка соединения с Viber API: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Синхронизация через Google Sheets API

Если вы не хотите создавать полноценный сайт, проанализируем вариант с Google-таблицами. Это надежное «облако», которое доступно 24/7. 1С 7.7 может обновлять строку с конкретным заказом при каждом изменении документа ЗаказНаРемонт.

Использование Google API позволяет не только хранить данные, но и автоматически оповещать клиента. Выясним причину удобства этого метода: клиент получает ссылку на документ, где права доступа настроены таким образом, что он видит только свою информацию (или общую таблицу с фильтрацией по номеру телефона).

Решение проблемы сбоев v7plus.dll и XMLParser

Многие разработчики на «семерке» сталкиваются с тем, что стандартная компонента v7plus.dll вызывает критические ошибки (краши) 1С при выполнении метода Анализатор.СоздатьДокумент(). Рассмотрим более стабильную альтернативу — использование MSXML2.DOMDocument. Этот объект является частью операционной системы и работает значительно быстрее.

Посмотрим на пример безопасной работы с XML:


// Вместо Анализатор = СоздатьОбъект("AddIn.XMLParser");
Попытка
    xmlДок = СоздатьОбъект("MSXML2.DOMDocument");
    xmlДок.async = 0;
    xmlДок.resolveExternals = 0;
    
    // Создание корневого узла
    Root = xmlДок.createElement("RepairData");
    xmlДок.appendChild(Root);
    
    // Добавление информации о заказе
    OrderNode = xmlДок.createElement("Order");
    OrderNode.setAttribute("Number", СокрЛП(НомерДок));
    OrderNode.setAttribute("Status", СокрЛП(Статус));
    Root.appendChild(OrderNode);
    
    xmlДок.save("C:\temp\order_status.xml");
Исключение
    Сообщить("Ошибка при работе с MSXML: " + ОписаниеОшибки());
КонецПопытки;

Повышение удобства: Использование QR-кодов

Чтобы клиент не вводил длинные ссылки вручную, разберем внедрение QR-кодов в печатные формы квитанций. При приеме устройства в ремонт 1С генерирует ссылку вида mysite.ru/check?id=HEX_CODE, где HEX_CODE — зашифрованный или уникальный идентификатор документа. Этот идентификатор печатается в виде QR-кода.

Для генерации QR-кода в 1С 7.7 можно использовать вызов внешних API (например, Google Chart API) для получения картинки:


Функция ПолучитьПутьКQRКоду(ТекстСсылки)
    ПутьФайла = КаталогВременныхФайлов() + "qr.png";
    WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    // Используем публичный сервис для генерации QR
    URL = "https://api.qrserver.com/v1/create-qr-code/?size=150x150&data=" + ТекстСсылки;
    WinHttp.Open("GET", URL, 0);
    WinHttp.Send();
    
    Если WinHttp.Status = 200 Тогда
        // Сохранение бинарного ответа в файл
        // (Требуется использование ADODB.Stream для сохранения картинки в 7.7)
        Stream = СоздатьОбъект("ADODB.Stream");
        Stream.Type = 1; // binary
        Stream.Open();
        Stream.Write(WinHttp.ResponseBody);
        Stream.SaveToFile(ПутьФайла, 2);
        Stream.Close();
        Возврат ПутьФайла;
    КонецЕсли;
    Возврат "";
КонецФункции

Безопасность данных при облачной синхронизации

Важный момент, который стоит обсудить — приватность. Мы настоятельно рекомендуем не использовать порядковые номера документов в ссылках (например, status?id=123). Проанализируем риски: конкуренты могут просто перебирать числа и видеть всю вашу клиентскую базу и объемы ремонтов.

Решение: генерируйте случайный GUID или хэш-код для каждого заказа и храните его в отдельном реквизите документа. Ссылка должна выглядеть как mysite.ru/status?id=a1b2c3d4e5f6. Это гарантирует, что информацию увидит только владелец квитанции.

Практические советы по автоматизации

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

  1. При проведении документа: В модуле формы или документа ЗаказНаРемонт в процедуре ПриЗаписи или ОбработкаПроведения добавьте вызов вашей функции экспорта в облако.
  2. Регламентное задание (обработка ожидания): Если база работает в многопользовательском режиме, можно использовать команду Форма.ОбработкаОжидания("ВыгрузитьСтатусы", 300) в глобальном модуле или отдельной запущенной сессии 1С, которая будет раз в 5 минут проверять измененные документы и обновлять облако.

Таким образом, мы выяснили, что даже на такой почтенной платформе, как 1С 7.7, можно построить современный сервис информирования. Главное — отказаться от нестабильных старых компонент в пользу системных объектов Windows и использовать возможности API современных мессенджеров и облачных сервисов.

← На главную