7.7 Компонента DialMail: "не работает" метод FTP.Лист()

Тема в разделе "Обмен данными в "1С:Предприятие 7.7"", создана пользователем Herby, 29 июл 2014.

  1. TopicStarter Overlay
    Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Проблема при считывании файлов с ftp.

    Подключение к FTP происходит удачно.
    Метод Лист() возвращает 1,

    но далее метод КоличествоФайлов() возвращает 0.

    Хотя, файлы присутствуют в корне каталога 100%.

    Копирование файлов с помощью методов ПолучитьФайл/ПолучитьФайлы - происходит успешно.
    Использование этих методов не спасает, потому что нужно заранее знать точные имена файлов.

    Версия DialMail 2.7.6.16
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    Думаю проблема в слеше... у вас наверняка путь задан через "\", а нужно "/"
  3. TopicStarter Overlay
    Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Задаю через "/". В том числе пробую ничего не указывать - т.е. когда считывание происходит с текущего каталога.
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    странно. покажите ваш код + версия библы какая?
  5. TopicStarter Overlay
    Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    Код:
    Если FTP.Подключиться(FTPСервер,    FTPПорт, FTPПользователь,FTPПароль,FTPПассивныйРежим)=0 тогда
           Предупреждение("Не смогли подключиться к   FTP-серверу");
    Иначе
           Подключено = 1;
    КонецЕсли;
      
    Если FTP.Лист() = 1 Тогда
           сообщить(FTP.КоличествоФайлов());
    конецЕсли;
    
    Версия DialMail 2.7.6.16

    В том числе не работает Лист() и в прилагаемой к dll обработке ExampleFTP.ert
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    FTP.Лист(ТутНуженПуть)
  7. TopicStarter Overlay
    Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    не помогает, да и путь не обязателен, если путь не указан, то происходит чтение с корня каталога. Да и если бы указал "плохой путь", то Лист() вернул бы "0", а не "1".
    Последнее редактирование: 30 июл 2014
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    не знаю. у меня работает без замечаний. Релиз компоненты какой
  9. TopicStarter Overlay
    Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    FTP.ВерсияОбъекта выдает 20707
    при скачке было указано что версия 2.7.6.16
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    Да. Версия нормальная. Странно.
    Вот этот код у меня работает без замечаний

    Процедура ПолучитьДанные()
    ФТП.Лист(ВыгрузкаФТП,);
    Для к=1 По ФТП.КоличествоФайлов() Цикл
    ИмяФайла=ФТП.ПолучитьИмяФайла(к);
    Если ФТП.ПолучитьФайл(ВыгрузкаФТП+ИмяФайла,Загрузка1с+ИмяФайла,0)=0 Тогда
    Предупреждение("Ошибка при получении данных. "+РазделительСтрок+
    "Ошибка "+ФТП.ПоследнийОтветСервера+РазделительСтрок+
    "Обмен прерван.");
    ФТП.Отключиться();
    ФТП="";
    Возврат;
    КонецЕсли;
    ФТП.УдалитьФайл(ВыгрузкаФТП+ИмяФайла);
    КонецЦикла;
    КонецПроцедуры
  11. TopicStarter Overlay
    Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    у меня этот же код не работает.
    была мысль что на самом фтп какое-то ограничение стоит, но тогда бы я никак не смог просмотреть содержимое.
    но и с проводника захожу - все отображается, и с консоли захожу на фтп и листинг нормально отрабатывает.
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    Все же что-то у вас не то....
    вот как я подключаюсь

    ФТП = СоздатьОбъект("AddIn.FTP");
    ФТП.ИмяЛогФайла = Путь+"ftp.log";
    ФТП.ВестиЛогФайл = 1;
    ФТП.ВестиТехническийЛогФайл = 1;
    ФТП.NewRFC = 0;
    ФТП.ИспользоватьПрокси = 0;
    ФТП.ИспользоватьSSL = 0;
    ФТП.БинарныйРежим = 1;
    ФТП.ВремяДоРазрыва = 100000;

    Если ФТП.Подключиться(АдресФТП,
    21,
    ЛогинФТП,
    ПарольФТП,1,3)=0 тогда
    Предупреждение("Не смогли подключиться к FTP-серверу");
    НастройкаФТП();
    СтатусВозврата(0);
    Форма.Закрыть();
    Возврат;
    КонецЕсли;
  13. TopicStarter Overlay
    Herby
    Offline

    Herby Опытный в 1С

    Регистрация:
    21 фев 2013
    Сообщения:
    95
    Симпатии:
    0
    Баллы:
    26
    проблема в библиотеке все же.
    поставил версию 2.7.5 - с ней все работает.
    если не затруднит, перешлите вашу версию dialmail на 1c_progr@mail.ru
    Последнее редактирование: 1 авг 2014
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    ссылку в личку кинул
  15. Jirogirg
    Offline

    Jirogirg

    Регистрация:
    19 сен 2016
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Ребзи, такая же проблема. Есть у кого 2.7.5? Гугл сломался, не может мне найти. Только 2.7.6 выдаёт. А сам сайт DialMail отдан под продажу коттеджей... Но чтобы мне коттедж купить, нужно задачу закрыть, а для этого нужно, чтобы компонента нормально отработала.
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
  17. tiodal
    Offline

    tiodal

    Регистрация:
    5 ноя 2017
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Та же проблема с Dial mail 2.7.6. Может кто поделиться версией 2.7.5? Буду премного благодарен!
  18. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    Ссылка на скачивание в личке. Точно работает. Если у вас нет - код в студию
    Последнее редактирование: 7 ноя 2017
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.201
    Симпатии:
    494
    Баллы:
    104
    Вот кусок кода, который успешно работает
    Код:
        FTP.СменитьКаталог(СокрЛП(Константа.КаталогFTP));
        Результат = FTP.Лист();
        Если Результат = 0 Тогда
            Сообщить("Ошибка получения списка файлов на сервере FTP");
            Возврат 0;
        КонецЕсли;
            
        Если FTP.КоличествоФайлов()=0 Тогда
            Сообщить("Нет данных для приема");
            Возврат 0;
        КонецЕсли;
       
        Для к=1 По FTP.КоличествоФайлов() Цикл
            Имя=FTP.ПолучитьИмяФайла(к);
            Если Найти(ВРег(Имя),ВРег(ИмяФайлаПротокола))<>0 Тогда
                ПродолжитЬ;
            КонецЕсли;
            Если Режим="Получить" Тогда
                Результат = FTP.ПолучитьФайл(Имя,СокрЛП(Константа.КаталогОбмена)+Имя,0);
                Если Результат = 0 Тогда
                    Сообщить("Ошибка при получении файла "+Имя);
                    Возврат 0;
                Иначе
                    Сообщить("Получен файл "+Имя);
                КонецЕсли;
            Иначе
                Результат = FTP.УдалитьФайл(Имя);
                Если Результат = 0 Тогда
                    Сообщить("Ошибка при удалении файла "+Имя);
                    Возврат 0;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    
    Вы подключаетесь в активном или пассивном режиме?
  20. tiodal
    Offline

    tiodal

    Регистрация:
    5 ноя 2017
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Подключался и в активном и пассивном режиме. Функция Лист () напрочь не работает, то есть она возвращает 1 все как надо, но далее функция КоличествоФайлов() возвращает 0, делал и с фильтром и без фильтра никак. Единственное решение я написал на почту пользователю Herby и он выслал мне драйвер версии 2.7.5.6 и там Лист () работает, единственное что нельзя вторым параметром передать фильтр, но это не проблема я нашел решение перебором всего списка файлов и поиском необходимого мне.
    --- Объединение сообщений, 7 ноя 2017 ---
    Код:
    Функция ПодключитьсяКFTP( FTP, FTPСервер, FTPПользователь, FTPПароль )
        // Введем параметры прокси-сервера
        // Если ПолучениеПочты.ИспользоватьПрокси=0 тогда все вышевведенные
        // параметры не учитываются
       
        FTP.ИспользоватьПрокси        = 0;
        FTP.ИспользоватьSSL            = 0;
       
        //FTP.NewRFC                     = NewRFC;
        //FTP.БинарныйРежим             = БинарныйРежим;
        FTP.ВремяДоРазрыва             = 100000; // Timeout
       
        Если FTP.Подключиться(FTPСервер,
                            21,
                            FTPПользователь,
                            FTPПароль,1)=0 тогда
           
            Предупреждение("Не смогли подключиться к FTP-серверу");
            Возврат ( 0 );
        Иначе
            Возврат (1);
        КонецЕсли;
    
    
    КонецФункции
    
    Процедура Выполнить()
         
        Перем А;
        Если ( ПустоеЗначение ( ДатаНач ) = 1 ) или ( ПустоеЗначение ( ДатаКон ) = 1 ) Тогда
            Предупреждение ( "Неверно указан период выгрузки!" );
            Возврат;
        КонецЕсли;
       
        //проверим подключение к FTP
       
        //выгрузим на фтп
        СерверFTPPostaMoldovei         = Константа.СерверFTPPostaMoldovei;
        ПользовательFTPPostaMoldovei = Константа.ПользовательFTPPostaMoldovei;
        ПарольFTPPostaMoldovei       = Константа.ПарольFTPPostaMoldovei;
        ПапкаOutFTP                   = Константа.ПапкаOutFTP;
        Если ( ПустоеЗначение ( СерверFTPPostaMoldovei ) = 1 ) или 
             ( ПустоеЗначение ( ПользовательFTPPostaMoldovei ) = 1 ) или 
            ( ПустоеЗначение ( ПарольFTPPostaMoldovei ) = 1 ) или 
            ( ПустоеЗначение ( ПапкаOutFTP ) = 1 ) 
       
        Тогда 
            Предупреждение ( "Не заполнены необходимые настройки для загрузки с FTP!" + РазделительСтрок + "Выгрузка прервана!" );
            Возврат;
        КонецЕсли;
       
    
        ПутьККомпоненте = КаталогПрограммы () + "DialMail.dll";
    
        Если ЗагрузитьВнешнююКомпоненту(ПутьККомпоненте)=0 Тогда
            Сообщить("Не удалось обнаружить компоненту DialMail.dll!"); 
            Возврат;
        КонецЕсли;
       
        Попытка
            FTP = СоздатьОбъект("AddIn.FTP");
            FTP.ИмяЛогФайла = КаталогИб () + "dialmail_ftp.log";
            FTP.ВестиЛогФайл = 1;
            FTP.ВестиТехническийЛогФайл = 1;
            FTP.NewRFC = 0;
    //        FTP.БинарныйРежим  = 1;
        Исключение 
            Сообщить("Не удалось создать объект из компоненты DialMail.dll!"); 
            Возврат;
        КонецПопытки; 
    
        //получим файлы с фтп
    
        //создадим папку во временном каталоге
        Каталог = КаталогВременныхФайлов () + "temp_xls_exchange\";
       
        Если ( Фс.СуществуетФайл ( Каталог ) = 0 ) Тогда
            ФС.СоздатьКаталог( Каталог );
        Иначе
            //очистим
    
            Сп=СоздатьОбъект("СписокЗначений");
            Рекурсия(Каталог,Сп);
            Сп.СортироватьПоПредставлению(0);
            Для к=1 По Сп.РазмерСписка() Цикл
                Стр=Сп.ПолучитьЗначение(к);
                ФС.АтрибутыФайла(Стр,,А);
                Если Сред(А,4,1)="1" Тогда
                    ФС.УдалитьКаталог(Стр);
                Иначе
                    ФС.УдалитьФайл(Стр);
                КонецЕсли;
            КонецЦикла;
            ПервНайден = ФС.НайтиПервыйФайл(Каталог+"*.*");
            Если ( ПервНайден <> "." ) и ( ПервНайден <> ".." ) Тогда
                //есть файлы прервемся
                //не можем дальше двигаться так как будут ненужные данные в папке
                Сообщить ( "Временная папка для импорта данных должна быть пуста!" + РазделительСтрок + 
                "Прежде чем продолжить загрузку ее необходимо будет очистить вручную по следующему пути: " + РазделительСтрок + 
                СокрЛп ( Каталог ) );
                Возврат;
            КонецЕсли;   
               
        КонецЕсли;                                                                 
       
        //подключимся к фтп
        Если ПодключитьсяКFTP( FTP, СерверFTPPostaMoldovei, ПользовательFTPPostaMoldovei, ПарольFTPPostaMoldovei ) = 0 Тогда
            Возврат;
        КонецЕсли;
       
        FTP.СменитьКаталог ( СокрЛп ( ПапкаOutFTP ) );   
       
        //отберем файлы на каждый день
       
        СписокФайлов = СоздатьОбъект ( "СписокЗначений" );
    
        Если FTP.Лист()=1 тогда 
    
            Для Счетчик = 1 по FTP.КоличествоФайлов() Цикл
                ТекИмяФайла = FTP.ПолучитьИмяФайла ( Счетчик );
                ТекДата = ДатаНач;
                Пока ТекДата <= ДатаКон Цикл
                    ТекФильтр = "" + СокрЛп ( Формат ( ДатаЧисло ( ТекДата ), "Ч(0)2.0" ) ) + СокрЛп ( Формат ( ДатаМесяц ( ТекДата ), "Ч(0)2.0" ) ) + СокрЛп ( ДатаГод ( ДатаКон ) ) + ".xls";
                    //загрузим их на компьютер
                   
                    Если ( Найти ( ТекИмяФайла, ТекФильтр ) > 0 ) Тогда
                        СписокФайлов.ДобавитьЗначение ( ТекИмяФайла );
                    КонецЕсли;   
                    ТекДата = ТекДата + 1;
                КонецЦикла;
            КонецЦикла;
        КонецЕсли;   
       
        Если ( СписокФайлов.РазмерСписка () = 0 ) Тогда
            Сообщить ( "Нет файлов для загрузки!" );
            Возврат;
        КонецЕсли;   
       
        ТекстФайлов = "";
        Для Счетчик = 1 По СписокФайлов.РазмерСписка () Цикл
            ТекстФайлов = ТекстФайлов + "" + СокрЛп ( ПапкаOutFTP ) + СписокФайлов.ПолучитьЗначение ( Счетчик ) + "" + ? ( Счетчик < СписокФайлов.РазмерСписка (), ",", "" );     
        КонецЦикла;   
       
        Если FTP.ПолучитьФайлы(ТекстФайлов,             // Файл(ы), расположенный на ftp
                               Каталог,                 // Каталог на диске, куда будет записываться файл
                               0,                       // 1 - докачка разрешена, 0 - переписываем, даже если найдем с таким же именем
                               0,                       // 1 - удаляем после удачного принятия, 0 - не удаляем
                               1,                       // 1 - посылаем команду Отключиться() после получения, 0 - оставляем сединение с FTP
                               0                        // 1 - выполняем в потоке, 0 - без потока
                               )<> 1 Тогда
            Предупреждение("Произошла непредвиденная ошибка при получении файлов с FTP!");
            Возврат;
        КонецЕсли;
           
        Сообщить ( "Файлы скачаны с FTP!" ); 
    КонецПроцедуры
    
    Последнее редактирование: 7 ноя 2017

Поделиться этой страницей