Меню

1с ftp установитьтекущийкаталог ошибка

   SashaNox

30.10.14 — 12:36

Добрый день! Помогите с решением проблемы!

При попытке УстановитьТекущийКаталог() вызывается исключение. При этом каталог есть, через браузер могу посмотреть, через тотал командер тоже, но при попытке открыть этот каталог через Мой компьютер выдает ошибку:

an error occurred opening that folder on the ftp server. make sure you have permission access on this folder.

Details:

550 — NAMEFMT set to 1

550 — Specified directory does not exist

550 — Working directory not changed.

1С выдает такое сообщение:

{Форма.Форма.Форма(257)}: Ошибка при вызове метода контекста (УстановитьТекущийКаталог): Ошибка аутентификации при доступе к ресурсу:  ftp://192.168.82.100:21 Access denied to remote resource

Но как вы понимаете ввожу я везде одни и теже параметры аутентификации.

В чем проблема? Очень нужна помощь!

   hhhh

1 — 30.10.14 — 12:45

имя каталога какое?

   SashaNox

2 — 30.10.14 — 12:47

/Moscow/Finance  — такое

   SashaNox

3 — 30.10.14 — 12:48

Сделал аналог структуры на бесплатном фтп сервере в интернете, ftp://93.189.45.34/, там все ок, подключается

   DrZombi

4 — 30.10.14 — 13:11

(0) Покажи Код? 🙂

   SashaNox

5 — 30.10.14 — 13:13

&НаКлиенте

Процедура ПолучитьсФайлы(КаталогНаФТП, КаталогЗдесь)
    
    Соединение = СоздатьНовоеСоединение();
    
    Если Соединение = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Попытка
        Соединение.УстановитьТекущийКаталог(КаталогНаФТП);
    Исключение
        Сообщить(ОписаниеОшибки());
        Сообщить("Не найден каталог: " + КаталогНаФТП);
        Возврат;
    КонецПопытки;

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

&НаКлиенте
Функция СоздатьНовоеСоединение() 

    Если Не ЗначениеЗаполнено(Объект.FTPПорт) Тогда
        Порт = 21;
    Иначе
        Порт = Объект.FTPПорт;
    КонецЕсли;
    
    Попытка 
        
        Соединение = Новый FTPСоединение(Объект.FTPСервер, Порт, Объект.FTPПользователь, Объект.FTPПароль); 
        
    Исключение 
        
        Сообщить("Не удалось установить соединение с сервером " + Объект.FTPСервер + ":" + Строка(Объект.FTPПорт) + ". 
        |Проверьте правильность адреса сервера, порт, имя пользователя и пароль."); 
        
        Соединение = Неопределено; 
        
    Конецпопытки; 

    Возврат Соединение;
    
КонецФункции
   DrZombi

6 — 30.10.14 — 13:16

(5) И какое значение содержит «КаталогНаФТП», для установки текущего каталога?

   МимохожийОднако

7 — 30.10.14 — 13:29

Какие-нибудь лишние символы в строке соединения

   SashaNox

8 — 30.10.14 — 13:53

(6) /Moscow/Finance — такое

   SashaNox

9 — 30.10.14 — 13:53

никаких, соединение проходит успешно, ошибка при попытке УстановитьТекущийКаталог()

   SashaNox

10 — 31.10.14 — 13:29

Итак, выявилось что FTP-сервер находится на операционной системе AS 400, которая имеет некую другую файловую структуру.Кто может помочь с поиском или созданием внешней компоненты для 1с 8.2 (8.3) для подключения к этому ФТП? Или как обойти эту проблему средствами 1С 8.2 (8.3)? 1С 7.7 с помощью компоненты DialMail и объекта FTP вполне успешно подключается.

   SashaNox

11 — 31.10.14 — 15:48

Спецов на мисте не осталось?!

   vlandev

12 — 31.10.14 — 15:55

(10) Какая бы не была там файловая структура у этой AS 400 на  FTP протокол это никак не должно влиять. Единственной что юниксовые ФС они в большинстве своем регистрозависимые , то есть /Moscow/Finance и /Moscow/FINANCE — это два разных каталога.

   SashaNox

13 — 31.10.14 — 16:28

(12) да вот в том то и дело что все один в один, и вот на этом сайте пишут http://trac.filezilla-project.org/ticket/975  что есть дело до ФС, тут еще пишут про некий параметр NAMEFMT, который у меня установлен в значение set to 1, а если подставить 0, то возможно все заработает, но как это сделать не понимаю. Была идея скачать проникнуть в каталог через командную строку, но она выдает те же ошибки что и проводник при попытке зайти в каталог

   vlandev

14 — 31.10.14 — 17:09

Есть возможность снять протокол фтп ссессий с этим сервером через 1С и через total-cmd? Надо выяснить , какая конкретно команда мешает или какой команды не хватает для успешной смены каталога на удаленном фтп сервере.

   SashaNox

15 — 31.10.14 — 17:53

Через тотал командер могу зайти на фтп, но как снять протокол фтп сессий? Что это такое не понял

  

Jump

16 — 31.10.14 — 18:00

(15)При реализации протокола FTP очень часто отступают от стандартов, поэтому такое вполне возможно.

Можно узнать что там за FTP сервер, и как настроен.

Но проще взять стороннюю утилиту.

Вам обязательно делать это из кода 1с? Задача какая? Файл скачать? Может проще воспользоваться консольной утилитой  — например wget?

Лично я например по возможности пытаюсь все сетевые взаимодействия, типа почты, фтп, http делать внешними утилитами, ибо 1с не всегда лучшим образом работает с сетью.

Да и проще так, как правило.

В этой статье я попробую рассказать о том, какими средствами располагает технологическая платформа 1С для работы с протоколом FTP. Первая часть статьи — теоретическая, вторая — практические примеры. Отмечу, что при написании статьи использовалась технологическая платформа версии 8.3.12.1595.

Содержание

  1. Общая информация
  2. Практические задачи при работе с FTP
  3. Как подключиться к серверу FTP?
  4. Как подключиться к серверу FTPS?
  5. Как искать файлы и каталоги по FTP из 1С?
  6. Как скачивать файлы по FTP из 1С?
  7. Как передавать файлы по FTP из 1С?
  8. Прочие действия с файлами и каталогами по FTP из 1С
  9. Как получить и установить текущий каталог по FTP из 1С?
  10. Как создать каталог по FTP из 1С?
  11. Как удалить каталог  и файлы по FTP из 1С?
  12. Как переименовать/переместить файл или каталог по FTP из 1С?

Общая информация

Для работы с протоколом FTP у технологической платформы 1С имеется два главных объекта — FTPСоединение и FTPФайл, кроме них существует объект ЗащищенноеСоединениеOpenSSL — который используется для подключения к FTPS-серверам (не следует путать с SFTP), а также объект ИнтернетПрокси — который используется для соединения с FTP-сервером через прокси-сервер.

FTPСоединение ключевой объект для работы с FTP в 1С — именно через этот объект происходит и соединение с FTP/FTPS сервером и все дальнейшие действия. Все параметры для соединения с сервером указываются в конструкторе объекта.

FTPФайл служит для получения информации о каталогах и файлах на FTP-сервере — этот объект позволяет получить информацию по объекту на FTP-сервере: имя, путь расширение, размер и тд.

ИнтернетПрокси позволяет указать прокси-сервер используемый для соединения с FTP/FTPS сервером — параметры для подключения к прокси-серверу указываются методом Установить(). Использование свойств «Пароль» и «Пользователь» нежелательно, так как эти свойства являются устаревшими.

ЗащищенноеСоединениеOpenSSL создает защищенное соединение OpenSSL — предоставляет возможность организовать защищенное соединение с FTP-сервером, также имеется возможность конкретный сертификат клиента и/или сертификат удостоверяющего центра.

В качестве практических примеров рассмотрим все операции которые позволяет выполнить объект FTPСоединение.

Как подключиться к серверу FTP?

Параметры для подключения указываются в конструкторе, сами параметры достаточно стандартны. Отдельно скажу про два параметра:

  • Таймаут — позволяет указать таймаут в секундах для установки соединения и выполнения операций;
  • Пассивное соединение — определяет тип FTP-соединения: «Ложь» — активный режим, «Истина» — пассивный, значение по умолчанию — «Ложь». Разница заключается в том, кто устанавливает соединение для передачи данных — при активном режиме это делает сервер, при пассивном клиент. Это бывает важно при наличии брандмауэра, так как он часто запрещает входящие соединения на случайные порты.

&НаКлиенте

Процедура ПодключениеКFTPИз1С(Команда)

//самый минималистичный вариант для анонимного пользователя

Соединение = Новый FTPСоединение(«localhost»);

//если номер порта стандартный, то его можно не указывать

//стандартные номера портов: 21 — FTP и 990 — FTPS

Соединение = Новый FTPСоединение(«localhost»,21,»login»,»password»);

//пассивное соединение с таймаутом 10 секунд

Соединение = Новый FTPСоединение(«localhost»,21,»login»,»password»,,Истина,10);

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

Как подключиться к серверу FTPS?

Настраивать собственный FTPS-сервер у меня не было никакого желания, поэтому воспользовался публичными серверами test.rebex.net. Различия между FTP и FTPS только в подключении к серверу, различий в работе я не увидел.

&НаКлиенте

Процедура ПодключениеКFTPSИз1с(Команда)

ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

Соединение = Новый FTPСоединение(«test.rebex.net»,990,»demo»,»password»,,,,ЗащищенноеСоединение,УровеньИспользованияЗащищенногоСоединенияFTP.Требовать);

Сообщить(Соединение.ТекущийКаталог());

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

Как искать файлы и каталоги по FTP из 1С?

В примере ниже показаны варианты использования функции НайтиФайлы() — получение списка файлов, поиск по маске и поиск конкретного файла. Кроме этого пример показывает какие данные о найденном файле/каталоге мы можем получить при помощи объекта FTPФайл.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

&НаКлиенте

Процедура ПоискФайловНаFTPИз1С(Команда)

Соединение = Новый FTPСоединение(«localhost»,21,»login»,»password»);

//получим список всех файлов на FTP

//в результате получаем массив объектов FTPФайл

НайденныеОбъекты = Соединение.НайтиФайлы(«/»,»*.txt»,Истина);

Если НайденныеОбъекты.Количество()>0 Тогда

Для Каждого ОбъектFTP Из НайденныеОбъекты Цикл

Сообщить(«Имя файла: «+ОбъектFTP.ПолноеИмя);

Сообщить(«Имя файла: «+ОбъектFTP.Путь+ОбъектFTP.ИмяБезРасширения+ОбъектFTP.Расширение);

Сообщить(«Это каталог: «+ОбъектFTP.ЭтоКаталог());

Сообщить(«Это файл: «+ОбъектFTP.ЭтоФайл());

Если ОбъектFTP.ЭтоФайл() Тогда

//размер имеется только у файлов

Сообщить(«Размер: «+ОбъектFTP.Размер()+» байт»);

КонецЕсли;

Сообщить(«Только для чтения: «+ОбъектFTP.ПолучитьТолькоЧтение());

Сообщить(«Скрытый: «+ОбъектFTP.ПолучитьНевидимость());

Сообщить(«Время изменения: «+ОбъектFTP.ПолучитьВремяИзменения());

КонецЦикла;

КонецЕсли;

//можно поискать что-то более конкретное, например по маске

НайденныеОбъекты = Соединение.НайтиФайлы(«/»,»*.txt»,Истина);

//или просто найти конкретный файл

НайденныеОбъекты = Соединение.НайтиФайлы(«/test_folder_1/file_1.txt»);

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

Как скачивать файлы по FTP из 1С?

&НаКлиенте

Процедура СкачатьФайлПоFTPИз1С(Команда)

Соединение = Новый FTPСоединение(«localhost»,21,»login»,»password»);

//классический вариант

//первый параметр — что скачать, второй параметр — куда скачать

Соединение.Получить(«/test_folder_1/file_1.txt»,»D:file.txt»);

//вариант с использованием потока

//первый параметр — что скачать, воторой параметр — поток в который будут помещены полученные данные

Поток = Новый ФайловыйПоток(«D:file.txt», РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);

Соединение.Получить(«/test_folder_1/file_1.txt»,Поток);

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

Как передавать файлы по FTP из 1С?

&НаКлиенте

Процедура ПередатьФайлНаFTPИз1С(Команда)

Соединение = Новый FTPСоединение(«localhost»,21,»login»,»password»);

//классический вариант

//первый параметр — что передать, второй параметр — куда передать

Соединение.Записать(«D:file.txt»,»/test_folder_1/file_2.txt»);

//вариант с использованием потока

//первый параметр — куда передать, воторой параметр — поток из которого взять данные

Поток = Новый ФайловыйПоток(«D:file.txt», РежимОткрытияФайла.Открыть, ДоступКФайлу.Чтение);

Соединение.Записать(«/test_folder_1/file_2.txt»,Поток);

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

Прочие действия с файлами и каталогами по FTP из 1С

Далее приведены короткие примеры, демонстрирующие возможности технологической платформы по выполнению различных простых операций над каталогами и файлами по FTP.  Инициализация переменной «Соединение» (т.е. подключение к FTP-серверу) опущена  для краткости.

Как получить и установить текущий каталог по FTP из 1С?

&НаКлиенте

Процедура ПолучитьИУставновитьТекущийКаталогПоFTPИз1С(Команда)

//получаем текущий каталог

Сообщить(Соединение.ТекущийКаталог());

//устанавливаем текущий каталог

Соединение.УстановитьТекущийКаталог(«/test_folder_1»);

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

Как создать каталог по FTP из 1С?

&НаКлиенте

Процедура СоздатьКаталогПоFTPИз1С(Команда)

//создание каталога

Соединение.СоздатьКаталог(«/test_folder_3»);

Соединение.СоздатьКаталог(«/test_folder_3/test_subfolder_1»);

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

Как удалить каталог  и файлы по FTP из 1С?

&НаКлиенте

Процедура УдалитьКаталогиИФайлыПоFTPИз1С(Команда)

//удаление каталога со всем его содержимым

Соединение.Удалить(«/test_folder_3»);

//удаление одного конкретного файла

Соединение.Удалить(«/test_folder_1/file_1.txt»);

//удаление файлов по маске

Соединение.Удалить(«/»,»*.txt»);

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

Как переименовать/переместить файл или каталог по FTP из 1С?

&НаКлиенте

Процедура ПереименоватьИПереместитьКаталогиИлиФайлыПоFTPВ1С(Команда)

//переименование каталога

//Соединение.Переместить(«/test_folder_1″,»/test_folder_4»);

//перемещение файла

Соединение.Переместить(«/file_1.txt», «/test_folder_2/file_1.txt»);

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

На это все, надеюсь, что данная статья была Вам полезна.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2017-12-18T22:37:08+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Оглавление (нажмите, чтобы раскрыть)

/// Как подлючиться к FTP серверу из 1с 8.3, 8.2
 
&НаКлиенте
Функция ПодключитьсяКFTPСерверу()
 
    Соединение = Новый FTPСоединение(
        "0.0.0.0", // адрес ftp сервера
        21, // порт сервера
        "user", // имя пользователя
        "123", // пароль пользователя
        Неопределено, // прокси не используется
        Истина, // пассивный режим работы
        0, // таймаут (0 - без ограничений)
        Неопределено // незащищенное соединение
    );
 
    // Для случаев, когда у ftp сервера нет возможности
    // обращаться к нам (мы находимся за межсетевым экраном)
    // следует использовать пассивный режим работы.
 
    Возврат Соединение;
 
КонецФункции
 
/// Как искать файлы по FTP из 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПоискФайловПоFTP(Команда)
 
    // Функция подключения определена выше.
    Соединение = ПодключитьсяКFTPСерверу();
 
    // Установим текущий каталог.
    Соединение.УстановитьТекущийКаталог("/");
 
    // Найдём конкретный файл по его полному адресу.
    // Внимание! Используем прямые слеши.
    НайденныеФайлы = Соединение.НайтиФайлы("/data/1.txt");
 
    Если НайденныеФайлы.Количество() > 0 Тогда
        Файл = НайденныеФайлы[0];
        // и получим следующую информацию о нём:
        Сообщить("Имя: " + Файл.ПолноеИмя);       
        Сообщить("Это файл: " + Файл.ЭтоФайл());
        Сообщить("Это каталог: " + Файл.ЭтоКаталог());        
        Сообщить("Размер: " + Файл.Размер() + " байт");
        Сообщить("Атрибут только чтение: " + Файл.ПолучитьТолькоЧтение());
        Сообщить("Атрибут скрытый: " + Файл.ПолучитьНевидимость());
        Сообщить("Атрибут время изменения: " + Файл.ПолучитьВремяИзменения());
    КонецЕсли;
 
    // Найдём все папки и файлы в корневом каталоге
    НайденныеФайлы = Соединение.НайтиФайлы(
        "/", // ищём в корневом каталоге
        "*" // любые файлы (здесь можно задать маску)
    );
    Для Каждого Файл Из НайденныеФайлы Цикл
        Сообщить(Файл.ПолноеИмя);
    КонецЦикла;
 
    // Найдём все файлы с расширением .txt в папке data
    НайденныеФайлы = Соединение.НайтиФайлы(
        "/data", // ищём в определенной папке
        "*.txt" // по определенной маске
    );
 
КонецПроцедуры
 
/// Как скачивать файлы по FTP из 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПолучениеФайловПоFTP(Команда)
 
    // Функция подключения определена выше.
    Соединение = ПодключитьсяКFTPСерверу();
 
    // Установим текущий каталог.
    Соединение.УстановитьТекущийКаталог("/");
 
    ПапкаДляСохранения = СлужебныйНаКлиенте.СоздатьПапкуДляЭкспериментов();    
 
    // Скачаем "trade_exchange/01.01.2017.xml"
    // Внимание! Используем прямые слеши.
    Соединение.Получить(
         "trade_exchange/01.01.2017.xml", // что качаем
         ПапкаДляСохранения + "/01.01.2017.xml" // куда качаем
    );
 
    Сообщить("Сохранили файл в " + ПапкаДляСохранения);
 
КонецПроцедуры
 
/// Как передавать файлы по FTP из 1с 8.3, 8.2
 
&НаКлиенте
Процедура ПередачаФайловПоFTP(Команда)
 
    // Функция подключения определена выше.
    Соединение = ПодключитьсяКFTPСерверу();
 
    // Установим текущий каталог.
    Соединение.УстановитьТекущийКаталог("/");
 
    // Создадим случайный текстовый файл.
    Папка = СлужебныйНаКлиенте.СоздатьПапкуДляЭкспериментов();
    Служебный.СоздатьПроизвольныйТекстовыйФайл(
        Папка + "/info.txt");
 
    // Запишем этот файл на сервер по ftp в папку trade_exchange
    // Внимание! Используем прямые слеши.
    Соединение.Записать(
        Папка + "/info.txt", // что записываем
        "/trade_exchange/info.txt" // куда записываем
    );
 
    Сообщить("Передали файл по FTP.");
 
КонецПроцедуры
 
&НаКлиенте
Процедура ДругиеОперацииПоFTP(Команда)
 
    // Функция подключения определена выше.
    Соединение = ПодключитьсяКFTPСерверу();
 
    // Установим текущий каталог.
    Соединение.УстановитьТекущийКаталог("/");
 
        /// Как создать новый каталог по FTP из 1с 8.3, 8.2
 
    Соединение.СоздатьКаталог("/NewBin");
 
        /// Как удалить каталог по FTP вместе с содержимым из 1с 8.3, 8.2
 
    Соединение.Удалить("/trade_exchange");
 
        /// Как удалить файлы по FTP из 1с 8.3, 8.2    
 
    Соединение.Удалить(
        "/trade_exchange/01.01.2017.xml"
    ); // удаляем один файл по его адресу
 
    Соединение.Удалить(
        "/trade_exchange", // путь к удаляемым файлам
        "*.xml" // маска для выбора
    ); // или несколько файлов поиском по маске
 
        /// Как переименовать файл или каталог по FTP из 1с 8.3, 8.2
 
    Соединение.Переместить(
        "/NewBin", // старое имя
        "/OldBin" // новое имя
    );
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Работа с ftp в языке 1С 8.3, 8.2 (в примерах)

<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Автор Soulidium, 15 июл 2013, 10:10

0 Пользователей и 1 гость просматривают эту тему.

Подскажите как прочитать текстовый файл который находится на ftp сервере?
Остановился на этапе поиска текстовых файлов.

СерверФТП.УстановитьТекущийКаталог(КаталогRS+"/out");
ФайлыTXT = СерверФТП.НайтиФайлы(СерверФТП.ТекущийКаталог(),"*.txt");
Для Каждого Файл Из ФайлыTXT Цикл
       ВремФайл = ПолучитьИмяВременногоФайла("txt");
       СерверФТП.Получить(Файл.Имя,ВремФайл);

..................................................................................

КонецЦикла;


Так вот тоже не получается…


СерверФТП.УстановитьТекущийКаталог(КаталогRS+"/out");
ФайлыTXT = СерверФТП.НайтиФайлы(СерверФТП.ТекущийКаталог(),"*.txt");
Для Каждого Файл Из ФайлыTXT Цикл
    ТекстДок = Новый ТекстовыйДокумент;
    ТекстДок.Прочитать("ftp://***.***.***.***/out/"+Файл.Имя);
КонецЦикла;

Текст ошибки:

{Обработка.ЧтениеФайла.Форма.Форма.Форма(44)}: Ошибка при вызове метода контекста (Прочитать)
ТекстДок.Прочитать(«ftp://***.***.***.***/out/»+Файл.Имя);
по причине:
Файл не обнаружен ‘file://ftp://***.***.***.***/out/file.txt


А что не получается в первом варианте?

СерверФТП.УстановитьТекущийКаталог(КаталогRS+"/out");
ФайлыTXT = СерверФТП.НайтиФайлы(СерверФТП.ТекущийКаталог(),"*.txt");
Чтение = Новый ЧтениеТекста;
Для Каждого Файл Из ФайлыTXT Цикл
       ВремФайл = ПолучитьИмяВременногоФайла("txt");
       СерверФТП.Получить(Файл.Имя,ВремФайл);
       Чтение.Открыть(ВремФайл);

       СтрокаТекст = Чтение.Прочитать();

                        КонецЦикла;

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!



Подскажите кто нибудь как решить проблему. В цикле перебираю файлы c ftp, разбиваю на строки и заношу строки в массив (то что массив затирается каждый раз уже понял, исправлю :)) Дело в том, что на этапе считывания 2го файла начинается ругань на 14ю строку СерверФТП.Получить(Файлtxt.Имя,ВремФайл); А 1й файл считывается нормально, дальше происходит, то что нужно…

Текст ошибки:
{Обработка.ЧтениеФайла.Форма.Форма.Форма(365)}: Ошибка при вызове метода контекста (Получить)
                  СерверФТП.Получить(Файлtxt.Имя,ВремФайл);
по причине:
Ошибка работы с Интернет:  ftp://***.***.***.***:****ftp: couldn’t retrieve (RETR failed) the specified file


********************************************************
1 Если ФайлыTXT.Количество() > 0 Тогда
2 Чтение = Новый ЧтениеТекста;
3 Для Каждого Файлtxt Из ФайлыTXT Цикл
4 Запрос = Новый Запрос;
5 Запрос.Текст = "ВЫБРАТЬ
6                | ДокументыСозданий_ИзмененийСрезПоследних.НомерДокумента
7                |ИЗ
8                | РегистрСведений.ДокументыСозданий_Изменений.СрезПоследних(&Дата, НомерДокумента = &НомерДокумента) КАК ДокументыСозданий_ИзмененийСрезПоследних";
9 Запрос.УстановитьПараметр("Дата",ТекущаяДата());
10 Запрос.УстановитьПараметр("НомерДокумента",Файлtxt.ИмяБезРасширения);
11 Результат = Запрос.Выполнить().Выбрать();
12 Если НЕ Результат.Количество() > 0 Тогда
13 ВремФайл = ПолучитьИмяВременногоФайла("txt");
14 СерверФТП.Получить(Файлtxt.Имя,ВремФайл);
15    Чтение.Открыть(ВремФайл);
16 Массив = Новый Массив;
17 Массив.Добавить(Файлtxt.ИмяБезРасширения);
18 СтрокаТекст = Чтение.ПрочитатьСтроку();
19 Пока СтрокаТекст <> Неопределено Цикл
20 Массив.Добавить(СтрокаТекст);
21 СтрокаТекст = Чтение.ПрочитатьСтроку();
22 КонецЦикла;
23 Иначе
24 Массив = 0;
25 КонецЕсли;
26 СерверФТП.УстановитьТекущийКаталог(КаталогRS+"/in");
27 ТекстДок = Новый ТекстовыйДокумент;
28 Файл = ПолучитьИмяВременногоФайла("txt");
29 ТекстДок.Записать(Файл);
30 СерверФТП.Записать(Файл,Файлtxt.ИмяБезРасширения+"+"+".txt");
31 КонецЦикла;
32 КонецЕсли;
********************************************************


СерверФТП.Записать(Файл,Файлtxt.ИмяБезРасширения+"+"+".txt");
Чтение.Закрыть();
КонецЦикла;

Добавлено: 17 июл 2013, 15:17


Возможно у тебя соединение рвется с фтп по таймауту или из за связи

Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!


Не получается :dfbsdfbsdf: Так же ошибка…

Добавлено: 17 июл 2013, 15:19


Цитата: Dethmontt от 17 июл 2013, 14:59
СерверФТП.Записать(Файл,Файлtxt.ИмяБезРасширения+"+"+".txt");
Чтение.Закрыть();
КонецЦикла;

Добавлено: 17 июл 2013, 15:17


Возможно у тебя соединение рвется с фтп по таймауту или из за связи

Попробую задержку поставить в цикле…

Добавлено: 17 июл 2013, 15:22


Цитата: Soulidium от 17 июл 2013, 15:16Попробую задержку поставить в цикле…

И с задержкой не получается :fdbsdfbsd:

Добавлено: 17 июл 2013, 15:24


Цитата: Dethmontt от 17 июл 2013, 14:59Возможно у тебя соединение рвется с фтп по таймауту или из за связи

Так к слову, ftp у меня компьютере.

Добавлено: 17 июл 2013, 15:36


Есть идея загрузить файл на Диск и потом уже с Диска, при помощи ТекстовыйДокумент, считывать файл построчно в массив. Но идея с засорением диска не очень нравится… 


 0 

   

Распечатать

Код 1C v 8.х

  // Загрузка файлов на FTP сервер
Процедура ЗагрузитьОтмеченные(Кнопка)
Сервер = Новый FTPСоединение(FTPServer);
Для Каждого Файл Из ПолеСписка Цикл
Если Файл.Пометка Тогда
Сервер.Получить(Файл.Значение.ПолноеИмя, "с:temp" + Файл.Значение.ПолноеИмя);
Файл.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры

// Просмотр файлов на FTP сервере
Процедура Просмотреть(Кнопка)
Сервер = Новый FTPСоединение(FTPServer);
МассивФайлов = Сервер.НайтиФайлы("/","*.*");
Для Каждого Файл Из МассивФайлов Цикл
Если Файл.ЭтоФайл() Тогда
ПолеСписка.Добавить(Файл, Файл.Имя)
КонецЕсли;
КонецЦикла;
КонецПроцедуры

Код 1C v 8.х

  ПапкаКонтрагена = "Kontr";
Попытка
ИмяFTPСервера = "*******";
ПортFTPСоединения = "21";
ПользовательFTPСоединения = "****" ;
ПарольFTPСоединения = "*****" ;
ПассивноеFTPСоединение = Ложь;
Соединение = Новый FTPСоединение(ИмяFTPСервера, ПортFTPСоединения,ПользовательFTPСоединения,ПарольFTPСоединения, ,ПассивноеFTPСоединение);
Массив = Соединение.НайтиФайлы("/"+ПапкаКонтрагена+"/", "");
Если Массив.Количество() = 0 Тогда
Соединение.СоздатьКаталог(ПапкаКонтрагена);
КонецЕсли;
Соединение.УстановитьТекущийКаталог(ПапкаКонтрагена);
Соединение.Записать(ИмяФайлаЗаписи, "file.txt");
Исключение
Сообщить("Ошибка записи файла на FTP!!!");
Возврат "";
КонецПопытки;

FTPs поддерживается только для версий платформы 8.3.9 и выше использование сертификатов SSL поддерживается с версии платформы 8.3.1

также нужно учитывать что по-умолчанию 1Сv8 стучится на порт 990. но в режиме УровеньИспользованияЗащищенногоСоединенияFTP.Авто при указании порта 21 будет стучаться по протоколу FTP, а при указании порта 990 и незаполненном параметре будет стучаться также на порт 990 (в этом примере кода).

И заработает только если указать УровеньИспользованияЗащищенногоСоединенияFTP.Требовать

в конструкторе или параметрах СерверFTP = Новый FTPСоединение()

	ПроксиСервер = Новый ИнтернетПрокси();
	
	ПараметрыFTP = Новый Структура;
	ПараметрыFTP.Вставить("Сервер"                                   , АдресFTP;
	ПараметрыFTP.Вставить("Порт"                                     , 21);
	ПараметрыFTP.Вставить("ИмяПользователя"                          , "UserName");
	ПараметрыFTP.Вставить("ПарольПользователя"                       , "UserPAssWord");
	ПараметрыFTP.Вставить("Прокси"                                   , ПроксиСервер);
	ПараметрыFTP.Вставить("ПассивноеСоединение"                      , Ложь);
	ПараметрыFTP.Вставить("Таймаут"                                  , 10);
    
    ЗащищенноеСоединение = Неопределено;   
    Попытка
        Если ВерсияПлатформы() >= 8301 Тогда
            Выполнить("ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();");    
        КонецЕсли;
        
    Исключение
        ЗащищенноеСоединение = Неопределено;
    КонецПопытки;
    
    Если ВерсияПлатформы() >= 8309 Тогда
		Попытка
			Выполнить("СерверFTP = Новый FTPСоединение(
			|ПараметрыFTP.Сервер, 
			|ПараметрыFTP.Порт, 
			|ПараметрыFTP.ИмяПользователя, 
			|ПараметрыFTP.ПарольПользователя,
			|ПараметрыFTP.Прокси,
			|ПараметрыFTP.ПассивноеСоединение,
			|ПараметрыFTP.Таймаут,
			|ПараметрыFTP.ЗащищенноеСоединение,
			|УровеньИспользованияЗащищенногоСоединенияFTP.Требовать);");					
        Исключение
            Ошибка = ОписаниеОшибки();
            
			ТекстЛогаСобытий = "Не удается подключиться к серверу - " + ПараметрыFTP.Сервер + Символы.ПС + Ошибка;
			Сообщить(ТекстЛогаСобытий);
				Возврат;
		КонецПопытки;	
	Иначе
		Попытка
			СерверFTP = Новый FTPСоединение(
			ПараметрыFTP.Сервер, 
			ПараметрыFTP.Порт, 
			ПараметрыFTP.ИмяПользователя, 
			ПараметрыFTP.ПарольПользователя,
			ПараметрыFTP.Прокси,
			ПараметрыFTP.ПассивноеСоединение,
			ПараметрыFTP.Таймаут);			
		Исключение
			ТекстЛогаСобытий = "Для подключений к серверу FTP требуется версия платформы 1С не ниже версии 8.3.9. Не удается подключиться к серверу - " + ПараметрыFTP.Сервер;
			Сообщить(ТекстЛогаСобытий);
		КонецПопытки;
	КонецЕсли;


  • Метки


    1Cv8, 1С, FTP, Сети

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • 1с cbynarydata ошибка кодирования декодирования
  • 1с apache ошибка 500