![]() |
|
1C 77 и FTP | ☑ | ||
---|---|---|---|---|
0
FEAS
27.08.10
✎
12:07
|
Мне нжуно выгружать и загружать из 1С файлы на FTP и обратно.
Прочитал тут http://www.mista.ru/articles1c/hare/article.26.html вроде сделал но что то не получается роцедура Сформировать() // генерируем текст скрипта Текст=СоздатьОбъект("Текст"); Текст.ДобавитьСтроку("use NET::Ftp;"); Текст.ДобавитьСтроку("$ftp = Net::FTP->new(""192.168.8.110"",Firewall => ""192.168.1.100"");"); Текст.ДобавитьСтроку("$ftp->login('ftp','Asdpass') || die $!;"); Текст.ДобавитьСтроку("$ftp->cwd('upload');"); Текст.ДобавитьСтроку("$ftp->cwd('Морки');"); Текст.ДобавитьСтроку("$ftp->get('1C.doc','C:\1C.doc');"); Текст.ДобавитьСтроку("@list=$ftp->dir();"); Текст.ДобавитьСтроку("foreach (@list) {"); Текст.ДобавитьСтроку("$dir.=""$_\n"";"); Текст.ДобавитьСтроку("}"); Текст.ДобавитьСтроку("open TXT,'>c:\ftp_dir.txt';"); Текст.ДобавитьСтроку("|print TXT $dir;"); Текст.ДобавитьСтроку("close TXT;"); Текст.ДобавитьСтроку("$ftp->quit();"); // записываем на диск Текст.Записать(КаталогИБ()+"connect.pl"); // запускаем на выполнение КомандаСистемы(КаталогИБ()+"connect.pl"); // удаляем, чтоб не засорять место ФС.УдалитьФайл(КаталогИБ()+"connect.pl"); КонецПроцедуры Вроде запускается проходит Но не совсем понял на счет каталогов как на фтп в каталог и что такое заголовки может там не правильно. |
|||
1
FEAS
27.08.10
✎
12:12
|
мне нужно вот здесь взять файл или туда залить /upload/Морки/
Файл 1С.doc вот это не знаю нужно или нет изменять Текст.ДобавитьСтроку("@list=$ftp->dir();"); Текст.ДобавитьСтроку("foreach (@list) {"); Текст.ДобавитьСтроку("$dir.=""$_\n"";"); Текст.ДобавитьСтроку("}"); Текст.ДобавитьСтроку("open TXT,'>c:\ftp_dir.txt';"); Текст.ДобавитьСтроку("|print TXT $dir;"); Текст.ДобавитьСтроку("close TXT;"); |
|||
2
Sadovnikov
27.08.10
✎
12:16
|
90) А не проще DialMail взять?
|
|||
3
FEAS
27.08.10
✎
12:18
|
а как черех него?
|
|||
4
Sadovnikov
27.08.10
✎
14:11
|
(3) Там объект FTP есть
|
|||
5
mishaPH
27.08.10
✎
14:21
|
+4 и мозг не компостировать
|
|||
6
trdm
30.08.10
✎
13:23
|
Прикольно, там даже файло для интеллиценз в каталоге есть :)
Как раз надо пофтпукать... |
|||
7
xl
31.08.10
✎
15:11
|
команда=КаталогИБ()+"ftp\winscp.exe /console /script="+КаталогИБ()+"ftp\"+"script.tmp /parameter "+КаталогИБ()+"ftp\"+имяфаила;
ключевое слово winscp.exe |
|||
8
smaharbA
31.08.10
✎
15:13
|
это чо перл заради фтп ставить ?
|
|||
9
Aleksey_3
31.08.10
✎
15:27
|
Функция ВыгрузитьВФТП()
//подготавливаем файл с командами ftp ВременныйСкриптФайл="InetFTP.tmp"; Т=СоздатьОбъект("Текст"); Т.ДобавитьСтроку("open "+Сокрлп(База.АдресСервера)); Т.ДобавитьСтроку(Сокрлп(База.Логин)); Т.ДобавитьСтроку(Сокрлп(База.Пароль)); Т.ДобавитьСтроку("prompt"); Т.ДобавитьСтроку("binary"); Если База.ПассивныйРежим=1 тогда Т.ДобавитьСтроку("literal pasv"); КонецЕсли; Т.ДобавитьСтроку("mkdir "+Сокрлп(База.КаталогВыгрузки)); Т.ДобавитьСтроку("cd "+Сокрлп(База.КаталогВыгрузки)); Т.ДобавитьСтроку("put flag.mod"); //посылаем проверочный флаг Т.ДобавитьСтроку("mput *.mod");//get Т.ДобавитьСтроку("mput *.7z");//get Т.ДобавитьСтроку("get flag.mod flag2.mod");//считываем - его Т.ДобавитьСтроку("quit");//выход Т.Записать(ПутьКБазеПриВыгрузке+"\"+ВременныйСкриптФайл); ФайлФлага=ПутьКБазеПриВыгрузке+"\flag.mod"; ФайлФлага2=ПутьКБазеПриВыгрузке+"\flag2.mod"; Т=СоздатьОбъект("Текст"); Т.ДобавитьСтроку("=Проверка связи="); Т.Записать(ФайлФлага); Если ФС.СуществуетФайл(ФайлФлага2)=1 Тогда ФС.УдалитьФайл(ФайлФлага2); КонецЕсли; Фс.УстТекКаталог(ПутьКБазеПриВыгрузке); Команда="ftp -s:"""+ВременныйСкриптФайл+""">ftp_out.log"; КомандаСистемы(Команда); Фс.УдалитьФайл(ПутьКБазеПриВыгрузке+"\"+ВременныйСкриптФайл); Рез=ФС.СуществуетФайл(ФайлФлага2); //если файл существует, то соединение было успешное ФС.УстТекКаталог(КаталогИБ()); Возврат Рез; КонецФункции |
|||
10
Aleksey_3
31.08.10
✎
15:30
|
Функция ЗагрузитьИзФТП()
//подготавливаем файл с командами ftp ВременныйСкриптФайл="InetFTP.tmp"; Т=СоздатьОбъект("Текст"); Т.ДобавитьСтроку("open "+Сокрлп(База.АдресСервера)); Т.ДобавитьСтроку(Сокрлп(База.Логин)); Т.ДобавитьСтроку(Сокрлп(База.Пароль)); Т.ДобавитьСтроку("prompt"); Т.ДобавитьСтроку("binary"); Если База.ПассивныйРежим=1 тогда Т.ДобавитьСтроку("literal pasv"); КонецЕсли; Т.ДобавитьСтроку("mkdir "+Сокрлп(База.КаталогЗагрузки)); Т.ДобавитьСтроку("cd "+Сокрлп(База.КаталогЗагрузки)); Т.ДобавитьСтроку("put _flag.mod"); //посылаем проверочный флаг Т.ДобавитьСтроку("get _flag.mod _flag2.mod");//считываем - его Т.ДобавитьСтроку("mget *"); Т.ДобавитьСтроку("quit");//выход Т.Записать(ПутьКБазеПриЗагрузке+"\"+ВременныйСкриптФайл); ФайлФлага=ПутьКБазеПриЗагрузке+"\_flag.mod"; ФайлФлага2=ПутьКБазеПриЗагрузке+"\_flag2.mod"; Т=СоздатьОбъект("Текст"); Т.ДобавитьСтроку("=Проверка связи="); Т.Записать(ФайлФлага); Если ФС.СуществуетФайл(ФайлФлага2)=1 Тогда ФС.УдалитьФайл(ФайлФлага2); КонецЕсли; Фс.УстТекКаталог(ПутьКБазеПриЗагрузке); Команда="ftp -s:"""+ВременныйСкриптФайл+""">ftp_in.log"; КомандаСистемы(Команда); Рез=ФС.СуществуетФайл(ФайлФлага2); //если файл существует, то соединение было успешное Если Рез=1 Тогда //надо очистить каталог ftp ВременныйСкриптФайл="InetFTP.tmp"; Т=СоздатьОбъект("Текст"); Т.ДобавитьСтроку("open "+Сокрлп(База.АдресСервера)); Т.ДобавитьСтроку(Сокрлп(База.Логин)); Т.ДобавитьСтроку(Сокрлп(База.Пароль)); Т.ДобавитьСтроку("prompt"); Т.ДобавитьСтроку("binary"); Если База.ПассивныйРежим=1 тогда Т.ДобавитьСтроку("literal pasv"); КонецЕсли; Т.ДобавитьСтроку("mkdir "+Сокрлп(База.КаталогЗагрузки)); Т.ДобавитьСтроку("cd "+Сокрлп(База.КаталогЗагрузки)); Т.ДобавитьСтроку("mdelete *"); Т.ДобавитьСтроку("quit");//выход Т.Записать(ПутьКБазеПриЗагрузке+"\"+ВременныйСкриптФайл); Команда="ftp -s:"""+ВременныйСкриптФайл+""">ftp_del.log"; КомандаСистемы(Команда); КонецЕсли; Фс.УдалитьФайл(ПутьКБазеПриЗагрузке+"\"+ВременныйСкриптФайл); ФС.УстТекКаталог(КаталогИБ()); Возврат Рез; КонецФункции |
|||
11
Sadovnikov
31.08.10
✎
15:31
|
(9), (10) Ну и нафига столько кода, если ВК?
|
|||
12
Sadovnikov
31.08.10
✎
15:32
|
+(11) "если ВК?" = "если есть ВК?"
|
|||
13
Aleksey_3
31.08.10
✎
15:32
|
(11) Да нуфиг ставить какое-то левое ВК, еще не известно, как оно под новую систему работать будет
|
|||
14
Sadovnikov
31.08.10
✎
15:33
|
(13) Ну-ну.
|
|||
15
Aleksey_3
31.08.10
✎
15:36
|
(14) Есть гарантия, что ВК будет одинаково работать и под win2k0 х32 и под win2k8 х64?
|
|||
16
Sadovnikov
31.08.10
✎
15:38
|
(15) Работает. По под win2k8 х64 еще рано говорить - только второй месяц эксплуатации.
|
|||
17
Mikeware
31.08.10
✎
15:42
|
(13) ставь "родное 1совское" 1cv7ftp.dll
|
|||
18
Aleksey_3
31.08.10
✎
15:43
|
(16) Можно и на перле организовать, как в (0). В данном случае применять ВК, ради ВК смысла большого не вижу
|
|||
19
le_
31.08.10
✎
15:45
|
Можно без всяких ВК и таких скриптов, как в (0)
Есть простенький клиент WinSCP. Этот клиент кушает INI-файлы типа: # Вывод лога на экран option echo on # Автоматическое подтверждение действия по умолчанию option confirm off # Соединяемся с сервером open ftp://login:pass@server -passive # Загружаем файл put "D:\Work\xz.zip" xz.zip # Отсоединяемся от сервера close # Закрываем WinSCP exit Запускается так: winscp.exe /script=FileName.ini |
|||
20
Aleksey_3
31.08.10
✎
15:45
|
(17) Да без разницы, хоть через
Шел=СоздатьОбъект("shell.application") Папка=Шел.Namespace("ftp://"+Пользователь+":"+Пароль+"@"+ПутьФТП); Сообщить(Папка.Items().Count); |
|||
21
Sadovnikov
31.08.10
✎
15:50
|
(18) У применения ВК всегда единственный смысл - удобство прогера.
|
|||
22
Aleksey_3
31.08.10
✎
15:53
|
(21) И не только. Например теже "плюсики" в 7-ке. Штатными средставми это получиться через одно место и будет долго отрабатывать. А через ёксель в лет
|
|||
23
le_
31.08.10
✎
15:53
|
+ (19)
Можно запускать в режиме консольки, чтобы было видно, что происходит: winscp.exe /console /script=FileName.ini Отходя от темы: у меня таким образом обмен УРБД организован. Сколько работает - никогда сбоев не было. |
|||
24
Sadovnikov
31.08.10
✎
15:57
|
(22) Я к тому, что и без ВК можно практически всё сделать. Абрахамс не даст соврать :)
Если есть ВК - прогер быстрее реализует, не "через одно место". В результате, и для пользователя может оказаться лучше - красивее, быстрее и т.д. |
|||
25
le_
31.08.10
✎
16:01
|
И, кстати, вместо перлового скрипта, если уж на то пошло можно обычный батник для ftp.exe (который в system32 валяется) наваять.
Ставить перл для отправки файла на FTP из 1С-ки как-то... не очень. |
|||
26
Злопчинский
31.08.10
✎
16:04
|
(22) +ики в семерке реализуются повешением одной кнопки на панель инструментов - подхватывает отчеты и преобразует в плюсики...
|
|||
27
Sadovnikov
31.08.10
✎
16:07
|
(26) Чёкаво? В смысле - поясни?
|
|||
28
Злопчинский
31.08.10
✎
16:08
|
//****************************************************************************************************************************
//БЛОК ВЫГРУЗКИ НА ФТП ******************************************************************************************************* //**************************************************************************************************************************** ТекстВыгрузки = СоздатьОбъект("Текст"); ТекстВыгрузки.ДобавитьСтроку("open " + "тутадрес"); ТекстВыгрузки.ДобавитьСтроку("логин"); ТекстВыгрузки.ДобавитьСтроку("пароль"); ТекстВыгрузки.ДобавитьСтроку("cd office"); ТекстВыгрузки.ДобавитьСтроку("put " + КаталогПользователя() + (ИмяПрайса+".csv")); ТекстВыгрузки.ДобавитьСтроку("bye"); ТекстВыгрузки.Записать(КаталогПользователя() + "ftp.txt"); ТекстВыгрузки = ""; КомандаСистемы("ftp -s:" + КаталогПользователя() + "Ftp.txt>> " + (КаталогПользователя() + "report.txt")); ФС.УдалитьФайл(КаталогПользователя() + "ftp.txt"); ТекстВыгрузки = СоздатьОбъект("Текст"); ТекстВыгрузки.Открыть(КаталогПользователя() + "report.txt"); КС = ТекстВыгрузки.КоличествоСтрок()-4; //если все нормально - то в этой строке файла должно быть соотв.сообщение //проверим его Попытка строкаКомплете = ТекстВыгрузки.ПолучитьСтроку(КС); Если Найти(Нрег(строкаКомплете),"226 transfer complete") = 0 Тогда а=1; а=а/0; КонецЕсли; тПротокол = ТекущееВремя()+" файл данных успешно отправлен на сервер интернет-магазина"+РазделительСтрок+тПротокол; Форма.Обновить(); ТекстВыгрузки = ""; ФС.УдалитьФайл(КаталогПользователя() + (ИмяПрайса+".csv")); ФС.УдалитьФайл(КаталогПользователя() + "report.txt"); Исключение тПротокол = ТекущееВремя()+" ПРОИЗОШЛА ОШИБКА ВО ВРЕМЯ ЗАГРУЗКИ СФОРМИРОВАННОГО ФАЙЛА НА СЕРВЕР ИНЕТРНЕТ-МАГАЗИНА"+РазделительСтрок+тПротокол; тПротокол = ТекущееВремя()+ИмяПрайса+РазделительСтрок+тПротокол; Форма.Обновить(); ТекстВыгрузки.Показать(); ТекстВыгрузки = ""; КонецПопытки; //**************************************************************************************************************************** //БЛОК ВЫГРУЗКИ НА ФТП ******************************************************************************************************* //**************************************************************************************************************************** |
|||
29
le_
31.08.10
✎
16:08
|
+(25)
Содержимое ftp.bat: @echo off ftp -s:commands.txt -i 192.168.26.113 Содержимое commands.txt: MyLogin MyPass cd Papka mput d:\base\*.dbf quit |
|||
30
Злопчинский
31.08.10
✎
16:09
|
(27) дарю! ;-)
http://www.infostart.ru/public/18989/ |
|||
31
Sadovnikov
31.08.10
✎
16:11
|
(30) Ага, понял. Шикарно :)
|
|||
32
Aleksey_3
31.08.10
✎
16:11
|
(26) Для этого нужно ставить как минимум 2 вк,а formex у меня в терминале не прижился
|
|||
33
Sadovnikov
31.08.10
✎
16:14
|
(32) А почему не прижился? Как давно это было?
|
|||
34
Aleksey_3
31.08.10
✎
16:21
|
(33) Давно. Не прижилось, потому что по умолчанию там включено отслеживание мышки, клавы, таймер и куча всего, и в терминале когда много юзеров (а у меня меньше 70 не бывает), начинает все тормозить и грузить проц. Т.е. 10-15 юзеров все ОК. Более 50 - попа
|
|||
35
Aleksey_3
31.08.10
✎
16:22
|
Т.е. достаточно было просто загрузить formex, как все юзеры это замечали, потому что база начинала тормозить
|
|||
36
Sadovnikov
31.08.10
✎
16:23
|
(34) Ясно. С тех пор воды много утекло...
|
|||
37
Aleksey_3
31.08.10
✎
16:23
|
Может и утекло, но осадок остался. Поэтому пока что стараюсь без нее обходиться
|
|||
38
Sadovnikov
31.08.10
✎
16:26
|
(37) Многих интересных вещей лишаешься...
|
|||
39
Sadovnikov
31.08.10
✎
16:27
|
Просто пример. Живет в классе ТДокумент - базовый класс для всех документов конфигурации.
Функция ПриОтжатииКнопкиКлавиатуры(КодКлавиши, Alt, Shift, Ctrl, Символ, ФСО) Экспорт Если КодКлавиши = VK_F11 Тогда Если ((Alt+Ctrl) = 2) И (Shift = 0) Тогда сзПараметры = СоздатьОбъект("СписокЗначений"); сзПараметры.Установить("Документ", Сам(Контекст).ТекущийДокумент()); ОткрытьФорму("Отчет.обрДвиженияДокумента", сзПараметры); Возврат 1; КонецЕсли; ИначеЕсли Alt = 1 Тогда Если КодКлавиши = КодСимв("A") Тогда ВыбратьФирму(); ФСО = 0; Возврат 1; КонецЕсли; ИначеЕсли Ctrl = 1 Тогда Если КодКлавиши = КодСимв("S") Тогда Если Сам(Контекст).Форма.ТолькоПросмотр() = 1 Тогда Возврат 1; КонецЕсли; Сам(Контекст).ПриНажатииКнопкиОК(0); ФСО = 0; Возврат 1; КонецЕсли; КонецЕсли; Возврат 0; КонецФункции |
|||
40
Злопчинский
31.08.10
✎
16:31
|
у мну на старой работе все в терминале, активных - юзверей 17, формекс. Все ок.
|
|||
41
Злопчинский
31.08.10
✎
16:31
|
(31) да, я вовсю пользую. работает нормуль. автору - респектище неимоверное...
|
|||
42
Aleksey_3
31.08.10
✎
16:33
|
(40) Вот и я о том же. Мы тогда с автором переписывались, и он подтвердил, что такой эффект наблюдается, только с большим количество юзверей
|
|||
43
Злопчинский
31.08.10
✎
16:35
|
(42) да, я помню, читал.
другой момент, что использовать надо там, где надо использовать, а не чохом... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |