Небольшая задачка
Работа пользователей в конфигурациях на платформе “1С:Підприємство” 8.2 часто может быть связана с прикреплением различных файлов к информационной базе. Например, присоединение изображений номенклатуры или отсканированных уставных документов к справочнику “Организации”.
Прикрепление файлов в толстом клиенте в справочнике “Организации” (“Управление производственным предприятием”, вер. 1.3) |
С появлением в платформе 8.2 режимов тонкого и веб-клиентов, изменились способы передачи файлов с клиентской машины на сервер. Если раньше, в толстом клиенте, для прикрепления файла нужно было лишь вызвать диалог выбора и на основе полученного пути к файлу получить его двоичные данные для записи в информационную базу, то теперь остро встает вопрос о механизме передачи двоичных данных файла с клиентской машины на сторону сервера.
Как передать файл с клиента на сервер для тонкого и веб-клиентов. |
В настоящей статье рассмотрим процесс передачи файла как для тонкого клиента “1С:Підприємство”, так и для варианта работы через веб-клиент.
Тонкий клиент – проще простого!
Начнем с самого простого – передачи файла на сервер для тонкого клиента “1С:Підприємство”. Общую информацию о нем Вы можете узнать по ссылке. Отмечу лишь, что тонкий клиент – это отдельное приложение, которое позволяет работать с конфигурациями в режиме управляемого приложения, а также использует меньше ресурсов клиентской машины по сравнению с толстым клиентом.
Для демонстрации передачи файла в таком режиме создадим тестовую конфигурацию, в которой будет справочник “Файлы” с реквизитами “Хранилище” (тип “Хранилище значения” для хранения двоичных данных файла) и “ИмяФайла” (строковой реквизит, в котором хранится исходное имя прикрепленного файла).
Самое интересное будет в форме элемента этого справочника. Для прикрепления файла с диска клиентского компьютера добавим команду “Прикрепить файл”.
По нажатии на кнопку “Прикрепить файл” вызывается диалог выбора файла на диске, а затем его двоичные данные передаются на сторону сервера и записываются в реквизит “Хранилище”. На следующем листинге показан программный код обработчика данной команды:
Обработчик выбора файла и передачи его двоичных данных на сервер для записи в базу данных |
В принципе, здесь все просто и разобраться можно уже по оставленным комментариям. После передачи двоичных данных файла на сервер происходит их запись в базу данных. На следующем листинге показан код серверной процедуры “ПрикрепитьФайлСервер”, вызываемой с клиентской стороны:
Запись двоичные данных файла в реквизит “Хранилище” на серверной стороне |
Приведенный способ передачи файла с клиента на сервер рабочий, не раз применял его для решения практических задач. Об оптимальности предложенного способа хранения файлов в базе сейчас речь не идет. Единственная проблема, с которой встречался при передаче файла таким образом – это “вылет” платформы, если размер файла был более ~200 МБ. Было это примерно 2 года назад, возможно, такая ситуация была связана больше с качеством соединения, чем с платформой.
Web-клиент – давайте разберемся!
Платформа “1С:Підприємство” 8.2 имеет поддержку работы через веб-браузеры без установки дополнительного программного обеспечения на клиентскую машину. Для этого используется режим запуска в веб-клиенте. Общую информацию о нем Вы можете узнать здесь, отмечу лишь, что по своей сути веб-клиент – это тоже тонкий клиент, но базирующийся на применении веб-технологий. Именно последнее делает необходимым применение другого подхода, по сравнению с тонким клиентом, для решения вопросов разработки и взаимодействий клиента и сервера.
Веб-клиент. Ошибка открытия диалога выбора файла |
На предыдущем скриншоте показана реакция платформы, при попытке прикрепить файл в веб-клиенте способом, который мы реализовали для тонкого клиента. Описание ошибки явно говорит нам, что для работы с файлами в этом режиме нам нужно установить для браузера плагин “Расширение для работы с файлами”. Но и тут не все так просто!
Но обо всем по порядку! Сначала установим расширение для работы с файлами. Для этого по команде “Прикрепить файл”, если пользователь работает в режиме веб-клиента, выполним установку компоненты и подключим ее для использования. Вот такой код добавится в начало обработчика:
Установка и подключение расширения работы с файлами для веб-клиента “1С:Підприємство” 8.2 |
Первый вызов метода “ПодключитьРасширениеРаботыСФайлами” позволяет определить было ли оно установлено ранее. Если подключение компоненты не было выполнено, то выполняется его установка и повторная попытка подключения. Но и после этого прикрепить файл не удастся! Вот какая ошибка встретится у нас на пути:
Все дело в том, что веб-клиент не поддерживает конструктор двоичных данных файла на основании пути к нему в файловой системе. Эта ошибка появляется при попытке выполнения строчки с этим конструктором:
“Новый ДвоичныеДанные(<ПутьКФайлу>);”
Как же тогда быть и передать файл на сервер?
Для передачи файлов на сервер в веб-клиенте используется метод “ПоместитьФайлы”. Первым параметром метода передается массив элементов типа “ОписаниеПередаваемогоФайла”, содержащее полный путь к файлу и адрес во временном хранилище. Вторым параметром передается массив, в который будут помещены результаты передачи файлов на сервер (их адреса во временном хранилище и др. информация). Третий и четвёртый параметр – это флаг интерактивной работы (будут ли выводиться диалоги пользователю) и уникальный идентификатор. Подробнее о работе и синтаксисе данного метода Вы можете узнать в синтаксис помощнике. На следующем изображении демонстрируется пример использования метода “ПоместитьФайлы”:
Передача файлов на сервер. Веб-клиент “1С:Підприємство” 8.2 |
Что касается изменений в серверном вызове, то они незначительные. Если процедура “ПрикрепитьФайлСервер” вызывается с веб-клиента, то сначала производится получение двоичных данных из временного хранилища значений, и уже после записывается в базу данных:
Обработка переданного из веб-клиента файла на сервере |
Теперь задача практически решена. Мы можем передавать файлы с клиентской машины на сервер как в режиме тонкого клиента, так и при работе через веб-клиент. В тестовой конфигурации, ссылка для скачивания на которую приведена в конце статьи, Вы можете рассмотреть пример более подробно, поэксперементировать. Также там демонстрируется передача файла обратно с сервера на клиентскую машину.
К чему мы пришли?
Задача решена, все работает. Но стоит сказать о некоторых подводных камнях, с которыми Вы можете столкнуться. Первое, что нужно обязательно знать – это ограничение веб-клиента платформы “1С:Підприємство” 8.2 при работе с такими браузерами как Google Chrome, Safari или Mozilla Firefox. Установить на них расширение работы с файлами проблематично. С первыми двумя у меня так и не получилось научить веб-клиент загружать файлы на сервер. С Firefox задача также была решена, но после долгих танцев с бубном.
Еще один интересный момент – это ограничение работы с некоторыми типами данных на стороне веб-клиента. Выше была показана подобная проблема на примере конструктора двоичных данных. Эти особенности нужно учитывать при разработке.
Google Chrome не поддерживает расширение работы с файлами “1С:Підприємство” 8.2 |
Таким образом, веб-клиент имеет весьма ограниченные возможности по работе с файлами на машине пользователя, передачи их на сервер и обратно. К тому же поддержка только двумя браузерами расширения работы с файлами ставит под сомнение использование этого компонента для решения практических задач, ведь очень многие пользователи используют Chrome или Safari. Имеется другой путь передачи файлов в веб-клиенте, но это уже другая история.
Файлы для загрузки:
-
Информационная база с примером из статьи.
Источник: http://www.develplatform.com/2013/06/blog-post_3.html
Leave a Reply