Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Обмен 1c 8.0 по ftp и internet explorer 11
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Администратору 1С / Системному администратору / Администратору баз данных > Администрирование и настройка 1С
ark
Доброго времени суток.
Есть РИБ на платформе 8.0.13.32 настроен обмен данными через фтп.
обмен работал нормально, но после переустановки ОС (server 2012 r2) при обмене выдает ошибку:



Фтп через браузер, тотал командер, проводник открывается нормально.
Галочка "пасивное соединение" стоит.
Если снять галочку с "загружать данные" в настройках обмена, то выгрузка на фтп проходит, а если снять галочку с "выгружать данные" то выбрасывает ту же ошибку.
Так же было замечено что такая проблема возникает на машинах с установленным internet explorer 11 (в server 2012 r2 предустановленная 11-я версия, проверял так же на win7), на предыдущих версиях explorera обмен проходит нормально.
Может кто то сталкивался с такой проблемой?
Подскажите, может какие настройки explorera надо ковырять?


 i 

Правила, п.13. logist
Правила, п.11. Vofka
 
Vofka
Так а шо там, код хоть какой около ошибки?
ark
Вы имеете ввиду код с конфигуратора?
    Исключение
        
        СтрокаОписанияОшибки = ОписаниеОшибки();
        // отмечаем то что обмен произведен
        ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбменаДанными, СтрокаОписанияОшибки);
        
        ЗакрытьФормуОбработкиДанных(СтруктураНастроекОбменаДанными);
        // прокидываем ошибку дальше
        ВызватьИсключение СтрокаОписанияОшибки;
Vofka
Цитата(ark @ 12.01.15, 14:44) необходимо зарегистрироваться для просмотра ссылки
Вы имеете ввиду код с конфигуратора?

Да. Только надо бы то, что выше инструкции Исключение.
ark
Процедура ПроизвестиОбменДаннымиПоНастройке(СтруктураНастроекОбменаДанными)
    
    // начальные функции инициализации обмена
    РезультатаНачалаОбмена = ВыполнитьДействияПередНачаломОбменаДанными(СтруктураНастроекОбменаДанными);
    Если Не РезультатаНачалаОбмена Тогда
        Возврат;
    КонецЕсли;
        
    Попытка
                    
        // ПОДГОТОВКА ПЕРЕД ОБМЕНОМ
        Если СтруктураНастроекОбменаДанными.ДанныеНастройки.ТипНастройки = Перечисления.ТипыАвтоматическогоОбменаДанными.ОбменЧерезФайловыйРесурс Тогда
            
            СтруктураНастроекОбменаДанными.Вставить("КаталогПроведенияОбменаДанными", "");
            СтруктураНастроекОбменаДанными.Вставить("ИмяВходящегоФайлаОбмена", "");
            ПодготовитьОбменЧерезФайловыйРесурс(СтруктураНастроекОбменаДанными);
            
        ИначеЕсли СтруктураНастроекОбменаДанными.ДанныеНастройки.ТипНастройки = Перечисления.ТипыАвтоматическогоОбменаДанными.ОбменЧерезFTPРесурс Тогда
            
            СтруктураНастроекОбменаДанными.Вставить("ИмяВходящегоФайлаОбмена", "");
            ПодготовитьОбменЧерезFTPРесурс(СтруктураНастроекОбменаДанными);
            
        КонецЕсли;
        
        // файл для записи изменений
        Если СтруктураНастроекОбменаДанными.НеобходимостьЗаписиОтветногоФайлаОбмена Тогда
            
            СтруктураНастроекОбменаДанными.ИмяФайлаЗаписиИзменений = ВерутьИмяВременногоФайлаЗаписиДанных(СтруктураНастроекОбменаДанными);
            
            Если СтруктураНастроекОбменаДанными.ДанныеНастройки.ВыполнятьАрхивациюФайловОбмена Тогда
                
                УстановитьРасширениеФайла(СтруктураНастроекОбменаДанными.ИмяФайлаЗаписиИзменений, ".zip");
                
            КонецЕсли;
            
        КонецЕсли;
        
        // если ничего делать не надо, то выходим вообще
        Если ПустаяСтрока(СтруктураНастроекОбменаДанными.ИмяФайлаЧтенияИзменений)
            И ПустаяСтрока(СтруктураНастроекОбменаДанными.ИмяФайлаЗаписиИзменений) Тогда
            
            СообщитьИнформациюОбОбмене(НСтр("ru='Ни загрузка ни выгрузка данных не были произведены';uk='Ні завантаження ні вивантаження даних не були зроблені'"), СтруктураНастроекОбменаДанными);
            ЗакрытьФормуОбработкиДанных(СтруктураНастроекОбменаДанными);
            ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбменаДанными);
            Возврат;
            
        КонецЕсли;
        
        ЗаписатьДанныеПротокола(СтруктураНастроекОбменаДанными.ДанныеНастройки, СтруктураНастроекОбменаДанными.ДанныеПротокола);
        
        // САМ ОБМЕН ДАННЫМИ
        ВыполнитьЗагрузкуДанныхИзФайлаОбмена(СтруктураНастроекОбменаДанными);
        ВыполнитьВыгрузкуДанныхВФайлОбмена(СтруктураНастроекОбменаДанными);
            
        ЗаписатьДанныеПротокола(СтруктураНастроекОбменаДанными.ДанныеНастройки, СтруктураНастроекОбменаДанными.ДанныеПротокола);    
                
        // ДЕЙСТВИЯ ПОСЛЕ ОБМЕНА
        Если СтруктураНастроекОбменаДанными.ДанныеНастройки.ТипНастройки = Перечисления.ТипыАвтоматическогоОбменаДанными.ОбменЧерезФайловыйРесурс Тогда
                
            ДействияПослеОбменаЧерезФайловыйРесурс(СтруктураНастроекОбменаДанными);
                    
        ИначеЕсли СтруктураНастроекОбменаДанными.ДанныеНастройки.ТипНастройки = Перечисления.ТипыАвтоматическогоОбменаДанными.ОбменЧерезFTPРесурс Тогда
                
            ДействияПослеОбменаЧерезFTPРесурс(СтруктураНастроекОбменаДанными);
                
        КонецЕсли;
        
        // оставшееся действия после обмена данными выполняем
        ВыполнитьДействияПослеЗавершенияОбменаДанными(СтруктураНастроекОбменаДанными);

Вот эта процедура идет сразу выше исключения.
Извините, Вам весь код обмена данными нужен, или тот где есть (НайтиФайлы)?
Vofka
ark, покажите строку в которой выпадает ошибка и то, что перед ней выше по коду.
ark
как раз строка в которой выпадает ошибка это
// прокидываем ошибку дальше
        ВызватьИсключение СтрокаОписанияОшибки;

когда нажимаю "конфинуратор" (на картинке кнопочка "конфигуратор") то курсор мигает возле этой строки.
код что сразу выше в предидущем ответе.
по поиску (НайтиФайлы) есть одна функция и одна процедура.
необходимо зарегистрироваться для просмотра ссылки
Процедура ПодготовитьОбменЧерезFTPРесурс(СтруктураНастроекОбменаДанными)
    
    Перем Соединение, ИмяFTPСервера, ИмяКаталогаСервера;
    
    ПроверитьНастройкиПодключения = ПроверитьНастройкиFTPПодключения(СтруктураНастроекОбменаДанными.ДанныеНастройки,
        СтруктураНастроекОбменаДанными.ДанныеПротокола,    СтруктураНастроекОбменаДанными.ВывестиИнформациюВОкноСообщений,
        ИмяКаталогаСервера, ИмяFTPСервера, Соединение);
        
    Если Не ПроверитьНастройкиПодключения Тогда
        Возврат;
    КонецЕсли;
        
    СтруктураНастроекОбменаДанными.НеобходимостьЗаписиОтветногоФайлаОбмена = СтруктураНастроекОбменаДанными.ПроизводитьЗаписьДанных;
        
    Если СтруктураНастроекОбменаДанными.ПроизводитьЧтениеДанных Тогда
        
        // ищем файлы по маске с расширением Message_A_B .xml или .zip
        ШаблонИмениФайла = СформироватьИмяФайлаОбменаМеждуУзлами(СтруктураНастроекОбменаДанными.ДанныеНастройки.УзелИнформационнойБазы,
            СтруктураНастроекОбменаДанными.ТекущийУзелПланаОбмена, "") + ".*";
        
        МассивНайденныхФайлов = Соединение.НайтиФайлы(ИмяКаталогаСервера, ШаблонИмениФайла);
        
        СтруктураНастроекОбменаДанными.ДатаПоследнегоФайлаОбмена = ПолучитьДатуФайлаПоследнейЗагрузкиДанных(СтруктураНастроекОбменаДанными.ДанныеНастройки.Ссылка);
                
        Для Каждого ФайлФТП Из МассивНайденныхФайлов Цикл
            
            ТекущийФайлДляОбмена = ФайлФТП;
            
            // проверяем нужное расширение, то что это фай а не каталог, запоминаем последнюю дату файла
            Если НЕ( (Врег(ТекущийФайлДляОбмена.Расширение) = ".ZIP") ИЛИ (Врег(ТекущийФайлДляОбмена.Расширение) = ".XML") ) Тогда
                Продолжить;
            КонецЕсли;
            
            Если (ТекущийФайлДляОбмена.ЭтоФайл() = Ложь) Тогда
                Продолжить;
            КонецЕсли;
            
            Если (ТекущийФайлДляОбмена.Размер() = 0) Тогда
                Продолжить;
            КонецЕсли;
            
            // с датами определяемся
            ВремяИзмененияТекущегоФайла = ТекущийФайлДляОбмена.ПолучитьВремяИзменения();
            
            //дата последнего файла обмена должна быть меньше текущего файла обмена
            ////Если (СтруктураНастроекОбменаДанными.ДатаПоследнегоФайлаОбмена <> Неопределено)
            ////    И (СтруктураНастроекОбменаДанными.ДатаПоследнегоФайлаОбмена > ВремяИзмененияТекущегоФайла) Тогда
            ////    
            ////    Продолжить;
            ////КонецЕсли;
            
            ФайлДляОбмена = ТекущийФайлДляОбмена;
            СтруктураНастроекОбменаДанными.ДатаПоследнегоФайлаОбмена = ВремяИзмененияТекущегоФайла;
            СтруктураНастроекОбменаДанными.ИмяВходящегоФайлаОбмена = ИмяFTPСервера + ФайлФТП.ПолноеИмя;
            
        КонецЦикла;    
            
        //надо переместить нужный файл в каталог для обмена данными
        Если ФайлДляОбмена <> Неопределено Тогда
            
            СтруктураНастроекОбменаДанными.ИмяФайлаЧтенияИзменений = ВерутьИмяВременногоФайлаЧтенияДанных(СтруктураНастроекОбменаДанными,
                (Врег(ФайлДляОбмена.Расширение) = ".ZIP"));
            
            Попытка
                // генерируем имя файла для чтения изменений и закачиваем этот файл
                Соединение.Получить(ФайлДляОбмена.ПолноеИмя, СтруктураНастроекОбменаДанными.ИмяФайлаЧтенияИзменений);    
                
            Исключение
            
                СообщитьИнформациюОбОшибкеОбмена(НСтр("ru='Ошибка при копировании файла c FTP ресурса: ';uk='Помилка при копіюванні файлу з FTP ресурсу: '") + ОписаниеОшибки(), СтруктураНастроекОбменаДанными);
                СтруктураНастроекОбменаДанными.ИмяФайлаЧтенияИзменений = "";
                            
            КонецПопытки;
                
        Иначе
            
            Если (МассивНайденныхФайлов.Количество() > 0)
                И НЕ обЗначениеНеЗаполнено(СтруктураНастроекОбменаДанными.ДатаПоследнегоФайлаОбмена) Тогда
            
                //файлы то есть но ни один не подходит
                СообщитьИнформациюОбОбмене(НСтр("ru='Возможно дата файлов обмена не превосходит дату последнего файла обмена данными через FTP: ';uk='Можливо дата файлів обміну не перевищує дату останнього файлу обміну даними через FTP: '") + Строка(СтруктураНастроекОбменаДанными.ДатаПоследнегоФайлаОбмена),
                    СтруктураНастроекОбменаДанными);
                
            КонецЕсли;
            
            СтруктураНастроекОбменаДанными.ИмяФайлаЧтенияИзменений = "";        
        КонецЕсли;
        
    КонецЕсли; // надо читать данные с FTP    
    
    Если СтруктураНастроекОбменаДанными.ПроизводитьЗаписьДанных
        ИЛИ Не ПустаяСтрока(СтруктураНастроекОбменаДанными.ИмяФайлаЧтенияИзменений) Тогда

        ИнициализироватьФормуХодаОбработки(СтруктураНастроекОбменаДанными, НСтр("ru='Подготовка перед обменом данными';uk='Підготовка перед обміном даними'"), 5);
    
    КонецЕсли;
    
КонецПроцедуры
Vofka
ark, есть предположение, что путь к каталогу указан как-то не так, или система к ФТП подключиться не может.
ark
А где путь к каталогу указывать?
Насколько я понял с чтения гугла(но могу ошибаться), что фтп клиент 1с вшит в платформу и он как то завязан с internet explorer-ом.
Подключение проходит, проверял снифером, так же при нажатии кнопочки "проверить" в настройках обмена проверку проходит и как я уже писал выгрузка на фтп тоже проходит, а вот загрузка нет.
Извините, если повторюсь, но проверял на машинах с explorer-ом ниже 11-й версии (ничего в настройках не меняя) обмен проходит(и выгрузка и загрузка успешно).
По этой причине я все таки грешу в сторону explorer-а. А в сервере 2012 explorer 11 уже сразу предустановленный.
Я по началу еще грешил на брандмауэр но ни отключение его ни добавление правил не помогло.

Vofka
Цитата(ark @ 13.01.15, 10:00) необходимо зарегистрироваться для просмотра ссылки
А где путь к каталогу указывать?

Где-то в настройках обмена. Обычно данные на фтп не сливают все в корень, а раскладывают по каталогам. Например, для обмена полный путь может быть ftp://.../1C/Exchange . Так вот, каталог в данном случае будет вроде 1C/Exchange. Возможно у вас в пути указан какой-то "мутный" символ, может быть слеш не в ту сторону стоит. Но это только предположение, и надо пробовать смотреть на месте по ходу. И почему система себя так ведет только там, где установлен ИЕ 11 - это загадка.
ark
каталог фтп находится на хостинге, файлики обмена (входящие и исходящие) по разному называются. в настройках обмена указано только адрес фтп логин и пароль от каталога(путь никак не указывается).
что интересно, сам ИЕ открывает фтп каталог.
не подскажете, есть ли какая документация по фтп клиенту 1с? (не то как настраивать, а как он работает)
Vofka
Цитата(ark @ 13.01.15, 13:00) необходимо зарегистрироваться для просмотра ссылки
не подскажете, есть ли какая документация по фтп клиенту 1с? (не то как настраивать, а как он работает)

Я о такой не знаю. Если 1С у вас не паленого производства - можете попробовать обратиться непосредственно в фирму 1С с этим вопросом, возможно там вам расскажут причину такого поведения. Хотя с 8.0 могут отфутболить и посоветовать перейти на 8.2.
ark
1c официально покупалась, но подписку ИТС не оформляли, так что обратится не получится.
ark
Проблему решил следующим образом:
скачал Allway Sync и настроил синхронизацию локальной папки с фтп, а обмен в 1с настроил через файловый ресурс.
мою проблему это решило, но все равно интересно почему через фтп 1с-ка не хочет работать.
Vofka спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.