Имя: Пароль:
1C
1C 7.7
v7: Выгрузка файла по FTP на сайт
,
0 Юрий Лазаренко
 
11.05.12
14:50
Коллеги, с 7.7 не работал уже 4 года, все забыл. Формирую в обработке файл csv, сохраняю на локальный диск. Теперь необходимо его автоматически загрузить по фтп на сайт, дождаться окончания загрузки и открыть окно браузера с определенным адресом (чтобы запустилась обработка этого файла скриптом на сайте).
Напомните плиз, как в клюшках можно файл на фтп положить и отследить момент окончания его загрузки, чтобы не открыть окно браузера преждевременно.
1 Fragster
 
гуру
11.05.12
14:52
U:\>ftp -?

Обмен файлами с компьютером, на котором запущена служба
сервера FTP. FTP может использоваться интерактивно.

FTP [-v] [-d] [-i] [-n] [-g] [-s:имя_файла] [-a] [-w:буфер] [-A] [узел]

 -v            Отключение вывода на экран ответов с удаленного сервера.
 -n            Отключение автоматического входа при начальном подключении.
 -i            Отключение интерактивных запросов при передаче нескольких
               файлов.
 -d            Включение отладочного режима.
 -g            Отключение глобализации имен файлов (см. команду GLOB).
 -s:имя_файла  Задание текстового файла, содержащего команды FTP, которые
               будут выполняться автоматически при запуске FTP.
 -a            Использование локального интерфейса для привязки соединения.
 -A            Анонимный вход в службу.
 -w:буфер      Переопределение стандартного размера буфера передачи (4096).
 узел          Задание имени или адреса IP удаленного узла,
               к которому необходимо выполнить подключение.

Примечания:
 - команды MGET и MPUT принимают параметры Y/N/Q как YES/NO/QUIT.
 - для прекращения выполнения команд нажмите <Ctrl>+<C>.
2 Юрий Лазаренко
 
11.05.12
14:54
(1) Прелестно, благодарю.
3 andrewks
 
11.05.12
14:56
dialmail.dll
4 Юрий Лазаренко
 
11.05.12
15:00
(3) Главное чтобы она корректно работала на разных машинах с разными виндами... И что-то на оф сайте пока не нашел описания со свойствами-методами.
5 akaBrr
 
11.05.12
15:10
(2) встроенный в винду фтп-клиент ничего не знает про пассивный режим работы сервера, может случиться облом у (0)
6 andrewks
 
11.05.12
15:10
(4) там в комплекте внятные примеры и als-файл
7 155153144627
 
11.05.12
15:15
sYsFTP.dll
8 Юрий Лазаренко
 
11.05.12
15:34
(6) Ок, спасибо, счас глянем
9 Юрий Лазаренко
 
11.05.12
19:18
(6) Да, хорошая dll-ка, все получилось. Спасибо за совет!!!
10 Злопчинский
 
11.05.12
19:19
ой блин... ща.. не спеши...
11 Юрий Лазаренко
 
11.05.12
19:21
(10) Ммммм?
12 Злопчинский
 
11.05.12
19:22
////****************************************************************************************************************************
   ////БЛОК ВЫГРУЗКИ НА ФТП *******************************************************************************************************
   ////****************************************************************************************************************************
   //ТекстВыгрузки = СоздатьОбъект("Текст");
   //ТекстВыгрузки.ДобавитьСтроку("open " + "ИПадрес");
   //ТекстВыгрузки.ДобавитьСтроку("логин");
   //ТекстВыгрузки.ДобавитьСтроку("пароль");
   //ТекстВыгрузки.ДобавитьСтроку("cd office");
   //ТекстВыгрузки.ДобавитьСтроку("put " + КаталогПользователя() + ИмяПрайса);
   //ТекстВыгрузки.ДобавитьСтроку("bye");
   //ТекстВыгрузки.Записать(КаталогПользователя() + "ftp.txt");
   //ТекстВыгрузки = "";
   //
   //КомандаСистемы("ftp -s:" + КаталогПользователя() + "Ftp.txt>> " + (КаталогПользователя() + "report.txt"));
   //ФС.УдалитьФайл(КаталогПользователя() + "ftp.txt");
   //
   //ТекстВыгрузки = СоздатьОбъект("Текст");
   //ТекстВыгрузки.Открыть(КаталогПользователя() + "report.txt");
   //КС = ТекстВыгрузки.КоличествоСтрок()-4; //если все нормально - то в этой строке файла должно быть соотв.сообщение
   //                                        //проверим его
   //Попытка
   //    строкаКомплете = ТекстВыгрузки.ПолучитьСтроку(КС);
   //    Если  Найти(Нрег(строкаКомплете),"226 transfer complete") = 0
   //    Тогда а=1; а=а/0;
   //    КонецЕсли;
   //    тПротокол = ТекущееВремя()+" файл данных успешно отправлен на сервер интернет-магазина"+РазделительСтрок+тПротокол;
   //    Форма.Обновить();
   //    ТекстВыгрузки = "";
   //    ФС.УдалитьФайл(КаталогПользователя() + ИмяПрайса);
   //    ФС.УдалитьФайл(КаталогПользователя() + "report.txt");
   //Исключение
   //    тПротокол = ТекущееВремя()+" ПРОИЗОШЛА ОШИБКА ВО ВРЕМЯ ЗАГРУЗКИ СФОРМИРОВАННОГО ФАЙЛА НА СЕРВЕР ИНЕТРНЕТ-МАГАЗИНА"+РазделительСтрок+тПротокол;
   //    тПротокол = ТекущееВремя()+ИмяПрайса+РазделительСтрок+тПротокол;
   //    Форма.Обновить();
   //    ТекстВыгрузки.Показать();
   //    ТекстВыгрузки = "";
   //КонецПопытки;    
   ////****************************************************************************************************************************
   ////БЛОК ВЫГРУЗКИ НА ФТП *******************************************************************************************************
   ////****************************************************************************************************************************
13 Злопчинский
 
11.05.12
19:23
вместо штатного ftp.exe можно заюзать ncftp
14 Юрий Лазаренко
 
11.05.12
19:26
(12) Спасиб, сгодится для будущего, ну или если уже сделанный вариант будет работать нестабильно.
15 andrewks
 
11.05.12
20:11
(14) ftp в dialmail.dll довольно стабильно работает, у меня довольно давно используется, и в активном и в пассивном режимах траблов не замечено
16 Юрий Лазаренко
 
11.05.12
22:52
(15) Будем тестить. Завтра запуск, автоматически каждые 3 часа будет идти обновление цен на сайте. Через неделю оценим количество сбоев.
17 smaharbA
 
11.05.12
23:17
shell.application
18 sapphire
 
11.05.12
23:26
(17) тогда уж WSHexec лучше, ИМХО
19 smaharbA
 
11.05.12
23:37
(18)

//*******************************************
Процедура Сформировать()
   Перем Папка,Файл;
   Перем РазмерФайла,АтрибутыФайла,РазмерФайлаВрем;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   ИмяФайла="1cv7.rar";
   РазмерФайлаВрем=-1;
   РазмерФайлаВрем=0;
   Имя="Имя";
   Пароль="пароль";
   УРЛ="домен.ру";
   Путь="/нужный/дальнейший/путь";
   Схема="ftp://";
   Если ПустоеЗначение(Имя)=0 Тогда
       Схема=Схема+Имя+":"+Пароль+"@";
   КонецЕсли;
   Путь=СтрЗаменить("/"+Путь,"//","/");
   ФТП=Схема+УРЛ+Путь;
   Шел=СоздатьОбъект("Shell.Application");
   РазмерФайлаВрем=-1;
   РазмерФайлаВрем=0;
   Папка=Шел.Namespace(КаталогПользователя());
   Если ФС.СуществуетФайл(Папка.Self.Path+"\"+ИмяФайла)=1 Тогда
       ФС.УдалитьФайл(Папка.Self.Path+"\"+ИмяФайла);
   КонецЕсли;
   ПапкаИсточник=Шел.Namespace(ФТП);
   Файлы=ПапкаИсточник.Items();
   Скрипт.AddObject("Файлы",Файлы);
   Файлы=Скрипт.Eval("new Enumerator(Файлы)");
   Пока Файлы.atEnd(0)=0 Цикл
       Если ИмяФайла=Файлы.item(0).Name Тогда
           Файл=Файлы.item(0);
           Прервать;
       КонецЕсли;
       Файлы.moveNext(0);
   КонецЦикла;
   Папка.CopyHere(Файл);
   РазмерФайла=0;
   Пока Файл.Size<>РазмерФайла Цикл
       ВвестиСтроку("Копируем файл "+Файл.Path,"Копируем файл "+Файл.Path,100,,1);
       РазмерФайла=Папка.ParseName(ИмяФайла).Size;
   КонецЦикла;
КонецПроцедуры
20 Злопчинский
 
12.05.12
02:12
Понятно что здорово, но здорово непонятно! ;-)
(скопипатсил к себе в КЗ)
.
afftar peshы ischo!
21 Злопчинский
 
12.05.12
02:13
а почему нет кнопочки "добавить в КЗ"..?
22 Злопчинский
 
12.05.12
02:14
а! видимо мну на ноль умножили за неподобающее поведение...
23 sapphire
 
12.05.12
02:14
(21) А зачем?!
24 sapphire
 
12.05.12
02:16
(19) Раньше на скрипт-кодинг.инфо всё было.
Серому Кардиналу: верни страые статьи, чать не обеднеешь.
25 Юрий Лазаренко
 
12.05.12
09:55
(19) Впечатлило. Тупой вопрос: а зачем в код два раза вставлена такая конструкция:

   РазмерФайлаВрем=-1;
   РазмерФайлаВрем=0;

??? Одна и та же переменная инициализируется два раза
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший