Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczony.

Gotowe szablony, skrypty, makropolecenia i rozszerzenia. Tutaj możesz pochwalić i podzielić się swoją twórczością z innymi użytkownikami
OOoUser46
Posty: 23
Rejestracja: sob maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczony.

Post autor: OOoUser46 »

Witam.
Stworzyłem w arkuszu kalkulacyjnym druk polecenia wpłaty (uproszczony).
Druk jest częściowo zautomatyzowany i zawiera generatory kodu kreskowego.
Dla przykładu druk jest wypełniony dla rat jednego z banków. Który daje tylko jeden druczek.
Ogólnie największe różnice dotyczą pola "tytułem" i zapewne trzeba będzie je samemu dostosować do własnych potrzeb.
W załączniku daje cztery pliki: rysunek druku w draw, szablon druku dla calc , czcionkę dla kodów kreskowych oraz obrazek z przykładowym wydrukiem.

Szablon dla calc zawiera trzy makra:
Makro code25i dla kodu kreskowego numeru konta:

Kod: Zaznacz cały

REM  *****  BASIC  *****
REM V1.4 01-08-2012
REM Barcode creator code25i by TN
REM Funkcja generuje kod przeplatany 2 z 5
REM 
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM 
REM code25i(znaki cyfr lub liczba; wymuszona stała długość, 0 = automatyczna długość, max=50)
REM 
REM ! UWAGA !
REM Do poprawnego działania wymagana jest odpowiednia czcionka barcode.ttf
REM http://user.services.openoffice.org/pl/forum/download/file.php?id=429
REM -----------------------------------------------------------------------------------

Function code25i(Optional data, Optional size as integer) As String
code25i=""
if IsMissing(data) or data="" then goto errend
if IsMissing(size) then size=0
if size > 50 then goto errend
DIM count As Integer		'licznik do pętli
DIM count2 As Integer		'licznik do pętli
DIM codebar As String
DIM datastr As String
DIM znak(12) As String
codebar=""
datastr=""
if data=0 and size=0 then goto errend	'przerywa gdy brak danyh
if size mod 2 <> 0 then goto errend	'przerywa gdy nieparzysta długość
znak(0) = "NNWWN"
znak(1) = "WNNNW"
znak(2) = "NWNNW"
znak(3) = "WWNNN"
znak(4) = "NNWNW"
znak(5) = "WNWNN"
znak(6) = "NWWNN"
znak(7) = "NNNWW"
znak(8) = "WNNWN"
znak(9) = "NWNWN"
znak(10) = "wNnNn"	'start
znak(11) = "WnNw"	'stop
datastr = CStr (data)		'zmienia liczbe na znaki
sizedata = Len (datastr)	'liczy ilość znaków
if sizedata=0 then goto errend
if sizedata > 50 then		'przycina zbyt długi ciąg
	count = sizedata - 49
	datastr = Mid(datastr,count)
end if
if size <> 0 then 			'dostosowuje długość ciągu
	if sizedata < size then	'gdy za krotki
		for count = 1 to size-sizedata
			datastr = "0" & datastr
		Next count
	end if
	if sizedata > size then	'gdy za długi
		datastr = Mid(datastr,sizedata-size+1)
	end if
end if
sizedata = Len (datastr)	'liczy ilość znaków
for count=1 to sizedata	'przerywa gdy nieobsługiwany znak
	if Asc(Mid(datastr,count,1)) < 48 then goto errend	'przerywa gdy nieobsługiwany znak
	if Asc(Mid(datastr,count,1)) > 57 then goto errend	'przerywa gdy nieobsługiwany znak
Next count
if sizedata mod 2 <> 0 then datastr = "0" & datastr	'dodaje zero wiodące gdy nieparzysta ilosc znakow
codebar = znak(10)	' START
for count=1 to sizedata step 2
	for count2=1 to 5
		codebar = codebar & Mid(znak(Mid(datastr,count,1)),count2,1)
		codebar = codebar & Mid(LCase(znak(Mid(datastr,count+1,1))),count2,1)
	Next count2
Next count
code25i = codebar & znak(11)	'STOP
errend:
End Function

Makro code128 dla kodu kreskowego numeru w polu tytułem:

Kod: Zaznacz cały

REM  *****  BASIC  *****
REM V1.2 01-08-2012
REM Barcode creator code128 by TN
REM Funkcja generuje kod code128 z zestawem znaków B i C.
REM Przełącznie pomiędzy zestawem B i C jest automatyczne
REM co czyni wygenerowany kod optymalnym i zwartym.
REM 
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM 
REM code128(znaki ASCII, cyfry, liczba ; staly wymuszony rozmiar 0=auto size, max=50)
REM 
REM ! UWAGA !
REM Do poprawnego działania wymagana jest odpowiednia czcionka barcode.ttf
REM http://user.services.openoffice.org/pl/forum/download/file.php?id=429
REM -----------------------------------------------------------------------------------
Private weight as integer
Function code128(Optional data, Optional size As Integer) As String
code128=""
if IsMissing(data) or data="" then goto errend
if IsMissing(size) then size=0
if size > 50 then size = 50	'definiuje długość gdy za durzo
DIM sizedata As Integer
DIM c As Integer
c=0
if data=0 and size=0 then goto errend	'przerywa gdy brak danyh
data = CStr(data)		'zmienia liczbe na znaki
sizedata = Len(data)	'liczy ilość znaków
if sizedata=0 then goto errend
if sizedata > 50 then		'przycina zbyt długi ciąg
	data = Mid(data,sizedata-49)
	sizedata = 50
end if
if size <> 0 then 			'dostosowuje długość ciągu
	if sizedata < size then	'gdy za krutki
		for c = 1 to size-sizedata
			data = "0" & data
		Next c
	end if
	if sizedata > size then	'gdy za długi
		data = Mid(data,sizedata-size+1)
	end if
end if
sizedata = Len (data)	'liczy ilość znaków
for c=1 to sizedata	'przerywa gdy nieobsługiwany znak
	if Asc(Mid(data,c,1)) < 32 then goto errend	'przerywa gdy nieobsługiwany znak
	if Asc(Mid(data,c,1)) > 126 then goto errend	'przerywa gdy nieobsługiwany znak
Next c

DIM digit as integer
DIM tryb as string
DIM a as integer
DIM checksum as long
DIM p_step as integer
p_step=0
c=1
if check4(data) > 3 then 
	code128 = "HBEAFCF"	'start C 
	tryb = "C"
	checksum = 105
else 
	code128 = "HBEAFAH"	'start B 
	tryb = "B"
	checksum = 104
End if
Do while c<sizedata+1
	digit = check4(mid(data,c))
	if digit > 3 then
		if digit mod 2 <> 0 then digit = digit - 1
		if tryb = "B" then
			code128 = code128 & "AECEDE"	'code C
			p_step=p_step+1	'nastepny znak
			checksum=checksum+(99*p_step)
			tryb = "C"
		End if
		a=c+digit
		Do while c<a
			code128 = code128 & znak_c128(mid(data,c,2))
			p_step=p_step+1	'nastepny znak
			checksum=checksum+(weight*p_step)
			c = c + 2
		Loop
	else
		if tryb = "C" then
			code128 = code128 & "AEDECE"	'code B
			p_step=p_step+1	'nastepny znak 
			checksum=checksum+(100*p_step)
			tryb = "B"
		End if
		code128 = code128 & znak_c128(asc(mid(data,c,1)))
		p_step=p_step+1	'nastepny znak
		checksum=checksum+(weight*p_step)
		c = c + 1
	End if
Loop
code128 = code128 & znak_c128((checksum mod 103)+32) & "BGCEAEBH"	'stop
errend:
End Function

Sub check4(d1 as string) as integer
	DIM d2 as integer
	DIM d3 as integer
	check4=0
	for d2=1 to Len(d1)
		d3 = asc(mid(d1,d2,1))
		if d3>47 and d3<58 then check4=check4+1
		if d3<48 or d3>57 then Exit For
	Next d2
End Sub

Sub znak_c128(z128) as string
Select Case z128
	case "00" , 32
	znak_c128 = "BEBFBF"
	weight = 0
	case "01" , 33
	znak_c128 = "BFBEBF"
	weight = 1
	case "02" , 34
	znak_c128 = "BFBFBE"
	weight = 2
	case "03" , 35
	znak_c128 = "AFAFBG"
	weight =  3
	case "04" , 36
	znak_c128 = "AFAGBF"
	weight = 4
	case "05" , 37
	znak_c128 = "AGAFBF"
	weight = 5
	case "06" , 38
	znak_c128 = "AFBFAG"
	weight = 6
	case "07" , 39
	znak_c128 = "AFBGAF"
	weight = 7
	case "08" , 40
	znak_c128 = "AGBFAF"
	weight = 8
	case "09" , 41
	znak_c128 = "BFAFAG"
	weight = 9
	case "10" , 42
	znak_c128 = "BFAGAF"
	weight = 10
	case "11" , 43
	znak_c128 = "BGAFAF"
	weight = 11
	case "12" , 44
	znak_c128 = "AEBFCF"
	weight = 12
	case "13" , 45
	znak_c128 = "AFBECF"
	weight = 13
	case "14" , 46
	znak_c128 = "AFBFCE"
	weight = 14
	case "15" , 47
	znak_c128 = "AECFBF"
	weight = 15
	case "16" , 48
	znak_c128 = "AFCEBF"
	weight = 16
	case "17" , 49
	znak_c128 = "AFCFBE"
	weight = 17
	case "18" , 50
	znak_c128 = "BFCFAE"
	weight = 18
	case "19" , 51
	znak_c128 = "BFAECF"
	weight = 19
	case "20" , 52
	znak_c128 = "BFAFCE"
	weight = 20
	case "21" , 53
	znak_c128 = "BECFAF"
	weight = 21
	case "22" , 54
	znak_c128 = "BFCEAF"
	weight = 22
	case "23" , 55
	znak_c128 = "CEBECE"
	weight = 23
	case "24" , 56
	znak_c128 = "CEAFBF"
	weight = 24
	case "25" , 57
	znak_c128 = "CFAEBF"
	weight = 25
	case "26" , 58
	znak_c128 = "CFAFBE"
	weight = 26
	case "27" , 59
	znak_c128 = "CEBFAF"
	weight = 27
	case "28" , 60
	znak_c128 = "CFBEAF"
	weight = 28
	case "29" , 61
	znak_c128 = "CFBFAE"
	weight = 29
	case "30" , 62
	znak_c128 = "BEBEBG"
	weight = 30
	case "31" , 63
	znak_c128 = "BEBGBE"
	weight = 31
	case "32" , 64
	znak_c128 = "BGBEBE"
	weight = 32
	case "33" , 65
	znak_c128 = "AEAGBG"
	weight = 33
	case "34" , 66
	znak_c128 = "AGAEBG"
	weight = 34
	case "35" , 67
	znak_c128 = "AGAGBE"
	weight = 35
	case "36" , 68
	znak_c128 = "AEBGAG"
	weight = 36
	case "37" , 69
	znak_c128 = "AGBEAG"
	weight = 37
	case "38" , 70
	znak_c128 = "AGBGAE"
	weight = 38
	case "39" , 71
	znak_c128 = "BEAGAG"
	weight = 39
	case "40" , 72
	znak_c128 = "BGAEAG"
	weight = 40
	case "41" , 73
	znak_c128 = "BGAGAE"
	weight = 41
	case "42" , 74
	znak_c128 = "AEBECG"
	weight = 42
	case "43" , 75
	znak_c128 = "AEBGCE"
	weight = 43
	case "44" , 76
	znak_c128 = "AGBECE"
	weight = 44
	case "45" , 77
	znak_c128 = "AECEBG"
	weight = 45
	case "46" , 78
	znak_c128 = "AECGBE"
	weight = 46
	case "47" , 79
	znak_c128 = "AGCEBE"
	weight = 47
	case "48" , 80
	znak_c128 = "CECEBE"
	weight = 48
	case "49" , 81
	znak_c128 = "BEAGCE"
	weight = 49
	case "50" , 82
	znak_c128 = "BGAECE"
	weight = 50
	case "51" , 83
	znak_c128 = "BECEAG"
	weight = 51
	case "52" , 84
	znak_c128 = "BECGAE"
	weight = 52
	case "53" , 85
	znak_c128 = "BECECE"
	weight = 53
	case "54" , 86
	znak_c128 = "CEAEBG"
	weight = 54
	case "55" , 87
	znak_c128 = "CEAGBE"
	weight = 55
	case "56" , 88
	znak_c128 = "CGAEBE"
	weight = 56
	case "57" , 89
	znak_c128 = "CEBEAG"
	weight = 57
	case "58" , 90
	znak_c128 = "CEBGAE"
	weight = 58
	case "59" , 91
	znak_c128 = "CGBEAE"
	weight = 59
	case "60" , 92
	znak_c128 = "CEDEAE"
	weight = 60
	case "61" , 93
	znak_c128 = "BFAHAE"
	weight = 61
	case "62" , 94
	znak_c128 = "DGAEAE"
	weight = 62
	case "63" , 95
	znak_c128 = "AEAFBH"
	weight = 63
	case "64" , 96
	znak_c128 = "AEAHBF"
	weight = 64
	case "65" , 97
	znak_c128 = "AFAEBH"
	weight = 65
	case "66" , 98
	znak_c128 = "AFAHBE"
	weight = 66
	case "67" , 99
	znak_c128 = "AHAEBF"
	weight = 67
	case "68" , 100
	znak_c128 = "AHAFBE"
	weight = 68
	case "69" , 101
	znak_c128 = "AEBFAH"
	weight = 69
	case "70" , 102
	znak_c128 = "AEBHAF"
	weight = 70
	case "71" , 103
	znak_c128 = "AFBEAH"
	weight = 71
	case "72" , 104
	znak_c128 = "AFBHAE"
	weight = 72
	case "73" , 105
	znak_c128 = "AHBEAF"
	weight = 73
	case "74" , 106
	znak_c128 = "AHBFAE"
	weight = 74
	case "75" , 107
	znak_c128 = "BHAFAE"
	weight = 75
	case "76" , 108
	znak_c128 = "BFAEAH"
	weight = 76
	case "77" , 109
	znak_c128 = "DECEAE"
	weight = 77
	case "78" , 110
	znak_c128 = "BHAEAF"
	weight = 78
	case "79" , 111
	znak_c128 = "AGDEAE"
	weight = 79
	case "80" , 112
	znak_c128 = "AEAFDF"
	weight = 80
	case "81" , 113
	znak_c128 = "AFAEDF"
	weight = 81
	case "82" , 114
	znak_c128 = "AFAFDE"
	weight = 82
	case "83" , 115
	znak_c128 = "AEDFAF"
	weight = 83
	case "84" , 116
	znak_c128 = "AFDEAF"
	weight = 84
	case "85" , 117
	znak_c128 = "AFDFAE"
	weight = 85
	case "86" , 118
	znak_c128 = "DEAFAF"
	weight = 86
	case "87" , 119
	znak_c128 = "DFAEAF"
	weight = 87
	case "88" , 120
	znak_c128 = "DFAFAE"
	weight = 88
	case "89" , 121
	znak_c128 = "BEBEDE"
	weight = 89
	case "90" , 122
	znak_c128 = "BEDEBE"
	weight = 90
	case "91" , 123
	znak_c128 = "DEBEBE"
	weight = 91
	case "92" , 124
	znak_c128 = "AEAEDG"
	weight = 92
	case "93" , 125
	znak_c128 = "AEAGDE"
	weight = 93
	case "94" , 126
	znak_c128 = "AGAEDE"
	weight = 94
	case "95" , 127
	znak_c128 = "AEDEAG"
	weight = 95
	case "96" , 128
	znak_c128 = "AEDGAE"
	weight = 96
	case "97" , 129
	znak_c128 = "DEAEAG"
	weight = 97
	case "98" , 130
	znak_c128 = "DEAGAE"
	weight = 98
	case "99" , 131
	znak_c128 = "AECEDE"
	weight = 99
	case 132
	znak_c128 = "AEDECE"
	case 133
	znak_c128 = "CEAEDE"
	case 134
	znak_c128 = "DEAECE"
	Case Else
	znak_c128 = "none"
End Select
End Sub

oraz makro 'slowniekwota' które zamienia kwotę wpisaną cyframi na kwotę słownie.
Makro działa w sposób bardzo uproszczony. (Takie założenie.)

Kod: Zaznacz cały

REM  *****  BASIC  *****
REM V1.0 19-06-2012
REM Slownie kwota by TN
REM Funkcja uproszczona!
REM 
REM GNU GPL General Public Licence
REM Free to commercial and private use.
REM 
REM Dziala polecenie: slowniekwota(123,12)
REM i daje wynik "jeden dwa trzy zł , jeden dwa gr"
REM -----------------------------------------------------------------------------------
Function slowniekwota(optional kwota) as string
if IsMissing(kwota) then goto errend
kwota = CStr(kwota)
slowniekwota = ""
DIM count as integer
DIM gr_en as integer
gr_en = 0
for count=1 to len(kwota)
	slowniekwota = slowniekwota & sk(asc(mid(kwota,count,1)))
	if asc(mid(kwota,count,1))=46 or asc(mid(kwota,count,1))=44 then 
		slowniekwota = slowniekwota & "zł , "
		gr_en = 1
	end if
Next count
if gr_en then slowniekwota = slowniekwota & "gr" else slowniekwota = slowniekwota & "zł , zero gr"
errend:
End Function

Sub sk(k as integer) as string
select case k
	Case 48
	sk = "zero "	' 0
	Case 49
	sk = "jeden "	' 1
	Case 50
	sk = "dwa "	' 2
	Case 51
	sk = "trzy "	' 3
	Case 52
	sk = "cztery "	' 4
	Case 53
	sk = "pięć "	' 5
	Case 54
	sk = "sześć "	' 6
	Case 55
	sk = "siedem "	' 7
	Case 56
	sk = "osiem "	' 8
	Case 57
	sk = "dziewięć "	' 9
	Case Else
	sk = ""
End Select
End Sub
Aby makra działały należy włączyć obsługę makr w programie w menu:
NARZĘDZIA > OPCJE > BEZPIECZEŃSTWO > BEZPIECZEŃSTWO MAKR .
Należy ustawić poziom "Średni" lub "Niski" .
Albo samemu dodać je w menu makr. (po prostu "kopiuj wklej" . Tego się nie instaluje.)
Trzeba też dodać czcionkę BARcode.ttf i BARcode_slim.ttf do systemu operacyjnego aby kody mogły się wyświetlać.
Aby dodać czcionkę w windows trzeba ją skopiować do folderu "Czcionki" lub "Fonts" w panelu sterowania.

UWAGA
Jeżeli podczas edycji nie będą widoczne wszystkie detale (linie, kreski)
przyczyną jest skalowanie obiektu na monitorze.
W rzeczywistości na wydruku wszystko będzie widoczne.
Aby to sprawdzić trzeba włączyć podgląd wydruku: Plik > Podgląd wydruku.
Należy pamiętać, że podczas podglądu mamy możliwość skalowania obiektu na monitorze oraz oddzielnie obiektu na stronie (kartce,wydruku).

EDIT:27-09-2012: Dodałem wzór dla koperty z okienkiem.

Pozdrawiam.
Załączniki
Druki Wpłaty v3.zip
(99.02 KiB) Pobrany 1080 razy
Ostatnio zmieniony czw wrz 27, 2012 11:18 pm przez OOoUser46, łącznie zmieniany 4 razy.
MrTN. OOo 3.3 , Win7 .
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczo

Post autor: Jan_J »

Gratuluję. Poważnie: chęci dzielenia się; z przymrużeniem oka: samozaparcia w Select.
Ja bym chyba wybrał strukturę umożliwiającą wyszukiwanie ... więc chyba nie Basic ...
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
quest-88
Posty: 1105
Rejestracja: ndz maja 24, 2009 8:12 pm
Lokalizacja: Zabrze
Kontakt:

Re: Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczo

Post autor: quest-88 »

Raczej nie ma to większego znaczenia, ale chciałem zwrócić uwagę, że wszędzie w licencji kodu piszesz "pirwate".

I chyba niepotrzebnie pisałeś makro "slowniekwota", bo analogiczne rozwiązania istnieją od dawien dawna.

1. Makro w Calcu: liczby słownie
2. Numbertext: liczby słownie (i jeszcze więcej)

A tak w ogóle, to bardzo dobra robota!
Standardowa diagnostyka rozwiązuje 90% problemów typu "wcześniej działało, ale już nie działa".
Przepis na LibreOffice
Uzyskałeś pomoc? Poinformuj innych o sprawdzonym rozwiązaniu i podziękuj. Dodaj [SOLVED] w tytule.
OOoUser46
Posty: 23
Rejestracja: sob maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczo

Post autor: OOoUser46 »

quest-88 pisze:Raczej nie ma to większego znaczenia, ale chciałem zwrócić uwagę, że wszędzie w licencji kodu piszesz "pirwate".
I chyba niepotrzebnie pisałeś makro "slowniekwota", bo analogiczne rozwiązania istnieją od dawien dawna.
1. Makro w Calcu: liczby słownie
2. Numbertext: liczby słownie (i jeszcze więcej)
A tak w ogóle, to bardzo dobra robota!
Rzeczywiście . Dzięki za zwrócenie uwagi na "priwate".
Choć nie przykładam dużej uwagi do ortografii, bardziej zależy mi na eliminowaniu błędów w programie, i poprawnym funkcjonowaniu.
Wiem o zaawansowanych makrach "liczby słownie" , jednak większość druków wygląda tak: http://hosting.ixion.pl/pics/przelew.gif
I potrzebowałem podobny druk. Miałem wspomnieć o tym w temacie i dodać link, ale nie chciałem zbytnio komplikować.
Dzięki, że dodałeś linki, jak ktoś będzie potrzebował to podmieni makro.
MrTN. OOo 3.3 , Win7 .
marek33
Posty: 1
Rejestracja: wt wrz 24, 2013 1:38 pm
Kontakt:

Re: Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczo

Post autor: marek33 »

Wilki problemem było by przerobienie/napisanie FV i rachunku ( bez vat ) ?
OpenOffice 3.1 na Windows xp
OOoUser46
Posty: 23
Rejestracja: sob maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

Re: Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczo

Post autor: OOoUser46 »

Witam.
Czy to chodzi tylko o sam szablon faktury?
Potrzebował bym jakiś wzór.
tzn. sam wzór fraktury jest mniej więcej znany,
bo praktycznie każdy program generuje go inaczej.
Oraz czy miały by być jakieś informacje dodatkowe np kody kreskowe.

Tak czy inaczej postaram się niedługo coś wrzucić.

Pozdrawiam.
MrTN. OOo 3.3 , Win7 .
dariuszmalec
Posty: 1
Rejestracja: śr gru 06, 2017 9:33 am

Re: Polecenie zapłaty, druk wpłaty w arkuszu calc. Uproszczo

Post autor: dariuszmalec »

poszukuję jakiegoś makro które wygeneruje mi książeczkę spłat kredytu gdzie będą zawarte informacje o racie np RATA 1/24 oraz data np płatna do 12/12/2017 DZIĘKI ZA POMOC
OpenOffice 2.4 pod Ubuntu 9.04
ODPOWIEDZ