• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

1С + Ftp

  • Автор темы gorlanovmax
  • Дата начала
G

gorlanovmax

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

Заранее спасибо
 
L

LSH

Ищи DialMail.dll - самая нормальная компонента для работы с FTP
Или, попроще - юзай виндовый ftp.exe
 
L

LSH

А Гугл покурить религия не позволяет? :)
Первая же ссылка:
_http://www.dialmail.froggy.ru/
 
G

Golod

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

gorlanovmax

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

Мне надо было на 7-ку. Спасибо я уже сделал.
 
P

Pro

Код:
//_____________________________________________________________________________
процедура 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

LSH

Pro

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

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

Их невозможно реализовать через стандартный виндовый ФТП. Сами уже сталкивались...отказались от него в пользу ДиалМэил.
 
P

Pro

LSH
1. экспериментил и в активном и в пассивном режиме все работало
2. через прокси не работает, но у меня такой задачи и небыло, и я стараюсь держаться подальше от прокси, NAT рулит
3. ftp help

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

vitfil

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

Pro

во накинуль то....
я предложил один из рабочих вариантов, он работает, если кому то будет интересно они воспользуются...
vitfil
не забывайте добавлять imho
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!