Tag Archives: Тонкий клиент

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

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

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


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

Услуги программирования в 1С. Киев

3D визуализация и интерьер