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с не всегда лучшим образом работает с сетью.

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

  

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, Сети

При записи файла из каталога на фтп возникает ошибка работы с интернетом. С чем это связано и как её решить?

Путь = "shareDocОбменССайтомИсходящие1c_to_remains_6658356737_2021_05_18_16_35_53.xml";
	ФТП=Новый FTPСоединение("bestftpever.asuscomm.com",,"пользователь","пароль",,Истина,,,);
	ФТП.УстановитьТекущийКаталог("");
	ФТП.Записать(Путь,"1c_to_remains_6658356737_2021_05_18_16_35_53.xml");

  • Главная
  •  — 
  • Форум
  •  — 
  • ТЕХПОДДЕРЖКА
  •  — 
  • БОНЛИОН — Бонусная система для 1С
  •  — 
  • Обмен по FTP
 

vep

Пользователь

Сообщений: 7
Регистрация: 15.03.2017

Помогите, пожалуйста. Не можем настроить выгрузку файлов обмена по ftp. Соединение проверяем — все нормально. Каталог на сервере где сайт прописан. Но файл выгрузки в папку на сайт не сохраняется.

В проводнике Windows или Total Commander — все нормально ровно с теми же настройками. Все соединяется и прописанный в поле Каталог путь отрабатывает.

 

покажите скрин настроек в 1С

 

vep

Пользователь

Сообщений: 7
Регистрация: 15.03.2017

#3


0
 

28.06.2021 09:19:57

Цитата
Александр Носов написал:
покажите скрин настроек в 1С

https://yadi.sk/i/nFJ51v5kDjfrrQ

 

вы похоже указываете лишние папки на каталог FTP
скорее всего нужно оставить то что идет после www

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

Пример как должно быть
/new.site.ru/public_html/upload/

 

vep

Пользователь

Сообщений: 7
Регистрация: 15.03.2017

#5


0
 

28.06.2021 10:07:29

Цитата
Александр Носов написал:
вы похоже указываете лишние папки на каталог FTP
скорее всего нужно оставить то что идет после www

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

Пример как должно быть
/new.site.ru/public_html/upload/

Мы эксперементировали уже по-всякому. Не работает. Без слэшей был последний вариант потому что в прилагаемой инструкции на скриншоте именно так прописано.

 

vep

Пользователь

Сообщений: 7
Регистрация: 15.03.2017

#6


0
 

28.06.2021 10:08:23

Цитата
vep написал:
вы похоже указываете лишние папки на каталог FTPскорее всего нужно оставить то что идет после www

Попробую. Но если смотреть в ftp-клиенте, то путь к папке именно такой как на скриншоте.

 

vep

Пользователь

Сообщений: 7
Регистрация: 15.03.2017

С урезанным адресом выдает ошибку:

Ошибка при соединении с FTP : /upload/1c_exchange_bonuses/ ! {ОбщийМодуль.APPLIX_RU_СМ_FTP.Модуль(76)}: Ошибка при вызове метода контекста (НайтиФайлы): Ошибка аутентификации при доступе к ресурсу:  

ftp://magellanbooks.ru:21

Access denied to remote resource

 

пришлите доступ к вашему ftp на

support@applix.ru

в письме укажиет ссылку на эту тему
протестим

 

vep

Пользователь

Сообщений: 7
Регистрация: 15.03.2017

#9


0
 

30.06.2021 12:37:46

Я уже сам проверил. Следующий код с использованием вышеуказанных параметров отлично работает:

Цитата
   Соединение = Новый FTPСоединение(Объект.FTPСервер, Объект.Порт, Объект.FTPПользователь, Объект.FTPПароль,,Объект.FTPПассивноеСоединение);
   Соединение.УстановитьТекущийКаталог(«/repository/www/upload/1c_exchange_bonuses»);
   Соединение.Записать(Объект.КаталогОбменаБонусами, «info.txt»);

Так что проблема точно в вашем закрытом модуле. К тому же попутно нашел ещё один баг. В коде команды «проверить соединение» в нижеприведенной строке отсутствует параметр «ПассивноеСоединение» из-за чего соединение проверяется минуты две. Возможно и в закрытом модуле похожие огрехи имеются. Проверьте.

Цитата
Иначе
      Соединение = Новый FTPСоединение(Объект.FTPСервер, Порт, Объект.FTPПользователь, Объект.FTPПароль);
КонецЕсли;

Изменено: vep30.06.2021 12:38:57

 

Александр Носов

Администратор

Сообщений: 359
Регистрация: 18.10.2019

#10


0
 

22.07.2021 15:00:54

Работа в FTP переведена на служебный модуль.
Сейчас обмен работает без сбоев.

Обновление уже можно заказать, отправьте запрос на наш email  

ПОСЛЕДНИЕ СООБЩЕНИЯ

Сейчас на форуме (гостей: 48)

Всего зарегистрированных пользователей: 2224

Приняло участие в обсуждении: 367

Всего тем: 822

Показывать по
10
20
40
сообщений

Новая тема

Ответить

rom19

Дата регистрации: 07.06.2011
Сообщений: 18

«Каталог=»/www/obmen»;<br>ИмяФайлаСообщения=»test.xml»;<br>Сервер.УстановитьТекущийКаталог(Каталог); <br>Сервер.Удалить(ИмяФайлаСообщения); <br> <br>Ошибка при вызове метода контекста Удалить!<br> <br>Хотя в этой же процедуре получаю спокойно по ftp этот же xml файл и разбираю его.<br>Использую локальный сервер Golden FTP Server. Права — Разрешить полный доступ.<br>FTP менеджером все спокойно удаляется. А через 1С — нет. <br>Запись и чтение через 1С — работает. Удаление только не работает!»

Показывать по
10
20
40
сообщений

Читают тему:

  • 1с 8 попытка исключение описание ошибки
  • 1с 8 выгрузка базы ошибка разделенного
  • 1с 77 ошибка разделения данных при доступе к users usr
  • 1с 77 ошибка при запуске журнала регистрации
  • 1с 77 ошибка загрузки метаданных виндовс 10