Как реализовать личный кабинет клиента на 1С через интернет и решить вопрос с лицензиями?

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

Реализация личного кабинета (ЛК) для клиентов — одна из самых востребованных задач при интеграции 1С с веб-технологиями. Основная цель заключается в том, чтобы клиент мог через браузер авторизоваться, оставить заявку, прикрепить документы и отслеживать статус выполнения в реальном времени. При этом крайне важно понимать, как система будет работать с лицензиями и какими техническими средствами лучше воспользоваться. Разберем все варианты реализации по шагам.

Вариант 1: Использование штатного веб-клиента и внешних пользователей

Самый простой путь — опубликовать базу на веб-сервере (Apache или IIS) и использовать встроенный механизм внешних пользователей. В этом случае интерфейс 1С будет доступен прямо в браузере.

Особенности лицензирования:

  1. При использовании веб-клиента каждое активное подключение занимает одну клиентскую лицензию.
  2. Если у вас 100 клиентов, которые заходят в кабинет одновременно, вам потребуется 100 лицензий. Это делает данный метод дорогостоящим для массовых сервисов.
  3. Плюсом является то, что не нужно писать отдельный код для фронтенда — вы используете стандартные управляемые формы 1С.

Вариант 2: Использование HTTP-сервисов и собственного фронтенда

Этот подход считается наиболее профессиональным и масштабируемым. Мы разделяем систему на две части: бэкенд (логика в 1С через HTTP-сервисы) и фронтенд (сайт на JavaScript, React, Vue или даже Java/C#).

Проанализируем, как в этом случае работают лицензии. Технически 1С использует механизм пула соединений. Когда браузер клиента делает запрос к HTTP-сервису, 1С открывает сеанс, выполняет код и возвращает сеанс в пул. Если запросы кратковременные, один сеанс (и одна лицензия) может обслужить десятки пользователей, заходящих по очереди. Однако с юридической точки зрения, согласно политике фирмы 1С, использование программных средств мультиплексирования не освобождает от необходимости лицензирования каждого конечного пользователя. На практике многие ограничивают количество одновременно работающих сессий в настройках публикации default.vrd.

Рассмотрим пример простейшего HTTP-сервиса для получения статуса заявки:


Функция ПолучитьСтатусЗаявки(Запрос)
    НомерЗаявки = Запрос.ПараметрыURL.Получить("Number");
    
    ЗапросКБД = Новый Запрос;
    ЗапросКБД.Текст = 
        "ВЫБРАТЬ
        |	ЗаявкаКлиента.Статус КАК Статус
        |ИЗ
        |	Документ.ЗаявкаКлиента КАК ЗаявкаКлиента
        |ГДЕ
        |	ЗаявкаКлиента.Номер = &Номер";
    
    ЗапросКБД.УстановитьПараметр("Номер", НомерЗаявки);
    Результат = ЗапросКБД.Выполнить().Выгрузить();
    
    Если Результат.Количество() > 0 Тогда
        Ответ = Новый Соответствие;
        Ответ.Вставить("status", Строка(Результат[0].Статус));
        
        JSON = Новый ЗаписьJSON;
        JSON.УстановитьСтроку();
        ЗаписатьJSON(JSON, Ответ);
        
        СтрокаОтвета = JSON.Закрыть();
        
        Возврат Новый HTTPСервисОтвет(200, СтрокаОтвета);
    Иначе
        Возврат Новый HTTPСервисОтвет(404);
    КонецЕсли;
КонецФункции

Вариант 3: Автоматический REST-интерфейс (OData)

Если нет желания писать каждый HTTP-сервис вручную, можно воспользоваться встроенным механизмом OData. Достаточно включить соответствующую опцию в свойствах конфигурации и опубликовать базу. Это позволит внешнему сайту обращаться к справочникам и документам напрямую через стандартные GET/POST запросы.

Разберем преимущества этого метода:

Работа с файлами в личном кабинете

Для реализации загрузки файлов (например, сканов документов к заявке) через HTTP-сервис мы рекомендуем использовать передачу данных в формате Base64 или передачу бинарных данных напрямую в теле POST-запроса. Проанализируем пример получения файла в 1С:


// Пример обработки входящего файла в теле HTTP-запроса
ДанныеФайла = Запрос.ПолучитьТелоКакДвоичныеДанные();
ИмяФайла = Запрос.ПараметрыURL.Получить("FileName");

// Сохраняем во временное хранилище или прикрепляем к документу
СправочникФайлы = Справочники.Файлы.СоздатьЭлемент();
СправочникФайлы.Наименование = ИмяФайла;
СправочникФайлы.ФайлХранилище = Новый ХранилищеЗначения(ДанныеФайла);
СправочникФайлы.Записать();

Безопасность и промежуточное звено (Middleware)

Важно помнить, что выставлять 1С напрямую в интернет — это риск. Рассмотрим стандартную архитектуру безопасности:

  1. Фронтенд: Пользователь работает с сайтом (например, на Node.js или PHP).
  2. Прокси/Middleware: Сайт проверяет авторизацию пользователя и только после этого делает запрос к 1С по защищенному внутреннему каналу.
  3. 1С: Принимает запросы только от доверенного IP-адреса веб-сервера.

Такая схема позволяет кэшировать данные (чтобы не нагружать 1С и не тратить лишние лицензии на каждый чих пользователя) и защищает базу от прямых атак.

Выводы и рекомендации

Выясним, какой путь выбрать именно вам. Если у вас 5-10 партнеров и бюджет позволяет купить лицензии — используйте веб-клиент. Если вы строите публичный сервис для сотен или тысяч клиентов — делайте ставку на HTTP-сервисы и внешний сайт на JavaScript. Это даст максимальную скорость работы и гибкость интерфейса. Для ускорения разработки обратите внимание на библиотеку metadata.js, которая позволяет упростить взаимодействие фронтенда с метаданными 1С.

← На главную