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

Хранилище

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

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


Свернуть

> Добро пожаловать на наш форум

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

Логин:   
Пароль:
 

Форум:

Новые темы (за 20 дней):

Последние сообщения:

Наши сервисы:

Дополнительно:

Новости для бухгалтера:

 
FTP отправка из 7.7 [раздел База знаний 1С:Предприятия 7.7]
Автор mister-x — 07.06.17, 13:49 — 0 комментариев
Всё чаще встречаются задачи по отправке отчетов поставщику, и нередко подготовленные файлы необходимо записать на 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 "+ФТПимяПользователя+":"+ФТПпароль+" "+ФТПсервер); // вот и всё

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

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



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

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



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

[необходимо зарегистрироваться для просмотра ссылки]
Просмотров: 272, оставить комментарий   
RSS Текстовая версия Сейчас: 23.06.17, 2:05
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

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