Как организовать взаимодействие 1С с веб-сайтом для мгновенного формирования и отправки документов?

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

Часто возникает бизнес-задача, когда сайт должен не просто отправить уведомление, а заставить 1С выполнить определенное действие в реальном времени. Например, сформировать печатную форму счета в формате PDF и тут же отправить ее клиенту на электронную почту. Рассмотрим подробнее, как можно «дернуть» 1С с сайта, разберем доступные технологии и проанализируем ограничения, связанные с различными версиями платформы.

Использование HTTP-сервисов как современный стандарт интеграции

Проанализируем наиболее гибкий и производительный метод — создание HTTP-сервиса. Этот механизм позволяет превратить 1С в полноценный REST-сервер. В отличие от тяжеловесных протоколов прошлого, HTTP-сервисы работают с легким форматом JSON, который нативно понимается любым современным сайтом на PHP, Python или Node.js.

Разберем по шагам процесс реализации:

  1. Создание сервиса: В конфигураторе или через расширение (для версии ПРОФ) создаем новый объект HTTP-сервис. Задаем ему имя и корневой URL.
  2. Настройка шаблонов URL: Определяем структуру запроса. Например, путь /get_invoice/{ID} позволит сайту передавать номер заказа прямо в строке адреса.
  3. Написание обработчика: В модуле сервиса создаем функцию для метода GET или POST.

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


Функция get_invoice_handler(Запрос)
    // Извлекаем параметры из запроса
    НомерЗаказа = Запрос.ПараметрыURL.Получить("ID");
    
    // Вызываем логику формирования счета
    ПутьКФайлу = СформироватьСчетPDF(НомерЗаказа);
    
    // Отправляем почту
    ОтправитьПисьмоСКлиентом(ПутьКФайлу);
    
    // Формируем ответ
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки("Счет успешно сформирован и отправлен");
    Возврат Ответ;
КонецФункции

Использование Web-сервисов (SOAP)

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

Однако создание схемы требует больше времени, а объем передаваемых данных в XML выше, чем в JSON. Для простых задач типа «сформируй и отправь» HTTP-сервисы обычно оказываются эффективнее.

OData — готовый REST API «из коробки»

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

Важный нюанс: OData отлично подходит для чтения данных или создания нового документа «Счет на оплату». Но если вам нужно выполнить сложный алгоритм (сформировать печатную форму с печатью и подписью, конвертировать в PDF и отправить через почтовый сервер), то OData сама по себе это не сделает. В этом случае все равно придется писать специализированный HTTP-сервис.

Особенности работы с базовой версией 1С

Проанализируем ситуацию, если используется базовая версия 1С. Здесь мы сталкиваемся с существенными ограничениями:

Если переход на версию ПРОФ невозможен, придется использовать обходные пути.

Альтернативный метод: Робот-обработчик с оптимизацией (Polling)

Если прямой вызов невозможен, доработаем схему с «очередью», чтобы сократить время реакции до минимума. Вместо медленного обмена через FTP, разберем вариант с использованием локального файла-флага или общей таблицы в базе данных.

  1. Сайт записывает JSON-файл с заданием в папку, доступную серверу 1С.
  2. В 1С настраивается ПодключитьОбработчикОжидания с минимальным интервалом (1-2 секунды).
  3. Обработка проверяет наличие файла. Если файл найден — он мгновенно считывается, 1С формирует счет и удаляет файл.

Такой подход создает иллюзию мгновенной работы для пользователя, при этом не требуя публикации базы на веб-сервере.

COM-соединение и Automation-сервер

Если веб-сервер и база 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-сервис на базе версии ПРОФ. Если же вы ограничены базовой версией, наиболее стабильным решением станет робот-обработчик, проверяющий очередь заданий с коротким интервалом через обработчик ожидания.

← На главную