Kortistot ja tietokannat "tee se itse" -muodossa

Tämä ohje on perustaltaan 1990-luvun alulta. Myöhemmin on tehty vain joitakin korjauksia tiettyjä erikoistilanteita varten. Muutamat toiminnot ovat edelleen käyttökelpoisia joissakin yhteyksissä.

 

1. Yleistä

Vielä 1980-luvulla henkilökohtaisten tietokoneiden alkuaikoina tietojen käsittelyyn liittyvät peruskäsitteet tunnettiin melko hyvin. Tietokoneiden käyttö olisi ollut muutoin vaikeaa tai mahdotonta. Käyttöliittymät ovat kuitenkin lukuisilla hienouksillaan peittäneet koneen sisäisen maailman lähes näkymät­tömäksi ja tehneet tietojen käsittelystä rajoitetulla alueella hyvinkin helppoa. Useimmille sellaiset termit kuten tiedosto, kansio, polku, oletuskansio, tiedostomäärite (attribuutti), kiintolevy, tiedoston kopiointi tai keskusmuisti eivät kerro enää mitään - termejä ei yleensä edes tarvita. Jo nimitys 'resurssienhallinta' pelottaa. Käyttäjä haluaa suorittaa haluamansa tehtävän tietokoneen avulla nopeasti ja yksinkertaisesti - eikä operoida biteillä ja tietokone­termeillä. Tähän itse asiassa kaikki ohjelmointikin tähtää. Hyvä näin, mutta tässä tapauksessa käyttäjä on täysin asiantuntijan armoilla!

Jokaista pientäkin toimintoa varten pitää olla sitä varten suunniteltu ohjelma - ja jostakin saatu tieto siitä, että juuri tämä ohjelma toteuttaa tarkoituksen. Helppouden vaatimus on itse asiassa kaventamassa tietokoneen käyttöaluetta. Jos koneella pitäisi tehdä jokin ohjelmien ulkopuolelle jäävä toiminto, tarvitaan erikoishenkilö. Tiedoston siirto kansiosta toiseen voi maksaa käyttäjälle saman verran kuin matka Helsingistä Ouluun. Tietokoneet ovat nostaneet asiantuntijoiden arvon ja palkkiot pilviin. Toisaalta mutkistuneiden järjestelmien vuoksi kukaan ei enää voi sanoa olevansa alan asiantuntija, on vain pienten osa-alueiden tuntijoita. Tämä pieni opaste on tarkoitettu niille, jotka haluavat selviytyä yhdestä pienestä osa-alueesta - tietokannoista - omin avuin ja vähemmillä kustannuksilla. Osa alla olevista teksteistä on aikoinaan ollut osa Ykkösen sisäisiä opasteita, mutta niiden käyttötarve ja ymmärtämys on koko ajan vähentynyt. Tämä opaste onkin tarkoitettu lähinnä "asiantuntijoille" tai sellaisiksi aikoville, joiden edellytetään tuntevan tietojenkäsittelyn perustermit ja perustoiminnot. Lisäksi tarvitaan Narvasoftin ohjelma Ykkönen TH2006. Ykkösessä on myös oma sovelluskehittimensä, tosin jo hieman iäkäs. Sen  käskyistä on olemassa  oma opastuksensa.

Vanhanaikainen pahvinen kortistojärjestelmä (esim. jäsenrekisteri) on hyvä vertailukohde tietokoneen kortistoille. Koko pahvilaatikkoa sanotaan kortistoksi ja kortisto koostuu tietenkin pahvisista korteista. Jokaisella kortilla on lomakkeiden tavoin useita kenttiä. Kentällä on nimi ja arvo, esim. jos kentän nimi on LÄHIOSOITE, sen arvo voi olla Mannerheimintie 25. Tietokoneella "pahvilaatikkoa" nimitetään kortistotiedostoksi tai useimmiten vain kortistoksi. Kortisto on siis yksi tiedosto jossakin kansiossa (hakemistossa), ja sillä on jokin nimi, esim. ASIAKAS.DBF. Nimeen pitää usein liittää koko polku: C:1for_you1dbases.dbf. Polun perusteella tiedetään, mistä tiedosto löytyy. Tietokoneenkin kortistossa on "kortteja", mutta niitä nimitetään useimmiten tietueiksi. Tietokoneen kortiston kortit ovat kiinteä osa koko tiedostoa; kortti on tietty määrä tavuja, sen jälkeen kortti vaihtuu seuraavaksi. Koska tietokoneen kortiston tietueet ovat ja pysyvät tietokoneen ja sen tietyn tiedoston sisällä, kortteja eli tietueita voi vain selata ruudulla tai tulostaa paperille. Tyypillinen kortisto on osoiterekisteri, jossa henkilö tietoineen muodostaa yhden kortin, tietueen. Tietueessa on kenttinä esim. nimi, lähiosoite, postinumero, puhelin jne.

Kortistojen yhteydessä puhutaan myös tietokannoista. Melko usein yhtäkin kortistoa nimitetään tieto­kannaksi, joskin 'tietokanta' -nimitys soveltunee parhaiten useiden kortistojen järjestelmään. Esimerkiksi asiakkaat, tuotteet, toimittajat, toimitukset ja jälleenmyyjät voisivat muodostaa yhden taloushallinnollisen tietokannan. Jos kortistojen välille on määritetty suhteita, voidaan puhua relaatiotietokannasta.

Jos tietokone ei toisi kortiston käyttöön lisämukavuuksia, pahvikortistot olisivat edelleen käytössä. Onneksi kone tekee monta toimenpidettä vaivattomammin. Lattialle sikin sokin pudonnut kortisto on raivostuttava järjestää uudelleen aakkosjärjestykseen. Kone selviytyy tästä työstä sekunneissa. Pahvikortistosta on työlästä etsiä Ilmarinkatua tai jäsenmaksunsa maksaneita. Tässä ja monessa muussa asiassa kone on korvaamaton. On kuitenkin muistettava, että kone ei tee tätä työtä millään mystisillä tempuilla. Jokainen merkkijono liikkuu koneen sisäisissä osoitteissa ja tallenne­väli­neiden välillä tarkkaan ohjelmoituna. Ohjelmarivejä voi pie­neltäkin tuntuvassa toiminnossa olla tuhansia, mistä seuraa tietenkin myös ohjelmavirheiden mahdol­lisuus. Koneen ylivoima seuraa pienten operaatioiden suunnattomasta nopeudesta.

Kortistoiden käyttökelpoisuutta tietokoneissa lisää edelleen se, että niiden rakenneperiaatteet ovat tiettyjen perustyyppien sisällä samanlaisia. Ykkönen käyttää useimmissa kortistoissaan tunnetun tietokanta­ohjel­miston dBase IV:n kortistorakennetyyppiä. Monet yleisessä käytössä olevat ohjelmistot pystyvät lukemaan ja muokkaamaan dBase IV -muotoisia kortistoja (mm. MsAccess, MsExcel, Paradox, FoxPro ja lukuisat pienemmät ohjelmistot). Kortistotiedoston alkuosassa määritetään tietyllä tavalla koko kortiston rakenne. Tärkeimpiä määritettäviä ovat tietueessa olevien kenttien nimet, mitat ja muut ominaisuudet jne. Kun ohjelma lukee alkuosan määritykset, koko kortiston rakenne on selvä, ja ohjelman on helppo tehdä erilaisia toimintoja koko kortistoon. Tietueita voi välittömästi selata, muokata, poistaa, etsiä merkkijonoja, tehdä laskentoja jne.

Tiedostot tunnetaan useimmiten tiedostopäätteistään; dBase IV -kortistojen vakiopäätteenä on .DBF. Etuosa voi olla mitä vain, esim. ASIAKAS.DBF, Toimittajarekisteri.dbf jne. On erityisen tärkeää huomata, että eri tiedostotyypit ovat käsiteltävissä vain sellaisilla ohjelmilla, jotka ymmärtävät tiedostotyypin. Kortistotie­dostoa ei sen vuoksi voi muokata esim. teksturissa tai grafiikkaohjelmassa. Melko usein kortistotiedostoja tuhoutuu, kun niitä käsitellään väärässä ohjelmassa; ohjelma ei välttämättä tunnista itselleen vierasta tiedostotyyppiä. Jos siis kortisto näyttää ruudulla epämääräiseltä, poistu heti tallettamatta.

Kortistotiedoston tiedostonimen alkuosaan liittyy muutamia muita aputiedostoja, joiden tyyppi ja merkitys tunnistetaan päätteestä. Tärkein on indeksitiedosto, jonka pääte on .1ND. Se sisältää eri kenttien mukaisen aakkostuskuvauksen. Ykkönen käyttää dBase IV -kortistoista poikkeavaa indeksitiedostoa. Seuraavassa Ykkösen käyttämät tiedostotyypit kortistojen yhteydessä:

*.1ND = Indeksitiedosto (eri kenttien aakkostukset)
*.DBS = Tulostusmallin määrittely,
*.DBP = Kortistosta mallin avulla tulostettu tiedosto,
*.DFS = Kortistoon liittyvät asetukset,
*.LBS = Osoitetarramalli,
*.LAB = Tulostettu osoitetarratiedosto,
*.DBA = Kortiston määrittelytiedosto,
*.SCR = Ruutumääritystiedosto.

2. Kortiston luominen

Kortistotiedosto luodaan erikoisohjelmalla, joka käynnistyy Ykkösen resurssienhallintataulusta painamalla Alt-E. Ohjelma kysyy heti luotavan kortiston tiedostonimeä. Anna nimeksi maksimissaan 8 merkkiä (numeroita ja kirjaimia). Koska Ykkönen on merkkipohjainen ohjelma, älä käytä pitkiä tiedostonimiä. Ruudulle avautuu tavanomainen tekstieditori, jossa määritetään kenttien nimet, mitat ja ominaisuudet. Kun määritys on valmis, tiedosto talletetaan F2:lla. Määrityksistä poistuttaessa (ESC) Ykkönen lukee määritysrivit ja rakentaa kortistotiedostolle (.DBF) määritysosan. Kortisto on sen jälkeen heti käyttövalmis, mutta tietueita siinä ei vielä ole. Kortiston kenttänimet näkyvät kortiston tavanomaisessa selailussa ruudun vasemmassa reunassa ja muokattavat kenttäsisällöt nimien oikealla puolella. Alkuperäinen määritys jää levylle .DBA -päätteisenä tiedostona. Tällaisesta tiedostosta saat aina kortiston painamalla nimen kohdalla taulussa Alt-E. Tavanomaisen kenttämäärittelyn muoto DBA -tiedostossa on:

KENTTÄNIMI PITUUS LAATU [DESIM]

jossa LAATU on:

C = Tekstikenttä (jossa voi myös olla kokonaislukuja), myös A-tunnuksella.
N = Numerokenttä. Jos desimaaliluku (murtoluku), määritä myös desimaalien määrä.
M = Memokenttä (vapaamuotoinen tietueeseen liittyvä teksti)
L = Looginen kenttä, sisältö vain Y tai N (E/K, 1/0, T/F)
D = Päiväyskenttä

Kun rakennat kenttien määrityksiä, harkitse ensin huolellisesti, minkä nimisiä ja minkä laatuisia kenttiä tarvitset kortistossasi ja missä järjestyksessä. Määritä riittävästi kenttiä ja riittävän pitkiä, mutta ei liian pitkiä! Kenttä voi olla 255 merkkiä pitkä, mutta useimmiten muutaman kymmenen merkin pituiset kentät ovat riittäviä. Liian lyhyt kenttä aiheuttaa aina rakenteen muutostarpeen. Liian pitkät kentät ja tietueet syövät paljon levytilaa ja tekevät lopulta kortiston käytöstä hitaan (jos tuhansia tietueita).

Normaalisti kentän laatu on C eli merkkikenttä, mutta jos jossakin kentässä käytetään desimaalilukuja (esim. hintoja), määritä kenttä N-kentäksi eli numerokentäksi ja määritä myös desimaalinumeroiden määrä. Jos kenttä sisältää tavallisia numeroita (esim. lukumäärä, sosiaaliturvatunnus tms.), kenttä voi olla tavallinen merkkikenttä (C). Päiväyskentän tunnuksena on D. Jos tarvitset kortistoja Ykkösen ulkopuolella, anna päiväyskentänkin ominaisuudeksi C.

Esimerkki kortiston määrityksestä:

TUOTE 45 C
MYYJÄ 50 C
PUHELIN 25 C
OSOITE 40 C
HINTA 12 N 2
OSTOPVM 12 D
SELITE M

Määrittelyssä voi myös olla rivi ja sarake, mikäli haluat selata ja muokata kortiston kenttiä ruudulle poikkeavasti sijoitettuina. Tämä menettely on vain harvoin tarpeen. Määrittely on kuitenkin silloin muodossa KENTTÄNIMI PITUUS LAATU [DESIM] &RIVI &SARAKE. Näin sijoitetun tietueen saat ruudulle editoitavaksi painamalla kortistoselauksessa Alt-5 tai ohjelmoinnista käskyllä EditPage. Kenttien sijaintia voit tässä tilassa muuttaa edelleen Alt-6:lla. Vaikka Ykkönen luo usein itsekin rivi- ja sarakemääritykset, niitä ei tarvitse täyttää, jos niitä ei tarvita.

Määrittelytiedoston alussa voi myös olla asetus #nro1 nro2 nro3 merkki. Tämä määritys asettaa kortistoselauksen otsakkeiden, kenttänimien ja kenttäsisältöjen värit (0-255) sekä ilmoittaa kentän loppuosan merkin. Esim: #29 30 31 _. Jo olemassa olevan kortistotiedoston rakenteen voi kopioida nopeasti painamalla kortiston selailutilassa vain kirjainta C.

 

3. Kortiston selailu ja muokkaus

Kortiston selailuun pääsee Ykkösen resurssienhallintataulusta kuten tekstitiedoston lukemiseen; siirrä kursorikenttä tiedostonimen kohdalle ja paina kaksi kertaa Enter. Tietueiden selailu tapahtuu tavanomaisilla nuolinäppäimillä, PgDn, PgUp, Dn, Up, ^Home, ^End jne. Tärkeimmät komennot löytyvät myös ylävalikosta (F1), josta ne voi myös suorittaa. Nopein tapa on tietenkin suorittaa komennot suoraan näppäimistöltä sitä mukaa kun oppii näppäinyhdistelmät. Esim. F6:lla voi siirtyä tiettyyn tietuenumeroon. Jos tietueessa on useita sivuja, F7:llä voi siirtyä edelliselle ja F8:lla seuraavalle sivulle. Myös hiirtä voi käyttää siirtyilyissä, mutta työ silloin hidastuu. Kaiken kaikkiaan erilaisia toimintoja on jo melko paljon, koska vuosien mittaan kortistoille on haluttu tehdä mitä erilaisimpia muokkaus- ja etsintätoimintoja.

Kun kortistotiedosto avataan, ollaan ensiksi selailutilassa. Muokkaustilaan päästään painamalla kirjainta E ja sieltä takaisin selailuun ESC:llä. Muokkaus tapahtuu kenttä kerrallaan ja muokkauksessa toimivat tärkeimmät rivin muokkaukseen tarkoitetut komennot (vrt. tekstieditori). Nuolinäppäimillä voidaan siirtyä rivillä eteen, taakse, ylös, alas jne. Sanasta toiseen siirrytään ^VAS/^OIK. Merkkejä voi poistaa DEL- ja BackSpace -näppäimillä. Insert käynnistää tai poistaa korvaustilan. Poikkeavuutena on Enter, joka siirtää seuraavaan kenttään. ^Y ei poista koko kenttää vaan loppurivin sisällön. Koko kenttää ei voi poistaa muutoin kuin rakennetta muuttamalla (Alt-F3), mutta silloin häviää kenttä sisältöineen kaikista tietueista. Mikäli rivi on yli 69 merkin mittainen, loppuosa kentästä on piilossa. Sen saat näkyviin siirtymällä nuolilla oikealle (tai ^OIK/^VAS).

 

Taulukkomuodossa kortiston tietueet ovat rivejä, kentät sarakkeita. Taulukkomuodossa kenttiä voi selata tavanomaisesti nuolinäppäimin. Kenttien mitan ruudulla voi lyhentää F10:llä. F3:lla voi määrittää tietyt kentät pysyviksi. Muokkaustilaan taulukkoselauksesta pääsee painamalla kirjainta E. Taulukkomuodossa on kätevä muokata tiettyä kenttää kaikista tietueista. Nuolilla ylös ja alas voi nopeasti siirtyä toisen tietueen samaan kenttään. Kenttien välillä voi liikkua painamalla F7 tai F8. Muokkaustilassa Alt-F7 vie ensimmäiseen ja Alt-F8 viimeiseen kenttään. Enter siirtää joko seuraavaan kenttään tai seuraavaan tietueeseen, vaihda tämä Alt-S:llä.

 

Tietueita voi myös merkitä plus- tai miinusmerkillä. Miinusmerkillä (tai Alt-D:llä) merkityt ovat merkittyjä poistettaviksi (D). Plusmerkin tarkoitus on vapaampi. Näin merkittyyn tietueeseen esim. pääsee nopeimmin painamalla TAB-näppäintä, taaksepäin Shift-TAB:lla. Ohjelmoinnissa voidaan valita toimenpiteiden kohteiksi esimerkiksi vain + -merkityt. Miinusmerkillä merkittyjen välillä voi liikkua ^D:llä ja ^E:llä. Koska muokkaustilassa on tarpeellista saada aika ja päiväys Alt-T:llä ja Alt-D:llä kuten tekstieditorissakin, näillä komennoilla ei voi merkitä tietuetta. Tämä mahdollisuus on komennoilla Alt-Shift-D ja Alt-Shift-T.

 

4. Kortiston tulostus

Usein kortiston olemassaolo kiintolevyllä on riittävää; kortistoon lisätään tietueita, muutetaan niitä ja etsitään niistä tietoja. Tulostamisen tarvetta ei aina ole. Aina tämä ei riitä, vaan tarvitaan esimerkiksi valikoiva listaus tietyssä muodossa paperille. Ykkösessä on useitakin tulostuksen apuvälineitä (raporttigeneraattoreita), mutta niitä ei ole rakennettu kovin visuaalisiksi. Tulostusvalikkoon kortiston selailusta pääsee painamalla kirjainta P tai Alt-P.

Valinta 'Tietueet riveiksi' tulostaa kortiston tietueet pitkiksi riveiksi. Ohjelma kysyy vielä tulostusmuotoa, joista oletuksena on yleinen siirtotiedostomuoto, jossa kenttäsisällöt ympäröidään lainausmerkeillä ja kentät erotetaan jollakin erotinmerkillä (esim. pilkulla tai puolipisteellä). Tiedostoon tulostetut rivit näyttävät tältä: "Virtanen","Matti","Pitkäjärventie 9","123456 KOSKELA". Toinen vaihtoehto ('EI') on tulostaa kenttä­sisällöt pitkälle riville sellaisinaan ilman mitään erottimia Kenttä tulostuu sen mittaisena kuin se on kortistossa. Valinta soveltuu yleensä vain tietojen siirtojärjestelmiin.

Valinnat 'Kaikki kentät ja kenttänimet' ja 'Yhden tietueen tulostus' ovat oikeastaan hätätilan ratkaisuja. Ohjelma tulostaa kentät alakkain ja kenttänimet eteen, jälkimmäisessä voi valita tulostettavat kentät. Tämä on tietenkin nopea tapa tulostaa tietue, jos ei ole aikaa rakentaa mallia. Valinta 'Tulosta pikamallilla' on varsin kätevä ja nopea tapa tulostaa kortisto haluttuun muotoon edellyttäen, että viitsii opetella muutamia koodeja, joilla kenttäsisällöt ominaisuuksineen ilmoitetaan ohjelmalle. Kortiston kentät valitaan valintalistasta ja kenttänimien väliin valitaan tarvittaessa tekstejä ja rivinvaihtoja. 'Tulosta joukkokirje' on erikoistulostustapa, jossa lähtökohtana on tekstitiedosto, jossa on kenttänimiä ($Kenttä).

Valinnat 'Valitse taulusta eri tulostusmalli', 'Tulosta mallilla: C:\u8230…..DBS', 'Muokkaa mallia: C:\u8230….DBS ja 'Luo uusi malli' ovat monipuolisimmat tavat toimia tulostusmallien kanssa.

4.A. Pikamalli

Pikamalli on hyvin nopea ja joustava tapa tulostaa kortiston kenttiä. Pikamalli tehdään pienellä mallikehittimellä, jossa kentät, tekstit ja rivit valitaan valikosta. Ruudun yläosassa esitetään tulostus sellaisena kuin se tulee tulosteeseen ja sitä mukaa kun malli valmistuu. Tietoina ovat sen hetkisen tietueen tiedot ja tietuetta voi vaihtaa F7:llä ja F8:lla.

Malli rakennetaan 2-sarakkeiseen elementtivalikkoon ruudun oikeassa reunassa. Paina ensimmäisellä rivillä Enter ja valitse ensimmäiseksi kentäksi joko alkumerkki tai teksti yleisotsakkeeksi ja vasta sen jälkeen alkumerkki. Teksti ennen alkumerkkiä jää otsakkeeksi, teksti alkumerkin jälkeen toistuu jokaisen tietueen kohdalla. Muista päättää alkuteksti rivinvaihtoon.

Valitse seuraavaksi (alkumerkin jälkeen) esim. jokin kortiston kentistä, esim. NIMI ja anna sille seuraavaksi mitta. Ohjelma ehdottaa mitaksi kentän mittaa kortistossa. NIMI-kentän sisältö ilmestyy ruudun yläreunaan annetun mittaisena. Jos haluat seuraavalle riville lähiosoitteen, siirry ensin elementtilistan riville kaksi, paina jälleen Enter ja valitse valikosta ensin rivinvaihto. Jos haluat koko tietueen tiedot samalle riville, älä valitse vielä rivinvaihtoa. Siirry jälleen uuteen elementtiin, paina Enter ja valitse nyt LÄHIOSOITE. Samoin voit tehdä POSTINRO:n ja muiden tarvittavien kenttien kohdalla. Ruudun yläosasta näet, onko valintasi haluamasi valinta. Elementtejä voit lisätä väliin (^N) ja poistaa välistä (^Y). F2:lla lista talletetaan (.RML) ja siirrytään tulostukseen, jonka voit tehdä koko kortistosta tai vain osasta.

Jos haluat tulostaa kortiston tietyssä järjestyksessä, valitse F5:llä kenttä jonka mukaan kortisto indeksoidaan ja tulostetaan. Jos indeksiä ei ole listassa, valitse ensin kentän indeksointi.

Pikamalliin valitaan elementti elementiltä kaikki tarpeelliset kortiston kentät, mahdollisesti välilyöntejä kenttien väliin, rivinvaihtoja, ehkä lisätekstejä (viivoja yms.) sekä alku- ja loppumerkit. Alku- ja loppumerkit eivät ole aivan pakollisia, mutta alkumerkistä on hyötyä siinä, että sitä ennen määritetyt tekstit tulostuvat otsikoksi ensimmäiselle sivulle. Loppumerkillä voi mm. väliaikaisesti lyhentää mallia. Sivunvaihdon voi tehdä tekstinä merkinnällä 12.

F10:llä voit tallettaa mallin DBS-tiedostoksi eli varsinaiseksi tulostusmalliksi, jota voit edelleen muokata tekstieditorissa (ks. jäljempänä olevia ohjeita). Pikamallin kontrollimahdollisuudet ovat huomattavasti pienemmät kuin varsinaisessa mallitulostuksessa.

 

4.B. Joukkokirje

Joukkokirjeen tulostus on hyvin kätevä tapa tulostaa kortisto haluttuun muotoon tekstitiedoston tuella. Tämäkään menetelmä ei ole niin monipuolinen kuin varsinainen kortiston mallitulostus mutta nopeampi ja helpompi. Joukkokirjeen tulostus aloitetaan rakentamalla tekstitiedosto, johon tulevat sekä tekstit että kenttämääritykset. Esimerkki tiedostosta, joka voi toimia joukkokirjetulostuksen pohjana:

Tämä teksti tulostuu jokaiseen! Päiväys: $@Date()
Nimi $Nimi
Osoite $Osoite
------------------------------

Ne kohdat, jotka sisältävät tekstiä, tulostuvat sellaisenaan. $-merkki ilmoittaa ohjelmalle kontrollikentän alkamisen. Mikäli $-merkin jälkeen on kenttänimeksi tulkittava nimi, tähän kohtaan sijoitetaan kortistosta nimen osoittama kenttä, esimerkissä nimi ja osoite. $-merkin jälkeen voi olla myös useita muita toimintoja, esimerkissä $Date(), joka sijoittaa tähän kohtaan tämänhetkisen päivämäärän. Teksti tulostetaan niin monta kertaa kuin tulostuksen yhteydessä valittavassa kortistossa on tietueita. Mikäli tulostuksessa tarvitaan $-merkkiä esim. rahan mittana, se on merkittävä $$.

Joukkokirjeen tulostus voidaan aloittaa eri tavoin. Kortisto-ohjelmasta joukkokirjeen tulostus käynnistyy yleisestä tulostusvalikosta (Alt-P tai selailusta vain P). Ykkösen taulusta tulostus aloitetaan painamalla Shift-N (tai valitse ylävalikosta) tekstitiedoston nimen kohdalla. Editorista tulostus aloitetaan Alt-P:llä. Avautuvasta ikkunasta valitaan joukkokirjeen tulostus. Sen jälkeen ohjelma pyytää valitsemaan puuttuvan tiedoston, joko joukkokirjeen tekstimallin tai kortiston, josta tietueet otetaan. Seuraavaksi käynnistyy varsinainen tulostusohjelma, jonka aloitusikkunasta voi tarvittaessa valita tavanomaiset asetusten muutokset. Kun tulostus aloitetaan, valitun kortiston ensimmäinen tietue avautuu ruudulle. Tulostuksen voi nyt tehdä joko tietue kerrallaan valiten tulostettavat tai tulostaa kaikki (Alt-A).

Ohjelmoinnista, esim. menusta tai 1DB-ohjelmasta joukkokirjeen tulostaminen aloitetaan käskyllä:

PrintGroup JK_tiedosto DBF_tiedosto PRN_kohde [All]

Tulostus alkaa välittömästi annetuilla tiedostoilla ja jos viimeisenä on ALL (=tulostetaan kaikki), mitään ei kysellä. Esimerkki joukkokirjeestä on mm. Ykkönen TH2006 myyntireskontran karhukirje.

Joukkokirjetulostuksen kontrollikentät

Joukkokirje on muotoutunut aikanaan tiettyjen käyttötarkoitusten mukaan. Sen vuoksi sen kontrollikooditkin ovat erikoisia ja melko mutkikkaita. Kontrollikoodeja voi olla tekstissä missä kohtaa tahansa, mutta yleisluonteisimmat koodit on kuitenkin syytä asettaa aivan tekstin alkuun.

$kenttänimi = sijoitetaan $-merkin kohdasta alkaen kortiston kentän sisältö. Oletusarvona on, että koko kentän sisältö sijoitetaan, mutta loppuvälilyönnit poistetaan. $&-merkinnän jälkeen loppuvälilyönnit jätetään.
$kenttänimi/nro
= sijoitetaan kentästä nron osoittama määrä tavuja. Esim. $NIMI/24 $OSOITE/15.
$kenttänimi/nro/nro
= kuten edellinen, mutta poistetaan lisäksi kentän alusta jälkimmäisen numeron osoittama määrä merkkejä. Esim. $HINTA/9/2.
$(asiakasnro laskunro)
= sijoitetaan kentistä laskettu viitenumero. Vain ensimmäinen argumentti on pakollinen. Asiakasnumeron ja lasku-numeron kohdilla voi olla muutakin, kunhan se vain yksiselitteisesti identifioi laskun aiheet.
$(asiakasno laskuno kenttänimi)
= Kuten edellinen, mutta sijoitetaan viite nyt vuorostaan kortiston kenttään kenttänimi. Jos kortistossa on vielä kenttä, jonka kenttänimi on kuten tämä ja pääte "_D", sijoitetaan tämänhetkinen päiväys tähän kenttään (esim. VIITE_D).
$(!)
= laskee viitenumeron vuosiluvusta ja tietuenumerosta. Esim. 2945, jossa viimeinen numero (5) on tarkistusluku, sitä ennen on vuosiluvun kaksi viimeistä numeroa ja sen edellä tietuenumero 2. $(!10000) Lisätään em. numeroon 10000.
$+
= lisätään tietueen numeroa yhdellä. Tämä merkintä on kätevä, jos samalle tulostussivulle tulostetaan useita tekstejä ja tietueita.
$!Nro
= siirretään tulostuspää rivillä kohtaan Nro huolimatta siitä mihin asti rivin tulostusta on tähän asti rakennettu. Huomaa, että tämän jälkeen on oltava yksi välilyönti erottimena, mutta seuraavat välilyönnit tulostuvat.
$%
= otetaan kentistä vain ne merkit, jotka niissä on, loppuvälilyönnit poistetaan.
$&
= otetaan kentistä aina koko kentän mitta (loppuun välilyöntejä) $% ja $& voivat luonnollisesti esiintyä tekstissä useastikin, aina tilanteesta riippuen
$?
= Ei kysytä tulostuksen suoritusta tietueittain/kaikki
${ehto}
= Suoritetaan kaarisulkeissa oleva ehto tietueen vaihdon yhteydessä. Mikäli ehto ei toteudu, siirrytään seuraavaan tietueeseen. Esim: ${@Len(SUORITUS) < 1}. Ehto on asetettava tiedoston alkuosaan omalle rivilleen.
$={lauseke}
= Suoritetaan lauseke ja sijoitetaan sen arvo tähän. Arvo on matemaattinen.
$<{lauseke}
= Kuten edellinen, mutta tuloksena on merkkijono.
$>MAKSUT
= Ilmoitetaan ohjelmalle, mihin kenttään sijoitetaan maksun (esim. jäsenmaksun) määrä.
$[INDEKSIKENTTÄ]
= Kortistosta luetaan tietueita annetun kentän mukaisella indeksoinnilla. Esim. $[SUKUNIMI]. Kenttämäärityksen on oltava tiedoston alussa omalla rivillään.
$[I]
= Otetaan indeksikentän nimi Str0:sta, jos joukkokirjeen tulostukseen tultiin ohjelmoinnin kautta. Ohjelmoinnissa kenttänimi sijoitetaan Str0:aan kirjoittamalla siihen kenttänumero #-merkin jälkeen: Str0 = #4. Tässä tapauksessa ei tarvitse avata kortistotiedostoa.
$[0] ...$[F]
= Sijoitetaan Str0...StrF:ään ohjelmoinnissa asetettu muuttujan arvo (yleensä jokin merkkijono).
$=@Fnc()
= Suoritetaan funktio ja sijoitetaan sen arvo. Funktio voi olla mikä tahansa ykkösen funktio ja se voi ottaa argumentikseen kortiston kenttien arvoja. Koska sijoitusoperaattorina on '=', tulos on tässä matemaattinen.
$<@Fnc()
= Kuten edellinen, mutta tuloksena on merkkijono. Esim. $<@Date(), $<@Toupp(AS_NIMI), $<@Cnd(PVM).
$#
= Siirretään kirjoittimen kirjoituspäätä 1 mm alaspäin.
$#n
= Siirretään kirjoittimen kirjoituspäätä n mm alaspäin (max 9 mm)

Kirjoitinta ja tulostusta välittömästi ohjaavat käskyt sijoitetaan aivan alkuun kommenttirivien tapaan. Ainoana erotuksena on, että kommenttimerkin (<>) jälkeen tulee määritystä tarkentava kirjain.

<>Setup Tul.portti Ohjain Values <kirj. aset.> Nmbr n Page n Loc n Cond All = muutetaan oletuksena oleva tulostusportti (esim Lpt1) ja mahdollisesti myös kirjoitinohjain. Tämän määrityksen tulee olla tiedoston alussa, koska sillä on välittömästi merkitystä tulostusohjelmalle. Values- sanan jälkeen tulevat kirjoittimen arvot seuraavasti: Values Rivimax, käyttörivit, jatkuva/sivuittain, FormFeed/LF/Ei, Ei konversiota/256->128/128/256, rivin max mitta, vasen perusmarginaali, alkusivuja ilman numerointia, muotoile/ei muotoiluja. Esim: Values 72 61 0 0 0 120 4 0 0. Tämän jälkeen voi tulla lisää koodeja: Nmbr n = Tulostetaan teksti n kertaa, PageN n = Kirjoitetaan sivunumero, n määrittää muodon: 0 = Ei numeroa 1 = muodossa: 123 2 = muodossa: - 123 - 3 = muodossa: Sivu: 123, Loc n = Sivunumeron paikka, jolloin n on: 0 = Vasen reuna, 1 = Keskelle, 2 = Oikea reuna, Cond Aiheuttaa joukkokirjetulostuksessa sen, että ennen tulostusta käyttäjältä kysytään kenttäkohtaisia tulostusehtoja. Kyselyikkuna on sama kuin kortistoselauksessa painettu A ja All = Tulostetaan joukkokirje kaikista tietueista kyselemättä. Mikäli jokin kohta jätetään muuttamatta, sen tilalle annetaan '*'.

Esim: <>Setup Lpt1 C:11SYSTEM.PDR Val 61 61 Nmbr 2 Cond
<>Setup LAIHIA.TXT * Values 24 24 0 1 0 140 0 0 All

<>Form -käskyllä ilmoitetaan tulostimelle residentiksi jäävän lomakepohjan polku ja nimi.
<>DataBase -käskyllä ilmoitetaan joukkokirjeen kortistotiedosto. Esim:
<>DataBase C:.DBF.

Mikäli tiedostoa ei ole ilmoitettu, ohjelma kysyy sitä. Kortisto-ohjelmasta käynnistettynä kortiston nimi on ilman muuta selvä, silloin valittavana on ainoastaan mallitiedosto.

4.C. Yleinen tulostusmalli

Tulostusmalli tehdään erilliseen tiedostoon, esim. Ykkösen omalla editorilla. Mallin kukin rivi vastaa riviä tulostuksessa. Riville tuleva teksti kirjoitetaan lainausmerkkeihin. Riville kopioitavat tietueiden kentät kirjoitetaan esim: $SUKUNIMI, joka tarkoittaa, että tietueen kentästä SUKUNIMI kirjoitetaan kaikki merkit loppuvälilyönteihin asti. Kentästä voidaan ottaa eri määrityksin myös vähemmän. Kursori etenee tulostusvälineellä tekstien ja kenttämääritysten mukaan. Tulostusmallin pohjan voi tehdä pikamallin luontiruudussa ja tallettaa varsinaisen mallin pohjaksi F10:llä.

Kun mallitiedosto on valittu, annetaan ohjelmalle tulostustiedoston nimi ja käynnistetään tulostus. Mikäli mallissa on virheitä, ohjelma ilmoittaa niistä ja keskeytyy. Tulostuksen voi tehdä joko tietueittain tai koko kortiston kerrallaan. Tulostuksen voi ohjata joko tiedostoon tai suoraan kirjoittimelle (ensin mieluummin tiedostoon, jotta voi tarkastella tulostuksen oikeellisuutta):

Tulostusmalleissa voi myös käyttää laskentoja. Tätä varten ohjelmassa on 10 akkua, joihin viitataan käskyinä merkinnöillä &0...&9 ja argumentteina merkinnöillä A0...A9. Tietueen kentän aritmeettiseksi tulkitun sisällön (kentän ei tarvitse olla numerokenttä) voi laskea tietuekohtaiseen variaabeliin joko lisäten, vähentäen, kertoen tai jakaen. Huom! Akku 0 tyhjennetään jokaisen tietueen lopussa! Akkua 0 tarvitaan mm. jos tulostuksessa käytetään tasokatkokenttiä ja halutaan siirto- summat. Esim:

&0 SUMMA ;Akkuun 0 SUMMA-kentän sisältö. Siirtyy sisäisiin ;muuttujiin tietueen lopussa.
&1 HINTA ;Akkuun 1 sijoitetaan HINTA-kentän sisältö. Säilyy.
&4+ MUUTOS ;Akkuun 4 lisätään MUUTOS-kentän sisältö.
&2* 0.95 ;Akku 2 kerrotaan 0.95:llä (95 %).
&5Print ;Tulostetaan akku 5. Tulostusmuoto voi olla määritetty mallin alussa esim: &FORMAT %12.2f

ESIMERKKI 1.

> PUHALTAJIEN NUOTISTOLUETTELO
> Tämä teksti tulostuu vain yhden kerran aivan alkuun. Tämän tekstin
> loppumerkkinä on &START, joka samalla aloittaa varsinaisen mallin.

&START
" Tilausnumero: " $NRO 8 " Teos: " $TEOS NTS " Säveltäjä: " $COMP_ARR
" Vaikeus" $VAIKEUS NTS " Sivuja: " $SLKM 20
&C60 " Tietue n:o " &#
&END [varsinaisen mallin loppumerkki]

ESIMERKKI 2.

&PAGE 72 LINES ;Kirjoittimen sivun kokonaisrivimäärä.
&WRITE 64 LINES ;Sivulle kirjoitettava rivimäärä
&HEAD REKISTERI ;Pääotsikko tulostuksen alkuun
&SUB1 Rek. 456 ;Aliotsikko 1 tai rajausmerkintä joka sivun alkuun
&SUB2 ;Aliotsikko 2. Tässä vain rivinvaihto
&FILE TIED.TXT ;Tiedostonimi (tai PRN), johon tiedosto tulostetaan
&NODEL ;Tulostetaan tietueet, joita ei merkitty Alt-D:llä
" Työntekijärekisteri. Tietue n:o " &#
" Nimi: " $KENTTÄ1 24 " Osoite: " $KENTTÄ2
" Tehtävä yrityksessä: " $KENTTÄ3 60
" Palkkaus: " $KENTTÄ7
&IF { KENTTÄ7 > KENTTÄ8 } $KENTTÄ7
&END ;loppumerkki

Jos käytetään vain &WRITE -määritystä ilman &PAGE -määritystä, tulostetaan &WRITEn ilmoittamien rivien jälkeen sivunvaihto (FF). Tämä on käytännöllisempi vaihtoehto etenkin lasertulostimilla.

Tulostusmallissa voi myös käyttää mallin alussa sijoittavaa lauseketta muodossa &CHG <lauseke>. Kun tietueeseen tullaan ja se todella tulostetaan, suoritetaan ensin lauseke. Sitten suoritetaan tulostusmallin muut käskyt. Näin muutetun kentän voi tulostaa mallin normaaleilla käskyillä. Esim:

&CHG SUORITUS $$ @Date()
&Start
$NIMI NTS " " $SUORITUS NTS jne...

Tämä malli kirjoittaa päiväyksen jokaiseen tulostetun tietueen SUORITUS-kenttään.

ESIMERKKI 3.

&Head Soittajaluettelo
&Start &IF{ ("Trumpetti" ££ koulutus) & ("huilu" ££ koulutus) } &EndFind
$Sukunimi 20 " " $koulutus 15 " " $lähiosoite
&EndStart &IF{ "Opettaja" ££ koulutus) } &End
" " $Sukunimi 20 " " $Koulutus 15 " " $Lähiosoite
&End

Tämä malli tulostaa ensin ne jäsenet, jotka soittavat trumpettia tai huilua. Sen jälkeen siirrytään uudestaan kortiston alkuun ja tulostetaan ne, joiden ammatti on opettaja. &EndFind suorittaa lopullisen siirtymisen seuraavalla &EndStarilla alkavaan kohtaan, kun tietueet loppuvat. Samalla siirrytään tietueeseen 1.

Lauseke "Opettaja" ££ koulutus on tosi vain silloin jos opettaja-sanaa ei löydy kentästä koulutus. Jos näin on, suoritetaan käsky &End. Katso loogiset operaattorit tiedostosta "C:11SYSTEM1B.HLP". (Vihje: paina hiiren näppäintä tiedostonimen kohdalla).

Tulostusmallissa käytettävät merkit ja merkintätavat

Rivinvaihto tapahtuu mallissa olevan rivinvaihdon mukaisesti, ellei rivinvaihtoa estetä rivin lopussa &NL -merkillä. Jokainen mallin rivi vastaa siis tulostuksen riviä. Seuraavassa luettelo mallissa käytettä- vistä rakennusaineista ja käskyistä:

" Tekstiä " tekstiosuus, joka tulostuu jokaisen tietueen tulostuksessa. Aloita ja päätä tekstirivi aina lainausmerkeillä.

Jos mallin alussa on paljon tekstiä, käytä vaihtoehtoisesti rivin alussa väkästä:

> Koko rivi on tekstiä! Rivin alkuun vain väkänen.
> Tämä myös.

$kenttä n = Tulostetaan kentän sisältö. Kenttänimen kohdalla voi olla myös kentän järjestysnumero (0…) sekä montako merkkiä kentästä huomioidaan. Mikäli numeroa ei anneta, tulostetaan kenttä sen pituisena kuin sen maksimimitta on tietueessa. Kenttä tulostetaan siihen, mihin saakka tulostus on aiemmin edennyt. Seuraavaksi tulevat kentän tulostusta ohjaavat muut käskyt (nämä ovat ilman & -merkkiä!). Esim. $Nimi 40.

Kentän tulostustapaa määräävät apukoodit:

NLS Poistetaan kentän alusta välilyönnit
NTS
Poistetaan kentän lopusta välilyönnit
NLZ
Poistetaan kentän lopusta nollat
TSD
Lopussa olevat välilyönnit korvataan pisteillä
NOB
Mikäli kenttä on tyhjä, sitä ei tulosteta. Jos rivillä ei ole muita merkkejä, riviä ei tulosteta. ENDB Jos kenttä on tyhjä, ei tulosteta enää tietueen loppua
NY
Jos kentän ensimmäinen merkki on Y, K, T tai 1, ei tulosteta
NN
Jos kentän ensimmäinen merkki on N, E, F tai 0, ei tulosteta
ZN
Jos kenttä on tyhä, otetaan seuraava kenttä
NXT
Otetaan jatkoksi joka tapauksessa seuraava kenttä, jos tilaa jää
EB
Liitetään perään välilyönti, jos kentässä yleensä on jotakin
EP
Liitetään pilkku ja välilyönti
EK
Liitetään kauttaviiva
ES
Liitetään puolipiste
D0-D4
Desimaalien lukumäärä 0-4
TAB TAB...
Ennen kentän sisältöä tulostetaan TAB TAB ...
Rivin sisennys pitää tehdä TAB komennolla, kuten: $OSOITE NTS NOB TAB TAB
+, -, *, /
Matemaattinen laskenta. Kentässä oleva luku käsitellään operaattorin määräämällä tavalla. Kentän sisältämät numerot esim. lasketaan tietueittain yhteen. Katso &-käskyt.

Vaikutukseltaan pysyvät &-käskyt

Nämä käskyt asetetaan aivan mallin alkuriveille

&FILE fname Tulostus suoraan tiedostoon fname
&BREAK kenttänimi
[FormFeed] Tasokatkokentäksi kenttänimi. Kun nimetyn kentän sisältö muuttuu suoritetaan väli- tulostus, jossa tulostetaan akkuun 0 koottu summa sekä kokonaissumma siihen asti. Akku 0 nollataan. Mallissa pitää olla siis käsky '&0 kenttänimi'. Mikäli kenttänimen jälkeen on F:llä alkava sana, esim FormFeed, tulostetaan uusi sivu katkon jälkeen.
&PAGE n LINES
Kirjoitettavalla (PRN) sivulla kaikkiaan n riviä Merkinnällä &Page FF tulostetaan sivunvaihto, kun sivun rivit on käytetty (&Write n)
&WRITE n LINES
Sivulla kirjoitetaan n riville. Sen jälkeen joko tulostetaan tyhjiä rivejä kunnes &Page-käskyn n on täynnä tai sivunvaihtomerkki, jos on käytetty &Page FF.
&MARKED
Tulosta vain +:lla merkityt tietueet
&DELETED
Tulosta vain Alt-D:llä merkityt, deletoidut
&USEIND kenttä
Kortistossa edetään indeksoidun kentän mukaan
&FORMAT %n.df
Muutetaan murtolukujen tulostusta ohjaavaa formaattia. Formaatissa käytetään C-kielen mukaisia merkintöjä. Formaatti alkaa %-merkillä, sen jälkeen numeroiden määrä, sitten desimaali­numeroiden määrä ja lopuksi f. Esim. &FORMAT %10.2f
&NODEL
Ei tulosteta deletoituja
&HEAD
Pääotsake
&SUB1..3
Sivuotsake 1-3 kunkin sivun alkuun. Max pituus 250 mki.
&FN
Tulosta aina kenttänimet
&NOCON
Ei näytetä tulostettavia tietueita ruudulla
&NOB
Ei tulosteta tyhjiä kenttiä
&LM n
Tulostetaan aina vasen marginaali, jonka mitta on n
&@FNC()
Suoritetaan funktio. FNC:n tilalla jokin Ykkösen funktioista. Esim. &@Date() tuottaa tämän päiväyksen.
&CHG <lauseke>
Sijoittava lausemääritys. Kun tietueeseen tullaan ja jos se todella tulostetaan, suoritetaan ensin lauseke, sitten suoritetaan tulostusmallin käskyt. Näin voidaan saada esim. tietueen kenttään tulostuspäivämäärä. Tällä tavoin muutetun kentän voi tulostaa normaaleilla käskyillä.
Esim: &CHG SUORITUS $$ @Date() Lauseke sijoittaa SUORITUS-kenttään päiväyksen. ($$ on merkkijonon sijoitus).
&CHG HINTA = { 0.75 * HINTA }
&EFF
Suoritetaan sivunvaihto mallin tulostuksen jälkeen. Jos tulostuskohteena on ollut suoraan kirjoitin (PRN), viimeinen sivu on jäänyt aiemmin tulostimelle, ellei sivunvaihtoa ole tehnyt manuaalisesti.
&EFF4 Suoritetaan sivunvaihto joka neljännen tulostetun tietueen jälkeen. Huom! Katso myös &Page FF.

Kertavaikutteiset &-käskyt

Nämä käskyt sijaitsevat varsinaisen tulostusmallin keskellä.

&START Malli leikataan alkavaksi tästä. Ennen &START -käskyä voi olla mitä tahansa muita normaaleja käskyjä. Mallin alkuosan poisto on kätevä tapa muodostaa koko tulostukselle alkutekstiä. Kirjoita mallitiedoston alkuun otsikkotekstejä, taulukon otsakkeita, kenttäsisältöjä jne. Kun nämä ovat tulostuneet ja vastaan tulee &START -merkki, malli lyhennetään alkavaksi vasta tämän merkin jälkeen. Alkuteksti tulostuu vain kerran. Jäljempänä voi olla myös uusiakin &START -käskyjä.
&IFNOT { ehto }
&IF { ehto }
Arvioidaan ehto. Mikäli ehto antaa nollasta eroavan arvon, suoritetaan loppurivi. Muutoin koko rivi jätetään huomioimatta. Ehtolauseen tilalla voi myös olla STR0...9. Esim: &If { VUOSI < 1980 } &End, &Ifnot STR0 &End &{ lauseke } Tulostetaan lausekkeen arvo. Formaattina on 12 numeroa 2 desimaalilla, mikäli formaattia ole &Format -lauseella muutettu. Esim: &{ HINTA * 0.96 } Vain matemaattinen tulos voi olla tuloksena. Jos haluat merkkijonon, katso edellä &@Fnc().
&LF
Tulostetaan ylimääräinen rivinvaihto.
&+
Ei tulosteta seuraavaa rivinvaihtoa, seuraava rivi jatkaa.
&FF
Tulostetaan sivunvaihto (FormFeed, 12, 0x0C).
&Cnn
Siirry sarakkeeseen nn (jos se on vielä edessäpäin)
&Rnn
Siirry nn riviä alemmaksi.
&#
Tulosta tietuenumero (7mki)
&END
Loppumerkki, joka ei ole pakollinen, mutta hyödyllinen jos halutaan jättää mallin loppuun tyhjiä rivejä, jotka eivät aina selvästi erotu editoreissa.

Akkuihin vaikuttavat käskyt

Ykkösen mallitulostuksessa voi käyttää kymmentä akkua, joihin viitataan &nro -käskyllä. Numeron jälkeen seuraa operaation tunnus sekä argumentti.

&Nro[Operaattori] Kenttä/luku Mikäli numeron jälkeen ei ole operaattoria, akkuun sijoitetaan kentän arvo tai luku
&0 HINTA
Akkuun 0 sijoitetaan HINTA-kentän sisältö. Akku 0 nollautuu jokaisen tietueen lopussa. Käytä pysyvinä akkuina A1...
&5+ 76.4
Akkuun 5 lisätään luku 76.4.
&2-, &2*, &2/
Muut aritmeettiset toiminnot vastaavalla tavalla.
&4Print
Tulostetaan akun 4 sisältö. Muoto on joko %12.2f tai &FORMAT-käskyllä määritetty.
&4{ lauseke }
Lausekkeen arvo sijoitetaan akkuun 0, 1, jne

 

4.D. Tarratulostus

Tarrojen (esim. osoitetarrojen) tulostusohjelma käynnistyy kortiston selailusta Alt-P:llä. Valitse avautuvasta valikosta rivi TARRATULOSTUS.

Tarrat ovat yleensä A4-arkeilla, mutta toisinaan käteviä ovat myös matriisitulostimella käytettävät ketjutarrat. A4-arkilla tarroja on 2-4 sarakkeessa ja 6-12 rivissä. Eri tarra-arkit poikkeavat toisistaan joskus suurestikin. Tarran yläreunasta on tietty rivimäärä seuraavan tarran yläreunaan (laske se!) Tarran vasemmasta reunasta on tietty sarakemäärä seuraavan tarran vasempaan reunaan (laske myös se!) Tarrapaperin asettelusta kirjoittimelle riippuu, pitääkö tulostusrivi aloittaa marginaalilla. Yleensä (etenkin jos kirjoitin on laser) kannattaa tulostaa ensin paperille ja sitten vasta valokopioida tarpeellinen määrä paperilta tarralle. Muussa tapauksessa tulosta "koevedokset" yksitellen tai pieninä erinä.

Mikäli haluat joitakin osia tulostuksesta eri kirjasintyypeillä, selvitä itsellesi kirjoittimesi ohjauskoodit fonttien osalta. Ykkösen kirjoitinohjaintiedostot (ASCII-tiedostoja, joiden pääte on .PDR) tarjoavat runsaasti ohjauskoodimalleja tähän tarkoitukseen. Koodit käyvät tarratulostukseen sinänsä. Esim. IBM Proprinter ja sitä emuloivat kirjoittimet saadaan tulostamaan kaksoisleveää tekstiä koodilla ja lopettamaan se koodilla . Tarratulostuksessa koodin eteen on laitettava dollarimerkki ($), on ESC-merkki (27, 1Bh). Laserilla koodit ovat pidempiä.

Tarratulostusohjelman määritysikkuna näyttää seuraavanlaiselta:

 

Mallin nimi on sama kuin kortiston, mutta pääte on esim LBS. Tulostuksen voi tehdä muullakin mallilla; valitse malli F3:lla. Kun talletat tarratulostusmallia, anna päätteeksi LB1, LB2, LB3 jne.

Muut kysymysrivit:

1. Tulostuskohde. Oletuksena on kortistotiedoston nimestä muodostettu *.LAB -tiedosto. Tulostus voi tapahtua myös suoraan kirjoittimelle, jolloin nimen kohdalle kirjoitetaan esim. PRN, LPT1, Com1 jne.

2. Kenttänimet. Kenttänimet annetaan peräkkäin, välilyönnein erotettuina. Mikäli haluat kaksi kenttää samalle riville, lisää kenttänimien väliin & -merkki. Ylimääräinen rivinvaihto tapahtuu + merkillä. Tulostukseen voi lisätä myös sanoja; niiden alkumerkkinä on $ (esim: $Nimi: & #1 $Osoite: & #2 ... ). Kenttänimien valinta käy kätevimmin painamalla kenttänimikentissä F10. Mikäli ensimmäinen rivi ei riitä, jatka toiselle. Myös tulostusohjelma jatkaa pitkää riviä automaattisesti seuraavalle.

3. Korkeus riveinä. Laske montako riviä on tarran alusta seuraavan, alempana olevan tarran alkuun (8?).

4. Leveys merkkeinä. Laske montako saraketta (kirjainta) on tarran alusta vierekkäisen tarran alkuun (25?).

5. Tarra-arkin sarakkeita. Osoitetarrat ovat usein 2-4 sarakkeessa (siis 2-4 tarraa rinnakkain, oletus 3).

6. Tarrarivien lukumäärä. Tarra-arkilla on tarrarivejä ehkä 6-15 kpl. Kun tietty määrä rivejä on tulostettu, tulostetaan FF eli sivunvaihtomerkki (0x0C H, 12 D). Mikäli arvo on 0 (tai tyhjä), ei tulosteta sivunvaihtomerkkiä lainkaan (esim, jos tarrat ovat jatkuvalla arkilla matriisikirjoittimella) (oletus 8).

7. Vasen marginaali. Tarpeellinen etenkin silloin, kun tulostetaan suoraan kirjoittimelle (oletus 0).

8. Tarrojen väli. Horisontaalinen väli ilmoitetaan välilyönteinä tarralipukkeiden välissä. On syytä antaa 1-3 välilyöntiä, jotta pitkän tekstin katkaisukohta ei tulostuisi tarrojen väliin (oletus 1).

9. Lisäsiirto alaspäin. Tarrojen väli korkeussuunnassa ei osu aina rivinvaihtojen kohdalle, vaan lisäksi saatetaan tarvita lisäsiirto alapäin. Tämä annetaan millimetreinä ja toteutetaan ohjelman toimesta kirjoitinkohtaisena ohjauskoodina.

10. Ylämarginaali. Tarra-arkin alussa voi olla marginaali, jonka mitta annetaan tässä riveinä.

11. Mahdollinen ehtolauseke tai ehto, joka voi olla tarvittaessa hyvinkin mutkikas. Käytä ryhmittelyssä sulkumerkkejä. Esim: (YHTEISÖ == KUNTA), (SOITIN !! PIANO) Jos ehtosanan kohdalla on ?, ehto toteutuu jos kentässä on yleensä jotakin. MUUASIA == ? ; tulostetaan vain jos kentässä on jotakin. MUUASIA !! ? ; tulostetaan vain jos kenttä on tyhjä. F4 avaa kenttäkohtaisten hakuehtojen asetteluikkunan, joka saattaa olla monissa tilanteissa kätevin ehdon kirjoitustapa. F3:lla voi valita indeksin eli järjestyksen, jossa tarrat tulostetaan.

Kun tulostus on käynnistetty, ruudulle ilmestyy ensimmäinen tietue sekä kysymysikkuna, jossa voi käynnistää jatkuvan tulostuksen (Alt-A) tai tulostaa tarroja selaillen, yksitellen. On myös mahdollista tulostaa samaa tarraa useampia kappaleita (F3). Kysymysikkunassa voi myös etsiä haluamiaan tietueita (F4-F5). Tietuetta voi myös editoida (E).

Fonttia ei normaalisti tarvitse valita, mutta jos tarvitset esim. kapeampaa tai lihavampaa tekstiä, tarkista ensin kirjoitin ja valitse sitten jokin fontti painamalla Alt-F.

Saattaa olla, että ensimmäisissä tulostuksissa jokin arvoista ei ole vielä oikea, silloin tarvitaan hieman kokeilua. Tulosta koevedos tiedostoon tai tavalliselle paperille ja selaa valikosta tulostustiedostoa.

HUOM! Osoitetarrojen tulostusohjelmalla voi luonnollisesti suorittaa monia muitakin tulostuksia, joissa halutaan tulostaa peräkkäisistä tietueista kenttiä vierekkäin. Sarakkeiden lukumäärä voi olla käytännössä yli kymmenenkin. Kenttä- yms. määritteitä voi olla yhteensä 32.

Kenttämäärityksissä käytettävät merkintätavat

1. Kenttänimi tai #nro tulostuu omalle rivilleen. Määritys: NIMI NUMERO tulevat siis alakkain.

2. & estää rivinvaihdon. Määritys #1 & #2 & #3 &4 tulostaa kaikki kentät 1-4 samalle riville.

3. + aiheuttaa ylimääräisen rivinvaihdon. #1 + #2 tulostaa kentät 1 ja 2 siten, että välissä on tyhjä rivi.

4. $ on vakiotekstin alkumerkki. Esim. $Nimi: NIMI $Osoite: OSOITE. $-merkin jälkeen voi luonnollisesti asettaa mitä tahansa merkkejä, esim kirjoittimen ohjauskoodeja. On vain huomattava, että välilyönti, pilkku, tavuviiva, tabulaattori, puolipiste ja kontrollimerkit (0-31) edellyttävät merkintätapaa kenoviiva ja numero tai lyhenne. Välilyönti on merkittävä: \b. ESC-merkki (ASCII 27) lyhennetään \E . Myös funktiokutsu voi olla $-merkin jälkeen. Esim. $@Date().

5. ! tuottaa tietuenumeron.

6. < poistaa kentän alussa olevat välilyönnit. Näitä on useimmiten numerokentissä. < -merkki asetetaan ENNEN kenttänimeä. Esim. #1 < 2#.

 

4.E. Pylväikkötulostus­

Pylväikkötulostuksella kortisto kentistä saa pylväikköjä. Ohjelma kysyy tulostuksen määritystä, joka on muodossa: X-akselikenttä Y-akselikenttä flag/minimi ryhmitysväli

Pelkkä yhden kenttänimen antaminenkin riittää, jolloin ohjelma laskee kentässä olevien arvojen esiintymislukumäärät eli lasketaan vain X-akselille sijoitettavien arvojen lukumäärät. Jos käytetään muita argumentteja, puuttuva on korvattava tähdellä (*). Esim: VUOSI * * 10, jolloin vuosi-kentässä olevat vuodet ryhmitellään 10 jaksoihin.

Esimerkkinä molempien kenttien laskennasta voi olla vaikka tuotetyypin ja kilojen laskenta: TUOTETYPE VARASTOSSA. Ohjelma laskee kunkin tuotetyypin määrän varastossa ja esittäisi asian pylväinä.

Flag voi olla joko D tai minimiarvo (100-32000). Jos flag on D, X-akseli- kenttä käsitellään päiväyskenttänä (ellei jo ole DBF-määrityksessä). Flag voi myös olla minimiarvo, joka hyväksytään (100-32000). Edelleen flag voi olla 1, 2, 3, 4, 5. 1 = sama kuin D. 2 = otetaan lukumäärään mukaan vain, jos Y-kentässä on nollasta poikkeava arvo. 4 = otetaan lukumäärään mukaan vain, jossa Y-kentän arvo on nolla. 3 = Kohdat 1 ja 2 yhdessä. 5 = kohdat 1 ja 4 yhdessä.

Ryhmitysvälillä voi arvoja tiivistää, jos niiden määrä ylittää 70. Jos esim. arvoja on 180 kpl, voidaan merkitä: ARVOLUKU * * 3, jolloin ilmoitetaan arvot 3:n välein todellisesta minimistä alkaen.

 

5. Tietueiden lisääminen ja poistaminen

Muokkaustilassa tietueiden lisääminen tapahtuu helposti silloin, kun ollaan kortiston lopussa. Kun painetaan PgDn, lisätään automaattisesti uusi tietue. Mikäli automaattinen indeksointi on päällä, tietueen lisääminen kestää hetkisen pidempään. Jos haluaa lisätä tietueen johonkin väliin, on painettava ^N tai Alt-F9 sen tietueen kohdalla, jota ennen tietue halutaan. Valikossa on myös mahdollisuus lisätä joko tyhjä tietue tai näkyvän tietueen kopio kortiston loppuun. Näissä tapauksissa siirrytään myös loppuun.

Tietueen poistaminen tehdään komennolla ^Y. Mikäli tietueita on tarkoitus poistaa useita ja kortistossa on tuhansia tietueita, kannattaa tietueet ensin merkitä poistettaviksi Alt-D:llä tai miinusmerkillä, minkä jälkeen poistaminen tapahtuu kerralla komennolla D.

Kun tietueita lisätään kortiston loppuun, saattaa olla tarpeen kopioida viimeisestä tietueesta joitakin kenttiä uuteen. Määritys tapahtuu valintaikkunassa, joka avautuu ^N:llä ja siellä: 'Kopioi KENTTIÄ uuteen tietueeseen (kentät kysytään)'. Kirjoita kopioitavat kenttänimet välilyönnillä erotettuina. Mikäli kentässä on numero ja sitä pitää uudessa tietueessa lisätä tai vähentää yhdellä, kirjoita kenttänimen eteen + tai -.

Tietueita voi lisätä myös puoliautomaattisesti. Ykkösen kortistoon voi tuoda tietoja monella tavalla erilaisista siirtotiedostoista. Tärkein tietojen tuontitapa avautuu Alt-I:llä selailutilassa. Ensin kuitenkin ohjelma kysyy, mistä tietoja tuodaan. Tietojen tuontitapoja on useita, ja kaikki edellyttävät tiedostojen rakenneperiaatteiden tuntemusta:

1. Jokaisesta rivistä tulee 1 kenttä ($-rivi voi lopettaa).
2. Rivistä tulee koko tietue. Kenttäerotin kysytään (;,/ jne.).
3. Riviltä otetaan tietyt, kiinteät merkkimäärät kenttiin.
4. Tietue kootaan binääritiedostosta. Kenttämitat kysytään.
5. Otetaan kortiston kenttien pituiset määrät binääritiedostosta.
6. Ilmoita binääritietueen mitta sekä kenttäalut ja kenttämitat
7. Ilmoita binääritietueen mitta sekä tavukohdat, joissa pituudet

 

6. Lajittelu ja indeksointi

Mikäli mahdollista kortisto on aina lajiteltava tai indeksoitava. Lajittelu ja indeksointi tapahtuvat komen­noilla S ja I. Ohjelma kysyy avainkenttiä, siis kenttiä, joiden mukaan kortisto lajitellaan. Memo -kenttiä ei huomioida. Avainkenttiä voi selailla valintaikkunassa PgDn/PgUp:lla tai niitä voi kerätä ruudulla hiirellä.

Ykkönen lajittelee nopealla lajittelumenetelmällä muistitilasta riippuen useita tuhansia tietueita. Mikäli tietueita on enemmän, käytetään hieman hitaampaa lajittelua. Silloin tietueita voi olla hyvinkin paljon Lajittelumenetelmän voi myös itse määrätä F4:lla (tosin harvoin tarpeellista).

Lajitteluavaimen kokonaismitan voi määrittää F9:lla. Jos avainkenttiä on useita, merkkimäärä jaetaan tasan kenttien kesken. Lajittelu voidaan tehdä joko nousevana tai laskevana (F5), ei kuitenkaan kenttäkohtaisesti eri tavoin. Mikäli kentät sisältävät numeroita, lajittelu on tehtävä numeerisena (F6). Satunnaistavan "lajittelun" saa painamalla Alt-F6.

Mikäli kortistossa on useita samanlaisia tietueita (syntynyt esim. yhdistelyn tuloksena), voidaan F7:lla määrätä samanlaiset tietueet poistettaviksi. Alt-F7:lla voidaan määrittää tavumäärä, jolla vertailu suoritetaan tietueen alusta lähtien. Mikäli kortisto sisältää MEMO-kenttiä, on todennäköistä, että poistettujen tietueiden MEMOja jää turhaan memotiedostoon. Uusi kortisto on syytä kopioida vielä kerran uuteen tiedostoon X-komennolla ja siinä valinnalla "myös MEMO", jolloin vain tarpeelliset MEMO-kentät kopioituvat numerojärjestykseen.

Usein nimien edessä on jokin lyhenne, esim "OY", "von" tms. Tämä lyhenne voidaan jättää lajittelussa huomioonottamatta, kun F8:lla kerrotaan ohjelmalle, mikä lyhenne on. Lyhenne jää pysyvään muistiin ja sitä ei huomioida myöskään silloin binäärihaussa (F5, jossa sanan voi vaihtaa F6:lla).

Kentän indeksointi on kuten lajittelu, mutta kortiston tietueita ei järjestetä fyysisesti uudelleen. Indeksoinnissa lajittelun tulos kirjoitetaan eri tiedostoon (pääte .1ND) ja sinnekin vain uudet järjestysnumerot. Indeksointi otetaan käyttöön painamalla selailutilassa I (tai F1-valikon kautta). Valinta­listasta voi valita jonkun indeksoiduista kentistä. Kortiston tietueet näyttäytyvät käyttäjälle lajiteltuina. F5-haku käyttää indeksointia automaattisesti, jos indeksointi on tehty. Indeksoinnin voi tehdä kenttä kerrallaan kaikille kentille.

Jos kortistosta poistetaan tietueita tai niitä lisätään, indeksointi ei ehkä enää päde, jos automaattinen indeksoinnin tarkistus on ollut pois päältä. Indeksoinnin päivitys tapahtuu käskyllä R (tai F1-valikosta). Kaikki aiemmin indeksoidut kentät indeksoidaan lajittelumäärityksineen uudelleen (paitsi valinta F7).

 

7. Verkko-ominaisuudet

Kun tietokoneet ovat verkossa, toimenpiteiden kohteiksi voi tulla sama kortistotiedosto. Kun tietoa vain haetaan, mitään ongelmaa ei synny. Mutta kun tietoja täydennetään, syntyy monenlaisia loogisia ongelmia ja prioriteettikiistoja. Verkossa samaa kortistoa voi huoletta muokata useampi henkilö, mutta kortiston samaa tietuetta muokatessa syntyy kiista siitä, kuka saa tallettaa tietonsa siihen. Tämäkin on mahdollista - tietyin varauksin. Saman tietueen eri kenttiä voidaan muokata ja tallettaa. Samaa kenttää talletetaan kuitenkin "kilpaa", mikä näkyy kentän epämääräisenä käyttäytymisenä. Ykkösessä on monen tasoisia lukituksia ja verkkopäivityksiä, joilla pyritään automaattisesti estämään "kilpatalletus", mutta antamaan silti mahdollisuus muokata kortistoa samanaikaisesti eri työasemilta. Verkkopäivityksen nopeus määritetään Ykkösen asetusten kohdassa 'Numeroarvoja'. Taulukkomuodossa verkkopäivitys toimii myös normaalisti. Käyttämällä mieliku­vitustaan, taulukko­muodossa voi saada aikaan hyvinkin erikoisia verkon sisäisiä viestintäjärjestelmiä.

 

8. Tietueiden vieminen toiseen kortistoon X

Vanhanaikaisessa, oikeassa pahvikortistossa oli helppo viedä kortteja kortistosta toiseen. Ykkösessä korttien vieminen tapahtuu kopioimalla tietueita. Alkuperäiset tietueet jäävät, ellei niitä poista.

X-komennon jälkeen ohjelma kysyy kortistoa, jonne viedään. Mikäli resurssienhallintataulussa painetaan F3, voidaan kirjoittaa aivan uusi DBF-nimi; ohjelma luo uuden kortiston. Vienti tapahtuu joko selaillen tai kaikki kerrallaan.

Tietueita voi selailla nuolin. ENTERILLÄ viedään tietue kohdekortiston loppuun. Alt-A:lla viedään näkyvä tietue ja kaikki jäljempänä olevat. Mikäli tietue on -DEL- -merkitty sitä ei viedä. Tietuetta ei myöskään viedä ellei sen kenttä täytä kopiointiehtoa. Mahdollinen kopiointiehto on vastaava kuin muuallakin. Plus- ja miinus -merkeillä voi etsiä +/- -merkityt.

Memokentät kopioidaan myös, ne tulevat nyt uuteen, tiiviiseen järjestykseen. Mikäli memotiedosto puuttuu kohdekortistosta, se luodaan.

 

9. Kortiston päivitys toisesta kortistosta tai toiseen kortistoon

Selailutilasta pääset kortistojen päivitykseen suoraan U-komennolla. Päivitykseen pääset myös X-valikosta Alt-U -komennolla. Tällä toiminnolla voidaan verrata kortistoja tai päivittää isäntäkortistoa apukortiston tiedoilla.

Kun toiminto avataan, Ykkönen esittää välittömästi ensimmäisten tietueiden vertailutuloksen. Oletusarvona on, että kortistot verrataan tietue tietueelta olettaen, että kortistoissa on sama määrä tietueita. Kummankin kortiston tietueita voi siirtää samanaikaisesti nuolinäppäimillä PgUp ja PgDn. Mikäli tietuemäärä on erilainen, esim. isäntäkortisto on laajempi, on siirrettävä vain toista. Nuolella oikealle ja vasemmalle siirtyy 'MISTÄ'-kortiston tietue. Ctrl ja nuoli oikealle ja vasemmalle siirtävät 'MIHIN'-kortiston tietueita. Mikäli kortistot on aakkostettu, vertailutavan olisi oltava binäärietsintä (F5). Tällöin tietue etsitään ensimmäisen kentän mukaan automaattisesti 'MIHIN' -kortistosta.

Jos painat Alt-A, ohjelma vertaa tietueita niin kauan kun ne ovat samanlaisia. Jos kaikki olivat samanlaisia, ohjelma palaa näyttämään tietuetta 1. Huomaa, että vain 'MISTÄ' -kortiston tietueet verrataan. Mikäli haluat tehdä myös päinvastaisen päivityksen, avaa kortistot myös päinvastoin.

Mikäli ohjelma pysähtyy ja ilmoittaa, että tietueet ovat erilaisia, voit editoida kumpaakin kortistoa vuorotellen. Paina F1 tai F2, sen jälkeen voit siirtyä kortistosta toiseen F3:lla ja siirtää rivejä toisesta toiseen (Alt-Y, Alt-R). Tietueen voit kopioida 'MISTÄ'-kortistosta 'MIHIN'-kortistoon painamalla C. Jos tietuetta ei lainkaan löydy, voit siirtää sen uutena kortistoon ASIAK.DBF. Toimenpide kestää hetkisen, koska tietue siirretään väliin eli aakkosjärjestyksessä oikealle kohdalle.

Plus- tai miinus -merkittyihin pääset nopeasti +/- -merkeillä.

 

10. Kenttien välinen laskenta ja sijoitus kenttään

Ykkösessä on kätevä mahdollisuus laskea lausekkeen arvo ja sijoittaa se pysyvästi johonkin kenttään (tai ruudulle). Lausekkeessa voi olla kenttänimiä ja funktioita. Matemaattisessa sijoituksessa käytetään '=' -merkkiä, merkkijonojen sijoituksissa '$$'-merkkiä ja aika-arvojen sijoituksissa '!'-merkkiä. Esimerkkejä:

HINTA = BRUTTO - ALENNUS
TULOS = ((@Sqrt(ARVO5-ARVO6) - @Log(ARVO2) / (LUKUM -1))
NIMI $$ @X0024(KOKONIMI)
HUOMIOT $$ "Nimi: " NIMI " Lasku maksettu myöhässä! " LPVM
AIKA ! LOPPUAIKA - ALKUAIKA

HUOM! Sijoittava laskenta saattaa olla kohtalokas varomattomasti käsiteltynä, sijoituskentän aiempi sisältö muuttuu lopullisesti. Testaa kaava ensin kuvaruudulla: CON = <kaava>. Sijoittava laskenta poistetaan päältä painamalla Alt-F10 ja ESC. Tee myös varmistuskopio!

 

11. Kortistojen käyttö ohjelmatulkeilla

Ykkösessä on kaksi mahdollisuutta parantaa kortistojen käytettävyyttä. Helpoin tapa on tehdä ruutumääritys, jossa ilmoitetaan kenttien sijoitus ruudulla, otsakkeet, opastustekstit ja useita muita määreitä. Ykkösen version TH2006 palkanlaskentaohjelma käyttää osittain tätä menetelmää. SCR-päätteisen tiedoston rakentamisesta on oma ohjeensa.

Monipuolisempi joskin paljon vaativampi tehtävä on rakentaa kortistoja käyttävä tietokantaohjelma Ykkösen omalle, sisäänrakennetulle sovelluskehittimelle. Ohjelman rakentaminen muistuttaa melko pitkälle tunnettujen neljännen sukupolven sovelluskehittimien ohjelmointia. Koska ohjelmaa ei käännetä konekielelle, vaan se tulkitaan, se muistuttaa myös Internetin yhteydessä esille tulleita sovelmia (script). Ohjelman käskyillä voidaan avata ja sulkea kortistotiedostoja ja rajoitetummin muitakin tiedostoja. Käskyistä on olemassa (ainakin tällä hetkellä iäkäs) opastuksensa. Kortiston käsittelyä varten on rakennettu useita käskytyyppejä. Mutkikkaatkin toiminnot voidaan suorittaa vain muutamilla käskyillä. Ohjelma on tiedostossa, jonka Ykkönen tuntee tiedostopäätteestä .1DB. Ykkönen esitulkitsee ohjelman tiedostoon, jonka pääte on .RDB. Ykkösen versiossa TH2006 tällä tavalla rakennettuja ohjelman osia ovat reskontrat, kirjanpito-ohjelma, asiakas- ja tuoterekistereiden käsittelyt sekä jäsenrekisteriohjelma. Aikaisemmin tärkeällä sijalla olivat myös liikennöintiin liittyvät ohjelmoinnit (.1CS).

Ohjelmointi edellyttää jo suppeassakin muodossaan suuren käsky- ja tietomäärän hallitsemista. Tässä yhteydessä ohjelmoinnin tekniikkaa ei voida selostaa, koska vähimmilläänkin ohjelmointiohje käskykuvauk­sineen vaatii yli 100 sivua.

© Narvasoft, 2001