![]() |
|
Как прервать чтение DBF? | ☑ | ||
---|---|---|---|---|
0
KUBIK
18.07.13
✎
23:27
|
Коллеги подскажите:
Вот тестовый код в модуле формы: &НаСервере Процедура ОткрытьФайлDBF(ИмяФайла) Данные = Новый XBase; Данные.Кодировка = КодировкаXBase.OEM; Данные.ОткрытьФайл(ИмяФайла); Если Данные.Открыта() Тогда Сообщить("ОК!"); КонецЕсли; Сч=0; ОбъектОбработка = РеквизитФормыВЗначение("Объект"); Данные.Первая(); Пока Истина Цикл ОбъектОбработка.ЧитаемDBF(Данные); Сч=Сч+1; Если НЕ Данные.Следующая() Тогда Прервать; КонецЕсли; КонецЦикла; Данные.ЗакрытьФайл(); Данные=""; Сообщить("Загрузка завершена"); КонецПроцедуры Файл читается процедурой ЧитаемDBF(Данные) в МО обработки. Вопрос: Как грамотно сделать вызов процедуры ОбработкаПрерыванияПользователя(); которая вызывается из клиента? |
|||
1
KUBIK
18.07.13
✎
23:30
|
Да, забыл уточить, вопрос по УФ
|
|||
2
NcSteel
18.07.13
✎
23:33
|
Возвращать курсор на клиента
|
|||
3
KUBIK
18.07.13
✎
23:34
|
(2) ??? Поясни, пжста
|
|||
4
EvgeniuXP
18.07.13
✎
23:38
|
а чем отличается чтение дбф в УФ и не УФ?
|
|||
5
KUBIK
18.07.13
✎
23:40
|
(4) Речь не о чтении, а возможности прервать чтение = разные коки
|
|||
6
EvgeniuXP
18.07.13
✎
23:42
|
Если НЕ Данные.Следующая() Тогда
Прервать; КонецЕсли; Когда этот код сработает? Если система заняла дбф и открыла его - другой пользователь сможет его открыть, чтобы прервать чтение этому пользователю? |
|||
7
EvgeniuXP
18.07.13
✎
23:42
|
или удалить файл сможешь?
|
|||
8
KUBIK
18.07.13
✎
23:44
|
(7) При чем здесь файл????
Задача: при необходимости прервать чтение файла |
|||
9
KUBIK
18.07.13
✎
23:45
|
(6) Этот код сработает, когда прочитается последня зщапись DBF
|
|||
10
EvgeniuXP
18.07.13
✎
23:46
|
если просто читаешь данные из дфф прямо в цикле и напиши обработать прерывание пользователя...
если заносишь данные куда-то, т.е. их записываешь в базу, то перед циклом Начни транзакцию, в конце зафиксируй ее, если прерывание произошло - отмена транзакции - в этом случае все отменится |
|||
11
EvgeniuXP
18.07.13
✎
23:46
|
(9) и зачем в конце дбф прерывать? логика какая? если цикл закончился
|
|||
12
KUBIK
18.07.13
✎
23:47
|
(10) Речь об УФ!
В ОФ у меня все прекрасно работает! |
|||
13
EvgeniuXP
18.07.13
✎
23:48
|
вместо пока истина, данные.Следующая() пиши
|
|||
14
KUBIK
18.07.13
✎
23:51
|
(13) От этого ничего не изменится по существу.
|
|||
15
EvgeniuXP
18.07.13
✎
23:52
|
(12) так ответь на (11), чем отличается УФ от ОФ - что за код ты пишешь?
|
|||
16
EvgeniuXP
18.07.13
✎
23:57
|
(14) и как это не изменится, внутри цикла такого напишешь процедуру ОбработкаПрерыванияПользователя, которая действительно при чтении (заметь, не в конце чтения файла) прервет чтение.
|
|||
17
KUBIK
18.07.13
✎
23:58
|
(15) на (11) смотри внимательно код в (0):
позицирнирую 1 запись запускаю цикл обрабатываю запись проверяю: не последняя? если нет иду дальше если да прерываю конец цикла А чем УФ отличается от ОФ - глянь типовые бухии 2.0 и 3.0 = мож чето увидишь |
|||
18
KUBIK
18.07.13
✎
23:59
|
Мож ктото по-существу вопроса поможет?
|
|||
19
EvgeniuXP
18.07.13
✎
23:59
|
кстати, ОбработкаПрерыванияПользователя - тонкий клиент - на сервере не работает :)
|
|||
20
EvgeniuXP
19.07.13
✎
00:01
|
(17) так нафига прерывать в конце дбф, если и так дошли до конца?
|
|||
21
KUBIK
19.07.13
✎
00:01
|
(19) Мне нах тонкий клиент не нужен!
|
|||
22
KUBIK
19.07.13
✎
00:02
|
(20) ???????
Пока Истина Цикл КонецЦикла; = Чем прервешь? :)))))))))) |
|||
23
EvgeniuXP
19.07.13
✎
00:04
|
(22) так тебе говорят, пиши Пока Данные.Следующая() - зачем такой изврат?
|
|||
24
KUBIK
19.07.13
✎
00:04
|
(23) отдыхай, а?
|
|||
25
EvgeniuXP
19.07.13
✎
00:07
|
обкуренный
|
|||
26
EvgeniuXP
19.07.13
✎
00:12
|
стр. 421, том 2 - проф. разработка:
"Листинг 18.17. Пример чтения данных из файла DBF &НаКлиенте Процедура ЧтениеДанных(Команда) Путь = "c:\"; БД = Новый XBase; БД.ОткрытьФайл(Путь + "nomen.dbf", Путь + "index.cdx"); Сообщение = Новый СообщениеПользователю(); Пока Истина Цикл Сообщение.Текст = БД.CODE + " " + БД.Name; Сообщение.Сообщить(); Если Не БД.Следующая() Тогда Прервать; КонецЕсли; КонецЦикла; БД.ЗакрытьФайл(); КонецПроцедуры" что не нравится? в книге так? какие еще вопросы тогда? |
|||
27
EvgeniuXP
19.07.13
✎
00:13
|
воду мутит тут.
|
|||
28
ЧеловекДуши
19.07.13
✎
00:17
|
(0) Держи, дарю, прямо от сердца отрываю :)
БД.ЗакрытьФайл(); |
|||
29
KUBIK
19.07.13
✎
00:17
|
(27) Вникни в суть моего вопроса:
Требуется при необходимости ПРЕРВАТЬ обработку чтения файла DBF по Ctrl+Break Вопроса про чтение файла не было |
|||
30
ЧеловекДуши
19.07.13
✎
00:18
|
(29) Это невозможно, если только ты не организуешь "паузу", которая и будет анализировать команду "Ctrl+Break"
|
|||
31
ЧеловекДуши
19.07.13
✎
00:19
|
+(29) А так это медленно работающее считывание :)
С паузами :) |
|||
32
EvgeniuXP
19.07.13
✎
00:20
|
(27) так ты написал все на сервере, как прервешь то его? ОбработкаПрерыванияПользователя вызывается с клиента! Переписывай все чтение на клиент бей по частям, вызывай колстрок свою обработку - нагружай сеть - если ты это считаешь правильно.
|
|||
33
KUBIK
19.07.13
✎
00:20
|
(26) Совсем плох?
А как на клиенте запустишь в цикле: см (0) ?????? ОбъектОбработка = РеквизитФормыВЗначение("Объект"); ............ ОбъектОбработка.ЧитаемDBF(Данные); Короче: мачтасть учи |
|||
34
ЧеловекДуши
19.07.13
✎
00:20
|
+ (29) Следующим вопросом будет - "Как начать считывать DBF с нужной строки?" :)
|
|||
35
EvgeniuXP
19.07.13
✎
00:22
|
(33) см. (22) если тебя устраивает - делай как (33). :)))
|
|||
36
EvgeniuXP
19.07.13
✎
00:22
|
(*35) (33) как в (32)
|
|||
37
ЧеловекДуши
19.07.13
✎
00:22
|
(35) Да ему нужно прерывание обработки по команде от пользователя :)
Типо делается что-либо и пользователь раз и прервал это :) |
|||
38
EvgeniuXP
19.07.13
✎
00:24
|
(33) ну да, клиент сервер не вызвать :) только серверов будешь вызывать столько же сколько и строк в твоей ДбФ, тогда и прервать можешь - если для тебя это так важно - делай так.
|
|||
39
KUBIK
19.07.13
✎
00:26
|
(37) Спасибо, что объяснил зацикленному на циклах! :))))
|
|||
40
EvgeniuXP
19.07.13
✎
00:27
|
(39) да вызывай ты внутри цикла серверную процедуру со своей обработкой и делай что хошь.
|
|||
41
EvgeniuXP
19.07.13
✎
00:28
|
(+40) только все чтение ДБФ идет на клиенте, а не на сервере.
маразм полный. |
|||
42
EvgeniuXP
19.07.13
✎
00:29
|
сиди на ОФ и прервешь при чтении в любую секунду.
|
|||
43
KUBIK
19.07.13
✎
00:31
|
42) "сиди на ОФ" = Нуралиеву напиши про бух 3.0 :)))))
|
|||
44
EvgeniuXP
19.07.13
✎
00:32
|
для этого есть отмена транзакции и жди когда закончится полное чтение - это УФ.
|
|||
45
EvgeniuXP
19.07.13
✎
00:33
|
зато сеть не нагружена, либо нагружай сеть по полной - какие проблемы?
|
|||
46
KUBIK
19.07.13
✎
00:36
|
(45) RDP = наше все!
|
|||
47
KUBIK
19.07.13
✎
00:38
|
+(45) сеть отдыхает! :))))))
|
|||
48
EvgeniuXP
19.07.13
✎
00:39
|
УФ и RDP :) круто!
|
|||
49
KUBIK
19.07.13
✎
00:41
|
(48) ты видимо еще бухию 3.0 не видел?
|
|||
50
EvgeniuXP
19.07.13
✎
00:42
|
(49) так и делай, чтение дбф весь алгоритм на клиенте, а в цикле вызывай сервер со своей обработкой.
|
|||
51
EvgeniuXP
19.07.13
✎
00:43
|
и на клиенте ставь ПрерываниеПользователя
|
|||
52
KUBIK
19.07.13
✎
00:49
|
(51) вроде наччинаешь вникать в суть обозначенной проблемы:
см (37): При загрузке данных их ДБФ пользователь вдруг решил прервать загрузку. Я вроде ясно обозначил: как грамотно это сделать с учетом приведеого кода. |
|||
53
KUBIK
19.07.13
✎
10:16
|
Решил проблему!
Все просто оказалось! Цикл чтения записи ДБФ перегнал на клиента, текущую запись перегоняю в структуру СтрДанные и вызываю серверную ОткрытьФайлDBF(СтрДанные) и вставил в цикл ОбработкаПрерыванияПользователя(); &НаСервере Процедура ОткрытьФайлDBF(СтрДанные) ОбъектОбработка = РеквизитФормыВЗначение("Объект"); ОбъектОбработка.ЧитаемDBF(СтрДанные); КонецПроцедуры |
|||
54
KUBIK
19.07.13
✎
10:17
|
ОткрытьФайлDBF() = не совсем корректное название: здесь читаем текущую запись дбф
|
|||
55
KUBIK
19.07.13
✎
10:18
|
Сорри:
здесь читаем текущую запись дбф = обрабатываем текущую запись |
|||
56
EvgeniuXP
19.07.13
✎
13:14
|
(53) когда в (50) уже прямым текстом написал :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |