В современной практике автоматизации часто возникает задача предоставить клиентам доступ к документам (счетам, УПД, актам) напрямую из личного кабинета на сайте. При этом документы должны формироваться в 1С «на лету», чтобы отражать самые актуальные данные. Рассмотрим подробнее, как реализовать этот процесс, избежав типичных ошибок с безопасностью и лицензированием.
Проанализируем наиболее современный подход: использование встроенных HTTP-сервисов платформы 1С:Предприятие 8.3. Чтобы ускорить разработку таких интерфейсов, можно использовать универсальный модуль с процедурами для быстрого создания API. Этот метод позволяет сайту отправить запрос в 1С, получить в ответ двоичные данные файла и сразу отдать их пользователю. Выясним причину, по которой этот метод предпочтительнее FTP: он исключает необходимость промежуточного хранилища и сложной синхронизации прав доступа.
Разберем по шагам, как это работает на стороне 1С. Мы создаем HTTP-сервис с шаблоном URL, принимающим идентификатор документа. При промышленной эксплуатации важно, чтобы была правильно выполнена публикация HTTP-сервиса с использованием клиентского SSL-сертификата для защиты канала связи. В обработчике запроса 1С формирует печатную форму, сохраняет её во временный файл и преобразует в двоичные данные.
Посмотрим на пример кода для реализации такого сервиса:
Функция ПолучитьДокументPDF(Запрос)
// Получаем параметры из URL
ИдентификаторДокумента = Запрос.ПараметрыШаблона["ID"];
// Находим документ в базе
СсылкаНаДокумент = Документы.РеализацияТоваровУслуг.НайтиПоРеквизиту("ИдентификаторНаСайте", ИдентификаторДокумента);
Если СсылкаНаДокумент.Пустая() Тогда
Возврат Новый HTTPСервисОтвет(404);
КонецЕсли;
// Формируем печатную форму
ТабДок = СформироватьПечатнуюФормуУПД(СсылкаНаДокумент);
// Сохраняем во временный файл
ИмяФайла = ПолучитьИмяВременногоФайла("pdf");
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);
// Читаем данные в память
ДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
УдалитьФайлы(ИмяФайла);
// Формируем ответ
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзДвоичныхДанных(ДанныеФайла);
Ответ.Заголовки.Вставить("Content-Type", "application/pdf");
Ответ.Заголовки.Вставить("Content-Disposition", "inline; filename=""upd.pdf""");
Возврат Ответ;
КонецФункции
Важный момент: использование метода inline в заголовке Content-Disposition позволяет браузеру открыть файл прямо в окне, а attachment принудительно инициирует скачивание.
Если архитектура сайта требует получения данных в формате JSON, проанализируем вариант с кодированием Base64. В этом случае 1С преобразует PDF-файл в текстовую строку. Рассмотрим подробнее: этот метод удобен для AJAX-запросов, а для гибкой работы со структурами данных можно применить модуль «Трансформер» для конвертации JSON/XML/TOON. Это позволяет передать вместе с файлом дополнительные метаданные (номер документа, дату, сумму).
Пример преобразования в 1С:
// Превращаем двоичные данные в строку для JSON
СтрокаBase64 = Base64Строка(ДанныеФайла);
// Формируем структуру ответа
СтруктураОтвета = Новый Структура;
СтруктураОтвета.Вставить("fileName", "doc.pdf");
СтруктураОтвета.Вставить("fileBody", СтрокаBase64);
На стороне сайта разработчики используют функции декодирования (например, atob() в JavaScript) для восстановления файла.
В ситуациях, когда нагрузка на 1С велика, или файлы должны быть доступны длительное время, разберем архитектуру с внешним объектным хранилищем. Вместо того чтобы отдавать файл напрямую, 1С выгружает его в хранилище, поддерживающее протокол S3 (например, MinIO — отличное self-hosted решение).
Этот подход значительно повышает отказоустойчивость системы. Если база 1С будет временно недоступна (например, во время обновления), ранее сформированные документы останутся доступными в хранилище.
Выясним причину опасений многих системных администраторов: публикация базы 1С напрямую в интернет создает риски атак и быстрого исчерпания лицензий. Проанализируем решение этой проблемы, используя альтернативный подход к обработке HTTP-запросов в 1С с помощью прослойки на Go или Node.js.
Преимущества использования прослойки:
Разберем важный вопрос: является ли PDF-файл из 1С юридически значимым? Как правильно заметили участники обсуждения, без квалифицированной электронной подписи (КЭП) — это «филькина грамота». Однако мы можем легитимизировать такие документы, прописав в договоре с клиентом использование Простой электронной подписи (ПЭП).
Согласно 63-ФЗ «Об электронной подписи», стороны могут договориться, что действия в личном кабинете (авторизация по логину/паролю + нажатие кнопки) приравниваются к подписанию документа. В этом случае графический оттиск печати в PDF становится юридическим подтверждением факта оказания услуги в рамках конкретного договора.
Для повышения доверия рекомендуем добавить визуализацию штампа ЭЦП. В 1С это реализуется программным наложением картинки с данными сертификата на табличный документ перед сохранением в PDF.
Посмотрим на итоговый алгоритм выбора решения:
Рассмотренные подходы позволяют создать гибкую и надежную систему обмена документами, которая будет удобна клиентам и безопасна для корпоративной информационной системы.