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

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

Postprzez OOoUser46 » Wt cze 19, 2012 9:32 pm

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   Rozszerz widokZwiń widok
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   Rozszerz widokZwiń widok
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   Rozszerz widokZwiń widok
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) Pobrane 518 razy
Ostatnio edytowano Cz wrz 27, 2012 11:18 pm przez OOoUser46, łącznie edytowano 4 razy
MrTN. OOo 3.3 , Win7 .
OOoUser46
 
Posty: 19
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

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

Postprzez Jan_J » Wt cze 19, 2012 10:08 pm

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 (5.0|5.1) ∙ AOO 4.1.2 ∙ Python (2.7|3.5) ∙ Unicode 8 ∙ LATEX 2ε ∙ XML ∙ Unix tools ∙ Linux (2.x|3.x) ∙ Fedora ∙ CentOS ∙ SUSE
Jan_J
 
Posty: 3068
Dołączył(a): Pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

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

Postprzez quest-88 » Śr cze 20, 2012 12:34 pm

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.
Avatar użytkownika
quest-88
 
Posty: 1049
Dołączył(a): N maja 24, 2009 8:12 pm
Lokalizacja: Zabrze

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

Postprzez OOoUser46 » Śr cze 20, 2012 3:33 pm

quest-88 napisał(a):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 .
OOoUser46
 
Posty: 19
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.

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

Postprzez marek33 » Wt wrz 24, 2013 2:24 pm

Wilki problemem było by przerobienie/napisanie FV i rachunku ( bez vat ) ?
OpenOffice 3.1 na Windows xp
marek33
 
Posty: 1
Dołączył(a): Wt wrz 24, 2013 1:38 pm

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

Postprzez OOoUser46 » Cz wrz 26, 2013 7:05 pm

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 .
OOoUser46
 
Posty: 19
Dołączył(a): So maja 12, 2012 2:43 pm
Lokalizacja: Olesno Tarn.


Powrót do Projekty użytkowników

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość