method open(var eventInfo Event) ;Päälomakkeen avaus. Määritellään arvot globaaleille muuttujille ;Ohjelman on laatinut v. 2002 Kai Timoskainen, 82300 Raakkyla, puh 050 520 1128 var asetus TCursor endVar asetus.open("asetus.DB") kassahakem=asetus."KassanHakemisto" tuotetiedosto=asetus."KassanTuoteTiedosto" ryhmat=asetus."TuoteryhmaTiedosto" rivit=asetus."SivulleMahtuuRiveja" yritys=asetus."YrityksenNimi" alustus=asetus."KirjottimenAlustusKoodi" Alv=asetus."AlvOletus" prosentti=asetus."MPProsentti" asetus.close() Ohjeloota.Visible=False Napinteksti.text="Tuot tekstitieedosto" endMethod Var yritys, kassahakem, tuotetiedosto, ryhmat, rivit, alustus string prosentti, Alv number painettu logical ;globaalit muuttujat endVar Const True=logical(1) False=logical(0) endConst Var Opainettu logical EndVar method pushButton(var eventInfo Event) if Opainettu.isAssigned() then Opainettu=not(Opainettu) else Opainettu=True endIf if Opainettu then OhjenapNimi.Text="SULJE OHJE" Ohjeloota.visible=True Asetukset.Visible=False Etsinimet.visible=False Lasketaan.Visible=False MUOKKAARYHMIÄ.Visible=False Naytataulu.Visible=False Tiedostonnimi.Visible=False Tilausnumero.Visible=False Tulosta.Visible=False Tuokassasta.Visible=False Tuopaatteelta.Visible=False Tyhjenna.Visible=False Mainos.Visible=False Else OhjenapNimi.Text="OHJEITA" Ohjeloota.visible=False Asetukset.visible=True Etsinimet.visible=True Lasketaan.Visible=True MUOKKAARYHMIÄ.Visible=True Naytataulu.Visible=True If painettu.isAssigned() then Tiedostonnimi.Visible=painettu Else Tiedostonnimi.Visible=False endIf Tilausnumero.Visible=True Tulosta.Visible=True Tuokassasta.Visible=True Tuopaatteelta.Visible=True Tyhjenna.Visible=True Mainos.Visible=True endIf endMethod method pushButton(var eventInfo Event) ;Näytä inventaari-nappulan koodi var tv TableView endVar ;enumOpenDatabases("invtulos.DB") tv.open("invtulos.DB") endMethod method pushButton(var eventInfo Event) ;muokkaa tuoteryhmätiedostoa var tryhv TableView endVar ;tryhv.edit() tryhv.open(ryhmat+".DB") ;tryhv.endEdit() endMethod method pushButton(var eventInfo Event) ;muokkaa tuoteryhmätiedostoa var tryhv TableView endVar ;tryhv.edit() tryhv.open(ryhmat+".DB") ;tryhv.endEdit() endMethod method pushButton(var eventInfo Event) ;etsinimet-proseduuri etsii tuotteillenimet ja hinnat Ean-koodeilla Var tuoter array[99] string vero, tuotto array[99] number s, koodi, vkoodi, apukoodi string Ostohinta, Myyntih, kpl number Tr, i SmallInt nk, tuoteluku, testi longint tuotenimi, Lisan, numero string Tc1, Tulost, Osastot Tcursor EndVar EtsinTeksti.Text="Odota Hetkinen..." Tc1.Open(tuotetiedosto+".db") tuoter.fill("Tuoteryhmätuntematon") vero.fill(Alv) tuotto.fill(prosentti) Osastot.Open(ryhmat+".DB") scan Osastot: ;luetaan osastojen tiedot muistiin tuoter[numVal(Osastot."Department")]=Osastot."Name" vero[numVal(Osastot."Department")]=Osastot."Vat" tuotto[numVal(Osastot."Department")]=Osastot."Profit" endScan Osastot.close() nk=0 Tulost.Open("invtulos.DB") Tulost.Edit() scan Tulost: If IsBlank(Tulost."Nimi") Then koodi=Tulost."Ean" try If numVal(koodi)>99 then vkoodi=rTrim(koodi) numero=lTrim(vkoodi) apukoodi="0"+numero if numero.size()<13 then koodi=space(13-numero.size())+numero endif If Tc1.Locate("Ean",koodi) Then Tuotenimi=Tc1."Name" Tr=Tc1."Department" Lisan=Tc1."Foreign_name" Lisan="Lisat. "+Lisan.subStr(1,19) Ostohinta=Tc1."Cost" Myyntih=Tc1."Sell_price" Tulost."Nimi"=Tuotenimi Tulost."Lisanimi"=Lisan Tulost."Ostoh"=Ostohinta Tulost."Hinta"=Myyntih Tulost."Alv"=vero[Tr] Tulost."Osasto"=Tr Else if apukoodi.size()<13 then apukoodi=space(13-apukoodi.size())+apukoodi endif If Tc1.Locate("Ean",apukoodi) Then Tuotenimi=Tc1."Name" Tr=Tc1."Department" Lisan=Tc1."Foreign_name" Ostohinta=Tc1."Cost" Myyntih=Tc1."Sell_price" Tulost."Nimi"=Tuotenimi Tulost."Lisanimi"=Lisan Tulost."Ostoh"=Ostohinta Tulost."Hinta"=Myyntih Tulost."Alv"=vero[Tr] Tulost."Osasto"=Tr endif EndIf ;tc1.locate else nk=int(numVal(koodi)) Tulost."Nimi"=Tuoter[nk] Tulost."Lisanimi"="Inventoitu myyntihinnoin" Tulost."Ostoh"=Tulost."Hinta"*(100-tuotto[nk])/100 Tulost."Alv"=vero[nk] Tulost."Osasto"=nk endif ;koodi onFail ;koodin annetaan olla endTry endif ;isblank endscan Tulost.endEdit() EtsinTeksti.Text="Etsittiin nimiä." EndMethod method pushButton(var eventInfo Event) ;Muokataan asetustiedostoa Var Asetusket tableView ;Asetus Tcursor EndVar Asetusket.Open("asetus.db") ;Asetusket.Close() {asetus.open("asetus.DB") kassahakem=asetus."KassanHakemisto" tuotetiedosto=asetus."KassanTuoteTiedosto" ryhmat=asetus."TuoteryhmaTiedosto" rivit=asetus."SivulleMahtuuRiveja" yritys=asetus."YrityksenNimi" alustus=asetus."KirjottimenAlustusKoodi" Alv=asetus."AlvOletus" asetus.close()} endMethod Var foreignpainettu smallint endVar method pushButton(var eventInfo Event) close() ;lopetus-näppäimen painallus sulkee ohjelman endMethod method pushButton(var eventInfo Event) ;Etsitään tuotetiedot tilausnumerolla ;Finding products by EAN(UPC) codes. var Osastot, Tc1, Tilnr, Tulost TCursor otenimi, koodi, vkoodi, numero, tuotenimi, lisan, tilnum, tr string ostohinta, myyntih number vero array[99] number sanoja array[] string endVar TilnoTeksti="Odota hetkinen..." Osastot.Open(ryhmat+".DB") ;First we scan department file vero.fill(Alv) ;in order to find vat percentages scan Osastot: ;luetaan osastojen tiedot muistiin vero[numVal(Osastot."Department")]=Osastot."Vat" endScan osastot.close() Tilnr.Open("tilausno.db") Tc1.Open(tuotetiedosto+".db") if Tilnr.cCount(1)<1 then ;We check if there are records in Tilnr.edit() ;file. If not we collect the file scan Tc1: ;with ordering nos koodi=Tc1."Ean" vkoodi=Tc1."Foreign_name" vkoodi.breakApart(sanoja) if sanoja.size()>0 then Tilnr.insertAfterRecord() Tilnr."Tilausno"=sanoja[1] Tilnr."Ean"=koodi endif endscan Tilnr.endEdit() endif Tulost.Open("invtulos.DB") ;Then the Real Work begins. Tulost.Edit() scan Tulost: If IsBlank(Tulost."Nimi") Then koodi=Tulost."Ean" try If numVal(koodi)>99 then ;Do not find products with codes vkoodi=rTrim(koodi) ;less than 100 numero=lTrim(vkoodi) if (Tilnr.Locate("Tilausno",numero)) then koodi=Tilnr."Ean" If (Tc1.Locate("Ean",koodi)) Then errorTrapOnWarnings(Yes) Tuotenimi=Tc1."Name" ;Now we find names, prices etc. Tr=Tc1."Department" ;information Lisan="ean:"+koodi Ostohinta=Tc1."Cost" Myyntih=Tc1."Sell_price" Tulost."Nimi"=Tuotenimi ;And save all information. Tulost."Lisanimi"=Lisan Tulost."Ostoh"=Ostohinta Tulost."Hinta"=Myyntih Tulost."Alv"=vero[int(numVal(Tr))] Tulost."Osasto"=Tr errorTrapOnWarnings(No) Else ;Show errors in Finnish koodi.view("Ei löydetty ean-koodia") endif ;koodi else endif ;tilnot.locate endif ;isblank onFail ;If Trying is not succesfull ;etsinnänm epäonnistuessa luovutetaan ;We leave it alone. endTry endif endscan tulost.endEdit() TilnoTeksti.Text="Etsintä lopetettu." endMethod method pushButton(var eventInfo Event) ;Etsitään tuotetiedot tilausnumerolla ;Finding products by EAN(UPC) codes. var Osastot, Tc1, Tilnr, Tulost TCursor otenimi, koodi, vkoodi, numero, tuotenimi, lisan, tilnum, tr string ostohinta, myyntih number vero array[99] number sanoja array[] string endVar TilnoTeksti="Odota hetkinen..." Osastot.Open(ryhmat+".DB") ;First we scan department file vero.fill(Alv) ;in order to find vat percentages scan Osastot: ;luetaan osastojen tiedot muistiin vero[numVal(Osastot."Department")]=Osastot."Vat" endScan osastot.close() Tilnr.Open("tilausno.db") Tc1.Open(tuotetiedosto+".db") if Tilnr.cCount(1)<1 then ;We check if there are records in Tilnr.edit() ;file. If not we collect the file scan Tc1: ;with ordering nos koodi=Tc1."Ean" vkoodi=Tc1."Foreign_name" vkoodi.breakApart(sanoja) if sanoja.size()>0 then Tilnr.insertAfterRecord() Tilnr."Tilausno"=sanoja[1] Tilnr."Ean"=koodi endif endscan Tilnr.endEdit() endif Tulost.Open("invtulos.DB") ;Then the Real Work begins. Tulost.Edit() scan Tulost: If IsBlank(Tulost."Nimi") Then koodi=Tulost."Ean" try If numVal(koodi)>99 then ;Do not find products with codes vkoodi=rTrim(koodi) ;less than 100 numero=lTrim(vkoodi) if (Tilnr.Locate("Tilausno",numero)) then koodi=Tilnr."Ean" If (Tc1.Locate("Ean",koodi)) Then errorTrapOnWarnings(Yes) Tuotenimi=Tc1."Name" ;Now we find names, prices etc. Tr=Tc1."Department" ;information Lisan="ean:"+koodi Ostohinta=Tc1."Cost" Myyntih=Tc1."Sell_price" Tulost."Nimi"=Tuotenimi ;And save all information. Tulost."Lisanimi"=Lisan Tulost."Ostoh"=Ostohinta Tulost."Hinta"=Myyntih Tulost."Alv"=vero[int(numVal(Tr))] Tulost."Osasto"=Tr errorTrapOnWarnings(No) Else ;Show errors in Finnish koodi.view("Ei löydetty ean-koodia") endif ;koodi else endif ;tilnot.locate endif ;isblank onFail ;If Trying is not succesfull ;etsinnänm epäonnistuessa luovutetaan ;We leave it alone. endTry endif endscan tulost.endEdit() TilnoTeksti.Text="Etsintä lopetettu." endMethod method pushButton(var eventInfo Event) ;Tuodaan tuote- ja tuoteryhmätiedostot kassaohjelmasta var tulno Table fs ,trtied FileSystem valinta, sourceFile string tblToIndex String tblVar Table indexedFlds Array[] String endVar tulno.attach("tilausno.db");tyhjennetään vanha muuntotiedosto, jolla tulno.empty() ;muunnetssn tilsudnumrot EAN-koodeiksi if fs.findFirst(tuotetiedosto+".*") then fs.delete(fs.name()) while fs.findNext() fs.delete(fs.name()) endWhile else msgInfo("tuotetiedostoja? ", "Tiedostoja ei löydetty inventaarihakemistosta.") endIf sourceFile=kassahakem+"\\"+tuotetiedosto+".db" if fs.findFirst(sourceFile) then if fs.copy(sourceFile, tuotetiedosto+".db") then message(sourceFile + " copied to " + tuotetiedosto) else message("Ei onnistunut...") endif else msgInfo(sourceFile, "Tiedostoa ei löydetty kassahakemistosta.") endIf tblToIndex = tuotetiedosto+".db" if isTable(tblToIndex) then tblVar.attach(tblToIndex) if not tblVar.lock("Full") then msgStop("Seis!", "En voi lukita " + tblToIndex + " -taulua.") return endIf INDEX tblVar ; create new primary index for Plu.db PRIMARY ;indeksoidaan EAN-hakua varten ON "Group", "Department", "Ean" ENDINDEX ; now display File's keyed fields in a dialog box ;tblVar.enumFieldNamesInIndex(indexedFlds) ;indexedFlds.view("Primary key fields for " + tblToIndex) else msgStop("Stop!", "En löydä " + tblToIndex + " -tiedostoa.") endIf {if isTable(tblToIndex) then tblVar.attach(tblToIndex) if not tblVar.lock("Full") then msgStop("Stop!", "Can't lock " + tblToIndex + " table.") return endIf INDEX tblVar ; create secondary index for tuotetiedosto MAINTAINED ; maintain index incrementally ON "Foreign_name" ; Tilausnumero lisänimi-kentässä TO "Tilausnumero" ; name the index "Tilausnumero" ENDINDEX ; now display Customer's keyed fields in a dialog box tblVar.enumFieldNamesInIndex("Tilausnumero", indexedFlds) indexedFlds.view("Fields in the Tilausnumero index") else msgStop("Stop!", "Can't find " + tblToIndex + " table.") endif} valinta=msgYesNoCancel("Tuoteryhmätiedosto","Tuonko myös tuoteryhmätiedoston. Tekemäsi muutokset tuhoutuvat, jos tuon!") switch case valinta="Yes": sourceFile=kassahakem+"\\"+ryhmat+".DB" if trtied.findFirst(sourceFile) then if trtied.copy(sourceFile, ryhmat+".DB") then message(sourceFile + " kopioitiin " + ryhmat) else message("Kopiointi epäonnistui...") endif else msgInfo(sourceFile, "Tiedostoa ei löydetty.") endIf case valinta="No": message("Kopiointia ei tehdä. Tekemäsi muutokset säilyvät") case valinta="Cancel": message("Kopiointia ei tehdä. Tekemäsi muutokset säilyvät") endSwitch endMethod var eiajettu logical tekstit string endvar ;tämä proseduuri tuo tilauspäätteen tekstitiedoston ja alkaa etsiä t. method pushButton(var eventInfo Event) var arBroken, tuotuteksti, koodino, maara, hinta Array[] string valinta, lause string fs fileSystem inputti, valit, tulostied Tcursor sanoja Array[4] string nuBroken, i smallint testi number myMemo memo endvar tekstit="tiedosto.txt" eiajettu=logical(1) sanoja.fill(" ") Vihjeteksti="Tiedosto?" if painettu.isAssigned() then painettu=not(painettu) else painettu=True endif if painettu then Tiedostonnimi.Visible=True Paatet.Text=tekstit Napinteksti.Text="Kirjoita tekstitiedoston nimi ja paina tästä" eiajettu=False else if eiajettu then Napinteksti.Text="Luettiin tekstitiedosto" endif Tiedostonnimi.Visible=False tekstit=Paatet.Text tekstit=rTrim(lTrim(tekstit)) ;--- myMemo.readfromfile(tekstit) ;Luetaan tekstitiedosto ns. memoksi ;myMemo.breakapart(arBroken, chr(10)) ;rivitetään taulukkoon Unixin rivinloppumerkistä myMemo.breakapart(arBroken, chr(10)+chr(13)) ;generic, works whether (13) is there or not myMemo.blank() ;memo joutaa mennä, ei tarvita enää. ;arBroken.view() valit.open("invtulos.DB") ;ladataan tiedot taulukkoon valit.edit() for nuBroken from arBroken.size() to 1 step -1 ;luetaan array-taulukkoa takaperin! if arBroken[nuBroken].size()>=1 then ;eihän kannata tutkia tyhjää ; process this array element ;inputti.open("input.DB") ;valit.open("invtulos.DB") ;valit.edit() ;scan inputti: valit.insertAfterRecord() lause=arBroken[nuBroken] ;tuodaan taulukosta yksi rivi ; lause.view() ;katsotaan nyt testatessa lause.breakApart(tuotuteksti) ;pilkotaan se sanoiksi(numeroiksi) ;tuotuteksti.view() for i from 1 to 3 if tuotuteksti.size()>=i then ;tyhjää ei tutkita ;tuotuteksti[i].view() if tuotuteksti[i].isAssigned() then sanoja[i]=tuotuteksti[i] ;sanoja[i].view() endif {try ;testaamme, onko muistissa oikeita lukuja testi=numVal(sanoja[2]) ;testi.view() onfail sanoja[2]="0" sanoja[3]="0" endtry} switch ;Tämä on se varsinainen talletus case i=1: valit."Ean"=sanoja[1] case i=2: valit."Maara"=sanoja[2] case i=3: valit."Hinta"=sanoja[3] endSwitch endif endFor ;endscan ; valit.endEdit() ;pilkonta loppui else arBroken.remove(nuBroken) ; since you are stepping backwards you can remove array items endif endfor valit.endEdit() ;--- { importAsciiFix(tekstit,"input.DB","inptype.DB") inputti.open("input.DB") valit.open("invtulos.DB") valit.edit() scan inputti: valit.insertAfterRecord() lause=inputti."Field1" ;tuodaan taulukosta yksi rivi lause.breakapart(tuotuteksti) ;pilkotaan se sanoiksi(numeroiksi) for i from 1 to 3 if tuotuteksti.size()>=i then if tuotuteksti[i].isAssigned() then sanoja[i]=tuotuteksti[i] endif try ;testaamme, onko muistissa oikeita lukuja testi=numVal(sanoja[2]) onfail sanoja[2]="0" sanoja[3]="0" endtry switch case i=1: valit."Ean"=sanoja[1] case i=2: valit."Maara"=sanoja[2] case i=3: valit."Hinta"=sanoja[3] endSwitch endif endFor endscan valit.endEdit()} valinta = msgYesNoCancel("Poisto?", "Poistanko päätetiedoston? "+tekstit) switch case valinta = "Yes" : message("Tiedosto tuhottu"+tekstit) if fs.findFirst(tekstit) then ;lopuksi tarpeeton tiedosto pois fs.delete(tekstit) endIf case valinta = "No" : message("Ei Tuhota") case valinta = "Cancel" : message("Ei Tuhota") endSwitch endif endMethod method pushButton(var eventInfo Event) Var ui, tulno Table EndVar ;poistetaan kaikki vanhat inventaaritiedot ui.attach("invtulos.db") tulno.attach("tilausno.db") if msgYesNoCancel("Poista Kaikki", "Tyhjennänkö vanhan inventaarin?") = "Yes" then ui.empty() ; Deletes all records from the invtulos table. endIf if msgYesNoCancel("Poista Kaikki", "Tyhjennänkö vanhan tilausnumerotaulukon?")="Yes" then tulno.empty() endif endMethod