Автоматизация работы врача с использованием макросов OOo BASIC - Общие вопросы

Автор Dr_Lecter, 4 октября 2015, 19:12

0 Пользователи и 1 гость просматривают эту тему.

Dr_Lecter

Разрабатываю для себя комплект макросов для Writer для автоматизации рутины.

Решил создать общую тему, для общих вопросов.
В приложении файл, с тем что уже сделано.

Для корректной работы нужно скопировать макрос в общую папку, иначе он не стартует при запуске файла шаблона.

Итак основные задачи:

1. Автоматическое именование и каталогизация файлов протоколов УЗИ
   Цель в общем достигнута, в том числе благодаря вашей помощи. Остались мелкие недоработки:

      Проблема 1.1 - В настоящее время при открытии шаблона создается новый документ, но для работы макроса по событию «Создание документа» он должен находиться в общей библиотеке, а не внутри файла-шаблона. Это не проблема, больше академический интерес есть ли обходной путь? Ведь макровирусы как-то себя запускают.

      Проблема 1.2 - Не понятно почему запуск макрос по событию «Создание документа» начинается ПОСЛЕ запроса ввода всех текстовых полей документа, это как-то нужно изменить. Если же изменить это нельзя, то придется вместо текстовых поел придумывать диалоги или еще что-то.

      Проблема 1.3 - Как закрыть документ и выйти из макроса не сохраняя файл (если запустили по ошибке)?  Сейчас сделал если ввести пустое имя в запрос Ф.И.О. или нажать отмена то будет предложение выхода, но пока при нажатии кнопки выхода макрос выведет сообщение «PRINT WITHOUT CLOSE» и закончит работу. Пытался поставить там «oDoc.Close(true)» так все зависает и закрыть можно только через диспетчер задач.

bigor

По пп1.1 и 1.2 - а автозапуск макроса обязателен?
Может повесить кнопку и запускать макрос по нажатию на нее.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

Dr_Lecter

Я делаю чтобы медсестра могла работать пока врач за сканером, так что там только полное принуждение, никаких кнопок.  ;D
Никто не отменял законов Мерфи - если можно нажать не на ту кнопку то ее нажмет обязательно.

rami

Цитата: Dr_Lecter от  4 октября 2015, 17:12Для корректной работы нужно скопировать макрос в общую папку, иначе он не стартует при запуске файла шаблона.
При щелчке по шаблону открывается новый документ с содержимым шаблона и после заполнения полей "срабатывает" макрос (почему "срабатывает" в кавычках см. ниже).
Цитата: Dr_Lecter от  4 октября 2015, 17:12Проблема 1.1 - В настоящее время при открытии шаблона создается новый документ, но для работы макроса по событию «Создание документа» он должен находиться в общей библиотеке, а не внутри файла-шаблона.
Не должен, он и в документе нормально "срабатывает"
Цитата: Dr_Lecter от  4 октября 2015, 17:12Проблема 1.2 - Не понятно почему запуск макрос по событию «Создание документа» начинается ПОСЛЕ запроса ввода всех текстовых полей документа, это как-то нужно изменить. Если же изменить это нельзя, то придется вместо текстовых поел придумывать диалоги или еще что-то.
Заполнение полей — это часть целого события «Создание документа». Тут всё правильно работает.
Цитата: Dr_Lecter от  4 октября 2015, 17:12Проблема 1.3 - Как закрыть документ и выйти из макроса не сохраняя файл (если запустили по ошибке)?  Сейчас сделал если ввести пустое имя в запрос Ф.И.О. или нажать отмена то будет предложение выхода, но пока при нажатии кнопки выхода макрос выведет сообщение «PRINT WITHOUT CLOSE» и закончит работу. Пытался поставить там «oDoc.Close(true)» так все зависает и закрыть можно только через диспетчер задач.
Я не понял эту цитату ???
Я щёлкаю по шаблону, открывается новый документ, предлагается заполнить поля, если я передумал, жму на ESC, заполнение полей прерывается, но запускается макрос по событию «Создание документа», в этот момент макрос должен проверить признак не завершённого документа — это может быть незаполнение важных полей (Ф.И.О. пациента и/или др.), если поля не изменились, то выйти из макроса и закрыть документ без сохранения.

Теперь почему макрос "срабатывает"
В начале макроса есть строка On error goto EH — если есть ошибка, перейти к метке EH:      'Error handler (обработчик ошибок), после чегоMsgBox "Ошибка сохранения файла:"& Chr(13) & Chr(13) & """" & sFileNameToSave & """" & Chr(13) & Chr(13) & "Проверьте корректность введенных данных." ,, "НЕКОРРЕКТНЫЙ ВВОД ДАННЫХ"
В макросе есть ошибка в строкеoDocInfo = oDoc.getDocumentInfo()должно бытьoDocInfo = oDoc.DocumentPropertiesиз-за этой ошибки макрос "срабатывает", но ничего не делает.

Dr_Lecter

rami

Может у нас конечно разные версии Apache Open Office или я чего-то не понимаю, но у меня что в Mac OS X 10.10.5 что в Windows 8.1 Pro x64 если Макрос сохранен в теле файла то его назначить на событие нельзя - он не появляется в меню выбора (во вложении Macro_to_Event фото проблемы)

Заменил как Вы советовали oDocInfo = oDoc.DocumentProperties но сильно лучше не стало:

Добавил oDoc.Close(True) теперь не висит, даже типа закрывает, но в Mac OS X после закрытия документа офис сваливается в аварийное завершение с попыткой восстановления документа при следующем запуске, а в Windows вообще не реагирует.

Сценарий:
Случайно запустили шаблон, шаблон запросил поля, нажмем "Esc" и сразу стартует макрос, предлагая ввести Ф.И.О. пациента.
Нажмем "Отмена" и получим приглашение повторно ввести Ф.И.О. или нажать "Отмена" для выхода.
Нажмем "Отмена" и получим сообщение "CLOSE WITHOUT SAVE" (пока для отладки вставил, чтобы проверит что приходит куда нужно)
Нажмем "OK" и тогда должно сработать oDoc.Close(True), но эта строка которая раз через раз либо нормально закрывает документ, либо сваливает его в ошибку (во вложении Opps_error фото события)

В Windows же у меня вообще не реагирует на oDoc.Close(True) никак. (пути к файлам я конечно меняю в зависимости от операционки)

В связи с этим вопрос, это я ошибся где-то или просто это фича версии под Mac?

И последнее - можно таки  заставить макрос исполняться до заполнения полей или нет?

В данном случае это не так уж принципиально, но у меня еще другой есть макрос, где я хочу чтобы сначала часть полей заполнялась из макроса, а потом начиналось ручное для тех, которые макрос не заполнил, потому что не смог найти в файле источнике.

Если это не возможно я тогда в другом проекте хоть не буду поля описывать а сразу начну искать другой путь.

rami

Цитата: Dr_Lecter от  6 октября 2015, 21:56Может у нас конечно разные версии Apache Open Office или я чего-то не понимаю, но у меня что в Mac OS X 10.10.5 что в Windows 8.1 Pro x64 если Макрос сохранен в теле файла то его назначить на событие нельзя - он не появляется в меню выбора (во вложении Macro_to_Event фото проблемы)
Первая картинка с Мака? Если да, то у меня есть подозрение(хотя я не могу проверить), что этот номер не пройдёт, т.к. Apache OpenOffice в августе прошлого года почил в бозе :'( (не обновлялся), а Mac OS X 10.10.5 была была выпущена в прошлом октябре. Насчёт Windows 8.1 Pro x64, не знаю, вроде никто не жаловался. Попробуйте использовать LibreOffice. У меня на Mac OS X 10.9.5 всё работает.
Цитата: Dr_Lecter от  6 октября 2015, 21:56Заменил как Вы советовали
oDocInfo = oDoc.DocumentProperties
но сильно лучше не стало:
Зато стало правильно. getDocumentInfo() нет такого метода.
Цитата: Dr_Lecter от  6 октября 2015, 21:56В связи с этим вопрос, это я ошибся где-то или просто это фича версии под Mac?
Кроме getDocumentInfo() других ошибок я не заметил. У меня макрос нормально создал папку года, в ней папку месяца и в ней документ с правильным именем. Возможно есть конфликт относительно новой оси со старым офисом. Кстати, вид окна Настройка неправильный, как-будто документ не открыт, поэтому макросы документа не видны, но документ-то маячит "за окном" ???
Цитата: Dr_Lecter от  6 октября 2015, 21:56И последнее - можно таки  заставить макрос исполняться до заполнения полей или нет?
Однозначно, нет. Заполнение полей — это часть события «Создание документа». Заполнение полей можно отменить, но нельзя вклинить макрос в середину события. Если нужно выполнить макрос после загрузки, но перед ручным заполнением, нужно выбрать другие методы.

Dr_Lecter

ЦитироватьApache OpenOffice в августе прошлого года почил в бозе

В смысле?
Что больше не будет развиваться и всем срочно уходить на  LibreOffice  ???  :o

rami

Цитата: Dr_Lecter от  8 октября 2015, 04:23Что больше не будет развиваться и всем срочно уходить на  LibreOffice ??? :o
Уходить не надо, а то пропустите момент чудесного возрождения ;D Yakov даже о пререлизе сообщил для нетерпеливых, но я буду ждать релиз

А вообще, иметь LibreOffice и Apache OpenOffice одновременно должно быть нормой, они друг другу не мешают.