Часто возникает бизнес-задача, когда сайт должен не просто отправить уведомление, а заставить 1С выполнить определенное действие в реальном времени. Например, сформировать печатную форму счета в формате PDF и тут же отправить ее клиенту на электронную почту. Рассмотрим подробнее, как можно «дернуть» 1С с сайта, разберем доступные технологии и проанализируем ограничения, связанные с различными версиями платформы.
Проанализируем наиболее гибкий и производительный метод — создание HTTP-сервиса. Этот механизм позволяет превратить 1С в полноценный REST-сервер. В отличие от тяжеловесных протоколов прошлого, HTTP-сервисы работают с легким форматом JSON, который нативно понимается любым современным сайтом на PHP, Python или Node.js.
Разберем по шагам процесс реализации:
HTTP-сервис. Задаем ему имя и корневой URL./get_invoice/{ID} позволит сайту передавать номер заказа прямо в строке адреса.GET или POST.Посмотрим на пример упрощенного кода для обработки входящего запроса:
Функция get_invoice_handler(Запрос)
// Извлекаем параметры из запроса
НомерЗаказа = Запрос.ПараметрыURL.Получить("ID");
// Вызываем логику формирования счета
ПутьКФайлу = СформироватьСчетPDF(НомерЗаказа);
// Отправляем почту
ОтправитьПисьмоСКлиентом(ПутьКФайлу);
// Формируем ответ
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("Счет успешно сформирован и отправлен");
Возврат Ответ;
КонецФункции
Выясним причину, по которой иногда выбирают Web-сервисы вместо HTTP. Основное отличие — использование протокола SOAP и строгое описание интерфейса через WSDL-схему. Это обеспечивает жесткую типизацию данных. Если ваш сайт или корпоративная шина данных (ESB) строго ориентированы на XML и SOAP, этот метод будет предпочтительным.
Однако создание схемы требует больше времени, а объем передаваемых данных в XML выше, чем в JSON. Для простых задач типа «сформируй и отправь» HTTP-сервисы обычно оказываются эффективнее.
Рассмотрим встроенный механизм OData (автоматический REST-интерфейс). Он позволяет обращаться к справочникам и документам 1С без написания кода сервисов. Чтобы его включить, достаточно поставить галочку при публикации базы на веб-сервере.
Важный нюанс: OData отлично подходит для чтения данных или создания нового документа «Счет на оплату». Но если вам нужно выполнить сложный алгоритм (сформировать печатную форму с печатью и подписью, конвертировать в PDF и отправить через почтовый сервер), то OData сама по себе это не сделает. В этом случае все равно придется писать специализированный HTTP-сервис.
Проанализируем ситуацию, если используется базовая версия 1С. Здесь мы сталкиваемся с существенными ограничениями:
Если переход на версию ПРОФ невозможен, придется использовать обходные пути.
Если прямой вызов невозможен, доработаем схему с «очередью», чтобы сократить время реакции до минимума. Вместо медленного обмена через FTP, разберем вариант с использованием локального файла-флага или общей таблицы в базе данных.
ПодключитьОбработчикОжидания с минимальным интервалом (1-2 секунды).Такой подход создает иллюзию мгновенной работы для пользователя, при этом не требуя публикации базы на веб-сервере.
Если веб-сервер и база 1С находятся на одном физическом сервере или в локальной сети, можно использовать COM-соединение (V83.COMConnector). В этом случае скрипт на стороне сайта (например, на PHP) сам инициирует подключение к 1С:
$v8 = new COM("V83.COMConnector");
$connection = $v8->Connect("File='C:\\Bases\\Trade';Usr='WebAdmin';Pwd='123';");
$connection->ОбработкаЗапросовССайта->СформироватьИОтправитьСчет($OrderNumber);
Этот метод позволяет вызывать процедуры 1С напрямую, но требует установленной платформы на стороне сервера сайта и правильной настройки прав доступа к COM-объектам.
При реализации любого из перечисленных методов необходимо учитывать два критических момента:
1. Лицензирование: Каждый сеанс через веб-сервис или HTTP-сервис потребляет одну лицензию в момент выполнения запроса. Если запросов много и они длительные, это может заблокировать работу обычных пользователей в файловой базе.
2. Безопасность: Никогда не публикуйте 1С в открытый интернет без использования SSL (HTTPS). Для авторизации запросов с сайта используйте отдельного пользователя 1С с минимально необходимым набором прав (роль, разрешающая только чтение нужных данных и выполнение конкретного сервиса).
Таким образом, для современных систем оптимальным выбором будет HTTP-сервис на базе версии ПРОФ. Если же вы ограничены базовой версией, наиболее стабильным решением станет робот-обработчик, проверяющий очередь заданий с коротким интервалом через обработчик ожидания.