Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> FTP отправка из 7.7          
mister-x Подменю пользователя
сообщение 07.06.17, 13:49
Сообщение #1

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3432
Из: Тернопіль
Спасибо сказали: 1316 раз
Рейтинг: 824.8

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

Способ первый – внешняя компонента
На официальном сайте замечательной компании [необходимо зарегистрироваться для просмотра ссылки] в разделе [необходимо зарегистрироваться для просмотра ссылки] свободно доступны Конфигурации для 1С:Предприятие с интегрированным модулем обмена для "Агент Плюс: Мобильная торговля. Проф" среди которых Конфигурация "Агент Плюс. Торговля+Склад" (на базе типовой конфигурации "Торговля+Склад", редакция 9.2). В дистрибутиве конфигурации содержится внешняя компонента APPlus.dll и несколько дополнительных библиотек, дабы не мучать читателя подробностями – все они собраны в прикрепленном к статье архиве.

При помощи этой компоненты легко решается поставленная задача:

ЗагрузитьВнешнююКомпоненту("APPlus.dll"); // Регистрируем компоненту 
ФТП = СоздатьОбъект("AddIn.CeDataExch"); // Создаём объект
ФТП.FtpOpenSession(); // Это я не знаю зачем:)
Результат = ФТП.FtpConnect("ftp.filehost.ru","userName","Password"); // Подключаемся
Если Результат = 0 Тогда // Если успешно то отправляем файл
    Результат = ФТП.FtpPutFile(ИмяФайлаЛокально, ИмяФайлаНаФТП);
    Если Результат <> 0 Тогда // не получилось - сообщаем об ошибке
        Сообщить("Не удалось отправить файл по причине: " + ФТП.ErrDescription(Результат), "!");
    КонецЕсли;
Иначе
    Сообщить("Не удалось подключиться по причине: " + ФТП.ErrDescription(Результат), "!");
КонецЕсли;
ФТП.FtpCloseSession();

Преимущества: один из самых всеядных способов в плане серверов + контроль результата выполнения, легко организовать обработку исключительных ситуаций, так же сильны и методы чтения с фтп.

Недостатки: внешние компоненты в 7.7 требуют регистрации с правами администратора; относительно медленный способ.

По поводу правомерности использования компоненты мне официально ответили «Компонента APPlus.dll бесплатная, Вы можете использовать её в любых целях»



Способ второй – консольный

Заключается в использовании стандартной команды windows «ftp» с параметрами.

Решение может выглядеть так:

Текст = СоздатьОбъект("Текст"); // Создаём файл с командами для ftp
Текст.ДобавитьСтроку("open " + ФТПсервер);
Текст.ДобавитьСтроку(ФТПимяПользователя);
Текст.ДобавитьСтроку(ФТПпароль);
Текст.ДобавитьСтроку("put " + ИмяФайлаЛокально);
Текст.ДобавитьСтроку("quit");
Текст.Записать(КаталогИБ() + "ftpcmd.dat");
ФС.УстТекКаталог(КаталогИБ()); // место расположения ftpcmd.dat
КомандаСистемы("ftp  -s:ftpcmd.dat"); // вызываем
ФС.УдалитьФайл(КаталогИБ() + "ftpcmd.dat"); // убираем за собой

Преимущества: никаких компонент, всё стандартное и понятное.

Недостатки: работает не всегда и не везде – капризный к серверам, для результата выполнения требуется анализ выводимых сообщений, можно сделать так.

"ftp  -s:ftpcmd.dat > naprimer.log"


После выполнения команды файл naprimer.log считывается программно и анализируется.



Способ третий – пассивный режим

История возникновения этого способа связана с тем, что первые два не имеют возможности перехода в пассивный режим обмена (как Web-браузер) и в некоторых случаях из-за этого не работают. Связано ли это с настройками фтп-серверов или политикой безопасности компьютера-клиента и его сети, лично для меня как необременённого сетевыми знаниями специалиста, загадка, а искать ответ или специалиста который бы помог в каждом новом случае – смерти подобно. Поэтому силами яндекса было найдено решение – использовать свободно доступную консольную программу [необходимо зарегистрироваться для просмотра ссылки] следующим образом:

ФС.УстТекКаталог(КаталогИБ()); // место расположения curl.exe и её компонент
КомандаСистемы("curl.exe  -T """+ИмяФайлаЛокально+""" -u "+ФТПимяПользователя+":"+ФТПпароль+" "+ФТПсервер); // вот и всё

Достоинства: пассивный режим, относительно быстрый, достаточно лояльный к серверам.

Недостаток: нет возможности программно определить результат отправки.



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

О том как можно организовать регулярную автоматическую отправку отчетов можно узнать [необходимо зарегистрироваться для просмотра ссылки].



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

[необходимо зарегистрироваться для просмотра ссылки]

Спасибо сказали: nysysimara, Vofka,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 22.07.18, 22:37
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне