• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь. Мобильный клиент для IOS находится в itunes по этой ссылке

1С + Ftp

gorlanovmax

Well-known member
19.06.2008
286
0
#1
Возникла необходимость из 1с загружать файл DBF на произвольный ftp-сервер. Подскажите какими способами это лучше сделать??

Заранее спасибо
 
L
#2
Ищи DialMail.dll - самая нормальная компонента для работы с FTP
Или, попроще - юзай виндовый ftp.exe
 
L
#4
А Гугл покурить религия не позволяет? :)
Первая же ссылка:
_http://www.dialmail.froggy.ru/
 
G

Golod

#6
Вообще 8-ка обладает встроенными средствами для общения с FTP, HTTP, e-mail: НТТРСоединение, FTРСоединение и, вроде бы, электронная почта . Правда что то не все из них мне удавалось заставить работать, однако, люди знающие с форумов говорили о корректной работе. Видать руки у меня кривые.
 

gorlanovmax

Well-known member
19.06.2008
286
0
#7
Вообще 8-ка обладает встроенными средствами для общения с FTP, HTTP, e-mail: НТТРСоединение, FTРСоединение и, вроде бы, электронная почта . Правда что то не все из них мне удавалось заставить работать, однако, люди знающие с форумов говорили о корректной работе. Видать руки у меня кривые.
Мне надо было на 7-ку. Спасибо я уже сделал.
 
P
#8
Код:
//_____________________________________________________________________________
процедура proВыгрузкаФТП(сзФТР) Экспорт

АдресСервера 	= сзФТР.Получить("АдресСервера");
Логин 			= сзФТР.Получить("Логин");
Пароль 			= сзФТР.Получить("Пароль");
ЛокальнаяПапка 	= сзФТР.Получить("ЛокальнаяПапка");
КаталогЗВ 		= сзФТР.Получить("КаталогЗВ");
файлвыгрузи 	= сзФТР.Получить("файлвыгрузи");

проблФТП = 0;

//подготавливаем файл с командами ftp
ВременныйСкриптФайл="InetFTP.tmp";
Т=СоздатьОбъект("Текст");
Т.ДобавитьСтроку("open "+Сокрлп(АдресСервера));
Т.ДобавитьСтроку(Сокрлп(Логин));
Т.ДобавитьСтроку(Сокрлп(Пароль));
Т.ДобавитьСтроку("prompt");
Т.ДобавитьСтроку("binary");
КаталогВыгрузкиФТП=СтрЗаменить(Сокрлп(КаталогЗВ),"\","/");
Для А=1 По СтрЧислоВхождений(КаталогВыгрузкиФТП,"/") Цикл
Рез=Найти(КаталогВыгрузкиФТП,"/");
ПодКаталогФТП=ЛЕВ(КаталогВыгрузкиФТП,Рез-1);
Если ПустоеЗначение(ПодКаталогФТП)=0 Тогда
Т.ДобавитьСтроку("cd "+ПодКаталогФТП);
КонецЕсли;
КаталогВыгрузкиФТП=Сред(КаталогВыгрузкиФТП,Рез+1);
КонецЦикла;
Если ПустоеЗначение(КаталогВыгрузкиФТП)=0 Тогда
Т.ДобавитьСтроку("cd "+КаталогВыгрузкиФТП);
КонецЕсли;
Т.ДобавитьСтроку("mput "+СокрЛП(файлвыгрузи));//get 
Т.ДобавитьСтроку("quit");//выход

Т.Записать(СокрЛП(ЛокальнаяПапка)+"\"+ВременныйСкриптФайл);

Фс.УстТекКаталог(СокрЛП(ЛокальнаяПапка));
Команда="ftp -s:"""+ВременныйСкриптФайл+""">ftp_out.log";
КомандаСистемы(Команда);
Фс.УдалитьФайл(СокрЛП(ЛокальнаяПапка)+"\"+ВременныйСкриптФайл);
Фс.УдалитьФайл(файлвыгрузи);

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

//******************************************************************************
// proЗагрузитьФТР(спЗнач)
//
// Параметры: 
// сзФТР
//
// Возвращаемое значение:
// Нет
//
// Описание:
// ТекстОписания
//
Процедура proЗагрузитьФТР(сзФТР) Экспорт

АдресСервера 	= сзФТР.Получить("АдресСервера");
Логин 			= сзФТР.Получить("Логин");
Пароль 			= сзФТР.Получить("Пароль");
ЛокальнаяПапка 	= сзФТР.Получить("ЛокальнаяПапка");
КаталогЗВ 		= сзФТР.Получить("КаталогЗВ");
файлЗагрузки 	= сзФТР.Получить("файлЗагрузки");

//подготавливаем файл с командами ftp
ВременныйСкриптФайл="InetFTP.tmp";
Т=СоздатьОбъект("Текст");
Т.ДобавитьСтроку("open "+Сокрлп(АдресСервера));
Т.ДобавитьСтроку(Сокрлп(Логин));
Т.ДобавитьСтроку(Сокрлп(Пароль));
Т.ДобавитьСтроку("prompt");
Т.ДобавитьСтроку("binary");
КаталогЗагрузкиФТП=СтрЗаменить(Сокрлп(КаталогЗВ),"\","/");
Для А=1 По СтрЧислоВхождений(КаталогЗагрузкиФТП,"/") Цикл
Рез=Найти(КаталогЗагрузкиФТП,"/");
ПодКаталогФТП=ЛЕВ(КаталогЗагрузкиФТП,Рез-1);
Если ПустоеЗначение(ПодКаталогФТП)=0 Тогда
Т.ДобавитьСтроку("cd "+ПодКаталогФТП);
КонецЕсли;
КаталогЗагрузкиФТП=Сред(КаталогЗагрузкиФТП,Рез+1);
КонецЦикла;
Если ПустоеЗначение(КаталогЗагрузкиФТП)=0 Тогда
Т.ДобавитьСтроку("cd "+КаталогЗагрузкиФТП);
КонецЕсли;

Т.ДобавитьСтроку("mget "+СокрЛП(файлЗагрузки));
Т.ДобавитьСтроку("quit");//выход
Т.Записать(СокрЛП(ЛокальнаяПапка)+"\"+ВременныйСкриптФайл);

Фс.УстТекКаталог(СокрЛП(ЛокальнаяПапка));
Команда="ftp -s:"""+ВременныйСкриптФайл+""">ftp_in.log";
КомандаСистемы(Команда);

ВременныйСкриптФайл="InetFTP.tmp";
Т=СоздатьОбъект("Текст");
Т.ДобавитьСтроку("open "+Сокрлп(АдресСервера));
Т.ДобавитьСтроку(Сокрлп(Логин));
Т.ДобавитьСтроку(Сокрлп(Пароль));
Т.ДобавитьСтроку("prompt");
Т.ДобавитьСтроку("binary");
КаталогЗагрузкиФТП=СтрЗаменить(Сокрлп(КаталогЗВ),"\","/");
Для А=1 По СтрЧислоВхождений(КаталогЗагрузкиФТП,"/") Цикл
Рез=Найти(КаталогЗагрузкиФТП,"/");
ПодКаталогФТП=ЛЕВ(КаталогЗагрузкиФТП,Рез-1);
Если ПустоеЗначение(ПодКаталогФТП)=0 Тогда
Т.ДобавитьСтроку("cd "+ПодКаталогФТП);
КонецЕсли;
КаталогЗагрузкиФТП=Сред(КаталогЗагрузкиФТП,Рез+1);
КонецЦикла;
Если ПустоеЗначение(КаталогЗагрузкиФТП)=0 Тогда
Т.ДобавитьСтроку("cd "+КаталогЗагрузкиФТП);
КонецЕсли;
Т.ДобавитьСтроку("mdelete "+СокрЛП(файлЗагрузки));
Т.ДобавитьСтроку("quit");//выход
Т.Записать(СокрЛП(ЛокальнаяПапка)+"\"+ВременныйСкриптФайл);

Команда="ftp -s:"""+ВременныйСкриптФайл+""">ftp_del.log";
КомандаСистемы(Команда);
Фс.УдалитьФайл(СокрЛП(ЛокальнаяПапка)+"\"+ВременныйСкриптФайл);

КонецПроцедуры // proЗагрузитьФТР()
 
L
#9
Pro

А Вот тебе на вскидку 3 вопроса:

1. Как работать в пассивном режиме?
2. Как работать через прокси?
3. Как получить список папок/файлов на сервере?

Их невозможно реализовать через стандартный виндовый ФТП. Сами уже сталкивались...отказались от него в пользу ДиалМэил.
 
P
#10
LSH
1. экспериментил и в активном и в пассивном режиме все работало
2. через прокси не работает, но у меня такой задачи и небыло, и я стараюсь держаться подальше от прокси, NAT рулит
3. ftp help

У чела был вопрос как я дал один из вариантов, у меня работает в ~10 базах меня все устраивает...
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#11
Pro
Про пассивный режим, это вы, батенька, загнули. Не умеет встроенный виндовый ftp.exe работать в пассивном режиме.
Другое дело, что написать своего клиента можно за пару часов (будет и пассивный режим, и работа через прокси). Да и в сети валяется куча пакетных клиентов, которые все это могут.
А работать из 1С с ftp - моветон. Правильней было бы из 1С сохранять файлы, а отправлять уже клиентом, например, по расписанию. Почему? Потому что мне нравится идеология *nix - "каждая программа должна выполнять свою локальную задачу, пусть маленькую, но делать это хорошо". 1С - учетная система. И должна решать учетные задачи.
 
P
#12
во накинуль то....
я предложил один из рабочих вариантов, он работает, если кому то будет интересно они воспользуются...
vitfil
не забывайте добавлять imho
 
Вверх Снизу