Передача файла на сервер. Тонкий и веб-клиенты

Небольшая задачка

Работа пользователей в конфигурациях на платформе “1С:Підприємство” 8.2 часто может быть связана с прикреплением различных файлов к информационной базе. Например, присоединение изображений номенклатуры или отсканированных уставных документов к справочнику “Организации”.

1

Прикрепление файлов в толстом клиенте в справочнике “Организации”
(“Управление производственным предприятием”, вер. 1.3)
С появлением в платформе 8.2 режимов тонкого и веб-клиентов, изменились способы передачи файлов с клиентской машины на сервер. Если раньше, в толстом клиенте, для прикрепления файла нужно было лишь вызвать диалог выбора и на основе полученного пути к файлу получить его двоичные данные для записи в информационную базу, то теперь остро встает вопрос о механизме передачи двоичных данных файла с клиентской машины на сторону сервера.

2

Как передать файл с клиента на сервер
для тонкого и веб-клиентов.
В настоящей статье рассмотрим процесс передачи файла как для тонкого клиента “1С:Підприємство”, так и для варианта работы через веб-клиент.

Тонкий клиент – проще простого!

Начнем с самого простого – передачи файла на сервер для тонкого клиента “1С:Підприємство”. Общую информацию о нем Вы можете узнать по ссылке. Отмечу лишь, что тонкий клиент – это отдельное приложение, которое позволяет работать с конфигурациями в режиме управляемого приложения, а также использует меньше ресурсов клиентской машины по сравнению с толстым клиентом.

3

Для демонстрации передачи файла в таком режиме создадим тестовую конфигурацию, в которой будет справочник “Файлы” с реквизитами “Хранилище” (тип “Хранилище значения” для хранения двоичных данных файла) и “ИмяФайла” (строковой реквизит, в котором хранится исходное имя прикрепленного файла).
Самое интересное будет в форме элемента этого справочника. Для прикрепления файла с диска клиентского компьютера добавим команду “Прикрепить файл”.
4

По нажатии на кнопку “Прикрепить файл” вызывается диалог выбора файла на диске, а затем его двоичные данные передаются на сторону сервера и записываются в реквизит “Хранилище”. На следующем листинге показан программный код обработчика данной команды:

5

Обработчик выбора файла и передачи его двоичных данных
на сервер для записи в базу данных
В принципе, здесь все просто и разобраться можно уже по оставленным комментариям. После передачи двоичных данных файла на сервер происходит их запись в базу данных. На следующем листинге показан код серверной процедуры “ПрикрепитьФайлСервер”, вызываемой с клиентской стороны:

6

Запись двоичные данных файла в реквизит “Хранилище”
на серверной стороне
Приведенный способ передачи файла с клиента на сервер рабочий, не раз применял его для решения практических задач. Об оптимальности предложенного способа хранения файлов в базе сейчас речь не идет. Единственная проблема, с которой встречался при передаче файла таким образом – это “вылет” платформы, если размер файла был более ~200 МБ. Было это примерно 2 года назад, возможно, такая ситуация была связана больше с качеством соединения, чем с платформой.

Web-клиент – давайте разберемся!

Платформа “1С:Підприємство” 8.2 имеет поддержку работы через веб-браузеры без установки дополнительного программного обеспечения на клиентскую машину. Для этого используется режим запуска в веб-клиенте. Общую информацию о нем Вы можете узнать здесь, отмечу лишь, что по своей сути веб-клиент – это тоже тонкий клиент, но базирующийся на применении веб-технологий. Именно последнее делает необходимым применение другого подхода, по сравнению с тонким клиентом, для решения вопросов разработки и взаимодействий клиента и сервера.

6

Веб-клиент. Ошибка открытия диалога выбора файла
На предыдущем скриншоте показана реакция платформы, при попытке прикрепить файл в веб-клиенте способом, который мы реализовали для тонкого клиента. Описание ошибки явно говорит нам, что для работы с файлами в этом режиме нам нужно установить для браузера плагин “Расширение для работы с файлами”. Но и тут не все так просто!
Но обо всем по порядку! Сначала установим расширение для работы с файлами. Для этого по команде “Прикрепить файл”, если пользователь работает в режиме веб-клиента, выполним установку компоненты и подключим ее для использования. Вот такой код добавится в начало обработчика:
7
Установка и подключение расширения работы с файлами
для веб-клиента “1С:Підприємство” 8.2
Первый вызов метода “ПодключитьРасширениеРаботыСФайлами” позволяет определить было ли оно установлено ранее. Если подключение компоненты не было выполнено, то выполняется его установка и повторная попытка подключения. Но и после этого прикрепить файл не удастся! Вот какая ошибка встретится у нас на пути:
8

Все дело в том, что веб-клиент не поддерживает конструктор двоичных данных файла на основании пути к нему в файловой системе. Эта ошибка появляется при попытке выполнения строчки с этим конструктором:

“Новый ДвоичныеДанные(<ПутьКФайлу>);”

Как же тогда быть и передать файл на сервер?
Для передачи файлов на сервер в веб-клиенте используется метод “ПоместитьФайлы”. Первым параметром метода передается массив элементов типа “ОписаниеПередаваемогоФайла”, содержащее полный путь к файлу и адрес во временном хранилище. Вторым параметром передается массив, в который будут помещены результаты передачи файлов на сервер (их адреса во временном хранилище и др. информация). Третий и четвёртый параметр – это флаг интерактивной работы (будут ли выводиться диалоги пользователю) и уникальный идентификатор. Подробнее о работе и синтаксисе данного метода Вы можете узнать в синтаксис помощнике. На следующем изображении демонстрируется пример использования метода “ПоместитьФайлы”:
9
Передача файлов на сервер. Веб-клиент “1С:Підприємство” 8.2
 Что касается изменений в серверном вызове, то они незначительные. Если процедура “ПрикрепитьФайлСервер” вызывается с веб-клиента, то сначала производится получение двоичных данных из временного хранилища значений, и уже после записывается в базу данных:
10
Обработка переданного из веб-клиента файла на сервере
Теперь задача практически решена. Мы можем передавать файлы с клиентской машины на сервер как в режиме тонкого клиента, так и при работе через веб-клиент. В тестовой конфигурации, ссылка для скачивания на которую приведена в конце статьи, Вы можете рассмотреть пример более подробно, поэксперементировать. Также там демонстрируется передача файла обратно с сервера на клиентскую машину.

К чему мы пришли?

Задача решена, все работает. Но стоит сказать о некоторых подводных камнях, с которыми Вы можете столкнуться. Первое, что нужно обязательно знать – это ограничение веб-клиента платформы “1С:Підприємство” 8.2 при работе с такими браузерами как Google Chrome, Safari или Mozilla Firefox. Установить на них расширение работы с файлами проблематично. С первыми двумя у меня так и не получилось научить веб-клиент загружать файлы на сервер. С Firefox задача также была решена, но после долгих танцев с бубном.
Еще один интересный момент – это ограничение работы с некоторыми типами данных на стороне веб-клиента. Выше была показана подобная проблема на примере конструктора двоичных данных. Эти особенности нужно учитывать при разработке.
22
Google Chrome не поддерживает расширение
работы с файлами “1С:Підприємство” 8.2
Таким образом, веб-клиент имеет весьма ограниченные возможности по работе с файлами на машине пользователя, передачи их на сервер и обратно. К тому же поддержка только двумя браузерами расширения работы с файлами ставит под сомнение использование этого компонента для решения практических задач, ведь очень многие пользователи используют Chrome или Safari. Имеется другой путь передачи файлов в веб-клиенте, но это уже другая история.
Файлы для загрузки:


Источник: http://www.develplatform.com/2013/06/blog-post_3.html

Be the first to comment

Leave a Reply

Your email address will not be published.


*