|   |   | 
| 
 | Как прервать чтение 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) уже прямым текстом написал :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |