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
Но как вы понимаете ввожу я везде одни и теже параметры аутентификации.
В чем проблема? Очень нужна помощь!
1 — 30.10.14 — 12:45
имя каталога какое?
2 — 30.10.14 — 12:47
/Moscow/Finance — такое
3 — 30.10.14 — 12:48
Сделал аналог структуры на бесплатном фтп сервере в интернете, ftp://93.189.45.34/, там все ок, подключается
4 — 30.10.14 — 13:11
(0) Покажи Код?
5 — 30.10.14 — 13:13
&НаКлиенте
Процедура ПолучитьсФайлы(КаталогНаФТП, КаталогЗдесь)
Соединение = СоздатьНовоеСоединение();
Если Соединение = Неопределено Тогда
Возврат;
КонецЕсли;
Попытка
Соединение.УстановитьТекущийКаталог(КаталогНаФТП);
Исключение
Сообщить(ОписаниеОшибки());
Сообщить(«Не найден каталог: » + КаталогНаФТП);
Возврат;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция СоздатьНовоеСоединение()
Если Не ЗначениеЗаполнено(Объект.FTPПорт) Тогда
Порт = 21;
Иначе
Порт = Объект.FTPПорт;
КонецЕсли;
Попытка
Соединение = Новый FTPСоединение(Объект.FTPСервер, Порт, Объект.FTPПользователь, Объект.FTPПароль);
Исключение
Сообщить(«Не удалось установить соединение с сервером » + Объект.FTPСервер + «:» + Строка(Объект.FTPПорт) + «.
|Проверьте правильность адреса сервера, порт, имя пользователя и пароль.»);
Соединение = Неопределено;
Конецпопытки;
Возврат Соединение;
КонецФункции
6 — 30.10.14 — 13:16
(5) И какое значение содержит «КаталогНаФТП», для установки текущего каталога?
7 — 30.10.14 — 13:29
Какие-нибудь лишние символы в строке соединения
8 — 30.10.14 — 13:53
(6) /Moscow/Finance — такое
9 — 30.10.14 — 13:53
никаких, соединение проходит успешно, ошибка при попытке УстановитьТекущийКаталог()
10 — 31.10.14 — 13:29
Итак, выявилось что FTP-сервер находится на операционной системе AS 400, которая имеет некую другую файловую структуру.Кто может помочь с поиском или созданием внешней компоненты для 1с 8.2 (8.3) для подключения к этому ФТП? Или как обойти эту проблему средствами 1С 8.2 (8.3)? 1С 7.7 с помощью компоненты DialMail и объекта FTP вполне успешно подключается.
11 — 31.10.14 — 15:48
Спецов на мисте не осталось?!
12 — 31.10.14 — 15:55
(10) Какая бы не была там файловая структура у этой AS 400 на FTP протокол это никак не должно влиять. Единственной что юниксовые ФС они в большинстве своем регистрозависимые , то есть /Moscow/Finance и /Moscow/FINANCE — это два разных каталога.
13 — 31.10.14 — 16:28
(12) да вот в том то и дело что все один в один, и вот на этом сайте пишут http://trac.filezilla-project.org/ticket/975 что есть дело до ФС, тут еще пишут про некий параметр NAMEFMT, который у меня установлен в значение set to 1, а если подставить 0, то возможно все заработает, но как это сделать не понимаю. Была идея скачать проникнуть в каталог через командную строку, но она выдает те же ошибки что и проводник при попытке зайти в каталог
14 — 31.10.14 — 17:09
Есть возможность снять протокол фтп ссессий с этим сервером через 1С и через total-cmd? Надо выяснить , какая конкретно команда мешает или какой команды не хватает для успешной смены каталога на удаленном фтп сервере.
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.
Содержание
- Общая информация
- Практические задачи при работе с FTP
- Как подключиться к серверу FTP?
- Как подключиться к серверу FTPS?
- Как искать файлы и каталоги по FTP из 1С?
- Как скачивать файлы по FTP из 1С?
- Как передавать файлы по FTP из 1С?
- Прочие действия с файлами и каталогами по FTP из 1С
- Как получить и установить текущий каталог по FTP из 1С?
- Как создать каталог по FTP из 1С?
- Как удалить каталог и файлы по FTP из 1С?
- Как переименовать/переместить файл или каталог по 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
Возможно у тебя соединение рвется с фтп по таймауту или из за связи
Если долго всматриваться в учебник…то в голову может прийти мысль его открыть!
Не получается Так же ошибка…
Добавлено: 17 июл 2013, 15:19
Цитата: Dethmontt от 17 июл 2013, 14:59
СерверФТП.Записать(Файл,Файлtxt.ИмяБезРасширения+"+"+".txt");
Чтение.Закрыть();
КонецЦикла;Добавлено: 17 июл 2013, 15:17
Возможно у тебя соединение рвется с фтп по таймауту или из за связи
Попробую задержку поставить в цикле…
Добавлено: 17 июл 2013, 15:22
Цитата: Soulidium от 17 июл 2013, 15:16Попробую задержку поставить в цикле…
И с задержкой не получается
Добавлено: 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 |
Помогите, пожалуйста. Не можем настроить выгрузку файлов обмена по ftp. Соединение проверяем — все нормально. Каталог на сервере где сайт прописан. Но файл выгрузки в папку на сайт не сохраняется. В проводнике Windows или Total Commander — все нормально ровно с теми же настройками. Все соединяется и прописанный в поле Каталог путь отрабатывает. |
покажите скрин настроек в 1С |
|
vep Пользователь Сообщений: 7 |
#3
28.06.2021 09:19:57
https://yadi.sk/i/nFJ51v5kDjfrrQ |
||
вы похоже указываете лишние папки на каталог FTP поэкспериментируйте разными вариантами Пример как должно быть |
|
vep Пользователь Сообщений: 7 |
#5
28.06.2021 10:07:29
Мы эксперементировали уже по-всякому. Не работает. Без слэшей был последний вариант потому что в прилагаемой инструкции на скриншоте именно так прописано. |
||
vep Пользователь Сообщений: 7 |
#6
28.06.2021 10:08:23
Попробую. Но если смотреть в ftp-клиенте, то путь к папке именно такой как на скриншоте. |
||
vep Пользователь Сообщений: 7 |
С урезанным адресом выдает ошибку: Ошибка при соединении с FTP : /upload/1c_exchange_bonuses/ ! {ОбщийМодуль.APPLIX_RU_СМ_FTP.Модуль(76)}: Ошибка при вызове метода контекста (НайтиФайлы): Ошибка аутентификации при доступе к ресурсу: ftp://magellanbooks.ru:21 Access denied to remote resource |
пришлите доступ к вашему ftp на support@applix.ru в письме укажиет ссылку на эту тему |
|
vep Пользователь Сообщений: 7 |
#9
30.06.2021 12:37:46 Я уже сам проверил. Следующий код с использованием вышеуказанных параметров отлично работает:
Так что проблема точно в вашем закрытом модуле. К тому же попутно нашел ещё один баг. В коде команды «проверить соединение» в нижеприведенной строке отсутствует параметр «ПассивноеСоединение» из-за чего соединение проверяется минуты две. Возможно и в закрытом модуле похожие огрехи имеются. Проверьте.
Изменено: vep — 30.06.2021 12:38:57 |
||||
Александр Носов Администратор Сообщений: 359 |
#10
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
сообщений
Читают тему: