Имя: Пароль:
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() не завершит работу покуда продолжается печать. Про ранние версии не знаю.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn