Хранение файлов в информационной базе 1С

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

Это бывает очень полезно. Поскольку позволяет, например, хранить не только информацию о документах, но и сами документы в формате pdf, txt и т.д. Механизм сохранения и выгрузки одинаков для всех типов файлов.

Создание хранилища файлов

Файлы можно хранить непосредственно в самих объектах конфигурации, к которым они относятся. Но, это не лучшее решение, так как файлы могут иметь очень большой размер. Гораздо эффективнее создать для них отдельной хранилище.

Создадим справочник Файлы. В нём, помимо стандартных, будут следующие атрибуты:

  • Файл – тип данных хранилище значения.
    В нём и будут храниться двоичные данные файла;
  • ИмяФайла – тип данных строка (неограниченная длина).
    Исходное имя файла вместе с расширением (будет использоваться для выгрузки);
  • Владелец – тип данных ссылка на объект конфигурации (справочник, документ) или любая ссылка.
    Хранит ссылку на объект конфигурации, к которому относится файл.
Загрузка файлов (стандартный способ)

Процесс загрузки файлов состоит из двух этапов:

  1. На клиенте – выбор файла и его загрузка файла во временное хранилище;
  2. На сервере – сохранение файла в ранее созданный справочник.

В качестве примера, рассмотрим информационную базу «Библиотека» в которой планируется хранить полнотекстовые произведения классических авторов.

Для справочника «Авторы» создадим специальную форму, а в ней команду «Добавить файл».

В клиентской процедуре мы вызываем диалог выбора файла, и, если файл выбран, помещаем прочитанный файл во временное хранилище. При этом для окончательной записи в справочник передаём на сервер адрес файла во временном хранилище и его имя.

Имя файла получаем из полного имени (полного пути на диске) с помощью шаблонного решения:

На сервере мы создаём новый элемент справочника «Файлы» и записываем в реквизит «Файл» данные из временного хранилища. После этого записываем в реквизит «ИмяФайла» исходное имя файла, полученное с клиентской стороны, а в атрибут «Владелец» записываем ссылку на элемент справочника «Авторы» к которому относится загруженный файл.

После этого сохраняем вновь созданный элемент в справочнике «Файлы».

Процесс загрузки файла в информационную базу 1С завершён.

Загрузка файлов (улучшенный способ)

Выше был приведён так называемый «стандартный» способ загрузки файлов, в котором используется временное хранилище. Но, он работает не всегда и бывает, что файлы не загружаются.

Это обстоятельство вызвано издержками работы временного хранилища. Однако помимо «стандартного», есть и другой более надёжный способ.

Он основан на использовании объекта «ДвоичныеДанные» и подразумевает загрузку файла в этот объект вместо временного хранилища.

Вместо адреса во временном хранилище, из которого ещё требуется извлечь необходимые данные, в этом способе на серверной стороне обрабатывается сразу  непосредственное содержимое файла.

В результате получаем надёжное средство загрузки файлов информационную базу, которое работает корректно практически всегда.

Выгрузка файлов

Для выгрузки файлов из информационной базы на жёсткий диск создадим простейшую форму элемента справочника «Файлы».

Эта форма не содержит ничего, кроме команды «Выгрузить файл».

Выгрузка файлов также состоит из двух этапов:

  1. На клиенте – выбор папки, в которую следует сохранить выгружаемый файл;
  2. На сервере – собственно выгрузка файла.

На клиентской стороне с помощью объекта «ДиалогВыбораФайла» выбираем папку для сохранения и передаём её имя на сервер.

В свою очередь на сервере формируем полное имя файла и, получив двоичные данные файла из справочника, сохраняем файл.

К сожалению 1С Предприятие не всегда добавляет символ «\» в конец имени папки. Поэтому при формировании полного имени файла добавлена проверка.

С помощью приведённой процедуры файл, хранящийся в информационной базе 1С можно выгрузить в любую выбранную папку.

8 комментариев

  1. Добрый день. Очень хорошая и доступная статья. Все получилось, но.. Как мне теперь в режиме Предприятие открыть этот сохраненный файл?

    1. При выполнении выгрузки выдает следующее «{Справочник.БазаФайлов.Форма.ФормаЭлемента.Форма(20)}: Значение не является значением объектного типа (Записать) Знч.Записать(ИмяФайла); «

      1. Вы получаете не тот объект, что необходимо. Вам нужен объект записи в БД на сервере, а Вы зачем-то обращаетесь к форме справочника.

    1. Самый простой вариант. Можно его выгрузить (например, в служебную временную папку) и там открыть. Можно попробовать его отобразить в поле HTML (для этого на просторах сети даже были готовые обработки).

  2. А могли бы пояснить, по какой причине решили отказаться от использования ПоместитьВоВременноеХранилище (а для более современных платформ лучше использовать асинхронные варианты вида НачатьПомещениеФайлаНаСервер, и использовать передачу двоичных данных через параметр?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *