laker87

Барс-Бюджет Бухгалтерия и LibreOffice

1 сообщение в этой теме

Столкнулся с проблемой открытия документов в libreoffice сформированными в ИС Барс-Бюджет бухгалтерия.  В отличие от MS Excel, где документы замечательно открываются, в libreoffice все отображается коряво, масштаб надо подгонять, а также некоторые документы переполнены какими-то графическими объектами (как вам: Многоугольник с 13 углами! сатанисты чертовы...). Я разработал макрос на некоторые типы документов, который приводит их  в надлежащий вид.

Макрос можно установить как расширение (в прикрепленном файле, предварительно разархивировать.), или добавить вручную.

Также необходимо чтобы макрос при открытии документа проверял, надо ли его редактировать. Для этого откроем "Сервис-настройка", переходим на вкладку "События", внизу окошка выбираем "Сохранить в:" - Libreoffice. Затем щелкаем два раза по строчке события "Открытие файла" и выбираем библиотеку и макрос. (Если устанавливали из расширения, библиотека будет называться BarsOpenOffice-Module1, а имя макроса Main).

Пока поддерживается 6 документов:

1. Требование-накладная

2. Кассовая книга

3. Приходный кассовый ордер

4. Расходный кассовый ордер

5. Акт об оказании услуг

6. Счет фактура

Список будет расширяться по мере необходимости.

Вот сам макрос: 

 


REM  *****  BASIC  *****

Sub Main
	Dim DocTitle as String
	
	DocTitle = ThisComponent.title
	if InStr(DocTitle, "PF_PKO") <> 0 Then ' если документ содержит в заголовке PF_PKO
		PF_PKO() 
	ElseIf InStr(DocTitle, "dcash_book") <> 0 Then ' иначе если документ содержит в заголовке dcash_book
		dcash_book()
	ElseIf InStr(DocTitle, "PF_RKO") <> 0 Then ' иначе если документ содержит в заголовке PF_RKO
		PF_RKO()
	ElseIf InStr(DocTitle, "315006") <> 0 Then ' иначе если документ содержит в заголовке 315006
		P_315006()
	ElseIf InStr(DocTitle, "act_out") <> 0 Then ' иначе если документ содержит в заголовке 315006
		act_out()
	ElseIf InStr(DocTitle, "outcoming_invoice") <> 0 Then ' иначе если документ содержит в заголовке 315006
		outcoming_invoice()	
	End IF
End Sub

Sub outcoming_invoice
Dim Sheet As Object

Sheet = ThisComponent.Sheets(0)
Sheet.Rows.OptimalHeight = True
End Sub

Sub act_out
	Dim Doc As Object
	Dim Sheet As Object
	Dim oDP As Object
	
	Doc = ThisComponent	' получаем документ
	Sheet = Doc.Sheets(0)	' получаем первый лист
	oDP = Sheet.getDrawPage()	' получаем список графических объектов
	For i=0 To oDP.getCount()-1	' цикл по списку графических объектов
		oDP.remove(oDP(0))	' удаляем графический объект
	Next
	Sheet.Rows.OptimalHeight = True
End Sub

Sub P_315006
	Dim Doc As Object
	Dim Sheet As Object
	Dim StyleFamilies As Object
	Dim PageStyles As Object
	Dim DefPage As Object

	Doc = ThisComponent	' получаем документ
	Sheet = Doc.Sheets(0)	' получаем первый лист
	StyleFamilies = Doc.StyleFamilies	' получаем семейство стилей
	PageStyles = StyleFamilies.getByName("PageStyles")	' выбираем стили страниц
	DefPage = PageStyles.getByName("PageStyle_" + Sheet.name)	' выбираем стиль текущей страницы
	DefPage.IsLandscape = False	' книжная ориентация
	DefPage.PageScale = 60	' масштаб 60%
	DefPage.Width = 21000	' Размеры для формата A4
	DefPage.Height = 29700	' Размеры для формата A4
End Sub

Sub PF_RKO
	Dim Doc As Object
	Dim Sheet As Object
	Dim oDP As Object
	Dim StyleFamilies As Object
	Dim PageStyles As Object
	Dim DefPage As Object
	
	Doc = ThisComponent	' получаем документ
	Sheet = Doc.Sheets(0)	' получаем первый лист
	oDP = Sheet.getDrawPage()	' получаем список графических объектов
	For i=0 To oDP.getCount()-1	' цикл по списку графических объектов
		oDP.remove(oDP(0))	' удаляем графический объект
	Next
	
	Sheet.CharFontName = "Times New Roman"	' меняем во всем листе шрифт
	
	StyleFamilies = Doc.StyleFamilies	' получаем семейство стилей
	PageStyles = StyleFamilies.getByName("PageStyles")	' выбираем стили страниц
	DefPage = PageStyles.getByName("PageStyle_" + Sheet.name)	' выбираем стиль текущей страницы
	DefPage.PageScale = 90	' масштаб 90%
End Sub

Sub dcash_book
	Dim Doc As Object
	Dim Sheet As Object
	Dim Cell As Object
	Dim oDP As Object	
	Dim StyleFamilies As Object
	Dim PageStyles As Object
	Dim DefPage As Object
	
	Doc = ThisComponent	' получаем документ
	StyleFamilies = Doc.StyleFamilies	' получаем семейство стилей
	PageStyles = StyleFamilies.getByName("PageStyles")	' выбираем стили страниц
	For i=0 To 1	' Цикл по листам
		Sheet = Doc.Sheets(i)	' получаем лист
		For j=0 To 60	' цикл по столбцу D
			Cell = Sheet.getCellByPosition(3, j) ' Получаем ячейку Dj
			if (InStr(Cell.String, Chr(10)) < 3) and (InStr(Cell.String, Chr(10)) > 0) Then ' если текст в ячейке начинается с символа переноса строки
				Cell.String = Mid(Cell.String, 2, 255)	' удаляем 2 символа в начале
			End If
		Next
		oDP = Sheet.getDrawPage()	' получаем список графических объектов
		For n=0 To oDP.getCount()-1	' цикл по списку графических объектов
			oDP.remove(oDP(0))	' удаляем графический объект
		Next
		DefPage = PageStyles.getByName("PageStyle_" + Sheet.name)	' выбираем стиль текущей страницы
		DefPage.LeftMargin = 700	' устанавливаем левое поле 0.7 см
	Next
End Sub

Sub PF_PKO
	Dim Doc As Object
	Dim Sheet As Object
	Dim oDP As Object
	Dim StyleFamilies As Object
	Dim PageStyles As Object
	Dim DefPage As Object
	
	Doc = ThisComponent	' получаем документ
	Sheet = Doc.Sheets(0)	' получаем первый лист
	oDP = Sheet.getDrawPage()	' получаем список графических объектов
	For i=0 To oDP.getCount()-1	' цикл по списку графических объектов
		oDP.remove(oDP(0))	' удаляем графический объект
	Next
	
	Sheet.CharFontName = "Times New Roman"		' меняем во всем листе шрифт
	
	StyleFamilies = Doc.StyleFamilies	' получаем семейство стилей
	PageStyles = StyleFamilies.getByName("PageStyles")	' выбираем стили страниц
	DefPage = PageStyles.getByName("PageStyle_" + Sheet.name)	' выбираем стиль текущей страницы
	DefPage.PageScale = 75	' масштаб 75%
End Sub

BarsOpenOffice.oxt.zip

Изменено пользователем laker87

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас