Версия для печати темы (https://pro1c.org.ua/index.php?s=032779d07c033b7064c37874ad21d0d7&showtopic=62047)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ После обновления платформы и конфигурации перестал работать FTPСоединение

Автор: bizisoft 06.10.20, 15:59

Здравствуйте.

1С:Предприятие 8.3 (8.3.14.2095)
Альфа-Авто: 4.1.22.01

После обновления конфигурации 4.1.21.01 на 4.1.22.01 с соответствующим переходом с платформы 8.2 на 8.3.
После этого обновления самописная внешняя обработка для выгрузки данных (номенклатура, остатки, цены) на сайт перестала работать.
Выгрузка данных на сайт происходит посредством выгрузки данных в файлы csv, архивирование файлов и загрузки их в каталог сайта через FTP.

Насколько я понял затык происходит в момент соединения.
Код функции соединения и отправки файла:

Функция ОтправитьФайлНаFTPСервер() Экспорт
    ФТПСервер = Константы.ФТПСервер.Получить();
    ФТППорт = Константы.ФТППорт.Получить();
    ФТППользователь = Константы.ФТППользователь.Получить();
    ФТППароль = Константы.ФТППароль.Получить();
    Прокси = Неопределено;
    ФТПКаталог = Константы.ФТПКаталог.Получить();
    
    Попытка
        ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);        
        Логи("Установка соединения..............ОК");
    Исключение
        Логи("Установка соединения..............FALSE",СтатусСообщения.Важное);
    КонецПопытки;
    Попытка
        ФТП.УстановитьТекущийКаталог(ФТПКаталог);
        Логи("Установка текущего каталога..............ОК");
    Исключение
        Логи("Установка текущего каталога..............FALSE",СтатусСообщения.Важное);
        Попытка            
            ФТП.УстановитьТекущийКаталог(ФТПКаталог);
            Логи("Установка текущего каталога (повторно)...ОК");
        Исключение
            Попытка            
                ФТП.УстановитьТекущийКаталог(ФТПКаталог);
                Логи("Установка текущего каталога (повторно 2)...ОК");
            Исключение
                Логи("Установка текущего каталога (повторно 2)...FALSE",СтатусСообщения.Важное);
            КонецПопытки;  
        КонецПопытки;
    КонецПопытки;
    
    Для Каждого ИмяОтправляемогоФайла Из СпФайлы Цикл
        ТекФайл = Новый Файл(ИмяОтправляемогоФайла);
        Если ТекФайл.Существует() Тогда
            ИмяВыходногоФайла = ТекФАйл.Имя;
            ФТП.Записать(ИмяОтправляемогоФайла, ИмяВыходногоФайла);
            Логи(ИмяВыходногоФайла+" - файл успешно загружены на сервер");
        Иначе
            Логи("Файл "+ИмяВыходногоФайла+" не найден в каталоге");
        КонецЕсли;    
    КонецЦикла;
КонецФункции


Не понятно почему перестал работать метод FTPСоединение() после обновления, в 1С 8.2.19.130 АА 4.1.21.01.

Вроде в 8.3 есть какое-то отличие (не уверен точно) в параметрах FTPСоединение() чем у 8.2 (их стало больше).
Поэтому пробовал указать эти дополнительные параметры:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси, Истина,0,Неопределено,УровеньИспользованияЗащищенногоСоединенияFTP.Авто);

Но и это не дало результата.

Может кто-нибудь сталкивался с такой ситуацией и подскажет как решить данную проблему.

Для получения развернутой информации по ошибке убрал обвязку Попытка-Исключение, но скупая ошибка ясности не внесла.
{ВнешняяОбработка.ПроверкаИнтернетЗаказов.Форма.ПроверкаИнтернетЗаказов.Форма(5419)}: Ошибка при вызове конструктора (FTPСоединение)
        ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);
по причине:
Несоответствие типов (параметр номер '2')

Если ругается на 2-ой параметр, то это константа строкового типа
ФТПСервер = "xx.yy.ua";
ФТППорт = "21";
ФТППользователь = "user";
ФТППароль = "123";

Автор: bizisoft 06.10.20, 20:17

Вот так создавалось FTP соединение:

ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);


На старой платформе все работало, но на новой (причину я так и не понял) ни в какую.

Погрыз мануалы и выяснил, что в новой платформе они добавили поддержку SSL (защищенные) соединений, и добавили для этого несколько параметров:
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси, Истина,0,ssl4,УровеньИспользованияЗащищенногоСоединенияFTP.Авто);


Но что я только не пробовал не помогало.

В итоге получилось так:
ФТП = Новый FTPСоединение(ФТПСервер, , ФТППользователь, ФТППароль);

т.е. убрал 2-й параметр ФТППорт, хотя не понятно почему так, где логика в этом, а если порт будет отличаться от "21" (по умолчанию) ?

Автор: Alegzander 07.10.20, 7:17

Цитата(bizisoft @ 06.10.20, 16:59) *
Для получения развернутой информации по ошибке убрал обвязку Попытка-Исключение, но скупая ошибка ясности не внесла.

{ВнешняяОбработка.ПроверкаИнтернетЗаказов.Форма.ПроверкаИнтернетЗаказов.Форма(5419)}: Ошибка при вызове конструктора (FTPСоединение)
ФТП = Новый FTPСоединение(ФТПСервер, ФТППорт, ФТППользователь, ФТППароль, Прокси);
по причине:
Несоответствие типов (параметр номер '2')


Если ругается на 2-ой параметр, то это константа строкового типа
ФТПСервер = "xx.yy.ua";
ФТППорт = "21";
ФТППользователь = "user";
ФТППароль = "123";



Из СП:
...
<Порт> (необязательный)
Тип: Число.
Порт сервера, с которым осуществляется соединение.
Значение по умолчанию для FTP соединений равно 21, для защищенных FTPS соединений - 990.
Значение по умолчанию: порт по умолчанию для используемого протокола.
...

Автор: bizisoft 07.10.20, 10:08

Alegzander @ Сегодня, 8:17 * ,
Ну так до обновления все работало.

Решил проверить, изменил константу ФТППорт на Число.
Так работает.
Получается в предыдущей версии платформы это было не существенным, поэтому работало и ошибку не выдавало.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua