Никита Зайцев (WildHare) где-то в 2001 Первое, что приходит на ум взять в руки Яndex и поискать там 1C&FTP.
Таким образом мы находим компоненту AddFTP. Но увы,
она нам не подходит не умеет закачивать файлы, работает только с
анонимными FTP-серверами, не умеет работать через прокси-сервер. Других внешних компонент для работы с FTP в открытом
доступе нет.
Далее, иногда бывает полезно поискать решение на жестком диске собственного компьютера, таким образом находим ftp.exe.
Умеет все, кроме одного: не умеет работать через прокси-сервер.
Что остается делать? Можно взять Технологию создания внешних компонент и написать компоненту для
полноценной работы с FTP. Но это потребует времени и квалификации, а они есть далеко не у всех.
Я решил проблему следующим образом. Зашел на сайт компании
ActiveWare и скачал ActivePerl for Win32.
Установил этот пакет (нужно брать дистрибутив в формате MSI) на ту машину, с которой требовался доступ к FTP (инсталляция проста, как мычание). Perl
очень простой и в то же время очень мощный язык, и написанные на нем программы отнюдь не всегда производят
впечатление случайного набора символов (хотя и такое тоже бывает). Вот как выглядит самый простой скрипт для работы с FTP:
# подключаем нужный модуль
use NET::Ftp;
# коннектимся через прокси-сервер
$ftp = Net::FTP->new("194.85.33.254",Firewall => "192.168.0.1");
# авторизуемся на FTP-сервере
$ftp->login('MyCoolLogin','MyCoolPassword') || die $!;
# заходим в нужную директорию
$ftp->cwd('public_html');
$ftp->cwd('files');
# скачиваем файл с сервера
$ftp->get('dms.als','c:\dms.als.old');
# закачиваем файл на сервер
$ftp->put('c:\dms.als','dms.als');
# скачиваем оглавление каталога
@list=$ftp->dir();
foreach (@list) {
$dir.="$_\n";
}
open TXT,'>c:\ftp_dir.txt';
print TXT $dir;
close TXT;
# отключаемся от сервера
$ftp->quit();
Разумеется, чтобы использовать приведенный код осмысленно, понадобится посвятить некоторое время
чтению документации.. но дело того стоит. Perl, помимо легкости в освоении и использовании, славится
просто фантастическим количеством готовых модулей почти что для всех случаев жизни. А поскольку Perl язык
объектный, подключение и использование этих модулей особого труда не представляет.
Дальше уже дело техники. Текст скрипта (со всеми адресами, логинами и именами файлов) можно сгенерировать
прямо в модуле 1Сv7:
// генерируем текст скрипта
Текст=СоздатьОбъект("Текст");
Текст.ДобавитьСтроку("use NET::Ftp;
"|....
");
// записываем на диск
Текст.Записать(КаталогИБ()+"connect.pl");
// запускаем на выполнение
КомандаСистемы(КаталогИБ()+"connect.pl");
// удаляем, чтоб не засорять место
ФС.УдалитьФайл(КаталогИБ()+"connect.pl");
Ассоциация файлов *.pl с интерпретатором perl.exe автоматически создается при инсталляции ActivePerl, но нелишним
будет ее проверить просто на всякий случай.
У описанного решения есть один неприятный побочный эффект запуск скрипта приводит к появлению
окна DOS-сессии и подвисанию 1С:Предприятия на время выполнения скрипта. Но тут уж ничего
не поделать.
|