Можно ли опубликовать базу 1С на обычных формах для интеграции с Telegram?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Подход 1: Публикация 1С на веб-сервере для приема внешних запросов

Этот сценарий предполагает, что внешняя система (в нашем случае, серверная часть Telegram-бота) будет инициатором обмена — она будет отправлять запросы в 1С, а 1С будет на них отвечать. Для этого необходимо опубликовать информационную базу на веб-сервере (Apache или IIS) и создать в 1С специальную точку входа (API). Проанализируем доступные для этого механизмы.

1. HTTP-сервисы

Это самый современный, гибкий и рекомендуемый способ для создания собственных REST-подобных API. Вы можете полностью контролировать адреса (URL), методы (GET, POST, PUT, DELETE) и форматы данных (обычно JSON, что идеально для веб-интеграций).

Как это работает на примере задачи с Telegram:

Задача: Telegram-бот при получении номера телефона от пользователя должен проверить, есть ли такой клиент в базе 1С.

  1. В конфигураторе 1С создаем новый объект HTTP-сервис. Например, назовем его TelegramAPI.
  2. Внутри сервиса создаем шаблон URL, например, /clients/checkphone/{phone}. Здесь {phone} — это параметр, в который будет подставляться номер телефона.
  3. К этому шаблону привязываем метод (например, GET) и создаем для него обработчик — процедуру в модуле HTTP-сервиса.
  4. В этой процедуре мы получаем значение параметра phone, выполняем поиск по базе данных 1С (например, по справочнику "Контрагенты" или "Физические лица") и формируем ответ.
  5. Ответ отправляется в формате JSON. Это позволяет передать не просто "да/нет", а структурированную информацию.

Посмотрим на пример кода обработчика в 1С:


Процедура ПроверитьТелефон(Запрос)
    
    // Получаем номер телефона из параметров URL
    НомерТелефона = Запрос.ПараметрыURL.Получить("phone");
    
    // Производим поиск в базе. Логика для примера упрощена.
    НайденныйКлиент = Справочники.Контрагенты.НайтиПоРеквизиту("Телефон", НомерТелефона);
    
    СтруктураОтвета = Новый Структура;
    Если ЗначениеЗаполнено(НайденныйКлиент) Тогда
        СтруктураОтвета.Вставить("found", Истина);
        СтруктураОтвета.Вставить("clientName", СокрЛП(НайденныйКлиент.Наименование));
        СтруктураОтвета.Вставить("discountCard", СокрЛП(НайденныйКлиент.ИнформационнаяКарта));
    Иначе
        СтруктураОтвета.Вставить("found", Ложь);
    КонецЕсли;
    
    // Сериализуем структуру в JSON-строку
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
    ОтветСтрокой = ЗаписьJSON.Закрыть();
    
    // Формируем HTTP-ответ
    Ответ = Новый HTTPСервисОтвет(200); // 200 - OK
    Ответ.УстановитьТелоИзСтроки(ОтветСтрокой, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    Ответ.Заголовки.Вставить("Content-type", "application/json; charset=utf-8");
    
    Возврат Ответ;
    
КонецПроцедуры

После публикации такой сервис будет доступен по адресу вида http://ваш-сервер/имя-базы/hs/TelegramAPI/clients/checkphone/79991234567. Сервер Telegram-бота сможет легко обращаться к этому адресу и моментально получать данные.

2. Web-сервисы (SOAP)

Это более старый, но по-прежнему рабочий стандарт. Он использует протокол SOAP и формат XML. Web-сервисы обеспечивают строгую типизацию данных и формальное описание интерфейса (WSDL-файл), что удобно для интеграции в корпоративной среде. Для простой задачи, как с Telegram-ботом, это может быть избыточным решением, но оно также полностью работоспособно на обычных формах.

3. Стандартный REST-интерфейс (OData)

Платформа 1С предоставляет готовый к использованию REST-интерфейс, который позволяет обращаться к объектам базы данных (справочникам, документам и т.д.) через стандартные HTTP-запросы без написания кода. Вам нужно лишь при публикации базы на веб-сервере поставить галочку "Публиковать стандартный OData-интерфейс". После этого можно будет выполнять запросы вида http://ваш-сервер/имя-базы/odata/standard.odata/Catalog_Контрагенты?$filter=Телефон eq '79991234567'. Это мощный инструмент, но он требует более тщательной настройки прав доступа, так как по умолчанию может "открыть" слишком много данных.

Подход 2: 1С сама опрашивает Telegram (без публикации)

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

Как это работает:

  1. В 1С настраивается регламентное задание, которое запускается с заданной периодичностью (например, раз в 5 секунд).
  2. В коде регламентного задания 1С сама отправляет HTTPЗапрос к серверам Telegram, используя Telegram Bot API, а именно метод getUpdates. Этот метод возвращает список новых сообщений, отправленных боту.
  3. 1С анализирует полученные сообщения. Если обнаруживается сообщение с номером телефона, система выполняет поиск по своей базе.
  4. Найдя информацию, 1С формирует ответ и отправляет его обратно пользователю в Telegram, используя метод sendMessage из того же Telegram Bot API.

Преимущества этого подхода:

Недостатки:

Вопросы безопасности при публикации

Если вы выбрали первый подход и решили публиковать 1С, уделите особое внимание безопасности. Не выставляйте API в интернет без защиты!

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

← На главную