Имя: Пароль:
1C
1С v8
Узнать скачен ли файл с FTP ?
0 Radion
 
08.07.19
12:38
Всем привет, УТ 11.3. Установлено регламентное задание по скачиванию файла c ftp. Так вот, суть в том, что после скачивания файла, второе регламентное задание начинает его обрабатывать. Ошибка в том, как я понимаю как только первое регламентное задание начало копирование, второе регламентное задание начинает этот файл уже обрабатывать, возникает конфликт и создается файл с размером 0 kb - битый. Вопрос как понять что файл с ftp уже скачан и его можно обрабатывать? Спасибо.
1 Вафель
 
08.07.19
12:38
делай в 1 задании, а не в разных
2 ДенисЧ
 
08.07.19
12:44
Пиши файловый флаг "файл скачан". Перед началом обработки проверяй его, после обработки удаляй. Перед скачкой тоже проверяй если надо
3 vde69
 
08.07.19
12:47
Zip файл клади, и проверяй можно или нельзя его распокавать
4 Radion
 
08.07.19
12:47
(1)(2) ну так у меня результат закачивания, отражается в регистре сведений - т.е. после
FTP.Получить(эл.ПолноеИмя,ВхXMLФорма+"\"+эл.Имя);
ЗаписьВРегистрФайлСкачан(ИмяФайла) - где указывается имя скаченного файла.
Второе регламентное проверяет наличие записи в регистре и начинает обрабатывать его. Но все равно получаются битые файлы ((
5 PiotrLoginov
 
08.07.19
12:48
(0) да в любом случае прежде чем фал начинать обрабатывать, нужно проверять его доступность. Пока он еще в процессе создания/обработки другим механизмом, он будет занят.
6 ptiz
 
08.07.19
12:49
(0) Копируй с "левым" расширением. После копирования - переименовываешь.
7 vde69
 
08.07.19
12:49
А вообще у меня на инфостарте валялся старый обменник через скуль базу, там даже транзакции при обмене работают
8 Йохохо
 
08.07.19
12:50
(6) с вторым левым расширением
9 ptiz
 
08.07.19
12:54
хотя еще правильнее: во временный файл
10 Radion
 
08.07.19
12:57
(6) так в том и дело, как понять что он УЖЕ СКАЧЕН ?
11 Radion
 
08.07.19
12:57
(9) так в том и дело, как понять что он УЖЕ СКАЧЕН ?
12 hhhh
 
08.07.19
13:01
(11) а зачем понимать? Ну запустится задание 2-й раз, если первый не получилось обработать.
13 ptiz
 
08.07.19
13:05
(11) В смысле? Запускаешь команду чтение с фтп во временный файл, как она отработала - копируешь в правильное место с правильным именем.
14 Radion
 
08.07.19
13:07
(13) тогда я не понимаю как работает функция FTP.Получить я предполагаю, что после ее отработки, файл уже скачен с ФТП разве нет?
15 hhhh
 
08.07.19
13:14
(14) нет
16 ptiz
 
08.07.19
13:16
(14) Скачан.
17 Radion
 
08.07.19
13:18
(15, 16 )так скачен или нет ? )))
18 ptiz
 
08.07.19
13:19
(17) Скачан. Никакой асинхронности нет в этом методе.
19 Radion
 
08.07.19
13:27
(18) так почему же после кода:
FTP.Получить(эл.ПолноеИмя,ВхXMLФорма+"\"+эл.Имя);
ЗаписьВРегистрФайлСкачан(ИмяФайла);

я пытаюсь обработать файл и он с 0 Kb ?
20 hhhh
 
08.07.19
13:31
(19) чой-то разные имена файлов в первой и второй строчке.
21 Radion
 
08.07.19
13:34
(20) сорри это я не скопировал а писал, вот так правильно:
ФТП.Получить(эл.ПолноеИмя,ВхXMLФорма+"\"+эл.Имя);
ЗаписьВРегистрФайлСкачан(эл.Имя);
22 ptiz
 
08.07.19
13:44
(19) Значит, какая-то фигня с ftp. А фигня с ftp бывает самая разнообразная, вплоть до того, что скачивать приходится с помощью сторонних утилит, а не средствами 1С.
23 evgeniy_n
 
08.07.19
13:50
Может,
Файл.Размер
попробовать?
Проверить на нулевой размер, или на изменение размера в процессе скачивания.
24 Radion
 
08.07.19
13:50
(23) и как это сделать?
25 ДядяМитяй
 
08.07.19
14:03
а обычным ftp клиентом этот файл тянется в это место?
26 ДядяМитяй
 
08.07.19
14:38
я бы так попробовал для диагностики

ВрФайл = ПолучитьИмяВременногоФайла(расширение);

Попытка
ФТП.Получить(эл.ПолноеИмя, ВрФайл);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки

Попытка
//записываем файл куда надо с нужным именем
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки
27 evgeniy_n
 
08.07.19
15:26
(24) Партизанщина, конечно. Сам так не делал, но, наверное, так:
Пока ИмяФайла.Размер = 0 Цикл
   //ждём, можно добавить какое-то аварийное прерывание от зацикливания
КонецЦикла;
// дальше пишем в регистр