Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Записать файлы на сервер
Дальше: Электронная почта

Копировать файлы с сервера

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

Поскольку доступ к FTP-ресурсам будет осуществляться напрямую, а не через FTP-соединение, то полный путь на сервере должен включать помимо каталога на сервере также и имя самого сервера, и имя и пароль пользователя на сервере вида: ftp://<ИмяПользователя>:<ПарольПользователя>@<Сервер>/<КаталогНаСервере>.

Обработчик команды для копирования файлов с FTP-сервера может выглядеть следующим образом (листинг 1.146).

Листинг 1.146. Процедура «КопироватьФайлыССервера»

&НаКлиенте

Процедура КопироватьФайлыССервера(Команда)

 

ПутьНаСервере = "ftp://" + ИмяПользователя + ":" + ПарольПользователя + "@" + Сервер + КаталогНаСервере;

// Найти файлы в нужном каталоге по указанной маске.

МаскаФайлов = "*.png";

НачатьПоискФайлов(Новый ОписаниеОповещения("КопироватьФайлыССервераЗавершение", ЭтотОбъект),

ПутьНаСервере, МаскаФайлов);

 

КонецПроцедуры

Как и в предыдущем примере, поиск файлов на FTP-сервере мы будем выполнять с помощью немодального метода НачатьПоискФайлов(). В этот метод первым параметром мы передаем описание оповещения, указывающее на экспортную процедуру КопироватьФайлыССервераЗавершение(), которая будет вызвана по окончании поиска файлов (листинг 1.147). А также мы передаем в эту процедуру полный путь на FTP-сервере для доступа к файлам и маску для поиска файлов.

Листинг 1.147. Процедура «КопироватьФайлыССервераЗавершение»

&НаКлиенте

Процедура КопироватьФайлыССервераЗавершение(МассивФайлов, Дополнительно ) Экспорт

 

Сообщение = Новый СообщениеПользователю;

 

Для Каждого Файл Из МассивФайлов Цикл

Сообщение.Текст = "Считывается файл - " + Файл.Имя;

Сообщение.Сообщить();

 

КопироватьФайлыВЛокальныйКаталог(Новый ОписаниеОповещения("КопироватьФайлыЛокальноЗавершение", ЭтотОбъект), Файл.Имя);

КонецЦикла;

 

КонецПроцедуры

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

Процедуру КопироватьФайлыВЛокальныйКаталог() заполним следующим образом (листинг 1.148).

Листинг 1.148. Процедура «КопироватьФайлыВЛокальныйКаталог»

&НаКлиенте

Процедура КопироватьФайлыВЛокальныйКаталог(Оповещение, ИмяФайла)

 

Сообщение = Новый СообщениеПользователю;

 

ПутьНаСервере = "ftp://" + ИмяПользователя + ":" + ПарольПользователя + "@" + Сервер + КаталогНаСервере;

 

ДопПараметры = Новый Структура("ИмяФайла, Оповещение", ИмяФайла, Оповещение);

 

Попытка

// Копировать файл в локальный каталог.

НачатьКопированиеФайла(Новый ОписаниеОповещения("КопироватьФайлыЗавершение", ЭтотОбъект, ДопПараметры.Оповещение),

ПутьНаСервере + ДопПараметры.ИмяФайла, ЛокальныйКаталог + ДопПараметры.ИмяФайла);

Исключение

Сообщение.Текст = ОписаниеОшибки();

Сообщение.Сообщить();

Возврат;

КонецПопытки;

 

КонецПроцедуры

В этой процедуре мы сначала упаковываем в структуру имя файла и имя процедуры оповещения, содержащиеся в параметрах ИмяФайла и Оповещение. Затем вызываем процедуру НачатьКопированиеФайла(), в которую передаем описание оповещения, указывающее на экспортную процедуру КопироватьФайлыЗавершение(), которая будет вызвана по окончании копирования файла (листинг 1.149). А также мы передаем в эту процедуру полный путь на FTP-сервере для доступа к файлу и полный путь на локальном компьютере, по которому будет скопирован FTP-ресурс.

Листинг 1.149. Процедура «КопироватьФайлыЗавершение»

&НаКлиенте

Процедура КопироватьФайлыЗавершение(СкопированныйФайл, ДополнительныеПараметры) Экспорт

 

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Файл скопирован - " + СкопированныйФайл;

Сообщение.Сообщить();

 

ВыполнитьОбработкуОповещения(ДополнительныеПараметры);

 

КонецПроцедуры

 

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

Листинг 1.150. Процедура «КопироватьФайлыЛокальноЗавершение»

&НаКлиенте

Процедура КопироватьФайлыЛокальноЗавершение(Результат, Дополнительно) Экспорт

Возврат;

КонецПроцедуры

В результате мы вернемся в цикл копирования найденных файлов с FTP-сервера (см. листинг 1.147) в процедуре КопироватьФайлыССервераЗавершение().

Назад: Записать файлы на сервер
Дальше: Электронная почта