Amazon 1с - разработка обработки взаимодействия с облаком S3.
Данной публикацией я открываю цикл статей по написанию обработки взаимодействия с облаком Amazon 1С S3.
Обработка Amazon s3 позволяет получат список файлов по фильтру, скачать необходимые файлы с Amazon s3 используя amazon s3 api, отправлять файлы напрямую из 1С используя multipart/form-data.
Основная сложность работы с облаком Amazon s3 связана с тем, что 1С в http запросах умеет использовать только basic аутентификацию. В Amazon же используется AWS Signature Version 4. Вот такую аутентификацию я и буду создавать используя средства 1С.
В статье очень подробно расписаны способы аутентификации. 1С же умеет работать только с basic аутентификацией, что накладывает определенные ограничения на использование ее с современными web приложениями. Как вы можете видеть в статье, безопасных способов аутентификации гораздо больше.
Теперь откроем документацию по Amazon S3 REST API. Для работы с файлами в облаке нам необходимо будет использовать запросы с аутентификацией AWS Signature Version 4. Процесс получения сигнатуры для отправки в запросе описан на схеме.
StringToSign зависит от типа запроса, как эта строка формируется я покажу в следующих статьях.
Чтобы получить SigningKey нам необходимо последовательно выполнить 4 хеш функции HMAC-SHA256 передавая в качестве ключа значение предыдущей функции.
Итоговую сигнатуру вычисляем с помощью хеш функции передавай в качестве ключа SigningKey и StringToSign в качестве параметра вычисления хеша.
В конце сигнатуру приводим к шестнадцатеричной строке.
Разработка интерфейса обработки.
В этой части я буду разрабатывать интерфейсную часть обработки. Приступим.
Первое, добавим новую обработку в дереве конфигурации и назовем ее AmazonS3. Далее создадим новую управляемую форму и на ней разместим группу — страницы для размещения трех вкладок. Потом добавим три группы с видом — страница. В корень формы добавим стандартную группу без отображения, имя — ГруппаЛоги.

Второе, добавим необходимые реквизиты. В основном все строкового типа с длинной 0 и одну таблицу значений.

Теперь разместим часть реквизитов на странице Настройки.

И вниз формы перенесем реквизит Logs. Отключим вывод заголовка и выберем много строчный режим.

У элемента СтраницаНастройки поменяем заголовок на «Настройки». Тоже самое сделаем с элементами СтраницаЗагрузка и СтраницаВыгрузка. Установим заголовки «Загрузка» и «Выгрузка».
Третье, добавим две команды «ВыгрузитьФайлы» и «ЗагрузитьФайлыXML». На страницу «Выгрузка» перенесем таблицу значений «СписокВыгрузки», в ее командную панель перенесем команду «ВыгрузитьФайлы».

И на странице «Загрука» разместим реквизит «ПапкаНаКомпьютере» и команду «ЗагрузитьФайлыXML».

У обоих команд изменим цвет фона и шрифт.

Логика обработки
Четвертое, откроем модуль формы и создадим область «Интерфейс».
И у элемента «ПапкаНаКомпьютере» изменим свойство КнопкаВыбора — Да. Создадим, на клиенте, обработчик события «НачалоВыбора». В обработчике разместим код под вызову диалога выбора файла. Так же для отказа от модальности, результат выбора будем обрабатывать через Оповещение. Обработаем оповещение и если папка выбрана, то полученный результат поместим в реквизит «ПапкаНаКомпьютере».

Чтобы значения в реквизитах автоматически сохранялись нам необходимо изменить свойство формы. «АвтоматическоеСохранение» в Использовать, и указать какие реквизиты будут автоматически сохранять свои значения при закрытии формы и восстанавливать их при открытии.

Теперь создадим логику работы с таблицей «СписокВыгрузки». Данный список будет содержать путь к файлу и имя файла, которые необходимо загрузить в облако. У элемента «СписокВыгрузки», на клиенте, создадим обработчик события «ПередНачаломДобавления». Откажемся от стандартной обработки события, чтобы разместить код вызова диалога выбора файла.
В обработчике оповещения обработаем полученные данные. Если данные получены то добавим строку в таблицу и заполним реквизиты полным путем к файлу. Чтобы получить имя файла надо обработать полный путь.

Если сейчас запустить обработку в пользовательском режиме, то мы увидим, что элемент Logs не растягивается до конца формы. Чтобы это исправить надо отключить свойство «АвтоМаксимальнаяШирина».
Вернемся в модуль формы и создадим область «ОбработчикиСобытийФормы». В ней разместим стандартный обработчик формы «ПриСозданииНаСервере». Здесь я размещу на время отладки код по заполнению таблицы значений тестовыми данными.

В результате вот так выглядит наша обработка.

На этом все, спасибо за внимание. В следующих частях будет интереснее.
Вторая часть.
Третья часть.
Четвертая часть.
(1) комментарий