powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Печать два документа на разных принтерах
4 сообщений из 4, страница 1 из 1
Печать два документа на разных принтерах
    #39501583
MBlack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здорова товарищи программеры,

У меня следующий вопрос.

Мне нужно распечатать два документа, сразу, сначало первый, затем второй. Первый документ идет нормально на печать, а второй никак не хочет

Вот код :

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
  try
      if not DM.QueryTmp.Transaction.Active then DM.QueryTmp.Transaction.StartTransaction;
      with DM.QueryTmp do begin
              Close;
              SQL.Clear;
              SQL.Text := 'SELECT o.id, o.ordernum, o.ordertime, od.quantity, od.MOREINFOITEM, od.CURRMINFOMOREITEM, p.productname, f.id as FACID '+
                              'FROM ordersdetails od LEFT JOIN ORDERS o ON o.id = od.ordid '+
                                           'LEFT JOIN products p ON p.id = od.productid '+
                                           'LEFT JOIN FACILITY f ON p.ID_FAC = f.ID '+
                              'WHERE od.ordid = (SELECT first 1 skip 0 id from orders WHERE (APRKITCH = 0) AND (ORDERDATE+ORDERTIME between '+QuotedStr(DateTimeToStr(dtwStart+tmwStart))+' and '+QuotedStr(DateTimeToStr(dtwEnd+tmwEnd))+') and (ITEMKCH = '+IntToStr(DM.idKitchen)+') ORDER BY ORDERDATE DESC, ORDERTIME DESC)';

              ExecQuery;
      end;

  ******** код *******

            try



               try
                  W := GetActiveOleObject('Word.Application');
                except
                  W := CreateOleObject('Word.Application');
                end;
           
                W.documents.Open(ExtractFileDir(Application.ExeName)+'\template\check_kuh.dot');
                doc:= W.Documents.Item(1);

  /*************** код ********************/
                 W.ActivePrinter := 'XP-80';
                 W.ActiveDocument.Application.Run('PrintProgDoc', PagesStr); // здесь в документе макрос он и печатает
                 W.quit(false);
                 W:=UnAssigned;
              except
                 on E : Exception do begin
                         W.Quit(false);
                          W:=UnAssigned;
                 end;
              end;

     /****** код ******

  except
      if DM.QueryTmp.Transaction.Active then DM.QueryTmp.Transaction.Rollback;
      MessageDlg('Ïðîèçîøëà îøèáêà ïðè îáðàáîòêå çàïðîñà...', mtError, [mbOk], 0);
  end;                        

//***** второй документ***************/


  try
      if not DM.QueryTmp.Transaction.Active then DM.QueryTmp.Transaction.StartTransaction;
      with DM.QueryTmp do begin
          Close;
          SQL.Clear;
          SQL.Text := 'SQL код *****';
          ExecQuery;
       end;

  /*** код **/

           try
              
                try
                    W := GetActiveOleObject('Word.Application');
                except
                   W := CreateOleObject('Word.Application');
                end;
               
                //***** здесь код ******/

                Application.ProcessMessages;
                W.Options.PrintBackground := false;
                W.ActivePrinter := 'POS-58';
                W.PrintOut;
                W.quit(false);
                W:=UnAssigned;               

              except
                 on E : Exception do begin
                    Showmessage('Ïðîèçîøëà îøèáêà ïðè âûçîâå Word....('+E.Message+')');

                                           W.Quit(false);
                                           W:=UnAssigned;

                 end;
              end;

    except
      if DM.QueryTmp.Transaction.Active then DM.QueryTmp.Transaction.Rollback;
      MessageDlg('Ïðîèçîøëà îøèáêà ïðè îáðàáîòêå çàïðîñà...', mtError, [mbOk], 0);
      addRecordErrorLog(DateTimeToStr(Now)+' : Ïðîèçîøëà îøèáêà ïðè îáðàáîòêå çàïðîñà');
    end;


Я привел код, как я пытаюсь распечатать разные документы, на двух принтерах, один док. на один принтер, а другой документ, на другой принтер, проблема заключается в том , что, первый вызов word проходит нормально и пройдет печать, но при попытке другой документ распечать , она выдает ошибку что мол Word отсоединился от програмы. В чем может быть проблема.
...
Рейтинг: 0 / 0
Печать два документа на разных принтерах
    #39501610
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MBlack,

Возможно, GetActiveOleObject во второй раз, получает экземпляр, которому уже отправлен Quit...
Почему бы обе операции не провести с одним экземпляром ole-сервера.
...
Рейтинг: 0 / 0
Печать два документа на разных принтерах
    #39502151
MBlack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как провести эти операции с одним экземпляром OLE
...
Рейтинг: 0 / 0
Печать два документа на разных принтерах
    #39502267
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var W, D: OleVariant;
begin
  W := CreateOleObject('Word.Application');
  W.Options.PrintBackground := False;
  D := W.Documents.Open('C:\1.docx');
  W.ActivePrinter := '...';
  W.PrintOut;
  D.Close;
  D := W.Documents.Open('C:\2.docx');
  W.ActivePrinter := '...;
  W.PrintOut;
  D.Close;
  W.Quit;
end;

...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Печать два документа на разных принтерах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]