INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Бачаева Юлия | Руководитель проектов | ГК «Софт-сервис»

«Как не потерять контроль над управлением проектом»

Изменение первоначальных условий договоренностей в процессе проекта, как основные факторы риска. Удовлетворение потребностей заказчика в рамках проекта и избежание переработки участников проекта. Эффективность проектной документации, как средство коммуникации между участниками проекта. Убеждение заказчика в рациональности предложенного решения задач автоматизации. Распределение ресурсов проекта на этапе проектирования и во время внедрения. Защита проекта: ожидания от функционала системы и реальный результат.

Печатная форма OpenOffice (ODT) с объединением строк в таблицу

Печать - Универсальные печатные формы

1
Внешняя печатная форма для демонстрации возможности: 1) объединения выводимых строк в единую таблицу (MergeTable). 2) объединения ячеек таблицы используя (MergeCells). В публикации приведен код, расширяющий возможности модуля БСП: УправлениеПечатьюOOWriterКлиент. Тестировалось на платформе 8.3.10, в конфигурациях: ERP 2.0, БП 3.0, БГУ 2.0 и офисных пакетах: LibreOffise 5.3.7, OpenOffice 4.3.1

Причина создания этой публикации в отсутствии в типовом модуле БСП "УправлениеПечатью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 наблюдается баг: виден процесс заполнения документа и шаблон остается открытым - лучше использовать последние версии Офиса.

1

Скачать файлы

Наименование Файл Версия Размер
Печатная форма OpenOffice (ODT) с объединением строк в таблицу:
.epf 36,56Kb
30.03.18
1
.epf 36,56Kb 1 Скачать

См. также

Сортировка: Древо
В этой теме еще нет сообщений.
Оставьте свое сообщение