Обычно для пользователя при формировании различного рода документов в формате 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
из строки вызова.