Загрузка на FTP когда в 1С Предприятии 8 не работает FTPСоединение и (или) HTTPСоединение (любая конфигурация)

31.03.13

Интеграция - WEB-интеграция

Причины отказа встроенных в 1С Предприятие 8 интернет-соединений могут крыться на стороне прокси-сервера, Kerio Control или в других источниках, которые не всегда просто диагностировать. Например когда отключено разрешение DNS, а замена символьного имени на ip адрес сайта ничего не дает, нужно добавить проблемный сайт в исключения прокси интернет эксплорера (в свойствах обозревателя там где настройка прокси сервера), отредактировать файл C:\WINDOWS\system32\drivers\etc\hosts "ip_адрес_сайта www.example.com" и проблема c HTTP может решиться. Но когда заставить работать штатные средства не удается можно попробовать внешние утилиты - клиент для FTP (s) WinSCP.com (http://sourceforge.net/projects/winscp/), очень функциональный, или универсальная для всех протоколов curl в том числе на основе ssl (http://curl.haxx.se/).

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Обработка выгрузки
.erf 8,90Kb
46
46 Скачать (1 SM) Купить за 1 850 руб.
winscp.com
.com 93,67Kb
9
9 Скачать (1 SM) Купить за 1 850 руб.

В этой статье представлены способы обхода ошибок интернет-соединений, которыми я пользуюсь на практике. 

В моем случае проблема решалась редактированием файла C:\WINDOWS\system32\drivers\etc\hosts "192.168.0.1 доменноеимясайта" на клиенте или на сервере - там, где работает регламентное задание. После этого заработали встроенные интернет-соединения 1С:

    КаталогФайловОбмена = "D:\temp\";
    ИмяФайлаОтвета = КаталогФайловОбмена + "cards.xml";
    Заголовки = "discount.php";
    ПроксиК = Неопределено;
    Попытка
        ПроксиК = Новый ИнтернетПрокси;
        ПроксиК.Установить("http", ПроксиК.Сервер("http"), ПроксиК.Порт("http"));
    Исключение
    КонецПопытки;
    ПроксиК.Пользователь = "**********";
    ПроксиК.Пароль = "************";
    Коннект = Новый HTTPСоединение("доменноеимясайта",,,,ПроксиК);
    Попытка
        Коннект.Получить(Заголовки,ИмяФайлаОтвета);
        Коннект = Неопределено;    
    Исключение
        Ошибка = ОписаниеОшибки();
        Ф = Новый ТекстовыйДокумент;
        Ф.ДобавитьСтроку(Ошибка);
        Ф.Записать(ИмяФайлаОтвета);
        Ф = "";
    КонецПопытки;

Также помогло редактирование etc\hosts, после чего заработало соединение из публикации Отправка HTTP-строки с обработкой ответа  //infostart.ru/public/147532/

    Попытка
        XMLHttp = GetCOMObject("", "Microsoft.XMLHTTP");
    Исключение
        Ошибка = ОписаниеОшибки();
        Ф = Новый ТекстовыйДокумент;
        Ф.ДобавитьСтроку(Ошибка);
        Ф.Записать("D:\temp\cards21.txt");
        Ф = "";
        Возврат;
    КонецПопытки;
    Попытка
        XMLHttp.Open("GET", "http://доменноеимясайта/discount.php", Ложь);
    Исключение
        Ошибка = ОписаниеОшибки();
        Ф = Новый ТекстовыйДокумент;
        Ф.ДобавитьСтроку(Ошибка);
        Ф.Записать("D:\temp\cards22.txt");
        Ф = "";
        Возврат;
    КонецПопытки;
    XMLHttp.Send();
    Если XMLHttp.Status = 200 Тогда
        Стр = "";
        Попытка
            Стр = XMLHttp.ResponseText;
        Исключение
            Стр = ОписаниеОшибки();
        КонецПопытки;
        Ф = Новый ТекстовыйДокумент;
        Ф.ДобавитьСтроку(Стр);
        Ф.Записать("D:\temp\cards23.txt");
        Ф = "";
    Иначе
        Ф = Новый ТекстовыйДокумент;
        Ф.ДобавитьСтроку(XMLHttp.Status);
        Ф.Записать("D:\temp\cards24.txt");
        Ф = "";
    КонецЕсли;

Через компоненту dialmail подключение проходит нормально, но заставить его работать не удалось:

//Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "DialMail.dll") = 0 Тогда
// Сообщить("Не удалось загрузить компоненту DialMail.dll!");
// СтатусВозврата(0);
// Возврат;
//КонецЕсли;
//Попытка
// FTP = СоздатьОбъект("AddIn.FTP");
// FTP.ИмяЛогФайла = "c:\dialmail_ftp.log";
// FTP.ВестиЛогФайл = 1;
// FTP.ВестиТехническийЛогФайл = 1;
//Исключение
// Сообщить("Не удалось создать объект из компоненты DialMail.dll!");
// СтатусВозврата(0);
// Возврат;
//КонецПопытки;
//FTP.ИмяПользователяПрокси = ИмяПользователяПрокси;
//FTP.ПарольПрокси = ПарольПрокси;
//FTP.ХостПрокси = ХостПрокси;
//FTP.ПортПрокси = ПортПрокси;
//// Если FTP.ИспользоватьПрокси = 0 тогда
//// все вышевведенные параметры не учитываются
//FTP.ИспользоватьПрокси = 2;
//FTP.ИспользоватьSSL = 0;
//FTP.NewRFC = 0;
//FTP.БинарныйРежим = 0;
//FTP.ВремяДоРазрыва = 1000000; // Timeout
//Если FTP.Подключиться( FTPСервер,
// FTPПорт,
// FTPПользователь,
// FTPПароль, 0) = 0 Тогда
// Предупреждение("Не смогли подключиться к FTP-серверу");
//Иначе
// Подключено = 1;
//КонецЕсли;
//Сообщить(FTP.ВерсияОбъектаСтр);
//ТекФТПКаталог = FTP.ТекущийКаталог();

28.03.13 13:44:01.500 FTP: Подключаемся к сокету
28.03.13 13:44:01.515 FTP: К сокету подключились успешно
28.03.13 13:44:01.671 FTP 28.03.13 13:44:01.671 FTP --> USER 931013677
28.03.13 13:44:01.687 FTP 28.03.13 13:44:01.687 FTP --> PASS *****
28.03.13 13:44:01.703 FTP 28.03.13 13:44:01.703 FTP --> TYPE I
28.03.13 13:44:01.718 FTP 28.03.13 13:44:01.718 FTP --> STRU F
28.03.13 13:44:01.734 FTP 28.03.13 13:44:01.734 FTP --> REST 0
28.03.13 13:44:01.734 FTP 28.03.13 13:44:01.750 FTP --> REST 1
28.03.13 13:44:01.750 FTP 28.03.13 13:44:01.765 FTP --> REST 0
28.03.13 13:44:01.765 FTP 28.03.13 13:44:01.781 FTP --> PWD
28.03.13 13:44:01.781 FTP 28.03.13 13:44:02.968 FTP --> PWD
28.03.13 13:44:02.984 FTP 28.03.13 13:44:02.984 FTP --> PASV
28.03.13 13:44:03.000 FTP28.03.13 13:44:03.000 FTP --> LIST

при попытке загрузить файл на сервер идут ошибки сокета 10054 

Socket Error # 10054 Connection reset by peer

В интернет об этой ошибке dialmail написано немного, в основном что она встречается, без способа решения. На сайте Гилева об этой ошибке написано, что она встречается в платформе: http://www.gilev.ru/10054/

Мой способ:

  1. winscp загружается файл (работает даже без правки etc\hosts)
  2. curl-ом дергается http-ссылка  (хотя curl не работает без правки etc\hosts)

Вот перечень основных принципиальных вопросов при решении практической задачи использования интернет-соединения с помощью внешнего клиента, на которые оказалось важно обратить внимание...

Про curl узнал у специалистов pradata.com
curl is a command line tool for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet and TFTP. curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other

дернуть ссылку можно например так: curl -g http://доменноеимя/discount.php

Про winscp помогла публикация Выгрузка файлов на SFTP //infostart.ru/public/145717/

Скачиваем FTP клиент http://sourceforge.net/projects/winscp/?source=directory

http://citylan.dl.sourceforge.net/project/winscp/WinSCP/4.3.9/winscp439.zip

На сервере может быть отключена расшифровка dns адреса (как в моем случае), поэтому вместо доменного имена сайта - цифровой ай пи адрес.

Текст процедуры, которая у меня реально работает (перезаписываю файл во временном локальном каталоге и заливаю на сервер):
Процедура Отчет(ТабДок, ДатаКон, ДатаНач) Экспорт
    Ф = Новый ТекстовыйДокумент;
    Ф.ДобавитьСтроку("ШтрихКод;Период;СуммаПокупки");
    Файл="d:\temp\discount.txt";
    Ф.Записать(Файл);

    // http://programna1c.narod.ru/docs/WSH/1C_WSH_WshShell.html
    //Run(, , ) Выполняет команду. Основным достоинством является наличие ожидания окончания работы выполняемой команды.
    //Параметры:
    // - выполняемая команда. Задается в формате DOS и длинные имена не поддерживает.
    // - число, в котором указывается вариант показа окна, запускаемого приложения. Не обязателен. Возможные значения:
    //0 - Скрывает окно и активирует другое;
    //1 - Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется при первом открытии окна программы.
    //2 - Активизирует окно в свернутом режиме.
    //3 - Активизирует окно и разворачивает на весь экран.
    //4 - Показывает окно в его новом размере и положении. Активным остается текущее окно.
    //5 - Активизирует окно и показывает его в текущем размере.
    //6 - Минимизирует окно и активизирует следующее на панеле задач.
    //7 - Показывает окно как минимизированное. Активное окно остается активным.
    //8 - Показывает окно в его текущем состоянии. Активное окно остается активным.
    //9 - Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется для восстановления минимизированного окна.
    //10 - показывает окно в том-же состоянии, что и окно вызывающей программы.
    // - флаг ожидания завершения процесса. Возможные значения: 0 - не ждать окончания выполнения команды; -1 - ждать окончания выполнения команды. Не обязателен. По умолчанию 0.
    //Замечание: Запускать можно как приложение, так и любую команду (аналогично Пуск->Выполнить).
    //Пример:
    //WshShell = Новый COMОбъект("WScript.Shell");
    //WshShell.Run("notepad",7,-1);


    WshShell = Новый COMОбъект("wscript.Shell");
    //Содержимое файла ap.ini
    //open ftp://******:********@******************
    //rm discount.txt
    //option transfer ascii
    //put D:\temp\discount.txt
    //close
    //exit
    КоманднаяСтрока = "D:\temp\WinSCP.com /script=D:\temp\ap.ini"
    ВозвращаемоеЗначение = WshShell.Run(КоманднаяСтрока, 1);
    WshShell = Неопределено;
КонецПроцедуры

Вот то, что относится ко внешнему ftp клиенту:

Команда для запуска скрипта:

D:\temp\WinSCP.com /script=D:\temp\ap.ini

Текст скрипта:

open ftp://**************:**************@*********************  // после собаки ай пи адрес, а не доменное имя
option transfer ascii
rm discount.txt
put D:\temp\discount.txt
close
exit

Результат выполнения этого скрипта:

D:\temp>D:\temp\WinSCP.com /script=D:\temp\ap.ini
Connecting to ***************** ...
Connected with *********************. Waiting for welcome message...
Connected
Starting the session...
Reading remote directory...
Session started.
Active session: [1] ************@***********************
transfer        ascii
discount.txt
D:\temp\discount.txt      |         42 KiB |   39,1 KiB/s | ascii  | 100%
Session '****************@***************' closed.
No session.

D:\temp>

Я решил свои проблемы применением клиента WinSCP.com, благодаря публикации Выгрузка файлов на SFTP //infostart.ru/public/145717/

См. также

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17781    19    22    

16

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    19845    13    17    

16

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14421    42    8    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    1169    1    0    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. salexdv 2357 24.08.12 11:18 Сейчас в теме
Думается мне, что в неработоспособности встроенного FTPСоединение виноват ваш прокси сервер.
Не увидел в скрипте D:\temp\ap.ini настроек прокси. Как WinSCP без него коннектится?
3. ksnik 593 24.08.12 12:02 Сейчас в теме
(1) salexdv, он был настроен через gui и вероятно использует установки, записанные в файл WinSCP.ini при настройке графического клиента WinSCP.exe (который нормально настраивается и работает, когда запускается отдельным приложением, но не работает через WshShell.Run).
Но не исключено, что я авторизован на прокси другим способом, например средствами операционной системы.
5. salexdv 2357 24.08.12 12:14 Сейчас в теме
(3) Попробуйте использовать FTPСоединение в обход прокси. Мне кажется, что проблема все таки в этом. Понимаю, что это не выход, когда нельзя менять конфигурацию сети. Чисто так, ради интереса и докапывания до истины...
6. ksnik 593 24.08.12 12:21 Сейчас в теме
(5) salexdv, я пробовал, не в этом. В 1Ске нет никаких сообщений об ошибках, но она не наботает.
2. GIS 24.08.12 11:20 Сейчас в теме
Зачем городить огород со сторонними клиентами?
Когда я столкнулся с непонятными глюками FTPСоединения, я просто использовал встроенный виндовый ФТП клиент
4. ksnik 593 24.08.12 12:06 Сейчас в теме
(2) GIS, я посмотрел ссылку - принцип тот же, только моя обработка делает 1 запуск WinSCP.exe через WshShell.Run и отрабатывает скрипт из нескольких команд, а в Вашем случае потребуется многократные запуски. Спасибо большое, я не знал раньше как обращаться с Microsoft command-line FTP client, можете дать пример исходников?
7. GIS 24.08.12 12:53 Сейчас в теме
(4) Синтатксис самого клиента в моей ссылке выше, а из 1С его можно вызывать используя функцию КомандаСистемы.
8. ksnik 593 24.08.12 13:14 Сейчас в теме
(7) GIS, КомандаСистемы вызывается многократно, не тормозит? Как быть, если придется работать через интернет прокси-сервер с авторизацией, где пароль прокси-сервера каждый раз вводить надо?
9. GIS 24.08.12 13:25 Сейчас в теме
(8) Тормозит ровно также,как если бы вы вводили эти команды в командной строке. Про прокси серверы ничего не скажу - не сталкивался.
10. ksnik 593 24.08.12 13:37 Сейчас в теме
(9) GIS, моя разработка появилась как раз из=за проблем с прокси-сервером. Жаль, что при решении моих проблем нельзя использовать Microsoft command-line FTP client. Однако Ваш способ мне тоже нравится, известно ли Вам как ведет себя 1Ска во время выполнения команды системы из регламентного задания на сервере (работает или проставивает)?
11. GIS 24.08.12 13:52 Сейчас в теме
(10) насколько я помню, выполнение синхронное - т.е. пока КомандаСистемы не вернет 1С код возврата, 1С ждет.
12. ksnik 593 24.08.12 14:00 Сейчас в теме
(11) GIS, интересно как ведут себя такие вот ftp-выгрузки именно как регламентное задание, ато надо выполнять их по расписанию и пользователей много.
13. GIS 24.08.12 14:07 Сейчас в теме
(12) у меня все это по расписанию отлично работало
14. ksnik 593 24.08.12 14:14 Сейчас в теме
(13) GIS, жаль, что нет возможности посмотреть исходник(
15. ksnik 593 26.08.12 16:09 Сейчас в теме
Нормально работает как регламентное задание, текст процедуры:

Запрос = Новый Запрос;
Запрос.Текст =
"**********";
Запрос.УстановитьПараметр("ДатаКон", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаНач", ДобавитьМесяц(ТекущаяДата(),-1));
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
ВыборкаДетальныеЗаписиКоличествоСтрок = ВыборкаДетальныеЗаписи.Количество();
Ф = Новый ТекстовыйДокумент;
Ф.ДобавитьСтроку("ШтрихКод;Период;СуммаПокупки");
Сч = 0;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сч = Сч + 1;
ФШтрихКод = ВыборкаДетальныеЗаписи.ШтрихКод;
ФПериод = ВыборкаДетальныеЗаписи.Период;
ФСуммаПокупки = ВыборкаДетальныеЗаписи.СуммаПокупки;
Ф.ДобавитьСтроку(""+ ФШтрихКод + ";" + ФПериод + ";" + Формат(ФСуммаПокупки,"ЧГ=0"));
КонецЦикла;
Файл="d:\temp\discount.txt";
Ф.Записать(Файл);
WshShell = Новый COMОбъект("wscript.Shell");
КоманднаяСтрока = "D:\temp\WinSCP.com /script=D:\temp\ap.ini";
ВозвращаемоеЗначение = WshShell.Run(КоманднаяСтрока, 1);
WshShell = Неопределено;
16. ksnik 593 13.09.12 09:07 Сейчас в теме
*В публикации вместо строчки "192.168.0.1 skosmachev.mshome.net" из файла C:\WINDOWS\system32\drivers\etc\hosts нужно написать "ip_адрессайта доменноеимясайта"
17. devel0per 1 24.11.12 22:08 Сейчас в теме
Надо пакетным режимом пользоваться.
ftp -s:script.txt ftp.server.com

где script.txt примерно такого содержания:

OPEN
ftpserver
Username
Password
bin
cd /files
put file1
put file2
bye

Т.е. Сначала формируете в 1С-ке файлик script.txt
затем, выполняете команду пакетного запуска ftp -s:script.txt ВашСерверФТП
18. jobkostya1c_ERP 100 28.01.16 19:04 Сейчас в теме
Хорошие шаблоны для связи с внешним миром через интернет. Нужно будет запомнить.
19. Konstatine 8 02.08.19 10:28 Сейчас в теме
Подскажите, можно ли (и как) привязать Вашу обработку для выгрузки файлов на FTPS с помощью сертификатов (используя SSL)?
Благодарю!
P.S.: в нашей версии 1С 8.2.17 нет возможности использовать FTP с SSL..
20. ksnik 593 02.08.19 10:50 Сейчас в теме
(19) можно конечно и не надо ничего задействовать в плане настроек обмена в 1С, так как в обработке используется не внутренний механизм 1С внешняя программа winscp, специально предназначенная для этого обмена. Все необходимые настройки находятся в описанных мной файлах которые использует программа winscp и у нее очень широкие возможности, подробное логирование, богатая встроенная справочная система и подробное описание на сайте программы.
21. macas 28.05.22 16:38 Сейчас в теме
Спасибо за подсказку весь инет перевернул, для моей не однозначной задачи.
Оставьте свое сообщение