1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

1С + Ftp

Тема в разделе "1C и всё что с ней связано", создана пользователем gorlanovmax, 19 июн 2008.

  1. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Возникла необходимость из 1с загружать файл DBF на произвольный ftp-сервер. Подскажите какими способами это лучше сделать??

    Заранее спасибо
     
  2. LSH

    LSH Гость

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    а есть ссылка на компоненту с als-ником, и в идеале в примером???
    премного благодарен.
     
  4. LSH

    LSH Гость

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Виноват. Исправлюсь :)
     
  6. Golod

    Golod Гость

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

    gorlanovmax Well-Known Member
    1C Team

    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Мне надо было на 7-ку. Спасибо я уже сделал.
     
  8. Pro

    Pro Гость

    Код (Text):
    //_____________________________________________________________________________
    процедура 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ЗагрузитьФТР()
     
  9. LSH

    LSH Гость

    Pro

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

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

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

    Pro Гость

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

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

    vitfil IT-интегратор

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

    Pro Гость

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Я так думаю, что если не ставить (с), то все написанное как раз и является моим мнением. :)
     
Загрузка...

Поделиться этой страницей