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
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
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
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.