Необходимость во временном хранилище возникает из-за того, что в модели работы веб-браузера требуется передать выбранный пользователем файл непосредственно на сервер без возможности его хранения на клиенте.
Наиболее типичная решаемая временным хранилищем прикладная задача – обеспечение доступа к файлам или картинкам до того, как объект будет записан в информационную базу, например, в форме элемента.
Файл или двоичные данные, помещенные в хранилище, идентифицируются уникальным адресом, который в дальнейшем можно использовать в операциях записи, чтения или удаления. Этот адрес выдают методы записи файла во временное хранилище. Отдельный метод во встроенном языке позволяет определить, является ли переданный адрес адресом, указывающим на данные во временном хранилище.
Временное хранилище это не объект конфигурации, а объект платформы поэтому для разработчика он выглядит как черный ящик. Можно туда положить что-то получив псевдоним(адрес) и получить из него что-то указав псевдоним(адрес). Но узнать что находится во временном хранилище и сколько нельзя. В ниже рассмотренных примерах помещение в хранилище происходит на клиенте, а чтение на сервере. Хотя можно передавать данные и в обратном направлени
Наиболее типичный сценарий использования данного механизма предусматривает первоначальное размещение данных пользователя во временное хранилище. Для этого предназначены два метода: ПоместитьФайл() и ПоместитьФайлВоВременноеХранилище().
Первый метод, ПоместитьФайл(), помещает файл из локальной файловой системы во временное хранилище. Метод может принимать целевой адрес в хранилище. Если же он не определен или является пустой строкой, то будет создан новый файл и метод вернет его адрес через соответствующий параметр.
Если параметр, определяющий интерактивный режим работы, равен Истина, то метод отобразит стандартное диалоговое окно выбора файла, в котором можно выбрать файл для помещения в хранилище. В этом случае метод также вернет адрес выбранного файла.
Как результат метод возвращает Ложь, если пользователь в интерактивном режиме отказался от совершения операции в диалоге выбора файла. Метод доступен только на клиенте.
Второй метод, ПоместитьФайлВоВременноеХранилище(), схож с предыдущим, за исключением того, что он доступен на сервере, а данные для записи во временное хранилище представляются не в виде пути в файловой системе, а в виде переменной типа ДвоичныеДанные. Точно так же, если не указан целевой адрес, создается новый файл в хранилище. Его адрес возвращается как результат функции.
При записи объекта в информационную базу может понадобиться извлечь данные из временного хранилища и поместить их, например, в реквизит. Для этого есть соответствующий серверный метод — ПолучитьФайлИзВременногоХранилища(). Этот метод извлекает данные из временного хранилища и возвращает их как результат. Для этого необходимо указать адрес во временном хранилище. Этот адрес возвращают вышеописанные методы ПоместитьФайл() и ПоместитьФайлВоВременноеХранилище() в случае их успешного выполнения.
После того, как данные сохранены в реквизите, файл во временном хранилище можно удалить. Для этого есть метод УдалитьФайлИзВременногоХранилища(), который удаляет файл из временного хранилища. Метод принимает в параметре адрес файла во временном хранилище. Доступен на сервере.
Адрес файла может указывать как на временное хранилище, так и на реквизит в информационной базе. Для проверки его типа существует метод ЭтоАдресВременногоХранилища().
Он проверяет, что переданный адрес является адресом, указывающим на хранилище. Возвращает Истина, если адрес указывает на временное хранилище. Метод доступен на сервере.
После того, как данные помещены в реквизит в информационной базе, может потребоваться получить доступ к ним с помощью файловых методов.
Но прежде чем получить данные, например из реквизита, необходимо получить адрес этого реквизита. Для этого существует метод ПолучитьАдресФайлаВИнформационнойБазе().
Его назначение – вернуть адрес файла в информационной базе по исходным параметрам. Для этого необходимо передать ключ объекта (это может быть как ссылка на объект, так и ключ записи регистра сведений) и имя реквизита. Если нужно получить адрес файла, хранимого в реквизите табличной части, до имени реквизита в параметре, задающем имя реквизита, необходимо добавить имя табличной части и точку «.». Метод доступен как на клиенте, так и на сервере.
Метод ПолучитьФайл() получает файл из информационной базы и сохраняет его в локальную файловую систему пользователя. Первый параметр определяет адрес файла в реквизите или во временном хранилище файлов. Второй параметр определяет целевое расположение полученного файла. В не интерактивном режиме необходимо указать путь. В интерактивном режиме параметр является опциональным.
По умолчанию метод исполняется в интерактивном режиме, то есть последний параметр равен Истина. Это значит, что выдается диалоговое окно, в котором можно указать действие с полученным файлом: запустить его или сохранить по указанному пользователем расположению. Если активен интерактивный режим, а параметр Целевой путь к файлу на диске не указан, то операция открытия файла не доступна. Возвращает булевское значение. Ложь означает, что пользователь выбрал отмену операции в диалоговом окне сохранения файлов в интерактивном режиме.