Обычно для пользователя при формировании различного рода документов в формате MS Word формировались файлы и просто открывались.
Для этого вызывалась процедура host и передавалась строчка запуска.
Например, фрагмент кода
cmd := 'cmd /c start winword.exe "'||pi_fname||'"';
host(cmd);
Однако возникла задачка массовой печати. Т.е. есть подготовленные файлы, и их надо, например, при нажатии на кнопку распечатать на принтере. Естественно, пользователь не должен открывать, печатать, закрывать каждый документ.
В итоге вызов видоизменился до следующего
cmd := 'cmd /c start /wait winword.exe "'||pi_fname||'" /q /n /mFilePrintDefault /mFileSave /mFileExit';
host(cmd);
Что добавилось
start /wait– дает нам возможность запустить приложение и ждать его завершения. В нашем случае мы должны в определенном порядке получать на принтере документы, т.е. они должны и попадать в очередь последовательно, а без ожидания маленькие документы могут встать в очередь быстрее- далее пойдут параметры уже непосредственно для MS Word
/q– не показывать окно заставки (splash screen)/n– не создавать новый документ (new default document)/m– выполнение макроса (runs a macro [/mmacroname])/mFilePrintDefault– печать на принтере по умолчанию/mFileSave– сохранение документа/mFileExit– закрытие документа
Сначала все работало без параметра сохранения документа, но почему-то некоторые документы при открытии получали статус измененных и, соответственно, при закрытии выводился запрос на сохранение. Его нам не надо получать, т.к. процесс печати приостанавливается; соответственно, добавляем сохранение.
Все равно это изменение только локальной временной копии документа, т.к. сам документ хранится в базе данных и только выгружается на клиентскую машину при просмотре или печати.
Если же использовать такой вызов не в рамках данный задачи, а например, просто использовать его для печати документов из командной строки, то, лучше выкинуть параметр /mFileSave из строки вызова.