Причина создания этой публикации в отсутствии в типовом модуле БСП "УправлениеПечатьюOOWriterКлиент" вывода строк объединением в таблицу.
Вот пример, типового кода вывода табличной части:
Область = УправлениеПечатьюКлиент.ОбластьМакета(Макет, Секции[ИмяМакета].СтрокаТаблица1);
УправлениеПечатьюКлиент.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.МассивТабличнаяЧасть1, Ложь);
Результат будет содержать отдельные строки, каждая из которых считается таблицей. Включить расчет формул или поменять ширину столбцов всей таблицы не получится.
Пример печатной формы Коммерческого предложения из ERP:
В предлагаемой обработке содержатся процедуры расширяющие возможности модуля формирования печатных форм OpenOffice Writer.
Процедур всего две:
1) Процедура ПрисоединитьКПредыдущейТаблице присоединяет выведенную при помощи УправлениеПечатьюКлиент.ПрисоединитьОбласть строку к предыдущей строке.
Процедура УправлениеПечатьюOOWriterКлиент_ПрисоединитьКПредыдущейТаблице(Знач ПечатнаяФормаHandler, Знач ОбластьHandler) Экспорт
oFrame = ПечатнаяФормаHandler.Document.getCurrentController().Frame;
dispatcher = ПечатнаяФормаHandler.ServiceManager.CreateInstance ("com.sun.star.frame.DispatchHelper");
oViewCursor = ПечатнаяФормаHandler.Document.getCurrentController().getViewCursor();
dispatcher.executeDispatch(oFrame, ".uno:GoUp", "", 0, ПолучитьComSafeArray()); //позиционирование на предыдущей строке
dispatcher.executeDispatch(oFrame, ".uno:MergeTable", "", 0, ПолучитьComSafeArray()); //присоединение таблицы
КонецПроцедуры
Результат:
2) Процедура ОбъединитьКолонкиТаблицы объединяет перечисленные в массиве НомераКолонок колонки.
При вызове метода EntireColumn (выделить колонку) процессор OpenOffice Writer выделяет всю колонку таблицы. Поэтому для объединения нескольких диапазонов в единую таблицу нужно сначала объединять диапазоны присоединенных строк, а потом таблицы с набором строк присоединять к общей таблице. Пример реализован в прилагаемой обработке.
Процедура УправлениеПечатьюOOWriterКлиент_ОбъединитьКолонкиТаблицы(Знач ПечатнаяФормаHandler, Знач ОбластьHandler, НомераКолонок) Экспорт
МаксимальныйНомерКолонки = 0;
Для Каждого м Из НомераКолонок Цикл
МаксимальныйНомерКолонки = Макс(м, МаксимальныйНомерКолонки);
КонецЦикла;
oFrame = ПечатнаяФормаHandler.Document.getCurrentController().Frame;
dispatcher = ПечатнаяФормаHandler.ServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper");
oViewCursor = ПечатнаяФормаHandler.Document.getCurrentController().getViewCursor();
dispatcher.executeDispatch(oFrame, ".uno:GoUp", "", 0, ПолучитьComSafeArray()); //позиционирование на предыдущей строке
Для НомерКолонки = 0 По МаксимальныйНомерКолонки Цикл
ВыполнитьОбъединение = Ложь;
Для Каждого НомерКолонкиОбъединить Из НомераКолонок Цикл
Если НомерКолонки = НомерКолонкиОбъединить Тогда
ВыполнитьОбъединение = Истина;
КонецЕсли;
КонецЦикла;
Если ВыполнитьОбъединение Тогда
dispatcher.executeDispatch(oFrame, ".uno:EntireColumn", "", 0, ПолучитьComSafeArray()); //выделяются ячейки всей колонки (всех присоединенных на данный момент строк)
dispatcher.executeDispatch(oFrame, ".uno:MergeCells", "", 0, ПолучитьComSafeArray()); //объединение ячеек
КонецЕсли;
dispatcher.executeDispatch(oFrame, ".uno:JumpToNextCell", "", 0, ПолучитьComSafeArray()); //переход к следующей ячейке
КонецЦикла;
Для НомерКолонки = 0 По МаксимальныйНомерКолонки Цикл
dispatcher.executeDispatch(oFrame, ".uno:JumpToPreviousCell", "", 0, ПолучитьComSafeArray()); //возврат к предыдущей ячейке
КонецЦикла;
КонецПроцедуры
Результат:
Демонстрационная обработка не связана объектами конкретной конфигурации и должна запускаться в любой конфигурации с БСП.
Обработку можно адаптировать под внешнюю печатную форму какого либо документа.
Если в обработке указать путь к временному файлу, то печатная форма будет записана по указанному адресу.
Если в расширении временного файла указать "doc", документ будет конвертирован в формат "MS Word 97".
При использовании OpenOffice 4.3.1 наблюдается баг: виден процесс заполнения документа и шаблон остается открытым — лучше использовать последние версии Офиса.
Спасибо за обработку, очень помогла! А не подскажете как картинки вставлять?