Koodi tarkistaa pankkiviivakoodin, laittaa sen oikeaan muotoon ja tulostaa lomakkeelle. Pankkiviivakoodi on ennen käyttöönottoa tarkistutettava pankissa, että se toimii oikein. Tälle minun koodipätkälle on tullut pankista hyväksyn ja sitä saa käyttää.
Olen tehnyt koodin pätkän Crystal Report Design 10:lla, mutta koodi toimii varmasti muissakin vastaavissa ohjelmissa jotka tukevat Visual Basicia ja Crystal Syntaxia. Funktion perässä suluissa lukee mitä syntaksia tulee käyttää, että se toimii, lisäksi tarvitset fontin JLCode128, että saat muodostettua viivakoodin oikein.
Tässä on tietoa pankkiviivakoodista, sivulla 4 on miten se muodostuu:
http://www.pankkiyhdistys.fi/sisalto/upload/pdf/pviivakoodistd.pdf
Kannattaa lukea ennen kun alkaa koodia lukemaan, muuten voi olla pikkaisen pihalla
Tuskin tästä on kenellekään hirveätä hyötyä, tai jos tekee lomakkeita niin siinä tapauksessa.
Toivottavasti tästä on hyötyä jollekin.
fcViivaKoodi (Basic Syntax
Function fcViivaKoodi(koodi as string) as string 'Koodin oltava alussa 53 merkkiä pitkä, muuten jotain puuttuu if Len(koodi) <> 53 then fcViivaKoodi = "" exit function end if '=======================' '===== TARKISTE 01 =====' '=======================' Dim arvo, i, paino, luku As number dim paluu as string dim Tarkiste01 as string paino = 7 arvo = 0 '-- Lasketaan arvo painoarvoilla 7-3-1 lopusta lähtien For i = Len(koodi) To 1 Step -1 luku = ToNumber(Mid(koodi, i, 1)) arvo = arvo + (luku * paino) Select Case paino Case 7 paino = 3 Case 3 paino = 1 Case Else paino = 7 End Select Next i '-- Tarkiste saadaan vähentämällä 10:stä yllä lasketun arvon yksittäisluku '-- Esim. jos arvo 123, niin tarkiste = 10 - 3 = 7 Tarkiste01 = Left(ToText(10- Val(Mid(ToText(arvo), Len(ToText(arvo))-3,1))),1) '=== TARKISTE 01 END ===' koodi = koodi & tarkiste01 '=======================' '===== TARKISTE 02 =====' '=======================' dim j, k as number dim tarkTemp02 as string dim tarkiste02 as string dim arvoTemp as string '-- Tarkiste saadaan laskemalla koodin luvut kertoimilla yhteen '-- kahden pareissa ja lopuksi jakolaskun jakojäännöksestä arvo = 105 k = 1 for i = 0 to Len(koodi) step 2 luku = Val(Mid(koodi, i + 1, 2)) arvo = arvo + luku * k k = k + 1 next i arvoTemp = ToText(arvo Mod 103) '-- Kikkaillaan luku oikeaan muotoon poistamalla desimaalit tarkTemp02 = "00" For i = 1 To Len(arvoTemp) if mid(arvoTemp,i,1) = "," then exit for end if tarkTemp02 = tarkTemp02 & mid(arvoTemp,i,1) next i Tarkiste02 = right(tarkTemp02,2) '=== TARKISTE 02 END ===' koodi = koodi & tarkiste02 '===================' '=== VIIVAKOODI ====' '===================' dim Viivakoodi as string dim Luvut as string Viivakoodi = chr(202) 'Alkumerkki '-- Lukuja yht. nyt 56 kpl (53+tarkiste01+tarkiste02), '-- käydään kahden pareissa läpi ja muodostetaan näistä viivakoodimerkit i = 1 do until i > len(koodi) Luvut = mid(koodi,i,2) If Luvut = "00" then Viivakoodi = Viivakoodi & chr(204) Elseif val(luvut) > 94 then Viivakoodi = Viivakoodi & chr(val(Luvut)+97) else Viivakoodi = Viivakoodi & chr(val(Luvut)+32) End If i = i + 2 loop Viivakoodi = Viivakoodi & chr(203) 'Lisätään vielä loppumerkki fcViivakoodi = Viivakoodi end function
Crystal Syntax
Iif(Right({pohja.summakenttä},1) Like "-","0,00",{pohja.summakenttä}) // Tässä poistetaan oikealta alkaen ylimääräiset merkit, viivakoodissa ei saa olla kuin numeroita. Nimetty sen takia 74:ksi kun kenttä mistä haki tiedon on 74, nimellä ei väliä kunhan se löytyy sitten Viivakoodista samalla nimellä.
Test (Crystal Syntax
fcViivaKoodi("2"+"0000000000000"+right(Picture(Replace(Replace({@74},",",""),".",""),'00000000'),8)+Replace(RIGHT(Picture({pohja.viitekenttä},"00000000000000000000"),21)," ","")+Mid({pohja.eräpäiväkenttä},7,2)+Mid({pohja.eräpäiväkenttä},4,2)+Mid({pohja.eräpäiväkenttä},1,2)+"0000") // On sitä varten olemassa, että näkee millaisen numerosarjan pukkaa pihalle. //Tuo 14:sta 0:llaa tulee korvata tilinumerolla.
Viivakoodi (Crystal Syntax
fcViivaKoodi("2"+"0000000000000"+right(Picture(Replace(Replace({@74},",",""),".",""),'00000000'),8)+Replace(RIGHT(Picture({pohja.viitekenttä},"00000000000000000000"),21)," ","")+Mid({pohja.eräpäiväkenttä},7,2)+Mid({pohja.eräpäiväkenttä},4,2)+Mid({pohja.eräpäiväkenttä},1,2)+"0000") //Tämä tulee sitten muuntaa sillä JLCode128 viivakoodiksi. //Tuo 14:sta 0:llaa tulee korvata tilinumerolla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.