Небольшая задачка
Работа пользователей в конфигурациях на платформе 1С:Предприятие 8.2 часто может быть связана с прикреплением различных файлов к информационной базе. Например, присоединение изображений номенклатуры или отсканированных уставных документов к справочнику "Организации".
| Прикрепление файлов в толстом клиенте в справочнике "Организации" ("Управление производственным предприятием", вер. 1.3) |
С появлением в платформе 8.2 режимов тонкого и веб-клиентов, изменились способы передачи файлов с клиентской машины на сервер. Если раньше, в толстом клиенте, для прикрепления файла нужно было лишь вызвать диалог выбора и на основе полученного пути к файлу получить его двоичные данные для записи в информационную базу, то теперь остро встает вопрос о механизме передачи двоичных данных файла с клиентской машины на сторону сервера.
| Как передать файл с клиента на сервер для тонкого и веб-клиентов. |
В настоящей статье рассмотрим процесс передачи файла как для тонкого клиента 1С:Предприятия 8.2, так и для варианта работы через веб-клиент.
Тонкий клиент - проще простого!
Начнем с самого простого - передачи файла на сервер для тонкого клиента 1С:Предприятия 8.2. Общую информацию о нем Вы можете узнать по ссылке. Отмечу лишь, что тонкий клиент - это отдельное приложение, которое позволяет работать с конфигурациями в режиме управляемого приложения, а также использует меньше ресурсов клиентской машины по сравнению с толстым клиентом.
Для демонстрации передачи файла в таком режиме создадим тестовую конфигурацию, в которой будет справочник "Файлы" с реквизитами "Хранилище" (тип "Хранилище значения" для хранения двоичных данных файла) и "ИмяФайла" (строковой реквизит, в котором хранится исходное имя прикрепленного файла).
Самое интересное будет в форме элемента этого справочника. Для прикрепления файла с диска клиентского компьютера добавим команду "Прикрепить файл".
По нажатии на кнопку "Прикрепить файл" вызывается диалог выбора файла на диске, а затем его двоичные данные передаются на сторону сервера и записываются в реквизит "Хранилище". На следующем листинге показан программный код обработчика данной команды:
| Обработчик выбора файла и передачи его двоичных данных на сервер для записи в базу данных |
В принципе, здесь все просто и разобраться можно уже по оставленным комментариям. После передачи двоичных данных файла на сервер происходит их запись в базу данных. На следующем листинге показан код серверной процедуры "ПрикрепитьФайлСервер", вызываемой с клиентской стороны:
| Запись двоичные данных файла в реквизит "Хранилище" на серверной стороне |
Приведенный способ передачи файла с клиента на сервер рабочий, не раз применял его для решения практических задач. Об оптимальности предложенного способа хранения файлов в базе сейчас речь не идет. Единственная проблема, с которой встречался при передаче файла таким образом - это "вылет" платформы, если размер файла был более ~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. Имеется другой путь передачи файлов в веб-клиенте, но это уже другая история.
Файлы для загрузки:
- Информационная база с примером из статьи.









































































ua
ac
at
be
biz.pl
cc
co.za
com.ru
de
fr
hk
it
kg
li
lt
ms
mx
nl
ro
se
sh
sk
su
vg
by
co.il
cz
io
jp
sc
sg
kz
ae
am
cn
co
cx
fm
ki
lv
si
uz
tj
ag
bz
com.tw
es
eu
im
in
la
md
me
tv
vc
ws
gr
org.uk
tk
nu
tm