Имя: Пароль:
1C
 
Как напечатать программно документ MS Word?
0 vs84
 
06.06.07
14:00
Хотелось бы с использованием КомандаСистемы(СтрокиЗапуска).
Вот например для PDF файлов это выглядит так: "C:\Program Files\Adobe\Acrobat 5.0\Reader\AcroRd32.exe" /p /h "%1". А при печати .doc файлов используется DDE: "C:\Program Files\Microsoft Office\Office10\WINWORD.EXE" /x /n /dde + указываются параметры DDE, которые в КомандаСистемы() видимо не передаш. Или передашь?
Вообщем сабж!
Немного сумбурно, но надеюсь проблема понятна :)
1 dk
 
06.06.07
14:15
не пробовал, но
открыть проводник - Сервис - Свойства папки - вкладка "Типы файлов"
найти DOC - кнопка "Дополнительно" - Печать - Изменить
и думать по аналогии с pdf :)
2 vs84
 
06.06.07
14:21
аналогий нет :)
3 smaharbA
 
06.06.07
14:28
шаблон можно свой пользовать ?
4 vs84
 
06.06.07
17:29
(3) запросто
5 Neco
 
06.06.07
17:53
Запускать лучше так:

WshShell = Новый COMОбъект("WScript.Shell");
СтрокаЗапуска = """"+"C:\Program Files\Microsoft Office\Office10\WINWORD.EXE"+""" /x /n /dde "+КомандыЗапускаДДЕ;
WshShell.Run(СтрокаЗапуска, 0, Истина);
6 n0isy2
 
07.06.07
10:16
А не проще через Новый COMОбъект?
7 smaharbA
 
07.06.07
20:10
Создаем шаблон с таким кодом

Private Sub Document_New()
   On Error Resume Next
   Application.Visible = False
   Application.DisplayAlerts = wdAlertsNone
   Set Шаблон = ThisDocument.AttachedTemplate
   ДокИмя = Шаблон.Name
   ДокИмя = Left(ДокИмя, Len(ДокИмя) - 4) & ".doc"
   Set Док = Documents.Open(Шаблон.Path & "\" & ДокИмя, , True)
   Док.PrintOut (0)
   Док.Close (0)
   For Each Док In Documents
       If Док.AttachedTemplate.FullName = Шаблон.FullName Then
           Док.Close (0)
       End If
   Next
   Application.DisplayAlerts = wdAlertsAll
   Application.Visible = True
   If Documents.Count = 0 Then
       Application.Quit (0)
   End If
End Sub


Сохраняем его, например в КаталогИБ()+"ExtForms\Шаблоны" под именем ШаблонПечати.dot
В адинес пишем

//*******************************************
Процедура Сформировать()
   Перем Имя,Путь;
   ШаблонФайл=КаталогИБ()+"ExtForms\Шаблоны\ШаблонПечати.dot";
   Если ФС.ВыбратьФайл(0,Имя,Путь,"","Ворд (*.doc)|*.doc","DOC")=0 Тогда
       Возврат;
   КонецЕсли;
   Если ФС.СуществуетФайл(ШаблонФайл)=1 Тогда
       ШаблонНовый=Путь+Лев(Имя,СтрДлина(Имя)-4)+".dot";
       ФС.КопироватьФайл(ШаблонФайл,ШаблонНовый,1);
       ЗапуститьПриложение(ШаблонНовый);
   Иначе
       Предупреждение("Файл будет только открыт");
       ЗапуститьПриложение(Путь+Имя);
   КонецЕсли;
КонецПроцедуры


Извратно, но работает (7.7)
8 Armando
 
08.06.07
02:10
(6)+1 Что-то типа:

//---
Ворд = Новый COMОбъект("Word.Application");
Документ = Ворд.Documents.Open(ПолныйПуть);
Документ.PrintOut(ПараметрыПечати);
Ворд.Quit();
//---

Параметры печати:
http://msdn2.microsoft.com/en-us/library/bb237242.aspx
Разве не проще? Ну это так, по минимуму.
9 smaharbA
 
08.06.07
06:12
(8) просче, но в (0) вопрос про ЗапуститьПриложение или КомандаСистемы
10 IUnknown
 
08.06.07
06:48
(9)Абрамс ты нашел вешь как из 1С на 100% узнать, что печать в ворде завершена.
11 vs84
 
09.06.07
12:28
(10) +1 ???
12 vs84
 
09.06.07
12:28
(8) уже так и делаю
13 Armando
 
09.06.07
15:01
(10) Если речь идет о том, что бы не вызвать Ворд.Quit() пока печать продолжается, то Word 2007 после вызова Quit() не завершит работу покуда продолжается печать. Про ранние версии не знаю.