Имя: Пароль:
1C
 
Как распечатать openoffice
0 wms
 
10.11.08
15:34
Делаю:

ScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
ScriptControl.language="javascript";
ScriptControl.eval("Массив=new Array()");
ScriptControl.AddObject("OpenOffice", ServiceManager);
ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
ScriptControl.eval("Массив[0].Name='Hidden'");
ScriptControl.eval("Массив[0].Value=true");
Массив = ScriptControl.eval("Массив");
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");    
URL = СтрЗаменить(промФайл," ","%20");
URL = СтрЗаменить(URL,"\","/");
URL    = "file://localhost/" + URL;
           
// Открыть книгу содержащую шаблон
Document = Desktop.LoadComponentFromURL(URL, "_blank", 0, Массив );

Лист = Document.getSheets().GetByName("ИмяЛиста");

Как расспечатать лист?
1 wms
 
10.11.08
15:50
ап
2 Александр_
Тверь
 
10.11.08
15:58
апну, вдруг кто знает. интересно же
3 wms
 
10.11.08
16:00
Нашел вот кусок кода, как его на 1С переделать? Пока не соображаю


procedure PrintReceiptOpenOffice;
var
 XLApp, Desktop, Document,
 Sheet, MyStruct, Cell: Variant;
begin
 XLApp       := CreateOleObject('com.sun.star.ServiceManager');
 Desktop     := XLApp.CreateInstance('com.sun.star.frame.Desktop');
 Document    := Desktop.LoadComponentFromURL(
                'private:factory/scalc', '_blank', 0,
                 VarArrayCreate([0, -1], varVariant));
 MyStruct    := Document.getSheets;
 Sheet       := MyStruct.getByName('Лист1');
 MyStruct    := UnAssigned;
 Document.getCurrentController.getFrame.getContainerWindow.setVisible(False);
 //здесь выводи свои данные
 Cell:= VarArrayCreate([0, 0], varVariant);
 Cell[0] := XLApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
 Cell[0].Name  := 'ToPoint';
 Cell[0].Value := '$A$1:$H$20';
 MyStruct := XLApp.CreateInstance('com.sun.star.frame.DispatchHelper');
 MyStruct.ExecuteDispatch(Document.getCurrentController.getFrame,
                          '.uno:GoToCell', '', 0, Cell);
 Cell[0].Name  := 'Selection';
 Cell[0].Value := True;
 MyStruct.ExecuteDispatch(Document.getCurrentController.getFrame,
                          '.uno:Print', '', 0, Cell);
 Document.Dispose;
 Cell := Unassigned;
 MyStruct := Unassigned;
 Sheet := Unassigned;
 Document := Unassigned;
 Desktop := Unassigned;
 XLApp := Unassigned;
end;
4 Fragster
 
гуру
10.11.08
16:01
На яндексе забанили?
Печать документа

  Последняя процедура в этом разделе – процедура вывода на печать текущего документа (листинг 9).


Листинг 9
procedure TOpenOffice.Print(iNumCopies:integer);
const Bounds:array[1..2] of integer = (0,0);
var
   VariantArray: Variant;
begin
if ( iNumCopies < 1 ) or ( iNumCopies > 512 ) then
    iNumCopies := 1;
VariantArray := VarArrayCreate(Bounds, varVariant);
VariantArray[0]:= MakePropertyValue('CopyCount',iNumCopies);
Document.print(VariantArray);
end;


  В данном случае мы передаем на печать необходимое количество копий (iNumCopies). Для меня именно это было критично, хотя есть и другие параметры печати, которые можно задавать точно таким же образом. Например, свойство Pages:string - определяет страницы для печати, формат ввода такой: ' 1-9,11,15-20'; или свойство FileName:string – определяет файл, в который производится печать.
5 wms
 
10.11.08
16:13
(4) спасибо конечно, но чем это лучше (3) ?
копипастить все умеют.
Как это на 1С реализовать? суть вопроса ведь в этом.
6 wms
 
10.11.08
16:46
апну еще
не понятно как в 1С эти две строки переписать:
VariantArray := VarArrayCreate(Bounds, varVariant);
VariantArray[0]:= MakePropertyValue('CopyCount',iNumCopies);

чтобы вставить в :
Document.print(VariantArray);
7 Fragster
 
гуру
10.11.08
16:50
(6) т.е. скопипастил, но не посмотрел, что?
вот тебе то же из твоего примера:

// массив
ScriptControl.eval("Массив=new Array()");
// один элемент:
ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
// ключ
ScriptControl.eval("Массив[0].Name='Hidden'"); // сюда можно и copycount
// значение
ScriptControl.eval("Массив[0].Value=true"); // ну а сюда - 1

// вытягиваем в 1с:
Массив = ScriptControl.eval("Массив");


так понятнее? а то, что некоторые программисты не могут код из одного языка в другой переделать - то это проблемы тех программистов...
8 Fragster
 
гуру
10.11.08
16:50
(7) + а остальные свойства, если что, так:

ScriptControl.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
....
9 Ковычки
 
10.11.08
16:58
(7) не всегда все так просто (про программистов)
да и использование диспача, это проблемма с головой у программистов ООо
10 Fragster
 
гуру
10.11.08
17:00
(9) диспач используют только суровые челябинские программисты, остальные используют Document.print(VariantArray);
11 Ковычки
 
10.11.08
17:24
примерно

Функция СоздатьМассив(Сп,Знач СкриптЗн="")
   Перем Массив;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Массив=Скрипт.eval("ИСТИНА=true;ЛОЖЬ=false;");
   Массив=Скрипт.eval("Массив=new Array()");
   Значение="";
   Для к=0 По Сп.РазмерСписка()-1 Цикл
       Массив.push(Сп.ПолучитьЗначение(к+1));
       Попытка
           Значение=Врег(Сп.ПолучитьЗначение(к+1).Value);
       Исключение
       КонецПопытки;
       Если (Значение="ИСТИНА") или (Значение="ЛОЖЬ") Тогда
           Скрипт.Eval("Массив["+к+"].Value="+Значение);
       КонецЕсли;
   КонецЦикла;
   Если ПустоеЗначение(СкриптЗн)=0 Тогда
       Стр="";
       Сп.ПолучитьЗначение(1,Стр);
       Если ПустоеЗначение(Стр)=1 Тогда
           Стр="Массив";
       КонецЕсли;
       СкриптЗн.AddObject(Стр,Массив);
   КонецЕсли;
   Возврат Массив;
КонецФункции
//*******************************************
Процедура Сформировать()
   Перем Имя,Путь;
   Если ФС.ВыбратьФайл(0,Имя,Путь,"Открыть...","Ворд (*.doc)|*.doc","DOC")=0 Тогда
       Возврат;
   КонецЕсли;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   УРЛ="file:///"+Скрипт.Eval("encodeURI('"+СтрЗаменить(Путь+Имя,"\","/")+"')");
   СервисМанагер=Скрипт.eval("СервисМанагер=new ActiveXObject('com.sun.star.ServiceManager')");
   СтрПарам="Парам=СервисМанагер.Bridge_GetStruct('com.sun.star.beans.PropertyValue')";
   СпПарам=СоздатьОбъект("СписокЗначений");
   СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам));
   СпПарам.ПолучитьЗначение(1).Name="Hidden";
   СпПарам.ПолучитьЗначение(1).Value="Ложь";
   Массив=СоздатьМассив(СпПарам);
   Десктоп = СервисМанагер.createInstance("com.sun.star.frame.Desktop");
   Сообщить(УРЛ);
   Док = Десктоп.LoadComponentFromURL(УРЛ, "_blank", 0, Массив );
   СпПарам=СоздатьОбъект("СписокЗначений");
   СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам));
   СпПарам.ПолучитьЗначение(1).Name="CopyCount";
   СпПарам.ПолучитьЗначение(1).Value=2;
   СпПарам.ПолучитьЗначение(2).Name="Pages";
   СпПарам.ПолучитьЗначение(3).Value="2;3";
   Массив=СоздатьМассив(СпПарам);
   Док.Print(Массив);
КонецПроцедуры
12 wms
 
10.11.08
17:36
(7) делал примерно так.
Еще попробовал, так :

           ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
           ScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
           ScriptControl.language="javascript";
           ScriptControl.eval("Массив=new Array()");
           ScriptControl.AddObject("OpenOffice", ServiceManager);
           ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
           // ключ
           ScriptControl.eval("Массив[0].Name='copycount'"); // сюда можно и copycount
           // значение
           ScriptControl.eval("Массив[0].Value=1"); // ну а сюда - 1
           // вытягиваем в 1с:
           Массив = ScriptControl.eval("Массив");
           Document.print(Массив);

не получается - ошибки не выдает, но и не печатает
13 Ковычки
 
10.11.08
17:39
в восьмерке вообще нафих обертка ненужна в ней есть коммассив и тип вариант, но дело не в том.
смотри мой код, он красивше... да и никто лучче меня ничего не предложит в связке ООо и адинес, ибо я есмь начало !
14 Fragster
 
гуру
10.11.08
17:40
(12) а область печати то там есть? ну, и Лист.Print(...) попробовать можно
15 Ковычки
 
10.11.08
17:41
+(14) вот тут ты прав... (12) чо хоть печатаем то ?
16 wms
 
10.11.08
17:46
Лист.Print(...) пробовал
Область обязательно задавать?
Мне два листа надо распечатать, открываю файл - эксель шаблон, его меняю
Все ок. Два режима в одном открывается
в другом сразу на принтер надо - тут и засада
Надо как то к листу привязаться, а метода принт у него то и нету...
17 wms
 
10.11.08
17:58
апну еще
завтра снова попробую
18 Ковычки
 
10.11.08
18:00
com.sun.star.table.CellRangeAddress
и
setPrintAreas
19 Ковычки
 
10.11.08
18:01
а чо, апать, я и так знаю как...
тебеж сказал, что я самый крутой по ооо, круче только яйца, выше только звезды
20 wms
 
11.11.08
09:42
(18) и куда это совать?
понятно, все знают, все спецы и все это делали, тока кода 1С ни у кого почему то нет.
21 smaharbA
 
11.11.08
09:44
(20) не свисти, код 1с есть и он у меня и у Ковычек... он правдо плагиатор, а я есмь начало всего ООо в 1С
22 wms
 
11.11.08
09:52
(21)щас я сделаю сам, опубликую и буду "я есмь начало всего ООо в 1С
"  :), а вы тока виртуально
23 smaharbA
 
11.11.08
10:11
(22) извини, но не будешь... ибо лучче чем моя тебе не сделать и не разобраться с ооо
24 smaharbA
 
11.11.08
10:12
+(23) и внимательно изучи код в (0) - откудова он взялся...
25 wms
 
11.11.08
10:24
скопипастил у спецов ""я есмь начало всего ООо в 1С"

           ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
           ScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl");
           ScriptControl.language="javascript";
           ScriptControl.eval("Массив=new Array()");
           ScriptControl.AddObject("OpenOffice", ServiceManager);
           ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
           ScriptControl.eval("Массив[0].Name='CopyCount'"); // сюда можно и copycount
           ScriptControl.eval("Массив[0].Value=1"); // ну а сюда - 1
           //добавляю:
           ScriptControl.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.table.CellRangeAddress')");
           ScriptControl.eval("Массив[1].Name='setPrintAreas'"); // Тут уже ошибка -метода такого нет
           ScriptControl.eval("Массив[1].Value=1");  
           //конец добавленного
           Массив = ScriptControl.eval("Массив");
           Document.print(Массив);
26 smaharbA
 
11.11.08
11:52
Все еще кипятишь ?
Счас спрашивай спецов как выбрать нужный диапазон и надо ли ?
и для каждой ли сборки это нужно
...
А надо было просто смиренно просить у smaharbA немного снизойти до вашей низости...
(код не полон, но рабочий)
И еще спроси у своих спецов где они накопали (0)

Функция СоздатьМассив(Сп,Знач СкриптЗн="")
   Перем Массив;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Массив=Скрипт.eval("ИСТИНА=true;ЛОЖЬ=false;");
   Массив=Скрипт.eval("Массив=new Array()");
   Значение="";
   Для к=0 По Сп.РазмерСписка()-1 Цикл
       Массив.push(Сп.ПолучитьЗначение(к+1));
       Попытка
           Значение=Врег(Сп.ПолучитьЗначение(к+1).Value);
       Исключение
       КонецПопытки;
       Если (Значение="ИСТИНА") или (Значение="ЛОЖЬ") Тогда
           Скрипт.Eval("Массив["+к+"].Value="+Значение);
       КонецЕсли;
   КонецЦикла;
   Если ПустоеЗначение(СкриптЗн)=0 Тогда
       Стр="";
       Сп.ПолучитьЗначение(1,Стр);
       Если ПустоеЗначение(Стр)=1 Тогда
           Стр="Массив";
       КонецЕсли;
       СкриптЗн.AddObject(Стр,Массив);
   КонецЕсли;
   Возврат Массив;
КонецФункции
//*******************************************
Процедура Сформировать()
   Перем Имя,Путь;
   Если ФС.ВыбратьФайл(0,Имя,Путь,"Открыть...","Ексель (*.xls)|*.xls|Ворд (*.doc)|*.doc","XLS")=0 Тогда
       Возврат;
   КонецЕсли;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   СкриптВасик=СоздатьОбъект("MSScriptControl.ScriptControl");
   СкриптВасик.language="vbscript";

   УРЛ="file:///"+Скрипт.Eval("encodeURI('"+СтрЗаменить(Путь+Имя,"\","/")+"')");
   СервисМанагер=Скрипт.eval("СервисМанагер=new ActiveXObject('com.sun.star.ServiceManager')");
   Рефлектор=СервисМанагер.createInstance("com.sun.star.reflection.CoreReflection");
   СтрПарам="Парам=СервисМанагер.Bridge_GetStruct('com.sun.star.beans.PropertyValue')";
   СпПарам=СоздатьОбъект("СписокЗначений");
   СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам));
   СпПарам.ПолучитьЗначение(1).Name="Hidden";
   СпПарам.ПолучитьЗначение(1).Value="Ложь";
   Массив=СоздатьМассив(СпПарам);
   Десктоп = СервисМанагер.createInstance("com.sun.star.frame.Desktop");
   Сообщить(УРЛ);
   Док = Десктоп.LoadComponentFromURL(УРЛ, "_blank", 0, Массив );
   Если Док.SupportsService("com.sun.star.text.TextDocument")=-1 Тогда
       Сообщить("Это гребанный врайтер, им пользуются дауны","i");
   ИначеЕсли Док.SupportsService("com.sun.star.sheet.SpreadsheetDocument")=-1 Тогда
       Сообщить("Это гребанный калк, им пользуются алигофрены","i");
       ОбластьСтр="Область=СервисМанагер.Bridge_GetStruct('com.sun.star.table.CellRangeAddress')";
       Листы=Док.getSheets();
       Лист=Листы.getByIndex(0);
       СпПарам=СоздатьОбъект("СписокЗначений");
       СпПарам.ДобавитьЗначение(Скрипт.Eval(ОбластьСтр));
       СпПарам.ПолучитьЗначение(1).StartColumn=0;
       СпПарам.ПолучитьЗначение(1).StartRow=0;
       СпПарам.ПолучитьЗначение(1).EndColumn=10;
       СпПарам.ПолучитьЗначение(1).EndRow=50;
       ОбластьПечати=СоздатьМассив(СпПарам);
       Лист.SetPrintAreas(ОбластьПечати);
   Иначе
       Сообщить("Неведома зверушка, и вообще ООо изготавливают недоумки","i");
   КонецЕсли;
   СпПарам=СоздатьОбъект("СписокЗначений");
   СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам));
   СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам));
   СпПарам.ПолучитьЗначение(1).Name="CopyCount";
   СпПарам.ПолучитьЗначение(1).Value=2;
   СпПарам.ПолучитьЗначение(2).Name="Pages";
   СпПарам.ПолучитьЗначение(2).Value="1";
   СоздатьМассив(СпПарам);
   Док.Print(Массив);
КонецПроцедуры
27 Fragster
 
гуру
11.11.08
12:01
(26) *олигофрены ;)
28 smaharbA
 
11.11.08
12:04
(27) это кому как ))

Функция СоздатьМассив(Сп,Знач СкриптЗн="")
   Перем Массив;
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Массив=Скрипт.eval("Массив=new Array()");
   Значение="";
   Для к=0 По Сп.РазмерСписка()-1 Цикл
       Массив.push(Сп.ПолучитьЗначение(к+1));
       Попытка
           Значение=Сп.ПолучитьЗначение(к+1).Value;
       Исключение
       КонецПопытки;
       Если Значение="Истина" Тогда
           Скрипт.Eval("Массив["+к+"].Value=true");
       ИначеЕсли Значение="Ложь" Тогда
           Скрипт.Eval("Массив["+к+"].Value=false");
       КонецЕсли;
   КонецЦикла;
   Если ПустоеЗначение(СкриптЗн)=0 Тогда
       Стр="";
       Сп.ПолучитьЗначение(1,Стр);
       Если ПустоеЗначение(Стр)=1 Тогда
           Стр="Массив";
       КонецЕсли;
       СкриптЗн.AddObject(Стр,Массив);
   КонецЕсли;
   Возврат Массив;
КонецФункции



//*******************************************
Процедура Сформировать()
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   СпСлов=СоздатьОбъект("СписокЗначений");
   СпСлов.ДобавитьЗначение("праверка");
   СпСлов.ДобавитьЗначение("орфографии");
   СпСлов.ДобавитьЗначение("праходит");
   СпСлов.ДобавитьЗначение("здезь");
   СпСлов.ДобавитьЗначение("алигофрены");
   СпСлов.ДобавитьЗначение("олигофрены");
   СервисМанагер=Скрипт.eval("СервисМанагер=new ActiveXObject('com.sun.star.ServiceManager')");
   СтрПарам="Парам=СервисМанагер.Bridge_GetStruct('com.sun.star.beans.PropertyValue')";
   МассивСлов=СоздатьМассив(СпСлов);
   ПроверкаОрфографии=СервисМанагер.createInstance("com.sun.star.linguistic2.SpellChecker");
   Скрипт.AddObject("ПроверкаОрфографии",ПроверкаОрфографии);
   Сп=СоздатьОбъект("СписокЗначений");
   Сп.ДобавитьЗначение(Скрипт.eval(СтрПарам),"ПустойМассив");
   ПустойМассив=СоздатьМассив(Сп,Скрипт);
   Локал=Скрипт.eval("Локал=СервисМанагер.Bridge_GetStruct('com.sun.star.lang.Locale')");
   Локал.Language = "ru";
   Локал.Country = "RU";
   Для к=0 По СпСлов.РазмерСписка()-1 Цикл
       Если ПроверкаОрфографии.isValid(СпСлов.ПолучитьЗначение(к+1),Локал,ПустойМассив)=0 Тогда
           Альтернативы=Скрипт.Eval("new VBArray(ПроверкаОрфографии.spell('"+СпСлов.ПолучитьЗначение(к+1)+"',Локал,ПустойМассив).getAlternatives())");
           Для н=Альтернативы.lbound(1) По Альтернативы.ubound(1) Цикл
               Сообщить(Альтернативы.getItem(н));
           КонецЦикла;
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры
29 Fragster
 
гуру
11.11.08
12:06
(28) отжиг! в мемориз!
30 wms
 
11.11.08
12:57
(26) "(код не полон, но рабочий) " код для 7.7
а тема, товарищь для 8-ки (!!!)
 а перевести не так просто
например
вместо
   СпПарам=СоздатьОбъект("СписокЗначений");
   СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам));
для 8-ки
   СпПарам=Новый СписокЗначений;
   СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам)); - не прокатывает. типы не те
(28) а для 8-ки слабо?
31 wms
 
11.11.08
12:58
в (30)
конечно же
не
СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам)); - не прокатывает. типы не те
а
СпПарам.Добавить(Скрипт.eval(СтрПарам)); - не прокатывает. типы не те
32 wms
 
11.11.08
13:01
(26) "И еще спроси у своих спецов где они накопали (0) "
этот код для 1С 8-ки и он работает.
туда надо добавить несколько строк для печати листа(диапазона)
и все, а не копипастить страницы не рабочего текста
33 smaharbA
 
11.11.08
14:14
(32) ты с кем споришь ? ты подумал ?
а код в восьмерке будет гораздо просче чем (26)
и еще раз спроси у кого брал (0) где он его взял, и где взял тот у кого он взял...
34 smaharbA
 
11.11.08
14:16
все пипец... больше ниче делать по ооо не стану...
а то видите ли код у них рабочий... Я ТОГДА БЫЛ ПЬЯНЫЙ !
35 wms
 
11.11.08
14:28
вот полностью рабочий код,
изменил только название процедуры, вставил параметры  и Document.print(Массив);
- не печатает.

Процедура ПечатьЛистаФайлаOpenOffice(ИмяЛиста, ИмяФайла)
  Попытка
      OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager");
  Исключение
      Сообщить(ОписаниеОшибки() + "; Программа OpenOffice не установлена на данном компьютере!");
      Возврат ;
  КонецПопытки;
  scr= Новый COMОбъект("MSScriptControl.ScriptControl");
  scr.language="javascript";
  scr.eval("Массив=new Array()");
  Массив=scr.eval("Массив");
  scr.AddObject("OpenOffice",OpenOffice);
  scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("Массив[0].Name='Hidden'");
  scr.eval("Массив[0].Value=true");
 
  //добавил параметры для печати
  scr.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("Массив[1].Name='CopyCount'");
  scr.eval("Массив[1].Value=1");
 
 
  DeskTop            = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
  ПутьКФайлуURL    = "file:///" + СтрЗаменить(ИмяФайла, "\", "/");
  Document        = DeskTop.LoadComponentFromURL(ПутьКФайлуURL, "_blank", 0, Массив);
  Document.lockControllers();
  Document.addActionLock();
  Листы    = Document.getSheets();
  Лист    = Листы.getByName(ИмяЛиста);
 
  НульЯчейка    = Лист.GetCellbyPosition(0,0);
  НульКурсор    = Лист.createCursorByRange(НульЯчейка);
  НульКурсор.GotoEndOfUsedArea(1);
  НульАдрес    = НульКурсор.RangeAddress;
  ПослСтрока   = НульАдрес.EndRow;
  ПослКолонка = НульАдрес.EndColumn -1;
 
  //Печать
  Document.print(Массив);


   // Закрываем файл  
  Document.unLockControllers();
  Document.removeActionLock();
  Document.Close(-1);
  Возврат;
КонецПроцедуры
36 wms
 
11.11.08
14:33
т.е. в этот код добавил только

scr.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("Массив[1].Name='CopyCount'");
  scr.eval("Массив[1].Value=1");

Document.print(Массив);

не печетает. Что я не так делаю?
37 smaharbA
 
11.11.08
14:35
Первое - требую признания моя как "Есмь начало!"
38 wms
 
11.11.08
14:38
(37) да будет тебе признание.
если проблему решишь
39 smaharbA
 
11.11.08
14:56
(38) мене уже и так есть признание, требую твоего смиренния...
ладно

Второе - выкинь скрипт
используй

Массив = Новый COMSafeArray("VT_VARIANT", Х);


восьмерку знаю только по картинкам )))

третье - твой код (но выкинь скрипт и используй пункт "Второе"

Процедура ПечатьЛистаФайлаOpenOffice(ИмяЛиста, ИмяФайла)
  Попытка
      OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager");
  Исключение
      Сообщить(ОписаниеОшибки() + "; Программа OpenOffice не установлена на данном компьютере!");
      Возврат ;
  КонецПопытки;
  scr= Новый COMОбъект("MSScriptControl.ScriptControl");
  scr.language="javascript";
  scr.eval("Массив=new Array()");
  Массив=scr.eval("Массив");
  scr.AddObject("OpenOffice",OpenOffice);
  scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("Массив[0].Name='Hidden'");
  scr.eval("Массив[0].Value=true");
 
 
  DeskTop            = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
  ПутьКФайлуURL    = "file:///" + СтрЗаменить(ИмяФайла, "\", "/");

  Document        = DeskTop.LoadComponentFromURL(ПутьКФайлуURL, "_blank", 0, Массив);
  Document.lockControllers();
  Document.addActionLock();
  Листы    = Document.getSheets();
  Лист    = Листы.getByName(ИмяЛиста);
 
  НульЯчейка    = Лист.GetCellbyPosition(0,0);
  НульКурсор    = Лист.createCursorByRange(НульЯчейка);
  НульКурсор.GotoEndOfUsedArea(1);
  НульАдрес    = НульКурсор.RangeAddress;
  ПослСтрока   = НульАдрес.EndRow;
  ПослКолонка = НульАдрес.EndColumn -1;
 

ОбластьСтр="Область=СервисМанагер.Bridge_GetStruct('com.sun.star.table.CellRangeAddress')";
scr.eval("Область=new Array()");
  ОбластьПечати=scr.eval("ОбластьПечати");
  scr.eval("ОбластьПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("ОбластьПечати[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("ОбластьПечати[0].StartColumn=0");
  scr.eval("ОбластьПечати[0].StartRow=0");
  scr.eval("ОбластьПечати[1].EndColumn="+ПослКолонка);
  scr.eval("ОбластьПечати[1].EndRow="+ПослСтрока);
  Лист.SetPrintAreas(ОбластьПечати);
  //добавил параметры для печати

  scr.eval("ПараметрыПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("ПараметрыПечати[0].Name='CopyCount'");
  scr.eval("ПараметрыПечати[0].Value=1");
 

  //Печать

  Document.print(ПараметрыПечати);


   // Закрываем файл  
   Document.unLockControllers();
  Document.removeActionLock();
  Document.Close(-1);
  Возврат;
КонецПроцедуры
40 smaharbA
 
11.11.08
14:58

Процедура ПечатьЛистаФайлаOpenOffice(ИмяЛиста, ИмяФайла)
  Попытка
      OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager");
  Исключение
      Сообщить(ОписаниеОшибки() + "; Программа OpenOffice не установлена на данном компьютере!");
      Возврат ;
  КонецПопытки;
  scr= Новый COMОбъект("MSScriptControl.ScriptControl");
  scr.language="javascript";
  scr.eval("Массив=new Array()");
  Массив=scr.eval("Массив");
  scr.AddObject("OpenOffice",OpenOffice);
  scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("Массив[0].Name='Hidden'");
  scr.eval("Массив[0].Value=true");
 
 
  DeskTop            = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
  ПутьКФайлуURL    = "file:///" + СтрЗаменить(ИмяФайла, "\", "/");

  Document        = DeskTop.LoadComponentFromURL(ПутьКФайлуURL, "_blank", 0, Массив);
  Document.lockControllers();
  Document.addActionLock();
  Листы    = Document.getSheets();
  Лист    = Листы.getByName(ИмяЛиста);
 
  НульЯчейка    = Лист.GetCellbyPosition(0,0);
  НульКурсор    = Лист.createCursorByRange(НульЯчейка);
  НульКурсор.GotoEndOfUsedArea(1);
  НульАдрес    = НульКурсор.RangeAddress;
  ПослСтрока   = НульАдрес.EndRow;
  ПослКолонка = НульАдрес.EndColumn -1;
 

scr.eval("ОбластьПечати=new Array()");
  scr.eval("ОбластьПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("ОбластьПечати[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("ОбластьПечати[0].StartColumn=0");
  scr.eval("ОбластьПечати[0].StartRow=0");
  scr.eval("ОбластьПечати[1].EndColumn="+ПослКолонка);
  scr.eval("ОбластьПечати[1].EndRow="+ПослСтрока);
  ОбластьПечати=scr.eval("ОбластьПечати");
  Лист.SetPrintAreas(ОбластьПечати);
  //добавил параметры для печати

  scr.eval("ПараметрыПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("ПараметрыПечати[0].Name='CopyCount'");
  scr.eval("ПараметрыПечати[0].Value=1");
  ПараметрыПечати=scr.eval("ПараметрыПечати");
 

  //Печать

  Document.print(ПараметрыПечати);


   // Закрываем файл  
   Document.unLockControllers();
  Document.removeActionLock();
  Document.Close(-1);
  Возврат;
КонецПроцедуры
41 smaharbA
 
11.11.08
14:59
Пля, ошибсо... мене позволительно !

  scr.eval("ОбластьПечати=new Array()");
  scr.eval("ОбластьПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
  scr.eval("ОбластьПечати[0].StartColumn=0");
  scr.eval("ОбластьПечати[0].StartRow=0");
  scr.eval("ОбластьПечати[0].EndColumn="+ПослКолонка);
  scr.eval("ОбластьПечати[0].EndRow="+ПослСтрока);
42 wms
 
11.11.08
15:13
(41) Ошибка при вызове метода контекста (Eval): Произошла исключительная ситуация (Ошибка выполнения Microsoft JScript): Объект не поддерживает это свойство или метод
  scr.eval("ОбластьПечати[0].StartColumn=0");
по причине:
Произошла исключительная ситуация (Ошибка выполнения Microsoft JScript): Объект не поддерживает это свойство или метод
43 smaharbA
 
11.11.08
15:27
Короче, разбирайся сам, а то ошибок наделаю, потом будешь тыкать - "типоТупой"...

Потратил на тебя свое дорогое время блин, забирай и восхваляй мой моск...
(но пункт "Второе" почитай на сон грядущий и многа думай)


Процедура Сформировать()
   Перем Имя,Путь;
   Если ФС.ВыбратьФайл(0,Имя,Путь,"Открыть...","Ексель (*.xls)|*.xls|Ворд (*.doc)|*.doc","XLS")=0 Тогда
       Возврат;
   КонецЕсли;
   Попытка
       OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager");
   Исключение
       Сообщить(ОписаниеОшибки() + "; Программа OpenOffice не установлена на данном компьютере!");
       Возврат ;
   КонецПопытки;
   scr= Новый COMОбъект("MSScriptControl.ScriptControl");
   scr.language="javascript";
   УРЛ="file:///"+scr.Eval("encodeURI('"+СтрЗаменить(Путь+Имя,"\","/")+"')");
   scr.eval("Массив=new Array()");
   Массив=scr.eval("Массив");
   scr.AddObject("OpenOffice",OpenOffice);
   scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   scr.eval("Массив[0].Name='Hidden'");
   scr.eval("Массив[0].Value=false");
   
   
   DeskTop            = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
   
   Document        = DeskTop.LoadComponentFromURL(УРЛ, "_blank", 0, Массив);
   Document.lockControllers();
   Document.addActionLock();
   Листы    = Document.getSheets();
   Лист    = Листы.getByIndex(0);
   
   НульЯчейка    = Лист.GetCellbyPosition(0,0);
   НульКурсор    = Лист.createCursorByRange(НульЯчейка);
   НульКурсор.GotoEndOfUsedArea(1);
   НульАдрес    = НульКурсор.RangeAddress;
   ПослСтрока   = НульАдрес.EndRow;
   ПослКолонка = НульАдрес.EndColumn -1;
   
   
   scr.eval("ОбластьПечати=new Array()");
   scr.eval("ОбластьПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.table.CellRangeAddress')");
   scr.eval("ОбластьПечати[0].StartColumn=0");
   scr.eval("ОбластьПечати[0].StartRow=0");
   scr.eval("ОбластьПечати[0].EndColumn="+ПослКолонка);
   scr.eval("ОбластьПечати[0].EndRow="+ПослСтрока);
   ОбластьПечати=scr.eval("ОбластьПечати");
   Лист.SetPrintAreas(ОбластьПечати);
   //добавил параметры для печати  
   
   scr.eval("ПараметрыПечати=new Array()");
   scr.eval("ПараметрыПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   scr.eval("ПараметрыПечати[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   scr.eval("ПараметрыПечати[0].Name='CopyCount'");
   scr.eval("ПараметрыПечати[0].Value=1");
   scr.eval("ПараметрыПечати[1].Name='Wait'");
   scr.eval("ПараметрыПечати[1].Value=true");
   ПараметрыПечати=scr.eval("ПараметрыПечати");
   
   //Печать  
   
   Document.print(ПараметрыПечати);
   
   
   // Закрываем файл    
   Document.unLockControllers();
   Document.removeActionLock();
   Document.Close(-1);
   Возврат;
КонецПроцедуры    // Сформировать
44 smaharbA
 
11.11.08
15:28
Все. Работай
45 smaharbA
 
11.11.08
15:28
Все. Работай и наслаждайся щасьем.
46 wms
 
11.11.08
16:46
(45) спасибо за код, но...
наслаждаться не получается.
Не печатает.
Но, решение проблемы уже совсем близко.
Нет уже времни дальше копать.
Короче. У меня в файле экселя два листа.
Активным при открытии установлен второй лист.
Мы в (43) пробуем печатать первый лист. Не печатает.
Но, если я в отладчике перед
  Document.print(ПараметрыПечати);
в открытом файле делаю активным первый лист , то после
  Document.print(ПараметрыПечати);
печатает, правда только несколько колонок, но с настройками поиграться думаю будет все печатать.

Короче надо как то программно активным необходимый лист делать перед
  Document.print(ПараметрыПечати);
47 smaharbA
 
11.11.08
17:13
(46) работает, и в коде (43) что надо то и активизировать можно, и активизировано
(есть но, ненадо скрытым офис запускать для некоторых принтеров, и правильно еще, в параметрах печати указывать еще и принтер)
48 smaharbA
 
11.11.08
18:19
(46) Еще раз ты ведешь беседу с Самим Создателем, и еще осмеливаешься перечить ?!
...
Дальше думай сам, или пусть жуют тебе спецы давшие код в (0) )))

Процедура Сформировать()
   Перем Имя,Путь;
   Если ФС.ВыбратьФайл(0,Имя,Путь,"Открыть...","Ексель (*.xls)|*.xls|Ворд (*.doc)|*.doc","XLS")=0 Тогда
       Возврат;
   КонецЕсли;
   Попытка
       OpenOffice = СоздатьОбъект("com.sun.star.ServiceManager");
   Исключение
       Сообщить(ОписаниеОшибки() + "; Программа OpenOffice не установлена на данном компьютере!");
       Возврат ;
   КонецПопытки;
   scr= СоздатьОбъект("MSScriptControl.ScriptControl");
   scr.language="javascript";
   УРЛ="file:///"+scr.Eval("encodeURI('"+СтрЗаменить(Путь+Имя,"\","/")+"')");
   scr.eval("Массив=new Array()");
   Массив=scr.eval("Массив");
   scr.AddObject("OpenOffice",OpenOffice);
   scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   scr.eval("Массив[0].Name='Hidden'");
   scr.eval("Массив[0].Value=false");
   
   
   DeskTop            = OpenOffice.CreateInstance("com.sun.star.frame.Desktop");
   
   Document        = DeskTop.LoadComponentFromURL(УРЛ, "_blank", 0, Массив);
//    Document.lockControllers();
//С ЛОКАМИ И УНЛОКАМИ АККУРАТНЕЕ, В ИЗНАЧАЛНОМ КОДЕ ОНИ БЫЛИ ДЛЯ ОТКЛЮЧЕНИЯ ВЫВОДА НА ЭКРАН
//НЕНАДО ТУПО КОПИРОВАТЬ КОД, А СПРАШИВАТЬ У МЕНЯ
//    Document.addActionLock();
   Листы    = Document.getSheets();
   Лист    = Листы.getByIndex(0);
   
   НульЯчейка    = Лист.GetCellbyPosition(0,0);
   НульКурсор    = Лист.createCursorByRange(НульЯчейка);
   НульКурсор.GotoEndOfUsedArea(1);
   НульАдрес    = НульКурсор.RangeAddress;
   ПослСтрока   = НульАдрес.EndRow;
   ПослКолонка = НульАдрес.EndColumn -1;
//    Document.unLockControllers();
//    Document.removeActionLock();
   
   
   scr.eval("ОбластьПечати=new Array()");
   scr.eval("ОбластьПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.table.CellRangeAddress')");
   scr.eval("ОбластьПечати[0].Sheet=0");
   scr.eval("ОбластьПечати[0].StartColumn=0");
   scr.eval("ОбластьПечати[0].StartRow=0");
   scr.eval("ОбластьПечати[0].EndColumn="+ПослКолонка);
   scr.eval("ОбластьПечати[0].EndRow="+ПослСтрока);
   ОбластьПечати=scr.eval("ОбластьПечати");
   Лист.SetPrintAreas(ОбластьПечати);
   //добавил параметры для печати  
   scr.eval("ПараметрыПринтера=new Array()");
   scr.eval("ПараметрыПринтера[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   scr.eval("ПараметрыПринтера[0].Name='Name'");
   scr.eval("ПараметрыПринтера[0].Value='HP LaserJet 1200 Series PCL'");
   ПараметрыПринтера=scr.eval("ПараметрыПринтера");
   
   scr.eval("ПараметрыПечати=new Array()");
   scr.eval("ПараметрыПечати[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   scr.eval("ПараметрыПечати[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
   scr.eval("ПараметрыПечати[0].Name='CopyCount'");
   scr.eval("ПараметрыПечати[0].Value=1");
   scr.eval("ПараметрыПечати[1].Name='Wait'");
   scr.eval("ПараметрыПечати[1].Value=true");
   ПараметрыПечати=scr.eval("ПараметрыПечати");
   
   //Печать  
   Document.setPrinter(ПараметрыПринтера);
   //ЕСЛИ НЕ СДЕЛАТЬ ПРЕДЫДУЩЕЕ, ТО ПЕЧАТЬ НА МОЛЧАЩИЙ ПРИНТЕР
   Document.print(ПараметрыПечати);
   
   
   // Закрываем файл    
   Document.Close(-1);
   Возврат;
КонецПроцедуры    // Сформировать
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший