Имя: Пароль:
1C
1С v8
Ожидание с периодической проверкой наличия файла на диске
, ,
0 padaril
 
03.07.13
14:08
С формы отправляется на сервер запрос файла с данными, сервер в виде ответа отправляет на диск файл csv. Вопрос как сделать отслеживание появления этого файла? Наименование и путь к файлу известны.
Может сделать что-то вроде:
цикл Пока, внутри через попытку пробовать прочитать файл, если файл прочтен - выходить из цикла, если ошбка - обработать и продолжать цикл.
Но полагаю, это сильно загрузит систему.
Еще думал через ПодключитьОбработчикОжидания, но тоже не фонтан решение
1 Maxus43
 
03.07.13
14:09
регл задание, обработчик ожидания. выбирай
2 padaril
 
03.07.13
14:13
регламентка не подходит, ибо процедура происходит в процессе создания дока (запрос стороннего сервера на предоставление дисконта)
3 Лефмихалыч
 
03.07.13
14:15
(0),(2) хрень какая-то. Ты что-то делаешь не так.
4 stix2010
 
03.07.13
14:15
(0) в других средах таймеры всех устраивают, а тебя нет
5 padaril
 
03.07.13
14:16
(3) есть другое видение?
6 Maxus43
 
03.07.13
14:27
(5) чем обработчик ожидания не устраивает?
7 padaril
 
03.07.13
14:36
спасиб, запилил. Если кому интересно:
&НаКлиенте
Процедура Получить(Команда)
   ПодключитьОбработчикОжидания("ПолучитьСервер", 1);
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьСервер()
   Сообщить("куку");
   ИмяФайла = "in.csv";
   ПутьКФайлу = "C:\Users\Alex\Desktop\vedroid\" + ИмяФайла;
       
   ТекстДок = Новый ТекстовыйДокумент;
   Попытка
       ТекстДок.Прочитать(ПутьКФайлу, "windows-1251");
   Исключение
       Возврат;
   КонецПопытки;

   // тут обрабатывается файл

   ОтключитьОбработчикОжидания("ПолучитьСервер");
КонецПроцедуры
8 Maxus43
 
03.07.13
14:39
раз в секунду частовато долбить то имхо, ну сам смотри
9 hhhh
 
03.07.13
14:39
надо в типовых посмотреть. Там есть фишка "Выполнять обмен при появлении файла"
10 Поросенок Петр
 
03.07.13
14:43
Мало курили. Надо было данные читать непосредственно с с диска физически.
11 Поросенок Петр
 
03.07.13
14:46
"С формы отправляется на сервер запрос файла с данными, сервер в виде ответа отправляет на диск файл csv."

А двоичные данные он не может на клиент прислать?
12 Smallrat
 
03.07.13
14:56
(7) что за попытка исключение ?
Файл = Новый Файл(имяфайлcsv);
Если Файл.Существует() Тогда
ТекстДок = Новый ТекстовыйДокумент;

ну и там всякие обработки добавить на случай если файл остался от предыдущей сессии
13 Jump
 
03.07.13
14:57
Делать ожидание файла, в модуле документа, ИМХО очень неразумное решение.
Проблема со связью и будет у тебя док бесконечно ждать погоды.

А если и делать то банально по кнопке - кнопка послать запрос, и кнопка проверить наличие ответа.
14 Smallrat
 
03.07.13
14:58
(13) да кстати - перед записью сделать ожидание ответа, если ответ не пришел то и не начинать проведени. а как пришел так и проводить.
15 padaril
 
03.07.13
15:54
у клиента свое ИМХО :)
необходимо МИНИМУМ вмешательства в систему. Он видит все решение как внешняя обработка.
16 savaB
 
03.07.13
16:08
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.