Имя: Пароль:
1C
 
Печать из 1С word документов. не получается
0 Стрелок
 
04.02.09
11:23
С шаблонами разобрался. следующий этап - печать документа после формирования.
ситуация - если я использую Doc.PrintOut() то первы
1 Стрелок
 
04.02.09
11:25
С шаблонами разобрался. следующий этап - печать документа после формирования.
ситуация - если я использую Doc.PrintOut() то первый раз всё нормально - печать проходит. тут же пытаюсь ещё раз напечатать и получаю зависание процесса word в памяти и соответственно висит 1С.

вот код

Word=СоздатьОбъект("Word.Application");
       Word.Documents.Add(ФайлШаблона);
       //Word.Visible=0;
       Doc=Word.ActiveDocument;  
       Doc.Variables("НомерДоговора").Value = ?(СокрЛП(ДокВызова.НомерДоговора)="",СокрЛП(ДокВызова.НомерДок),СокрЛП(ДокВызова.НомерДоговора));  
       Doc.Variables("ДатаДоговора").Value = Формат(ДокВызова.ДатаДок,"Д(0)ДДММММГГГГ");
       Doc.Variables("ФирмаИмя").Value = СокрЛП(Фирма.ПолнНаименование);

..... тут формируется документ по шаблону......

Doc.Fields.Update();
       Doc.Fields.UnLink();
       Doc.SaveAs(КаталогКлиента+"Договор на услуги интернета.doc");
       Если Вопрос("Распечатать договор?","Да+Нет")="Да" Тогда
           Doc.PrintOut();      
       КонецЕсли;    
       
       Word.Quit();
       Word="";
       Форма.Параметр.ДобавитьЗначение(КаталогКлиента+"Договор на услуги интернета.doc","ФайлДоговора");
       СтатусВозврата(0);
       Возврат;
2 Стрелок
 
04.02.09
11:30
ап
3 Стрелок
 
04.02.09
11:39
ситуация из-за того что процесс word "зависает" в списке процессов. т.е. несмотря на quit он продолжает висеть в памяти
4 Стрелок
 
04.02.09
12:01
ап
5 skunk
 
04.02.09
12:03
7 dk
 
04.02.09
12:06
(0) может он не зависает, а ждет чего-то?
displayalerts поставь в False
8 vde69
 
04.02.09
12:08
не парься с печатью, пусть сами нажимают кнопку, просто документ открой и покажи
9 vde69
 
04.02.09
12:09
(8) печать из кода не должна вызываться, так по ошибки будут принтера другие и портить бланки строгой отчетности, короче заморочек много. Нужно ответственость за печать возлогать на пользователя
10 Стрелок
 
04.02.09
12:10
(9) я понял уже. это так даже при открытии документа возникают проблемы. он открывается со второго раза по простейшему коду

Word=СоздатьОбъект("Word.Application");  
           Word.Documents.Open(ФайлДоговора);
11 Стрелок
 
04.02.09
12:11
т.е. первый раз в памяти появляется процесс но документ не открывается, при повторном нажатии - открывается документ
12 dk
 
04.02.09
12:12
(7)+
А нафига закрывать word, когда надо закрыть только документ?
13 Стрелок
 
04.02.09
12:13
(12) как это "нафига"? а зачем он мне в процессах нужен?
14 vde69
 
04.02.09
12:16
BaseOLE = СоздатьОбъект("Word.Application");
       BaseOLE.ScreenUpdating = 1;  
       BaseOLE.Visible = 1;
15 Стрелок
 
04.02.09
12:17
(14) это чо? к 10?
16 dk
 
04.02.09
12:19
(13) смеешься?
---

Процедура ПечатьExcel4(Страница, Принтер, Количество, К1 = "", К2 = "", К3 = "", К4 = "")
   Перем Сч, СтарыйПринтер;
   
   HeightS    = 203;
   WidthS    = 592;
   
   HeightD    = 8;
   
   LeftS    = 0;
   
   TopT    = 0;
   
   msoLineDash = 4;
   
   // Картинка 1
   Если ПустоеЗначение(К1) = 0 Тогда
       Если ФС.СуществуетФайл(К1) = 1 Тогда
           Страница.Shapes.AddPicture(К1, xlFalse, xlTrue, LeftS, TopT, WidthS, HeightS);
       КонецЕсли;
   КонецЕсли;
   
   // Разделитель 2
   TopT    = TopT + HeightS + HeightD;
   Линия = Страница.Shapes.AddLine(LeftS, TopT - Окр(HeightD / 2), LeftS + WidthS, TopT - Окр(HeightD / 2));
   Линия.Line.DashStyle = msoLineDash;
   
   // Картинка 2
   Если ПустоеЗначение(К2) = 0 Тогда
       Если ФС.СуществуетФайл(К2) = 1 Тогда
           Страница.Shapes.AddPicture(К2, xlFalse, xlTrue, LeftS, TopT, WidthS, HeightS);
       КонецЕсли;
   КонецЕсли;
   
   // Разделитель 3
   TopT    = TopT + HeightS + HeightD;
   Линия = Страница.Shapes.AddLine(LeftS, TopT - Окр(HeightD / 2), LeftS + WidthS, TopT - Окр(HeightD / 2));
   Линия.Line.DashStyle = msoLineDash;
   
   // Картинка 3
   Если ПустоеЗначение(К3) = 0 Тогда
       Если ФС.СуществуетФайл(К3) = 1 Тогда
           Страница.Shapes.AddPicture(К3, xlFalse, xlTrue, LeftS, TopT, WidthS, HeightS);
       КонецЕсли;
   КонецЕсли;
   
   // Разделитель 4
   TopT    = TopT + HeightS + HeightD;
   Линия = Страница.Shapes.AddLine(LeftS, TopT - Окр(HeightD / 2), LeftS + WidthS, TopT - Окр(HeightD / 2));
   Линия.Line.DashStyle = msoLineDash;
   
   // Картинка 4
   Если ПустоеЗначение(К4) = 0 Тогда
       Если ФС.СуществуетФайл(К4) = 1 Тогда
           Страница.Shapes.AddPicture(К4, xlFalse, xlTrue, LeftS, TopT, WidthS, HeightS);
       КонецЕсли;
   КонецЕсли;
   
   //ExcelApp.Visible = xlTrue;
   //ExcelApp.ScreenUpdating = xlTrue;    
   //Предупреждение("Ждем");
   
   СтарыйПринтер            = ExcelApp.ActivePrinter;
   ExcelApp.ActivePrinter    = Принтер;
   
   Страница.PrintOut(xlFalse, xlTrue, wdPrintAllDocument, "", "" , "", wdPrintDocumentContent, Количество, "1", 0, xlFalse, xlFalse);
   
   ExcelApp.ActivePrinter    = СтарыйПринтер;
   
   Для Сч = 1 По Страница.Shapes.Count Цикл
       Страница.Shapes.Item(1).Delete();
   КонецЦикла;
   
КонецПроцедуры // ПечатьExcel4()

...
   Если ТЗ_ДляВывода.КоличествоСтрок() > 0 Тогда
       
       ТЗ_ДляВывода.Свернуть("К1,К2,К3,К4", "Количество");
       
       КолСтр = ТЗ_ДляВывода.КоличествоСтрок();
       ТЗ_ДляВывода.ВыбратьСтроки();
       Пока ТЗ_ДляВывода.ПолучитьСтроку() > 0 Цикл
           Состояние(Шаблон("Печать этикеток: [Формат(ТЗ_ДляВывода.НомерСтроки / КолСтр * 100, ""Ч6.2"")] %"));
           ПечатьExcel4(Страница, ТекПринтер, ТЗ_ДляВывода.Количество, ТЗ_ДляВывода.К1, ТЗ_ДляВывода.К2, ТЗ_ДляВывода.К3, ТЗ_ДляВывода.К4);
           Если ВыбПауза > 0 Тогда
               ВвестиСтроку("Подождите", "Подождите ...", 10, 0, ВыбПауза);
           КонецЕсли;
           
       КонецЦикла;    //"Пока ТЗ_ДляВывода.ПолучитьСтроку() > 0 Цикл
       
   КонецЕсли;    //"Если ТЗ_ДляВывода.КоличествоСтрок() > 0 Тогда
...

на название процедуры не смотри - это word :)
17 vde69
 
04.02.09
12:19
(15) это показать "процесс", тоесть твой файл просто покажется

а можно проще КомандаСистемы(ИмяДокФайла);
18 Стрелок
 
04.02.09
12:22
(17) при этом файл открывается "под" 1С. я уже пробовал ;)
19 vde69
 
04.02.09
12:24
Процедура гл_ОткрытьФайл(ЭлементСправочника) Экспорт
   Если ЭлементСправочника.ДанныеФайла.Выбран() = 1 Тогда
       
       // сначало создадим уникальное имя файла и каталога
                   
       Если СокрЛП(ЭлементСправочника.Расширение) = "" Тогда
           Сообщить("Не указано расширение файла");
           Возврат;
       КонецЕсли;
       
       Если ПустаяСтрока(Константа.КаталогФайловЗаявки)=1 Тогда
           Сообщить("Не указан каталог для файлов заявки!");
           Возврат;
       КонецЕсли;                                      
       
       // имя файла сделаем из кода элемента и времени создания
       
       ПолноеИмяФайла = СокрЛП(Константа.КаталогВременныхФайлов)+?(Прав(СокрЛП(Константа.КаталогВременныхФайлов),1)="\","","\") + СтрЗаменить(ТекущееВремя(),":","") + "_" + СокрЛП(ЭлементСправочника.Код) + "_" + "." + СокрЛП(ЭлементСправочника.Расширение);
       ПолноеИмяФайла = СтрЗаменить(ПолноеИмяФайла,"""","");
       //ПолноеИмяФайла = """" + ПолноеИмяФайла + """";
       
       Попытка
           Если ЗагрузитьВнешнююКомпоненту(КаталогПрограммы() + "BinFiles.dll") <> 1 Тогда
               Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "BinFiles.dll") <> 1 Тогда
                   Если ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "ExtForms\" + "BinFiles.dll") <> 1 Тогда        
                       Сообщить("Компонента BinFiles.dll не найдена!");
                       Возврат;
                   КонецЕсли;    
               КонецЕсли;
           КонецЕсли;    
       Исключение
           Сообщить("Компонента BinFiles.dll не подключена! Вероятно у Вас не хватает прав на установку программ");
           Возврат;
       КонецПопытки;  
   
       Попытка
           Буфер=СоздатьОбъект("AddIn.BinFile");
       Исключение
           Сообщить("Не удалось создать объект BinFile");
           Возврат;
       КонецПопытки;                                        
       
       Буфер.DebugMode = 1;  
       
       Попытка                                
           Буфер.Create(ПолноеИмяФайла);
           Буфер.WriteHex(Буфер.Decompress(ЭлементСправочника.ДанныеФайла.Данные));
           Буфер.Close();
       Исключение
           Сообщить("Ошибка записи файла во временный каталог");
           Возврат;
       КонецПопытки;

       ЗапуститьПриложение(ПолноеИмяФайла);
       
   КонецЕсли;
КонецПроцедуры
20 Стрелок
 
04.02.09
12:26
спасибо накидали много... посмотрю дома
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.