FTP отправка из 7.7

10.06.15

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Db.zip
.zip 6,69Mb
119
119 Скачать (3 SM) Купить за 2 450 руб.

Способ первый – внешняя компонента

На официальном сайте замечательной компании Агент ПЛЮС в разделе Скачать свободно доступны Конфигурации для 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 и её компонент
КомандаСистемы("curl.exe  -T """+ИмяФайлаЛокально+""" -u "+ФТПимяПользователя+":"+ФТПпароль+" "+ФТПсервер); // вот и всё

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

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

 

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

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

 

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

См. также

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v7.7 НДС Абонемент ($m)

Пример создания документа Поступление (акт, накладная, УПД) в 1С: Бухгалтерии 3 путем загрузки из XML универсального формата EnterpriseData 1.12 файла, сгенерированного обработкой документа "Реализация". Выгрузка реализации написана в самописной конфигурации на платформе 1С:Предприятие 7.7. Способ заполнения реквизитов поступления можно переделать под себя, выгрузка XML в универсальный формат EnterpriseData останется работоспособной.

1 стартмани

14.02.2023    3119    8    ksnik    0    

6

Файловый обмен (TXT, XML, DBF), FTP Учет документов Распознавание документов и образов Бухгалтер Пользователь Платформа 1С v7.7 Платформа 1С v8.3 Платформа 1C v8.2 Конфигурации 1cv8 Конфигурации 1cv7 Россия Платные (руб)

Программный комплекс способный распознавать сотни листов за раз любых сканированных(фото) документов (УПД, ТОРГ12, СФ, паспорт и пр.) и загружать их в любую 1С (БП3.0, УТ, КА, УНФ, УПП, 1С7.7 ТиС, ЗУП3 и пр.), а также формировать архив сканированных документов.<br> Робот применяет до 5 способов распознавания. Максимальное качество загрузки документов из бесплатных OCR. Работает без Интернета.

10800 руб.

13.10.2022    8478    1    12    

9

Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 Россия Бухгалтерский учет НДС Абонемент ($m)

Выгрузка реестра необлагаемых НДС операций в ответ на требование налоговой инспекции. В формате xml согласно требованиям законодательства https://sbis.ru/formats/docFormatCard/120287/help/?scrollTo=description Реестр документов подаётся в ответ на требование налоговой о представлении пояснений. Начиная с 23 ноября 2020 года, его можно направлять по ТКС, в электронном виде в формате xml (письмо ФНС России от 12.11.2020 № ЕА-4-15/18589). Данная обработка просто выбирает необлагаемые суммы (не по ставке 0%) по книги продаж за выбранный квартал и включает их в реестр с кодом операции, который выбран в самой обработке.

1 стартмани

24.09.2021    4772    5    AndKovalchuk    0    

3

Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Оперативный учет 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 3.0 Бухгалтерский учет Управленческий учет Абонемент ($m)

Обработка и правила обмена данными для выгрузки документов и всех связанных с ними справочников из 1С7.7 ТиС 9.2 в 1С8.3 БП 3.0 через файл XML. В типовых конфигурациях уже есть такое решение. Это немного доработанные правила и сама обработка выгрузки, добавлена возможность устанавливать отбор по выгружаемым документам по Фирме, Контрагенту, Складу, Проекту, Автору, ЮрЛицу. А также это внешняя обработка, что даёт возможность адаптировать её под нетиповую ТиС. Обработка и правила тестировались на платформах: 1С: Предприятие 7.7 и 1С: Предприятие 8.3.18.1334. На типовых конфигурациях: «Торговля + склад», редакция 9.2 (7.70 1004) и «Бухгалтерия предприятия» редакция 3.0 (3.0.96.30).

1 стартмани

13.08.2021    9332    59    Kuzya_brаtsk    8    

11

Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Программист Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Торговля и склад 7.7 1С:Бухгалтерия 1.6 1С:Упрощенное налогообложение 7.7 Россия Бухгалтерский учет Абонемент ($m)

Обмениваемся УПД (УКД) с различными контрагентами через СБИС. А чтобы загрузить УПД (УКД) из 7.7 в Сбис, используем данную обработку, которая создает файл в формате XML, который можно импортировать в систему электронного документооборота. Для конфигурации "Бухгалтерский учет" (тестировалась на релизе 7.70.663) Для конфигурации "Упрощенная система налогообложения" ( тестировалась на релизе 7.70.305) Для конфигурации "Торговля и Склад 7.7" (тестировалась на релизе 7.70.1007)

1 стартмани

31.07.2021    16832    267    AndKovalchuk    57    

18

Разработка внешних компонент Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Эта внешняя компонента Base64.dll предназначена для платформы 1С версии 7.7. Используется для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие. Компонента тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.

10 стартмани

06.04.2021    10018    14    softmaker    13    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. andrewks 1375 07.12.12 12:34 Сейчас в теме
насколько законно такое использование APPlus.dll без наличия лицензии на Агент+?
По поводу правомерности использования компоненты мне официально ответили «Компонента APPlus.dll бесплатная, Вы можете использовать её в любых целях»


а можно ссылочку на ветку форума? или это из приватной переписки?
3. Yury1001 1472 07.12.12 13:17 Сейчас в теме
(1) andrewks, нельзя - я письмо писал:
Прикрепленные файлы:
4. andrewks 1375 07.12.12 22:17 Сейчас в теме
(3) спасибо. но всё равно я бы опасался её использования в каких-то серьёзных решениях, ведь лицензия на неё не указана, а письмо... это всего лишь письмо
5. Yury1001 1472 07.12.12 22:23 Сейчас в теме
(4) andrewks, обязательно найду время, посмотрю dialmail.dll и добавлю четвертый способ:)
andrewks; +1 Ответить
2. andrewks 1375 07.12.12 12:35 Сейчас в теме
уж лучше dialmail.dll использовать, он-то уж точно свободно распространяемый
6. arjuna 22.09.13 23:56 Сейчас в теме
Обработка помогла, все три варианта сработали :) вот теперь мучаюсь с выбором :)
7. Elected 23 06.11.14 08:23 Сейчас в теме
Первый способ у меня почему-то не работает. Выпадает ошибка: Не удалось отправить файл по причине: Ошибка записи файла-получателя. Файл на ФТП появляется, но пустой и повреждённый. В чём причина?
8. Yury1001 1472 06.11.14 14:45 Сейчас в теме
(7) Elected, для того и представлено несколько способов, что бы найти рабочий, а так же посмотрите комментарии выше, там ещё одна компонента.
9. Elected 23 07.11.14 14:01 Сейчас в теме
(8) не знаю, у меня есть своя наработка и она работает на стандартной команде windows FTP.EXE. Всё загружается и выгружается...
10. CheBurator 2684 07.11.14 22:36 Сейчас в теме
11. dikd 17 19.12.14 14:33 Сейчас в теме
Для первого варианта будет ли работать Загрузка с FTP?:

Результат = ФТП.FtpGetFile(ИмяФайлаНаФТП,ИмяФайлаЛокально);

12. dikd 17 19.12.14 14:45 Сейчас в теме
Да, работать будет ))
Но вот так:

Результат = ФТП.FtpGetFile(ИмяФайлаЛокально,ИмяФайлаНаФТП);
26. pavelvaskan 23.05.22 15:21 Сейчас в теме
(12)
Результат = ФТП.FtpGetFile(ИмяФайлаЛокально,ИмяФайлаНаФТП);


Добрый день! Как с помощью APPlus32.dll взять группу файлов *.xml с FTP (без искажения их имени) и скопировать в локальный каталог?

Имя файлов - не задано, их должна определить программа. Известно, только их расширение - XML!

Спасибо, если поможете!
13. Gennadiy83 02.11.15 09:13 Сейчас в теме
Добрый день! Использую библиотеку APPlus.dll. Подскажите, пожалуйста, как должно выглядеть содержимое параметра ИмяФайлаНаФТП? При попытке отправить файл, возвращается код "6" и ошибка "Не удалось отправить файл по причине: Ошибка записи файла-получателя". Помогите разобраться.
14. Yury1001 1472 02.11.15 11:13 Сейчас в теме
(13) Gennadiy83,
0001/file1.txt
положить в каталог 0001
или
/file1.txt
положить в корневой каталог ФТП

вот реальный пример
storage/sdcard0/Download/To1C.zip
загружаю файл на телефон
Gennadiy83; +1 Ответить
15. Gennadiy83 02.11.15 12:21 Сейчас в теме
При подключении к серверу начальный каталог не указывается. При подключении через браузер или проводник, локальный каталог не указываю и не вижу. Вероятнее всего при подключении к ftp сразу перенаправляет в нужную папку. Знаю, что на ftp каждому дистрибьютору соответствует папка по логину подключения.

Пробовал установить каталог вызовом процедуры ФтпУстТекКаталог(имяПапкиНаFTP), но генерируется ошибка.
16. Gennadiy83 02.11.15 21:45 Сейчас в теме
Подозреваю, что ftp работает в пассивном режиме, есть ли возможность установки соединения с ftp-сервером в таком режиме?
17. Yury1001 1472 03.11.15 11:07 Сейчас в теме
(16) Gennadiy83, попробуйте DialMail.dll - она, пожалуй, лучшая. Работает в пассивном режиме (пятый параметр 1, при подключении). Пользуюсь давно, но выложить руки так и не дошли.
На фото рабочий пример кода, где параметры:
Каталог - куда отправить на ФТП, например "1001/1002"
Вложения - список значений, каждое значение которого - полное имя файла на диске; представление - имя файла, без каталогов, как его записать на ФТП, например:
Вложения.ДобавитьЗначение(КаталогИБ() + "EUR.spl", "EUR.spl");
Прикрепленные файлы:
18. Gennadiy83 04.11.15 10:44 Сейчас в теме
Огромное спасибо за помощь, попробую в ближайшее время, обязательно отпишу по результатам
19. Gennadiy83 05.11.15 00:42 Сейчас в теме
Попробовал dialMail.dll в активном и пассивном режиме, подключение происходит, но файл не перегружается на ftp. Ниже приведу лог пассивного подключения, затем, активного

Пассивный режим:

.11.15 00:36:41.314 FTP: Подключаемся к сокету
05.11.15 00:36:41.330 FTP: К сокету подключились успешно
05.11.15 00:36:41.361 FTP <-- 220 Microsoft FTP Service
05.11.15 00:36:41.361 FTP --> USER ЛОГИН
05.11.15 00:36:41.377 FTP <-- 331 Password required for PTN020104699.
05.11.15 00:36:41.377 FTP --> PASS *****
05.11.15 00:36:41.392 FTP <-- 230 User logged in.
05.11.15 00:36:41.392 FTP --> TYPE I
05.11.15 00:36:41.424 FTP <-- 200 Type set to I.
05.11.15 00:36:41.424 FTP --> STRU F
05.11.15 00:36:41.439 FTP <-- 200 STRU F ok.
05.11.15 00:36:41.439 FTP --> REST 0
05.11.15 00:36:41.455 FTP <-- 350 Restarting at 0.
05.11.15 00:36:41.455 FTP --> REST 1
05.11.15 00:36:41.470 FTP <-- 350 Restarting at 1.
05.11.15 00:36:41.470 FTP --> REST 0
05.11.15 00:36:41.502 FTP <-- 350 Restarting at 0.
05.11.15 00:36:44.185 FTP DataSocket: Begin
05.11.15 00:36:44.185 FTP DataSocket: Use passive mode
05.11.15 00:36:44.185 FTP DataSocket: Command EPSV 1
05.11.15 00:36:44.185 FTP DataSocket: Command PASV
05.11.15 00:36:44.185 FTP --> PASV
05.11.15 00:36:44.200 FTP <-- 227 Entering Passive Mode (хх,хх,хх,хх,218,154).
05.11.15 00:36:44.200 FTP DataSocket: CloseSocket
05.11.15 00:36:44.200 FTP DataSocket: Bind 0.0.0.0:0
05.11.15 00:36:44.200 FTP DataSocket: Connect хх.хх.хх.хх:55962
05.11.15 00:37:05.229 FTP DataSocket: Error
05.11.15 00:37:05.229 D_FTP ErrorCode = 10060
05.11.15 00:37:05.229 D_FTP ErrorDesc = Connection timed out
05.11.15 00:37:05.229 FTP DataSocket: End
05.11.15 00:37:05.229 FTP --> QUIT
05.11.15 00:37:05.245 FTP <-- 221 Goodbye.


Активный режим:

05.11.15 00:41:13.831 FTP: Подключаемся к сокету
05.11.15 00:41:13.862 FTP: К сокету подключились успешно
05.11.15 00:41:13.878 FTP <-- 220 Microsoft FTP Service
05.11.15 00:41:13.878 FTP --> USER ЛОГИН
05.11.15 00:41:13.893 FTP <-- 331 Password required for PTN020104699.
05.11.15 00:41:13.893 FTP --> PASS *****
05.11.15 00:41:13.909 FTP <-- 230 User logged in.
05.11.15 00:41:13.909 FTP --> TYPE I
05.11.15 00:41:13.940 FTP <-- 200 Type set to I.
05.11.15 00:41:13.940 FTP --> STRU F
05.11.15 00:41:13.956 FTP <-- 200 STRU F ok.
05.11.15 00:41:13.956 FTP --> REST 0
05.11.15 00:41:13.971 FTP <-- 350 Restarting at 0.
05.11.15 00:41:13.971 FTP --> REST 1
05.11.15 00:41:14.002 FTP <-- 350 Restarting at 1.
05.11.15 00:41:14.002 FTP --> REST 0
05.11.15 00:41:14.018 FTP <-- 350 Restarting at 0.
05.11.15 00:41:17.653 FTP DataSocket: Begin
05.11.15 00:41:17.653 FTP DataSocket: Use active mode
05.11.15 00:41:17.653 FTP DataSocket: Bind 192.168.110.5:0
05.11.15 00:41:17.653 FTP DataSocket: Command PORT 192,168,110,5,240,79
05.11.15 00:41:17.653 FTP --> PORT 192,168,110,5,240,79
05.11.15 00:41:17.684 FTP <-- 501 Server cannot accept argument.
05.11.15 00:41:17.684 FTP DataSocket: End
05.11.15 00:41:17.684 FTP --> QUIT
05.11.15 00:41:17.700 FTP <-- 221 Goodbye.
20. Yury1001 1472 09.11.15 10:39 Сейчас в теме
(19) Gennadiy83, гугл в помощь, как говорится, вероятно проблема на стороне сервера.
21. Gennadiy83 10.11.15 01:03 Сейчас в теме
В любом случае спасибо за помощь)
22. Hitryi 23.05.17 16:27 Сейчас в теме
Как через библиотеки АгентПлюс получить список файлов на ftp?
23. pragromist 32 23.05.17 21:24 Сейчас в теме
(22) на сколько я знаю, никак, здесь поможет dialmail.dll
24. Hitryi 24.05.17 14:56 Сейчас в теме
(23) Так и есть. Нет там таких методов.
Выкрутился из ситуации получив список файлов curl-om.
Так же выяснилось что Агент Плюс не любит русские символы.
25. ra9000 11 26.05.17 14:22 Сейчас в теме
Привет. Есть замечательная программка
Складываем файлы в папку - Архивируем любым архиватором !!!ставим пароль на архив!!!
В батнике пишем
echo Пробуем выгрузить изменения.
ncftpput.exe -u ftp_user -p ftp_pass -F %DebugMode% ftp.company.ru . %PC_Folder%\MG1D.zip

Сами файлы можно забрать у разработчика с описанием и примерами
При этом версия 1с не имеет значения.
http://www.ncftp.com/ncftp/
Оставьте свое сообщение