Есть выгрузка табличного документа в Excel средствами OpenOffice:
Код
&НаСервере
Процедура УстановитьПараметрыСтраницы(ИмяВременногоФайла, ТабДокумент)

   Попытка
      ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
   Исключение
      Сообщить("Ошибка при связи с сервис менеджером (com.sun.star.ServiceManager)." +
                + Символы.ПС + ОписаниеОшибки());
      Возврат;
   КонецПопытки;

   Попытка
      Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop");
   Исключение
      Сообщить("Ошибка при запуске сервиса Desktop (com.sun.star.frame.Desktop).'" +
       + Символы.ПС + ОписаниеОшибки());
      Возврат;
   КонецПопытки;

   #Если ВебКлиент Тогда
      scr = Новый COMОбъект("MSScriptControl.ScriptControl");
      scr.language = "javascript";
      scr.eval("Massiv=new Array()");
      scr.AddObject("ServiceManager",ServiceManager);

      scr.eval("Massiv[0]=ServiceManager.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
      scr.eval("Massiv[0].Name='Hidden'");
      scr.eval("Massiv[0].Value=true");

      Парам = scr.eval("Massiv");
   #Иначе
      Парам = Новый COMSafeArray("VT_DISPATCH", 1);
   #КонецЕсли

   #Если Не ВебКлиент Тогда
       Парам.SetValue(0, СвойствоЗначение(ServiceManager, "Hidden", Истина));
   #КонецЕсли

   Document = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяВременногоФайла), "_blank", 0, Парам);

   #Если ВебКлиент Тогда
      Document.getCurrentController().getFrame().getContainerWindow().setVisible(Ложь);
   #КонецЕсли

   Document.lockControllers();
   Document.addActionLock();

   Sheets=Document.getSheets();
   Sheet=Sheets.getByIndex(0);

   СтилиСтраницы =Document.StyleFamilies.getByName("PageStyles");
   Для поз = 0 по СтилиСтраницы.count - 1 Цикл
      МойСтиль = СтилиСтраницы.getByIndex(поз);
      МойСтиль.ScaleToPagesX = 1;
      //МойСтиль.PageScale = 100;
   КонецЦикла;

   ПараметрыСтраницы=СтилиСтраницы.getByName(Sheet.PageStyle);

   //Установка полей
   ПараметрыСтраницы.LeftMargin   = ТабДокумент.ПолеСлева  * 100;
   ПараметрыСтраницы.RightMargin  = ТабДокумент.ПолеСправа * 100;
   ПараметрыСтраницы.TopMargin    = ТабДокумент.ПолеСверху * 100;
   ПараметрыСтраницы.BottomMargin = ТабДокумент.ПолеСнизу  * 100;

   //Установка ориентации
   Если ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт Тогда
      ПараметрыСтраницы.IsLandscape = Истина;
      ПараметрыСтраницы.Width  = 29700;
      ПараметрыСтраницы.Height = 21000;
   Иначе
      ПараметрыСтраницы.IsLandscape = Ложь;
      ПараметрыСтраницы.Width  = 21000;
      ПараметрыСтраницы.Height = 29700;
   КонецЕсли;

   //Установка масштаба печати
   //Если ТабДокумент.МасштабПечати <> Неопределено Тогда
   //   ПараметрыСтраницы.PageScale = ТабДокумент.МасштабПечати;
   //КонецЕсли;

   //Сохранение документа
   Document.unlockControllers();
   Document.removeActionLock();

   Попытка
      Document.Store();
   Исключение
      Сообщить(ОписаниеОшибки());
   КонецПопытки;

   Document.Close(Истина);

   //Отключаем COM - соединение
   Desktop.terminate();

КонецПроцедуры
Показать полностью

Каким образом можно при выгрузке заставить ексель не группировать строки, тоесть выполнить программно аналог команды в екселе (на скрине).

Нашел очень мало инфы по этой теме. В одной из статей есть пример обращения к группировкам. Как их применить в коде?
http://help1c.com/faq8/view/365.html
---
Как говорится, ищите и обрящите :)

Вот ловите новый вариант кода, надеюсь он сработает и на сервере:

```1c
    Args1 = Новый COMSafeArray("VT_DISPATCH", 1);
    Param=ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Param.Name = "RowOrCol";
    Param.Value = "R";
    Args1.SetValue(0,Param);
    frame = Document.getCurrentController().getFrame();
    oDisp = ServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper");
    noProps=Новый COMSafeArray("VT_DISPATCH", 1);
    oDisp.executeDispatch(frame, ".uno:SelectAll", ", 0, noProps);

    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
```
---
Попробовал отследить действия, происходящие в самом openOffice при разгруппировки строк. Записал макрос.
Код макроса такой:

```1c
    REM ***** BASIC *****
    sub Main
    rem ----------------------------------------------------------------------
    rem define variables
    dim document as object
    dim dispatcher as object
    rem ----------------------------------------------------------------------
    rem get access to the document
    document = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

    rem ----------------------------------------------------------------------
    dim args1(0) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "RowOrCol"
    args1(0).Value = "R"

    dispatcher.executeDispatch(document, ".uno:Ungroup", ", 0, args1())

    end sub
```

Тоесть разгруппировка устанавливается dispatcher.executeDispatch(document, ".uno:Ungroup", "", 0, args1()) так.

Каким образом это можно переложить в 1с из VB??
---
Я решила попробовать тебе помочь :)

Глядя на код макроса и использование функций OpenOffice в http://forumooo.ru/index.php?topic=2297.0,
я добавила к твоему такой код:

```1c
    scr = новый COMОбъект("MSScriptControl.ScriptControl");
    scr.Language = "javascript";
    scr.eval("Массив = new Array()");
    Массив=scr.eval("Массив");
    scr.AddObject("OpenOffice",ServiceManager);
    scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("Массив[0].Name='Hidden'");
    scr.eval("Массив[0].Value=true");

    scr.eval("args1=new Array()");
    args1=scr.eval("args1");
    scr.eval("args1[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("args1[0].Name='RowOrCol'");
    scr.eval("args1[0].Value='R'");
    frame = Document.getCurrentController().getFrame();
    oDisp = ServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper");
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
```

Разгруппировка работает, но вроде не каждый случай. Попробуй и отпишись что получится. Может еще что вместе придумаем )
---
ems_, вставил Ваш код после строк //Установка ориентации

Пробовал выгружать с одной записью как на скрине так и со множеством строк. Группировка также остается и в Excel и в редакторе OpenOffice/

В серверном варианте вообще ругается на COMОбъект("MSScriptControl.ScriptControl").
новый COMОбъект("MSScriptControl.ScriptControl") {(1)}: Ошибка при вызове конструктора (COMОбъект).

Вы пробовали запускать на файловой версии?
---
Manticor,

насчет серверного варианта описано тут:

http://1clancer.ru/article/osobennosti_raboty_s_com-obektami_na_64-bitnoj_platforme_1s_predpriyatie_8.2_847
и здесь:
http://kb.mista.ru/article.php?id=870
---
ems_, спасибо большое за помощь. В фаловом фарианте все работает)

К сожалению руководство запретило устанавливать на сервере компоненту MSScriptControl ссылаясь на безопасность и трудности при обновлени платформы((.

Как Вы думаете - можно ли заменить ее какой то другой по аналогии компонетой, которую не нужно устанавливать?
---
Manticor, а ваше руководство не смутило что вообще это MS компонента?
---
Да, на файловой версии, нет возможности проверить на серверной. Значит наверное надо поискать аналог ScriptControl
---
ems_, а при каких случаях у Вас разгруппировывало в документе?
---
Я тут поразмыслила и вот:

```1c
    scr = новый COMОбъект("MSScriptControl.ScriptControl");
    scr.Language = "javascript";
    scr.eval("Массив = new Array()");
    Массив=scr.eval("Массив");
    scr.AddObject("OpenOffice",ServiceManager);
    scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("Массив[0].Name='Hidden'");
    scr.eval("Массив[0].Value=true");

    scr.eval("args1=new Array()");
    args1=scr.eval("args1");
    scr.eval("args1[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')");
    scr.eval("args1[0].Name='RowOrCol'");
    scr.eval("args1[0].Value='R'");
    frame = Document.getCurrentController().getFrame();
    oDisp = ServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper");

    scr.eval("noProps=new Array()");
    noProps=scr.eval("noProps");
    oDisp.executeDispatch(frame, ".uno:SelectAll", ", 0, noProps);

    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
```

Если я добавляю выбор всей области, а также на всякий случай делаю 5 раз разгруппировку (у меня в документе была группировка 4х-уровневая). То все ок выходит, но опять же на файловой версии...
(делать цикл и проверять сколько на самом деле группировок я пока поленилась)
---
Я лично не нашла другого способа без MSScriptControl, может и есть конечно.
Но может Вас устроит способ, предложенный в комментариях из ссылки, которую я выше писала:

зарегить библиотеку C:\Program Files (x86)\1cv82\8.2.хх.ххх\bin\comcntr.dll. Где хх.ххх последний релиз платформы установленной на компе

Я так понимаю, командная строка, в ней regsvr32 "C:\Program Files (x86)\1cv82\8.2.хх.ххх\bin\comcntr.dll" и все будет как надо, но это в теории, мне проверить не на чем.
---
Как говорится, ищите и обрящите :)

Вот ловите новый вариант кода, надеюсь он сработает и на сервере:

```1c
    Args1 = Новый COMSafeArray("VT_DISPATCH", 1);
    Param=ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue");
    Param.Name = "RowOrCol";
    Param.Value = "R";
    Args1.SetValue(0,Param);
    frame = Document.getCurrentController().getFrame();
    oDisp = ServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper");
    noProps=Новый COMSafeArray("VT_DISPATCH", 1);
    oDisp.executeDispatch(frame, ".uno:SelectAll", ", 0, noProps);

    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
    oDisp.executeDispatch(frame,".uno:Ungroup", ", 0, args1);
```
---
ems_, спасибо. Вы не представляете на сколько мне здорово помогли).
Я уже настраивался на переделку более 8 отчетов :)