Хранение файлов в базе 1С. Примитивное файловое хранилище на Base64

Хранение файлов в базе 1С. Примитивное файловое хранилище на Base64

Добрый день, это гайд из нескольких частей о том как можно удобно хранить файлы в самописной базе, а  также их открывать.
Для того чтобы хранить файлы в базе данных, необходимо:
1. Создать справочник, с реквизитом файл, тип строка, длина — неограниченная, длина наименования 125
2. Описать процедуру загрузки файла

Файлы необходимо хранить в виде строки, алгоритм прост:
1. Запускаем диалоговое окно для выбора файла
2. Конвертируем выбранный файл в двоичные данные
3. Конвертируем в Base64, и сохраняем в справочнике
Соответственно чтобы открыть файлы, алгоритм будет обратный:
1. Base64 конвертируем в двоичные данные
2. Записываем на диск (будем использовать временную папку системы)
3. Открываем через ЗапуститьПриложение()

Начнем:

Загрузка файлов

Подразумеваю что первоначальная инструкция выполнена, перейдем дальше:

  • Создаем форму элемента, добавляем команду ЗагрузитьФайл
  • К ней цепляем процедуру которая будет выполняться на клиенте
  • Команду кидаем на форму
  • В модуле формы создаем функцию запуска диалога выбора файла:

&НаКлиенте
Функция ВыбратьФайл()
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = «Выберите файл для загрузки»;
Если ДиалогОткрытияФайла.Выбрать() Тогда
Возврат ДиалогОткрытияФайла.ПолноеИмяФайла;
Иначе
Возврат ЛОЖЬ;
КонецЕсли;
КонецФункции

  •  У процедуры ЗагрузитьФайл вызываем данную функцию, с записью в переменную ПутьКФайлу
  • Стоит конечно же сделать проверку на факт того что файл был выбран
  • Далее преобразуем выбранный файл в двоичные данные,  и с помощью Base64Строка() переводим в Base64
  • Объекту Файл присваиваем данное значение
  • Теперь необходимо указать наименование, мы имеем полный путь к файлу, а нам нужен с расширением файла, для этого объявляем Новый Файл(ПутьКФайлу), в наименование пишем поле Имя данного файла.
  • Получится такая вот процедура:

 &НаКлиенте
Процедура ЗагрузитьФайл(Команда)
ПутьКФайлу = ВыбратьФайл();
Если ПутьКФайлу<>ЛОЖЬ Тогда
БинарныйФайл = Новый ДвоичныеДанные(ПутьКФайлу);
Base64 = Base64Строка(БинарныйФайл);
Объект.Файл = Base64;
ФайлДляНаименования = Новый Файл(ПутьКФайлу);
Объект.Наименование = ФайлДляНаименования.Имя;
Иначе
Сообщить(«Файл не выбран»);
КонецЕсли;
КонецПроцедуры

 Открытие файлов

  •  Проверим заполнено ли значение файла
  • Для записи файла на диск из Base64 нам необходим новый полный путь к файлу, строим его относительно папки Temp, для этого вызываем функцию КаталогВременныхФайлов(), и крепим к нему наименование элемента справочника (в предыдущем разделе мы специальной сохраняли имя файла с расширением)
  • В переменную БинарныйФайл пишем двоичные данные из Base64, т.е. расшифровываем нашу строку с помощью Base64Значение()
  • Производим запись, и запуск файла с помощью ЗапуститьПриложение()

&НаКлиенте
Процедура ОткрытьФайл(Команда)
Если ЗначениеЗаполнено(Объект.Файл) Тогда
ПутьКФайлу = КаталогВременныхФайлов()+Объект.Наименование;
БинарныйФайл = Base64Значение(Объект.Файл);
БинарныйФайл.Записать(ПутьКФайлу);
ЗапуститьПриложение(ПутьКФайлу);
Иначе
Сообщить(«Файл не загружен»);
КонецЕсли;
КонецПроцедуры

Так-же не забудьте навести красоту на форме.
Недостатки на данном этапе:

  • Можно загружать один и тот же файл сколько угодно раз
  • Временные файлы не удаляются
  • Файлы хранятся не в архиве, и занимают больше места

Скачать конфигурацию

Оставьте комментарий