Как передать файл с сервера на клиент
Перейти к содержимому

Как передать файл с сервера на клиент

  • автор:

Как передать файл с сервера на клиент

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

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

Работа с файловой системой в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Клиент-сервер

(5) Надо на сервере сформировать Excel. (Справился с грехом. Не восьмёрочник я). Потом переправить его к клиенту.

В обратную сторону — нарыл код в инете. А вот в эту — никак.

Там на клиенте загрузка в Хранилище идёт методом «ПоместитьФайлы». На сервере этот метод отметается уже при компиляции. Да и из описания следует, что на сервере работать не будет.

&НаСервере
Функция ПолучитьФайл()
Двоичное=Новый ДвоичныеДанные(«C:\файл.bmp»);
Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);
Возврат Адрес
КонецФункции

&НаКлиенте
Процедура Получить()
Адрес=ПолучитьФайл();
Двоичное=ПолучитьИзВременногоХранилища(Адрес);
КонецПроцедуры

Если же тебе файл надо на Клиенте сохранить на жОсткий — тогда так:

&НаСервере
Функция ПолучитьФайл()
Двоичное=Новый ДвоичныеДанные(«C:\файл.bmp»);
Адрес=ПоместитьВоВременноеХранилище(Двоичное,ЭтаФорма.УникальныйИдентификатор);
Возврат Адрес
КонецФункции

1С 8.3 Файлы, каталоги — Программист 1С Минск. Автоматизация бизнеса.

✔ Чтение и запись файлов

&НаСервере
Процедура ЧтениеИЗаписьФайлов ()

// Любое сериализуемое значение (массив, структура, таблица значений, строки. ) можно сохранить в файл
НаборСимволов = Новый Массив ;
НаборСимволов . Добавить ( 125 );
НаборСимволов . Добавить ( «А» );
НаборСимволов . Добавить ( «99» );
НаборСимволов . Добавить ( «%» );
ЗначениеВФайл ( «D:\Symbol.txt» , НаборСимволов ); // работает только на &НаСервере

// Восстановление произвольных значений из файла
НаборСимволовИзФайла = ЗначениеИзФайла ( «D:\Symbol.txt» );
Сообщить ( НаборСимволовИзФайла [ 0 ]); // 125
Сообщить ( НаборСимволовИзФайла [ 1 ]); // А
Сообщить ( НаборСимволовИзФайла [ 2 ]); // 99
Сообщить ( НаборСимволовИзФайла [ 3 ]); // %

&НаКлиенте
Процедура ОперацииНадФайлами ( Команда )

// Создание переменных (имя и путь к файлу)
ПутьКФайлу_Test = «D:\Test.txt» ;
ПутьКФайлу_Copy = «D:\Copy.txt» ;

// Создание пустого файла
ТекстФайл = Новый ЗаписьТекста ();
ТекстФайл . Закрыть ();

// Проверка на существование файла
ТекстФайл = Новый Файл ( ПутьКФайлу_Test );
Если ТекстФайл . Существует () Тогда
Сообщить ( ПутьКФайлу_Test + » существует!» );
КонецЕсли;

// Копирование файла. Параметры: Какой файл копируем, Куда файл копируем
КопироватьФайл ( ПутьКФайлу_Test , ПутьКФайлу_Copy ); // Если файл существует, то перезапишет

// Перемещение файла. Параметры: Какой файл копируем, Куда файл копируем
ПереместитьФайл ( ПутьКФайлу_Test , ПутьКФайлу_Copy ); // Если файл существует, то перезапишет

// Поиск файлов в каталоге (функция возвращает массив значений)
// Параметры: Каталог поиска, Маска поиска, Поиск и в подкаталогах
МассивФайлов = НайтиФайлы ( «D:\» , «*.txt» , Ложь);
Для Каждого ТекФайл Из МассивФайлов Цикл
Сообщить ( «Найден файл: » + ТекФайл . ПолноеИмя );
КонецЦикла;

// Удаление файла
УдалитьФайлы ( ПутьКФайлу_Test ); // Если файл с параметром только для чтения, то будет ошибка

// Удаление файлов в каталоге по маске
// поиск в каталоге нерекурсивный
УдалитьФайлы ( «D:\» , «*.txt» ); // Если маски нет, то удалятся все файлы и сам каталог

// Получение имя временного файла
ПолучитьИмяВременногоФайла (); // Например, C:\Temp\H_kImX035.tmp
ПолучитьИмяВременногоФайла ( «.txt» ); // Например, C:\Temp\H_kImX035.txt

&НаКлиенте
Процедура ПолучениеИИзменениеАтрибутовФайла ( Команда )

ТекстФайл = Новый Файл ( «D:\Test.txt» );

// Чтение атрибутов
ТекстФайл . ПолучитьВремяИзменения (); // время последнего изменения файла
ТекстФайл . ПолучитьТолькоЧтение (); // проверяем атрибут только чтение
ТекстФайл . ПолучитьНевидимость (); // проверяем атрибут hidden (скрытность, невидимость)
ТекстФайл . Размер (); // размер файла в байтах

// Получение расширение файла из его пути
ТекстФайл . Расширение (); // .txt

// Получение имени файла без расширения
ТекстФайл . ИмяБезРасширения (); // Test

// Получение информации по пути файла — это файл или каталог
Если ТекстФайл . ЭтоКаталог () Тогда
// Это каталог
ИначеЕсли ТекстФайл . ЭтоФайл () Тогда
// Это файл
КонецЕсли;

// Изменение атрибутов
ТекстФайл . УстановитьВремяИзменения ( ТекущаяДата ()); // меняем время последнего изменения файла
ТекстФайл . УстановитьТолькоЧтение (Ложь); // меняем атрибут только чтение
ТекстФайл . УстановитьНевидимость (Ложь); // меняем атрибут невидимости

&НаКлиенте
Процедура ОперацииНадКаталогами ( Команда )

//Создание каталога (он может уже существовать)
СоздатьКаталог ( «D:\Catalog» );

//Создание подкаталогов
СоздатьКаталог ( «D:\Catalog\2020\1» );

// Проверка существования каталога
Каталог = Новый Файл ( «D:\Catalog» );
Если Каталог . Существует () Тогда
Сообщить ( «Каталог по пути D:\Catalog существует!» );
КонецЕсли;

// Удаление каталога (вместе с файлами и подкаталогами)
УдалитьФайлы ( «D:\Catalog» ); // Можно добавить максу

// Получение каталога временных файлов
КаталогВременныхФайлов (); // Например, C:\Windows\Temp

&НаКлиенте
Процедура ОперацииСВременнымХранилищем ( Команда )

// Временное хранилище позволяет передавать данные,
// которые иначе не передать (произвольного типа) между сервером и клиентом

// Сохранение произвольного значения (списка значений) во временном хранилище
СЗ = Новый СписокЗначений ;
СЗ . Добавить ( «Арбуз» );
СЗ . Добавить ( «Дыня» );
СЗ . Добавить ( «Яблоко» );
АдресВХранилище = ПоместитьВоВременноеХранилище ( СЗ );

// Чтение произвольного значения (списка значений) из временного хранилища
СЗИзХранилища = ПолучитьИзВременногоХранилища ( АдресВХранилище );
Если СЗИзХранилища = Неопределено Тогда
Сообщить ( «Значение по этому адресу из хранилища уже удалено!» );
Иначе
Сообщить ( СЗИзХранилища [ 0 ]); // Арбуз
КонецЕсли;

// Перезапись уже сохраненного значения (массив) во временном хранилище
НаборСимволов = Новый Массив ;
НаборСимволов . Добавить ( 125 );
НаборСимволов . Добавить ( «А» );
НаборСимволов . Добавить ( «99» );
НаборСимволов . Добавить ( «%» );

// Время хранения зависит от параметра «АдресВХранилище» функции ПоместитьВоВременноеХранилище
ПоместитьВоВременноеХранилище ( НаборСимволов , АдресВХранилище );

// Если адрес — уникальный идентификатор формы или существующий адрес в хранилище:
// Значение будет удалено после закрытия формы
ПоместитьВоВременноеХранилище ( НаборСимволов , ЭтаФорма . УникальныйИдентификатор );

// Если адрес — уникальный идентификатор, не являющийся уникальным идентификатором формы %
// Значение будет удалено после завершения сеанса пользвоателя
ПоместитьВоВременноеХранилище ( НаборСимволов , Новый УникальныйИдентификатор );

// Если адрес не указан:
// Значение будет удалено после очередного запроса сервера
ПоместитьВоВременноеХранилище ( НаборСимволов );

// Удаление значения из временного хранилища
УдалитьИзВременногоХранилища ( АдресВХранилище );

// Проверка является ли строка адресом во временном хранилище
Если ЭтоАдресВременногоХранилища ( АдресВХранилище ) Тогда
// Это адрес во временном хранилище
КонецЕсли;

&НаКлиенте
Процедура ПередачаФайлаСКлиентаНаСервер ( Команда )

ТекстФайл = Новый ЗаписьТекста ( «D:\Prostokvashino.txt» );
ТекстФайл . ЗаписатьСтроку ( «Кот Матроскин» );
ТекстФайл . ЗаписатьСтроку ( «Дядя Федор» );
ТекстФайл . ЗаписатьСтроку ( «Шарик» );
ТекстФайл . Закрыть ();

Завершено = Новый ОписаниеОповещения ( «ПослеПередачи» , ЭтотОбъект );

// Параметр УникальныйИдентификаторФормы — если не указывать — то файл будет удален после очередного запроса сервера
// если указать — то после удаления объекта формы
// Параметр Интерактивно (Истина) — дает пользователю выбрать файл самому
НачатьПомещениеФайла ( Завершено , , «D:\Prostokvashino.txt» , Ложь, ЭтаФорма . УникальныйИдентификатор );

&НаКлиенте
Процедура ПослеПередачи ( Результат , ХранимыйАдрес , ВыбранноеИмяФайла , ДопПараметры ) Экспорт

Если Результат Тогда
// Сохранение полученного адреса в реквизите формы (строка) — адрес файла в хранилище на сервере
АдресФайлаВХранилище = ХранимыйАдрес ;
Сообщить ( «Файл » + ВыбранноеИмяФайла + » передан на сервер и сохранён во временном хранилище. Адрес: » + ХранимыйАдрес );
Иначе
Сообщить ( «Ошибка передачи файла на сервер!» );
КонецЕсли;

20.3 Способы работы с файлами и временным хранилищем

Метод ПоместитьФайл() помещает файл из локальной файловой системы во временное хранилище. Метод может принимать адрес во временном хранилище, по которому нужно сохранить файл. Если же адрес не определен или является пустой строкой, то будет создан новый адрес и метод вернет его через специальный параметр.
Примечание. Объем данных, перемещаемых между клиентом и сервером, за один вызов метода ПоместитьФайл() , не должен превышать 4 Gb (в сериализованном виде).
Если параметр, определяющий интерактивный режим работы, равен Истина, то метод отобразит стандартное диалоговое окно выбора файла, в котором можно выбрать файл для помещения в хранилище. В этом случае метод также вернет адрес выбранного файла.
В качестве результата метод возвращает Ложь, если пользователь в интерактивном режиме отказался от совершения операции в диалоге выбора файла.

Помещение набора файлов

Метод ПоместитьФайлы() помещает во временное хранилище несколько файлов за один вызов. Существует несколько различных способов использования этого метода:
● предварительно сформировать список добавляемых файлов, например, когда предварительно выбрал файлы, которые необходимо поместить в информационную базу;
● передать в метод маску поиска файлов, например, когда требуется поместить в информационную базу все файлы определенного вида,например, все картинки;
● передать в метод предварительно подготовленный объект ДиалогВыбораФайла в режиме открытия файлов.
После окончания работы метод может вернуть список реально добавленных файлов.

// СписокФайлов – реквизит формы типа СписокЗначений,
// содержащий список добавляемых файлов
МассивФайлов = Новый Массив;
Для каждого ЭлементСписка Из СписокФайлов Цикл
МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(ЭлементСписка, ));
КонецЦикла;
ПомещенныеФайлы = Новый Массив;
Результат = ПоместитьФайлы (МассивФайлов, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор);

Примечание 1. Для использования метода ПоместитьФайлы() в веб-клиенте требуется подключение расширения работы с файлами .
Примечание 2. Объем данных, перемещаемых между клиентом и сервером, за один вызов метода ПоместитьФайлы() , не должен превышать 4 Gb (в сериализованном виде).

Помещение данных во временное хранилище

Метод ПоместитьВоВременноеХранилище() схож с методом ПоместитьФайл() , за исключением того, что данные для записи во временное хранилище
представляются не в виде пути в файловой системе, а в виде значения. Точно так же, если не указан существующий адрес во временном хранилище, создается новый адрес. Адрес возвращается как результат функции. Так же как и для файлов, размещенные данные обязательно принадлежат какой-либо форме и автоматически удаляются после ее удаления.
Примечание. Объем данных, перемещаемых между клиентом и сервером, за один вызов метода ПоместитьВоВременноеХранилище() , не должен превышать 4 Gb (в сериализованном виде).
Внимание! При помещении во временное хранилище фактическая сериализация значения не выполняется. Помещается ссылка на значение, которая хранится в кеше в течение 20 минут. По истечении этого периода значение сериализуется, записывается на диск (в хранилище сеансовых данных) и удаляется из кеша.

Получение данных из временного хранилища

При записи объекта в информационную базу может понадобиться извлечь данные из временного хранилища и поместить их, например, в реквизит объекта информационной базы. Для этого существует специальный метод – ПолучитьИзВременногоХранилища(). Этот метод извлекает данные из временного хранилища и возвращает их в качестве результата выполнения. Для получения данных необходимо указать адрес во временном
хранилище. Этот адрес возвращают методы помещения данных во временное хранилище в случае их успешного выполнения (см. предыдущие разделы).
Внимание! При получении на сервере значения из временного хранилища следует учитывать то, что оно получается по ссылке. В действительности, ссылка эта указывает на значение, которое хранится в кеше. В течение 20 минут, с момента помещения в хранилище или же с момента последнего обращения, значение сохранится в кеше, а затем записывается на диск и из кеша удаляется. При следующем обращении значение загружается с диска и снова помещается в кеш.
После десериализации и восстановления значения из временного хранилища ссылки не восстанавливаются. Значение в кеше восстанавливается с диска. Но после сериализации/десериализации восстановить ссылки на другие объекты внутри значения невозможно.

Удаление данных из временного хранилища

После того как данные сохранены в реквизите объекта информационной базы, данные во временном хранилище можно удалить. Для этого есть метод
УдалитьИзВременногоХранилища(), который производит удаление. Метод принимает в параметре адрес во временном хранилище.

Проверка адреса на принадлежность временному хранилищу

Адрес может указывать как на временное хранилище, так и на реквизит в информационной базе. Для проверки его типа существует метод
ЭтоАдресВременногоХранилища(). Он проверяет, что переданный адрес является адресом, указывающим на хранилище. Возвращает Истина, если адрес указывает на временное хранилище.

Получение адреса реквизита

После того как данные помещены в реквизит объекта информационной базы, может потребоваться получить доступ к ним с помощью файловых методов.
Но прежде чем получить данные, например из реквизита, необходимо получить адрес этого реквизита. Для этого существует метод ПолучитьНавигационнуюСсылку() .

Он может вернуть адрес значения в информационной базе по исходным параметрам. Для этого необходимо передать ключ объекта (это может быть
как ссылка на объект, так и ключ записи регистра сведений) и имя реквизита. Если нужно получить адрес значения, хранимого в реквизите
табличной части, то к имени реквизита в параметре, задающем имя реквизита, необходимо добавить имя табличной части и точку «.». Например: Товары.Изображение

Получение файла из информационной базы

Получение одного файла

Метод ПолучитьФайл() получает файл из информационной базы и сохраняет его в локальную файловую систему пользователя. Первый параметр определяет адрес файла в реквизите объекта информационной базы или во временном хранилище файлов. Сохранение не произойдет, если у пользователя, от имени которого выполняется операция, отсутствует право Просмотр на реквизит объекта информационной базы. Второй параметр определяет место сохранения получаемого файла. В неинтерактивном режиме необходимо указать путь. В интерактивном режиме параметр является
опциональным.
По умолчанию метод исполняется в интерактивном режиме. Это значит, что будет сформировано диалоговое окно, в котором можно указать действие с полученным файлом: запустить его или сохранить в указанное пользователем место файловой системы. Если выбран интерактивный режим, а параметр Имя файла не указан, то операция открытия файла недоступна. Метод возвращает значение типа Булево. Ложь означает, что пользователь выбрал отмену операции в диалоговом окне сохранения файлов в интерактивном режиме.

Получение набора файлов

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

// СписокФайлов – список значений, содержащий ссылки на элементы
// справочника, в котором расположены выгружаемые файлы
// Представлением списка значений является имя выгружаемого файла
МассивФайлов = Новый Массив;
Для каждого ЭлементСписка Из СписокФайлов Цикл
Файл = Новый Файл(Строка(ЭлементСписка.Значение));
ПолучаемыйФайл = Новый ОписаниеПередаваемогоФайла;
ПолучаемыйФайл.Имя = ЭлементСписка.Представление;
ПолучаемыйФайл.Хранение = П олучитьНавигационнуюСсылку(ЭлементСписка.Значение, “Данные”);
МассивФайлов.Добавить(ПолучаемыйФайл);
КонецЦикла;
ПолученныеФайлы = Новый Массив;
Результат = ПолучитьФайлы(МассивФайлов, ПолученныеФайлы, ПутьВыгружаемыхФайлов, Ложь) ;
Если НЕ Результат Тогда
Сообщение = Новый СообщениеПользователю ;
Сообщение.Текст = “Ошибка получения файлов!” ;
Сообщение.Сообщить();
КонецЕсли ;

После окончания работы метод может вернуть список реально выгруженных файлов с указанием полного имени каждого сохраненного файла.
ПРИМЕЧАНИЕ. Для использования метода ПолучитьФайлы() в веб-клиенте требуется подключение расширения работы с файлами . В случае если свойство Имя объекта ОписаниеПередаваемогоФайла содержит абсолютный путь к файлу, файл будет сохранен по этому пути, без учета параметра РасположениеФайлов .
В качестве параметра РасположениеФайлов может выступать или путь в локальной файловой системе, или объект ДиалогВыбораФайлов в режиме выбора каталога или сохранения файлов. Если в качестве значения параметра РасположениеФайлов указан объект ДиалогВыбораФайлов в режиме
сохранения файлов, то:

● диалог будет вызываться для каждого передаваемого файла, кроме тех файлов, для которых свойство Имя объекта ОписаниеПередаваемогоФайла содержит абсолютный путь;
● в качестве начального имени файла в диалоге будет использоваться значение свойства Имя объекта ОписаниеПередаваемогоФайла;
● если для какого-либо файла будет выбран отказ от сохранения, то свойство Имя объекта ОписаниеПереданногоФайла будет содержать пустую строку;
● метод ПолучитьФайлы() вернет значение Истина, если хотя бы один файл получен успешно;
● следует учитывать, что собственно получение файлов выполняется после того, как пользователь ответит на вопросы по указанию имени и пути
всех получаемых файлов;
● если у пользователя, от имени которого выполняется метод ПолучитьФайлы(), отсутствует право Просмотр хотя бы на один реквизит объекта информационной базы, откуда выполняется получение файлов – неудачей завершится вся операция.
Пример:

ПередаваемыеФайлы = Новый Массив;
Описание = Новый ОписаниеПередаваемогоФайла (“Описание”, АдресФайла );
ПередаваемыеФайлы.Добавить ( Описание );
ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ВыборФайла.Заголовок = “Сохранение архива”;
ВыборФайла.Расширение = “zip”;
ВыборФайла.Фильтр = “Архив(*.zip)|*.zip|Все файлы|*.*”;
ВыборФайла.ИндексФильтра = 0 ;
ПолучитьФайлы(ПередаваемыеФайлы, , ВыборФайла, Ложь) ;

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

Пример использования файловых методов

// Получение в интерактивном режиме файла с диска
// и помещение его во временное хранилище.
&НаКлиенте
Процедура ВыбратьФайлСДискаИЗаписать()
Перем ВыбранноеИмя;
Перем АдресВременногоХранилища;
НовыйОбъект = Объект.Ссылка.Пустая();
Если ПоместитьФайл(АдресВременногоХранилища, “”, ВыбранноеИмя, Истина) Тогда
Объект.ИмяФайла = ВыбранноеИмя;
ПоместитьФайлОбъекта(АдресВременногоХранилища);
КонецЕсли;
КонецПроцедуры
// Копирование файла из временного хранилища в реквизит
// справочника, запись объекта, удаление файла из временного
// хранилища.
&НаСервере
Процедура ПоместитьФайлОбъекта(АдресВременногоХранилища)
ЭлементСправочника = РеквизитФормыВЗначение(“Объект”);
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ЭлементСправочника.ДанныеФайла = Новый ХранилищеЗначения(ДвоичныеДанные , Новый СжатиеДанных()) ;
Файл = Новый Файл(ЭлементСправочника.ИмяФайла) ;
ЭлементСправочника.ИмяФайла = Файл.Имя;
ЭлементСправочника.Записать();
Модифицированность = Ложь;
УдалитьИзВременногоХранилища(АдресВременногоХранилища);
ЗначениеВРеквизитФормы(ЭлементСправочника, “Объект”);
КонецПроцедуры
// Считывание файла из реквизита и сохранение его
// на локальном диске в интерактивном режиме.
&НаКлиенте
Процедура ПрочитатьФайлИСохранитьНаДиск()
Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка,”ДанныеФайла”);
ПолучитьФайл(Адрес, Объект.ИмяФайла, Истина);
КонецПроцедуры

Разрешение на выполнение группы операций с файлами

При выполнении некоторых операций в веб-клиенте может потребоваться получить разрешение на несколько операций по работе с файлами.
Например, необходимо выполнить получение документа из информационной базы и затем открыть сохраненный документ с помощью ассоциированного приложения.
Для выполнения этой операции потребуется отвечать на вопрос о сохранении документа и на вопрос о необходимости запуска. Если операций будет больше, вопросов пользователю также станет больше.
Для уменьшения количества вопросов можно воспользоваться методом ЗапроситьРазрешениеПользователя() . При использовании этого метода
пользователю отображается список всех операций, которые планируется выполнить, и предлагается разрешить выполнение группы операций. Если пользователь разрешил выполнение, то запрошенные операции будут выполняться без дополнительных запросов пользователю. Если разрешение не предоставлено, операции будут выполняться в обычном режиме: один запрос на одну операцию.
ПРИМЕЧАНИЕ. Для использования метода ЗапроситьРазрешениеПользователя() в веб-клиенте требуется подключить расширение работы с файлами .
Рассмотрим пример использования метода:

Если ПодключитьРасширениеРаботыСФайлами() Тогда
Ссылка = ПолучитьНавигационнуюСсылку(Объект.Ссылка, “ДанныеФайла”);
// Формирование описания передаваемых файлов (в данном случае файл один)
ПередаваемыеФайлы = Новый Массив;
Описание = Новый ОписаниеПередаваемогоФайла(Объект.ИмяФайла, Ссылка);
ПередаваемыеФайлы.Добавить(Описание);
// Готовим объект для получения информации о полученных файлах
ПереданныеФайлы = Новый Массив;

// Определяем прочие параметры методов
КаталогСохранения = “c:\temp”;
Интерактивно = Ложь ;
ИмяПереданногоФайла = КаталогСохранения + “\” + Объект.ИмяФайла ;
// Готовим описание методов для получения разрешений
Методы = Новый Массив;
Методы.Добавить(Новый Массив);
Методы[0].Добавить(“ПолучитьФайлы”);
Методы[0].Добавить(ПередаваемыеФайлы);
Методы[0].Добавить(ПереданныеФайлы);
Методы[0].Добавить(КаталогСохранения);
Методы[0].Добавить(Интерактивно);
Методы.Добавить(Новый Массив);
Методы[1].Добавить(“ЗапуститьПриложение”);
Методы[1].Добавить(ИмяПереданногоФайла);
Если Не ЗапроситьРазрешениеПользователя(Методы) Тогда
Предупреждение(“Пользователь отказал в разрешении.”);
Возврат;
КонецЕсли;
ПолучитьФайлы(ПередаваемыеФайлы, ПереданныеФайлы, КаталогСохранения, Интерактивно);
ЗапуститьПриложение(ИмяПереданногоФайла);
Иначе
Предупреждение(“Выполнение не поддерживается. Не установлено расширение работы с файлами.”);
КонецЕсли;

Следует отметить несколько особенностей применения метода ЗапроситьРазрешениеПользователя().

1. Разрешение запрашивается только для следующих методов:

● ПолучитьФайлы()/НачатьПолучениеФайлов(),
● ПоместитьФайлы()/НачатьПомещениеФайлов(),
● НайтиФайлы()/НачатьПоискФайлов(),
● КопироватьФайл()/НачатьКопированиеФайла(),
● ПереместитьФайл()/НачатьПеремещениеФайла(),
● УдалитьФайлы()/НачатьУдалениеФайлов(),
● СоздатьКаталог()/НачатьСозданиеКаталога(),
● ЗапуститьПриложение()/НачатьЗапускПриложения().

2. Разрешение запрашивается для конкретного набора параметров метода. Если при реальном исполнении метода работы с файлами значения параметров будут отличаться от тех, для которых получено разрешение, это разрешение не будет действовать и пользователь получит отдельный запрос на подтверждение выполнения операции.

3. Если необходимо выполнить две (или более) одинаковые операции с файлами (даже с одинаковым набором параметров), следует указать соответствующее количество элементов в массиве параметров метода ЗапроситьРазрешениеПользователя() . Например, если необходимо дважды получить из информационной базы один и тот же файл и поместить его в фиксированное место файловой системы, следует запросить разрешение
на две операции.

4. Если запрашивается разрешение на операцию, при выполнении которой выполняется интерактивная операция (например, функции ПолучитьФайлы() в качестве параметра передается объект ДиалогВыбораФайла ), то такая операция исключается из запроса.

Полученные разрешения сохраняются либо до выполнения разрешенного вызова, либо до окончания исполнения встроенного языка.
ПРИМЕЧАНИЕ. В толстом и тонком клиентах ЗапроситьРазрешениеПользователя() метод всегда возвращает значение Истина , без взаимодействия с пользователем.

Работа с временным хранилищем в фоновом задании

В механизме работы с временным хранилищем есть возможность передать данные из фонового задания в сеанс, инициировавший фоновое задание.
Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение (с помощью метода ПоместитьВоВременноеХранилище()) , указав какой-либо идентификатор создаваемого временного хранилища (параметр Адрес ). Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если в фоновом задании этот адрес использовать в качестве значения параметра Адрес метода ПоместитьВоВРеменноеХранилище() , то результат будет скопирован в сеанс, из которого было запущено фоновое задание.
Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания.

Поддержка адресов в поле картинки

Элемент формы Поле вида Поле картинки поддерживает отображение картинки, заданной адресом значения (которое может быть картинкой или двоичными данными) во временном хранилище или в базе данных.
Для этого в свойстве Данные элемента формы необходимо задать реквизит строкового типа. Значение этого реквизита и будет интерпретироваться как адрес картинки.

// Пример 1
// Привязка поля картинки к адресу картинки во временном
// хранилище. АдресКартинки – реквизит формы строкового типа
ПоместитьФайл(АдресКартинки, ИсходноеИмя, ВыбранноеИмя, Истина, УникальныйИдентификатор);
// Пример 2
// Получение адреса картинки из реквизита объекта
// информационной базы
ФайлКартинки = Объект.ФайлКартинки;
Если Не ФайлКартинки.Пустая() Тогда
АдресКартинки = ПолучитьНавигационнуюСсылку(ФайлКартинки, “ДанныеФайла”);
Иначе
АдресКартинки = “”;
Конецесли;

Доступ к стандартным каталогам

При использовании системы требуется некоторое место в файловой системе, где можно хранить различные файловые данные, которые с одной стороны являются временными, а с другой – должны храниться достаточно длительное время. К таким файлам можно отнести черновики для систем управления документооборотом, внешние компоненты, работающие на стороне клиентского компьютера и т. д.
Для хранения таких файлов предназначен специальный каталог, который привязан к конкретному пользователю конкретной информационной базы.
Один и тот же пользователь, работающий с двумя информационными базами, будет иметь доступ к двум разным каталогам хранения данных пользователя. Местоположение данного каталога определяется с помощью метода РабочийКаталогДанныхПользователя( ). Если каталог отсутствует, то он создается при первом обращении к нему. Если создание каталога невозможно – система вызывает исключение.
ПРИМЕЧАНИЕ. Метод РабочийКаталогДанныхПользователя()не доступен на стороне сервера.
В операционной системе имеется специальный каталог, выделенный для постоянного хранения данных пользователя. Это могут быть какие-то
отчеты, печатные формы документов и т. д. В этот каталог помещаются данные, которые в дальнейшем могут быть отправлены внешним
потребителям. Для доступа к этому каталогу предназначен метод КаталогДокументов(). Физическое расположение каталога зависит от операционной
системы, где исполняется приложение и приведено в синтакс-помощнике.

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

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