Часто возникает вопрос: возможно ли интегрировать информационную базу 1С, работающую на обычных (неуправляемых) формах, с внешними сервисами, например, с Telegram-ботом, через веб? Многие полагают, что раз нет управляемых форм, то и веб-возможности недоступны. Это распространенное заблуждение. Давайте разберемся, как на самом деле обстоят дела.
Основная идея в том, что отсутствие управляемых форм блокирует только работу пользователей через веб-клиент в браузере. Однако для программного взаимодействия (API) платформа 1С предоставляет мощные инструменты, которые прекрасно работают и в базах на обычных формах. Рассмотрим два основных подхода для решения задачи интеграции с Telegram.
Этот сценарий предполагает, что внешняя система (в нашем случае, серверная часть Telegram-бота) будет инициатором обмена — она будет отправлять запросы в 1С, а 1С будет на них отвечать. Для этого необходимо опубликовать информационную базу на веб-сервере (Apache или IIS) и создать в 1С специальную точку входа (API). Проанализируем доступные для этого механизмы.
1. HTTP-сервисы
Это самый современный, гибкий и рекомендуемый способ для создания собственных REST-подобных API. Вы можете полностью контролировать адреса (URL), методы (GET, POST, PUT, DELETE) и форматы данных (обычно JSON, что идеально для веб-интеграций).
Как это работает на примере задачи с Telegram:
Задача: Telegram-бот при получении номера телефона от пользователя должен проверить, есть ли такой клиент в базе 1С.
HTTP-сервис. Например, назовем его TelegramAPI./clients/checkphone/{phone}. Здесь {phone} — это параметр, в который будет подставляться номер телефона.phone, выполняем поиск по базе данных 1С (например, по справочнику "Контрагенты" или "Физические лица") и формируем ответ.Посмотрим на пример кода обработчика в 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'. Это мощный инструмент, но он требует более тщательной настройки прав доступа, так как по умолчанию может "открыть" слишком много данных.
Существует и альтернативный подход, который не требует "выставлять" 1С в интернет. В этом случае 1С выступает инициатором обмена. Этот метод особенно хорош, если политика безопасности запрещает открывать доступ к серверам 1С извне или если допустима небольшая задержка в реакции.
Как это работает:
HTTPЗапрос к серверам Telegram, используя Telegram Bot API, а именно метод getUpdates. Этот метод возвращает список новых сообщений, отправленных боту.sendMessage из того же Telegram Bot API.Преимущества этого подхода:
Недостатки:
Если вы выбрали первый подход и решили публиковать 1С, уделите особое внимание безопасности. Не выставляйте API в интернет без защиты!
Итог: База 1С на обычных формах не является препятствием для современных интеграций. Вы можете выбрать наиболее подходящий для ваших задач и требований безопасности архитектурный подход: либо опубликовать защищенный API на стороне 1С, либо настроить периодический опрос внешнего сервиса из самой 1С.