Как организовать отправку документов ЭДО в 1С от имени всех пользователей на терминальном сервере?

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

При работе в терминальном режиме часто возникает проблема: ключ электронной подписи (КЭП) физически доступен только на рабочем месте бухгалтера, а отправку документов необходимо реализовать для всех пользователей системы. Поскольку современные закрытые части ключей часто являются неэкспортируемыми, задача требует переноса логики подписания на серверный уровень.

Основные принципы организации серверной подписи

Для того чтобы документы подписывались корректно вне зависимости от того, кто нажал кнопку отправки, мы должны отойти от клиентских вызовов. Рассмотрим пошаговый алгоритм реализации централизованного механизма:

  1. Перенос логики в серверные модули: Все процедуры, отвечающие за обращение к КриптоПро и подписание данных, должны быть перенесены из модулей &НаКлиенте в модули &НаСервере. Это фундаментальное требование, так как клиентское приложение не всегда имеет прямой доступ к контейнеру ключа на сервере.
  2. Настройка пользователя сервера 1С: Подписание будет выполняться от имени той учетной записи, под которой запущена служба Агент сервера 1С:Предприятия. Рассмотрим этот этап подробнее:
    • Узнайте, под каким пользователем работает служба 1С (обычно это usr1cv8 или аналогичный сервисный аккаунт).
    • Войдите в систему под этой учетной записью (возможно, потребуется временно дать ей права для доступа к консоли или использовать PowerShell для импорта).
    • Запустите КриптоПро CSP, установите личный сертификат и обеспечьте доступ службы к закрытому контейнеру.
    • Рекомендуется снять пароль с контейнера, чтобы избежать необходимости интерактивного ввода при выполнении регламентных заданий.
  3. Перезапуск службы: После установки сертификата в профиль пользователя службы сервера обязательно перезапустите службу Агент сервера 1С:Предприятия, чтобы изменения вступили в силу.

Реализация очереди документов на подписание

Чтобы обеспечить стабильную работу, не стоит пытаться подписывать документ в момент нажатия кнопки пользователем. Лучше всего организовать схему Очередь на подпись. Разберем, как это работает:

Создайте Регистр сведений, в котором будут храниться данные о документе, ожидающем отправки. Пользователь, нажимая кнопку «Отправить», просто создает запись в этом регистре со статусом «К подписанию».


// Пример логики добавления в очередь
Запись = РегистрыСведений.ОчередьЭДО.СоздатьМенеджерЗаписи();
Запись.Документ = СсылкаНаДокумент;
Запись.Статус = Перечисления.СтатусыЭДО.КПодписанию;
Запись.ДатаДобавления = ТекущаяДата();
Запись.Записать();

Далее, с помощью Регламентного задания, которое выполняется на сервере, мы периодически сканируем этот регистр и выполняем фактическую подпись и отправку.


// Фрагмент кода регламентного задания
Выборка = РегистрыСведений.ОчередьЭДО.ВыбратьПоСтатусу(Перечисления.СтатусыЭДО.КПодписанию);
Пока Выборка.Следующий() Цикл
    // Вызов функции подписания на сервере
    Результат = ПодписатьНаСервере(Выборка.Документ);
    Если Результат.Успех Тогда
        // Отправить документ в СБИС
        ОтправитьВЭДО(Выборка.Документ);
    КонецЕсли;
КонецЦикла;

Важные рекомендации по безопасности и лицензированию

Рассматривая данную задачу, мы должны помнить о лицензионных ограничениях КриптоПро. При использовании на MS Windows Server обязательно наличие серверной лицензии. Несоблюдение этого условия приведет к нарушению лицензионного соглашения.

Также проанализируем вопросы безопасности:

Данный подход — перенос исполнения на сторону Сервера приложений — является наиболее надежным способом избежать проблем с пробросом ключей через RDP и обеспечивает стабильную работу ЭДО для всех пользователей конфигурации.

← На главную