Заготовка для загрузки файлов по ftp

03.06.13

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

3 процедуры и 1 макет

Кусок моей реализации обмена по ftp. Сначала получает список файлов на ftp, анализируется, загружали ли его ранее (некоторые ftp не позволяют удалять файлы), а потом загружаются новые файлы и сохраняются в хранилище файлов. Далее файлы обрабатываются (здесь этих процедур уже нет) и при удачной обработке помечаются уже как загруженные. Если файл пришел пустой или неполный (а с ftp такое бывает), то файл помечается как битый и в следующий сеанс обмена снока загружается уже штатно. Как-то так.

 Процедура ПолучитьФайлыЗаказовFTP() Экспорт

   
СоздатьКаталог(КаталогВременныхФайлов()+П_Настройки.ПапкаОбмена);
   
ИмяЛогаFTP = КаталогВременныхФайлов()+"ftp1cList.log";
   
ВыполнитьНаFTP("Список файлов",,ИмяЛогаFTP);
   
СписокФайловНаFTP = СписокФайловДляПолученияFTP(ИмяЛогаFTP);
   
УдалитьФайлы(ИмяЛогаFTP);

    Если
СписокФайловНаFTP.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;

    Для Каждого
ИмяФайлаНаFTP из СписокФайловНаFTP Цикл //при желании можно добавить индикацию
       
ВыполнитьНаFTP("Получить файлы",ИмяФайлаНаFTP);
    КонецЦикла;
   
СписокФайлов = НайтиФайлы(КаталогВременныхФайлов()+П_Настройки.ПапкаОбмена,"*.txt");

    Для Каждого
Файл из СписокФайлов Цикл
       
ХранилищеФайла = Справочники.ХранилищеДополнительнойИнформации.СоздатьЭлемент();
       
ХранилищеФайла.Объект = Контрагент;
       
ХранилищеФайла.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Файл;
       
ХранилищеФайла.ИмяФайла = Файл.Имя;
       
ХранилищеФайла.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(Файл.ПолноеИмя));
       
ХранилищеФайла.Наименование = "Заявка - не загружена";
        Попытка
           
ХранилищеФайла.Записать();
           
ВыполнитьНаFTP("Удалить файл",Файл.Имя);
           
УдалитьФайлы(КаталогВременныхФайлов()+П_Настройки.ПапкаОбмена+"\" + Файл.Имя);
        Исключение
           
Сообщить("Не удалось записать в базу или удалить с ftp файл заказа "+Файл.Имя,СтатусСообщения.Важное);
        КонецПопытки;
    КонецЦикла;

КонецПроцедуры


//Файл лога нужен только для получения списка файлов на ftp
//Действие - далее в тексте процедуры видно какие значения может принимать и за что отвечает
//ИмяФайлов - строка, содержащая имя файла (может и несколько, только синтаксис ftp.exe не помню, а на практике лучше получать по одному)
//ФайлЛога - ну тут ясно
//П_Настройки - структура, которая хранится в глобальной переменной и заполняется ранее
Процедура ВыполнитьНаFTP(Действие,ИмяФайлов = "",ФайлЛога = "С:\ftp1c.log")

   
выбПорт = "";
   
П_Настройки.Свойство("Порт",выбПорт);
    Если Не
ЗначениеЗаполнено(выбПорт) Тогда
       
выбПорт = 21;
    КонецЕсли;

   
выбЛогин = "";
   
П_Настройки.Свойство("Логин",выбЛогин);

   
выбПароль = "";
   
П_Настройки.Свойство("Пароль",выбПароль);

   
выбСервер = П_Настройки.АдресОбмена;

   
выбПуть = "";
   
П_Настройки.Свойство("КаталогОбмена",выбПуть);

   
BatFile = Новый ТабличныйДокумент();

   
МакетФайла = ЭтотОбъект.ПолучитьМакет("bat_FTP");

   
ТекОбласть = МакетФайла.ПолучитьОбласть("ОбластьФайла");

   
ТекОбласть.Параметры.Адрес выбСервер+" "+выбПорт;
   
ТекОбласть.Параметры.Логин выбЛогин;
   
ТекОбласть.Параметры.Пароль выбПароль;
   
ТекОбласть.Параметры.Каталог выбПуть;
   
ТекОбласть.Параметры.ЛокальныйКаталог Символ(34)+КаталогВременныхФайлов()+П_Настройки.ПапкаОбмена+Символ(34);
    Если
Действие = "Получить файлы" Тогда
       
ТекОбласть.Параметры.Действие = "mget "+ИмяФайлов;
    ИначеЕсли
Действие = "Удалить файл" Тогда
       
ТекОбласть.Параметры.Действие = "del "+ИмяФайлов; //не всегда дает удалять с ftp
   
ИначеЕсли Действие = "Список файлов" Тогда
       
ТекОбласть.Параметры.Действие = "ls . " + Символ(34) + ФайлЛога + Символ(34);
       
//ТекОбласть.Параметры.ВыводВФайл =  " >>"+ФайлЛога;
   
КонецЕсли;

   
BatFile.Вывести(ТекОбласть);
   
ИмяBatФайла = КаталогВременныхФайлов()+"FTP_.bat";
   
BatFile.Записать(ИмяBatФайла,ТипФайлаТабличногоДокумента.ANSITXT);
   
WshShell=Новый ComОбъект("WScript.Shell");
   
КодВозвр=WshShell.Run("cmd /C " + Символ(34)+ ИмяBatФайла + Символ(34),0,-1);
   
УдалитьФайлы(ИмяBatФайла);

КонецПроцедуры

//Проверим список уже загруженных файлов, чтобы не загружать их снова
//ИмяЛогаFTP - список файлов раннее был получен с помощью батника (в другой процедуре) и помещен в этот файл.
Функция СписокФайловДляПолученияFTP(ИмяЛогаFTP)
   
Запрос = Новый Запрос();
   
Запрос.Текст = "ВЫБРАТЬ
                   |    ХранилищеДополнительнойИнформации.Ссылка
                   |ИЗ
                   |    Справочник.ХранилищеДополнительнойИнформации КАК ХранилищеДополнительнойИнформации
                   |ГДЕ
                   |    ХранилищеДополнительнойИнформации.Объект = &Контрагент
                   |    И ХранилищеДополнительнойИнформации.ИмяФайла ПОДОБНО &ИмяФайла"
;
   
Запрос.УстановитьПараметр("Контрагент",Контрагент);
   
Лог = Новый ТекстовыйДокумент();
   
Лог.Прочитать(ИмяЛогаFTP);
   
ФайлыДляПолучения = Новый Массив();
    Для
НомерСтроки = 1 по Лог.КоличествоСтрок() Цикл
       
Строка = Лог.ПолучитьСтроку(НомерСтроки);
       
ИмяФайла = СтрЗаменить(Строка,"./","");
       
Запрос.УстановитьПараметр("ИмяФайла",ИмяФайла);
       
Результат = Запрос.Выполнить().Выбрать();
        Если
Результат.Следующий() Тогда
            Продолжить;
        КонецЕсли;
       
ФайлыДляПолучения.Добавить(Символ(34) + ИмяФайла + Символ(34));
    КонецЦикла;
    Возврат(
ФайлыДляПолучения);
КонецФункции

 

Макет тоже простой. Каждая строчка в отдельной строке. Надеюсь разберетесь, где параметр, а где шаблон?

 
@echo off
ftp -s:%0 [ФайлЛог]
goto done
open [Адрес]
Логин
Пароль
cd [Каталог]
binary
prompt
lcd [ЛокальныйКаталог]
Действие
bye
:done

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 1C Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор

58000 руб.

04.08.2015    187524    446    302    

453

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    160756    967    319    

482

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 руб.

15.12.2021    34190    259    64    

195

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    188236    359    289    

418

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Перенос данных из БП 2 в БП 3 готовые правила конвертации данных (КД 2), сэкономьте свое время! | Выполнить переход с БП 2 на БП 3 в ситуациях, когда простым обновлением перейти не получается | Переносится вся справочная информация, документы за выбранный период, а также начальные остатки на выбранную дату (то есть можно еще и свертку базы сделать при переносе) | Есть фильтр по организациям при выгрузке данных | Перенос можно проверить перед покупкой прямо на вашем сервере! Обращайтесь за проверкой!

50600 руб.

21.05.2019    58068    81    131    

73

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    84042    225    175    

161

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62802    82    132    

81
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AnryMc 851 03.06.13 11:32 Сейчас в теме
"+" за анимацию, лично я ещё здесь вроде не видел...

Внимание привлекает!
2. anig99 2864 03.06.13 13:43 Сейчас в теме
(1) у меня ещё кот (живой) есть на одной обработке.
3. Algiz 23.10.13 22:38 Сейчас в теме
на заметку возьму
4. NAKIS 5 18.12.13 12:17 Сейчас в теме
Можно юзнуть для обмена данными между филиалами, а то менеджеры и бухи вечно жалуются на почту...
5. NAKIS 5 18.12.13 12:17 Сейчас в теме
Для отправки сообщения требуется регистрация/авторизация