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

7 июня 2015

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

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

1

Прикрепление файлов в толстом клиенте в справочнике "Организации"
("Управление производственным предприятием", вер. 1.3)

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

2

Как передать файл с клиента на сервер
для тонкого и веб-клиентов.

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


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

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


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. Имеется другой путь передачи файлов в веб-клиенте, но это уже другая история.

Файлы для загрузки:

  1. Информационная база с примером из статьи.
Источник: http://www.develplatform.com/2013/06/blog-post_3.html

Написать комментарий

Адрес и телефон
E-mail: rs@corp2.net Skype: rudjuk
г. Киев, ул. Белорусская 30, офис. К2Р (схема проезда)
Мы в сети
Меню
www.megastock.ru Здесь находится аттестат нашего WM идентификатора 000000000000
Проверить аттестат
Наверх