При попытке вынести двоичные данные (например, присоединенные файлы, сканы документов, архивы) во внешние хранилища, такие как S3-совместимые сервисы, разработчики часто сталкиваются с системными ограничениями платформы 1С:Предприятие 8.3. Разберем практическую ситуацию, когда типовая конфигурация находится на поддержке без возможности изменения («на замке»), свойство конфигурации Режим хранилища двоичных данных установлено в значение Не использовать, а стандартная обработка подключения внешнего хранилища выгружена как внешняя.
Рассмотрим, почему попытка обойти запрет через внешнюю обработку вызывает исключение, на что на самом деле влияет указанное свойство конфигурации и какие существуют альтернативные пути решения поставленной задачи.
Проанализируем механику работы платформы при программном добавлении хранилища. При использовании внешней обработки вызов метода добавления выглядит следующим образом:
ПараметрыПодключения = Новый ПараметрыПодключенияВнешнегоХранилищаДвоичныхДанныхS3;
// Заполнение параметров доступа (Endpoint, Bucket, Keys)
ВнешниеХранилищаДвоичныхДанных.Добавить(ПараметрыПодключения);
В момент исполнения метода ВнешниеХранилищаДвоичныхДанных.Добавить() (или его англоязычного аналога BinaryDataExternalStorages.Add()) платформа генерирует системную ошибку: «Хранилище двоичных данных недоступно в этой версии продукта». Это происходит потому, что платформа производит глубокую валидацию окружения на уровне ядра:
ХранилищеДвоичныхДанных.ПолучитьДоступностьХранилищаДвоичныхДанных() анализирует значение свойства Режим хранилища двоичных данных. Если там установлено Не использовать, функция возвращает Ложь, блокируя любые манипуляции с хранилищем на уровне метаданных.Выясним причину отображения данного свойства в палитре свойств конфигурации. Поведение платформы жестко привязано к свойству Режим совместимости:
Режим хранилища двоичных данных доступно разработчику. По умолчанию в конфигурациях, созданных на этих версиях, оно находится в значении Не использовать. Переопределить его через механизм расширений невозможно — общие свойства корня конфигурации расширениями не модифицируются.Не использовать), данное свойство скрывается из палитры свойств. В этом случае метод ХранилищеДвоичныхДанных.ПолучитьДоступностьХранилищаДвоичныхДанных() всегда возвращает Истина по умолчанию.Рассмотрим подробно варианты действий в зависимости от имеющейся инфраструктуры и ограничений проекта.
Если сервер работает под лицензией КОРП, необходимо внести изменения в корень конфигурации. Разберем шаги:
Режим хранилища двоичных данных в значение Использовать (либо повысим Режим совместимости до 8.3.22 или выше, если это допустимо для конфигурации).Управление хранилищем двоичных данных и настроим интеграцию с S3-бакетом.Если конфигурацию нельзя снимать с поддержки или используются стандартные лицензии уровня ПРОФ, подключить S3 штатным менеджером ВнешниеХранилищаДвоичныхДанных не получится. В этом случае задачу решают с помощью собственного расширения конфигурации или внешней обработки, реализующей прямую работу с API объектного хранилища.
Посмотрим на пример отправки файла в S3-совместимое хранилище с использованием стандартного объекта HTTPСоединение:
// Создаем защищенное соединение для отправки данных
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("s3.storage.provider.com", 443, , , , 30, ЗащищенноеСоединение);
// Формируем заголовки авторизации (AWS Signature v4)
Заголовки = Новый Соответствие;
Заголовки.Вставить("Host", "s3.storage.provider.com");
Заголовки.Вставить("x-amz-date", ФорматДатыISO8601);
Заголовки.Вставить("Authorization", СтрокаАвторизации);
Запрос = Новый HTTPЗапрос("/my-bucket/" + ИмяФайла, Заголовки);
Запрос.УстановитьТелоИзДвоичныхДанных(ФайлДвоичныеДанные);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Или Ответ.КодСостояния = 204 Тогда
// Файл успешно помещен в S3
КонецЕсли;
Такой подход полностью изолирован в расширении, работает на платформе ПРОФ и не зависит от свойства Режим хранилища двоичных данных.
Разберем еще один надежный вариант, не требующий модификации конфигурации 1С:
s3fs или rclone mount, для Windows — специализированные драйверы).В результате платформа 1С прозрачно сохраняет файлы на диск штатными средствами БСП, а операционная система на лету синхронизирует их с S3-хранилищем, полностью снимая зависимость от типа лицензий платформы 1С.