Имя: Пароль:
1C
1С v8
FTP СоздатьКаталог
0 Olga1c8
 
29.05.18
14:31
Добрый день!
1с УФ. Подключаюсь к FTP, соединение проходит, каталог устанавливается. но не создается новый каталог в нем. Ругается:
Ошибка при вызове метода контекста (СоздатьКаталог): Ошибка работы с Интернет:  ftp://***.***.***.***:21 Quote command returned error
Код

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

    НачальнаяПапкаВыгрузкиКомп = "D:\1С\webdata";
    Если ТекущаяПапка = Неопределено Тогда ТекущаяПапка = НачальнаяПапкаВыгрузкиКомп КонецЕсли;
    МассивФайлов = НайтиФайлы(ТекущаяПапка, "*");
    ТекКаталог = "upload/";
    
    Для Каждого НайденныйФайл Из МассивФайлов Цикл
        Файл = Новый Файл(НайденныйФайл.ПолноеИмя);
        Если Файл.ЭтоКаталог() Тогда
            //ЕстьТакаяПапка = Соединение.НайтиФайлы(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(НайденныйФайл.Путь, НачальнаяПапкаВыгрузкиКомп + "\", ""), "\", "/"),НайденныйФайл.Имя).Количество() > 0;
            //Вот эта строка выше тоже не работает, я ее пока убрала временно.
            ЕстьТакаяПапка = Ложь;
            Если не ЕстьТакаяПапка Тогда
                НомерПопытки = 1;
                Успешно = Ложь;
                Пока НомерПопытки < 2 и не Успешно Цикл
                    Попытка
                        Соединение.УстановитьТекущийКаталог(ТекКаталог); //вот это нормально проходит
                        Сообщить("Установлен каталог "+ТекКаталог);
                        Успешно = Истина;
                    Исключение
                        Сообщить("Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки());
                        НомерПопытки = НомерПопытки + 1;
                    КонецПопытки;
                КонецЦикла;
                Если Не Успешно Тогда
                    Возврат Ложь;
                КонецЕсли;
                
                НомерПопытки = 1;
                Успешно = Ложь;
                Пока НомерПопытки < 2 и не Успешно Цикл
                    Попытка
                        Соединение.СоздатьКаталог(НайденныйФайл.Имя);  //а здесь вылетает с ошибкой, указанной выше.
                        Успешно = Истина;
                    Исключение
                        Сообщить("Попытка №" + НомерПопытки + ", каталог " + НайденныйФайл.Имя + " - " + ОписаниеОшибки());
                        НомерПопытки = НомерПопытки + 1;
                    КонецПопытки;
                КонецЦикла;
                
                Если Не Успешно Тогда
                    Возврат Ложь;
                КонецЕсли;

            КонецЕсли;


не может создать каталог на FTP.
На стороне фтп админы говорят что права на папку есть, обычный файл xml я могу скопировать через 1с, а каталог создать не могу. Цель: выгруженные файлы для сайта типовой выгрузкой из УТ надо положить на ФТП "как есть" со всеми вложенными папками и картинками.
Чего не так? Подскажите пожалуйста, я уже замучилась.
1 Cool_Profi
 
29.05.18
14:54
А чему равно НайденныйФайл.Имя ?
2 Olga1c8
 
29.05.18
14:57
(1) Это имя каталога import_files, который внутри каталога webdata на диске компьютера. в отладчике так: НайденныйФайл.Имя = "import_files"
3 Cool_Profi
 
29.05.18
15:17
Ну так права на чтение папки есть, а на создание каталогов нет .
Нужно с разбегу в голову с вертушки админам. Чтобы не выделывались и читали логи.
4 Cool_Profi
 
29.05.18
15:17
"вертушка" - это, например, "маваши-гери".
5 Olga1c8
 
29.05.18
15:41
(3) раз такое подробное разделение прав имеется, то возможно и так. Сказала админам, отпишусь по результату. А еще есть какие-то варианты решения? Или только права могут быть?
6 Cool_Profi
 
29.05.18
15:49
(5) Ну так логи нужно смотреть. Наугад сказать нельзя
7 Olga1c8
 
29.05.18
16:13
(6) А метод Соединение.НайтиФайлы тоже по этой причине не работает? Там примерно такая же ошибка.
8 Franchiser
 
гуру
29.05.18
16:20
9 Franchiser
 
гуру
29.05.18
16:24
Перед СоздатьКаталог() наверно нужно выполнить УстановитьТекущийКаталог()
10 Olga1c8
 
29.05.18
16:36
(9) там ведь в коде видно, что я каталог устанавливаю сначала.
11 Olga1c8
 
29.05.18
16:37
(8) да, это я гуглила, после этого поста сообщение вывела что текущий каталог действительно устанавливается.
12 Olga1c8
 
30.05.18
10:14
Через файлзиллу смотрю, этот каталог создается, а в 1с-ке ругается и дальше выгрузка не идет.
13 Franchiser
 
гуру
30.05.18
10:19
Может так:
FTPСоединение.ПассивныйРежим(Ложь);
14 Olga1c8
 
30.05.18
11:00
Проблема вот в чем: я ж временно убрала строчку где поиск файлов, и сразу же создаю каталог. А если он там есть, то программа ругается. ок, я вернула на родину эту строчку, и проблема у меня теперь в ней.

ЕстьТакаяПапка = Соединение.НайтиФайлы(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(НайденныйФайл.Путь, НачальнаяПапкаВыгрузкиКомп + "\", ""), "\", "/"),НайденныйФайл.Имя).Количество() > 0;

ругается, говорит Ошибка при вызове метода контекста (НайтиФайлы)
по причине:
Ошибка аутентификации при доступе к ресурсу:  ftp://185.41.162.114:21 Access denied to remote resource
15 Olga1c8
 
30.05.18
11:05
Может удалить все перед выгрузкой?
16 hhhh
 
30.05.18
11:05
(14) выкинь "/", оно вроде вредит там
17 Franchiser
 
гуру
30.05.18
11:06
(16) Параметры:

<Путь> (обязательный)

Тип: Строка.
Путь к каталогу, в котором производится поиск. При использовании этой схемы в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Допускается указание полного имени файла (путь + имя).
18 Franchiser
 
гуру
30.05.18
11:07
Чему равно
НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(НайденныйФайл.Путь, НачальнаяПапкаВыгрузкиКомп + "\", ""), "\", "/")
?
19 hhhh
 
30.05.18
11:08
(17) вообще в клонце слеш не нужен. Откуда там слеш взялся?
20 hhhh
 
30.05.18
11:08
(17) ни прямой, ни обратный.
21 Franchiser
 
гуру
30.05.18
11:10
(20) согласен, в конце убери
22 Franchiser
 
гуру
30.05.18
11:11
И слеши должны быть не обратные, а прямые
23 Franchiser
 
гуру
30.05.18
11:13
Интересно должно быть ftp:// или ftp:\\ ?
24 Olga1c8
 
30.05.18
11:17
слэши прямые там, я ж их как раз заменяю. Но попробую убрать сейчас вообще любые.
25 Franchiser
 
гуру
30.05.18
11:19
(24) мне кажется нужно убрать только в конце, если убрать все будет каша
26 Olga1c8
 
30.05.18
11:20
да, я поняла что в конце) пробую
27 Olga1c8
 
30.05.18
11:31
Вобщем я ради эксперимента ту длинную галиматью заменила на простое ЕстьТакаяПапка = Соединение.НайтиФайлы("upload",НайденныйФайл.Имя).Количество() > 0; и оно заработало))) Спасибо, действительно слэш в конце не нужен был) Но теперь другая проблемка вылезла, но по ней меня пока терзают смутные сомнения. Пока я сама с ней поковыряюсь, если не шмогла, то опять к вам обращусь)
28 Olga1c8
 
30.05.18
12:55
вощем не шмогла...
тут такое.
каталоги имеют такую структуру:
import_files
   a3
   d7
это все каталоги на компе.
захожу на на фтп в папку upload и ищу там верхний каталог import_files. Если его там нет, то он его создает и идет далее , затем пытается найти файлы уже в upload/import_files, и затем вылетает с ошибкой, когда не может УстановитьТекущийКаталог(upload/import_files/)

А если каталог import_files уже до выгрузки имеется на фтп то когда программа пытается НайтиФайлы в каталоге upload/import_files (без слэш!), то ругается на доступ. Говорит Ошибка при вызове метода контекста (УстановитьТекущийКаталог): Ошибка аутентификации при доступе к ресурсу.
Короче хоть создает он верхний каталог, хоть он уже там есть, все равно не работает, но не работает по разному....

Если я захожу в файлзиллу в каталог import_files, то я могу там внутри и создавать и все такое....
29 Olga1c8
 
30.05.18
13:00
блин неправильно написала
Если каталог уже есть на фтп, то он с другой ошибкой вылетает типа Ошибка при вызове метода контекста (НайтиФайлы)
вот
30 Franchiser
 
гуру
30.05.18
13:04
(29) Какие у тебя настройки в FileZila ?
Может стоит ПассивноеСоединение
31 Olga1c8
 
30.05.18
13:06
(30) "Использовать внешний IP адрес сервера"
32 Olga1c8
 
30.05.18
13:07
вы хотите сказать что вновь созданному каталогу нужно снова давать полные права?
33 Olga1c8
 
30.05.18
13:10
(30) а! режим передачи стоит Пассивный, да.
34 Olga1c8
 
30.05.18
13:13
Короче в каталоге upload нормально работает, а во вложенном уже не работает.
35 Olga1c8
 
30.05.18
13:19
Я в настройках поставила активный, и все равно могу создавать файлы и папки во вложенном каталоге. а из 1с ругается.
36 Cool_Profi
 
30.05.18
13:27
(35) Сколько можно повторять... К админу и пусть логи смотрит, что происходит...
37 Olga1c8
 
30.05.18
13:43
(36) Статус:    Соединение установлено, ожидание приглашения...
Статус:    Небезопасный сервер, не поддерживает FTP через TLS.
Статус:    Сервер не поддерживает символы не ASCII.
Статус:    Авторизовались
Статус:    Получение списка каталогов "/upload/import_files"...
Статус:    Список каталогов "/upload/import_files" извлечен
38 Olga1c8
 
30.05.18
19:40
Все, я его победила.
При каждом проходе по циклу массива файлов я ставила "УстановитьТекущийКаталог", а ему это сильно не нравилось. Я оставила этот метод перед циклом, он один раз устанавливается. А файлы записывала указывая полный путь.
Раньше было так: Соединение.Записать(НайденныйФайл.ПолноеИмя,НайденныйФайл.Имя);
А теперь так: Соединение.Записать(НайденныйФайл.ПолноеИмя,ТекКаталог +"/"+НайденныйФайл.Имя);
где ТекКаталог это Полный путь каталогов на сервере фтп. Таким образом без УстановитьТекущийКаталог, файлы записывались в нужные каталоги. Которые в свою очередь тоже создаются методом "СоздатьКаталог" таким образом: Соединение.СоздатьКаталог(ТекКаталог+НайденныйФайл.Имя);
39 Воронеж2019
 
30.05.18
20:41
Ольга идёмте к нам на форум ( странно чего меня не банят) https://apdate.by/forum/
40 Franchiser
 
гуру
31.05.18
01:00
(38) молодец