FISKAL - UPUTSTVO ZA UPOTREBU SPISAK KOMANDI Sintaksa: #FISKAL|#FISKALNI_ISECAK [ {} [#PLACANJE {}]] Opis: Štampanje fiskalnog isečka ili dobijanje informacija o otvorenom isečku. Navode se sve stavke isečka jedna za drugom, storno stavke se navode kao i obične ali sa negativnom količinom. Ako se komanda navede bez parametara vraćaju se informacije o trenutno otvorenom fiskalnom isečku u formatu , tj. broj evidentiranih stavki i trenutna vrednost isečka. Na početku se proverava da li prosleđene stavke mogu biti prihvaćene u konkretnom uređaju. Proveravaju se sledeće stvari: Za šifru, količinu i cenu da li su u ispravnom formatu i dozvoljenom intervalu. Da li je vrednost stavke (proizvod količine i cene) u okviru dozvoljenog. Da li je poreska stopa artikla ispravnog formata i dozvoljena u uređaju. Ako je artikal već definisan u uređaju, da li je njegova poreska stopa jednaka stopi prosleđenog artikla. Za storno stavke da li postoji prethodna stavka koju je moguće stornirati. Da li ima dozvoljen broj stavki na isečku. Ako artikal ne postoji u fiskalnom uređaju, definiše se a ako postoji i ako je to potrebno menja mu se cena. Ako u ovoj prvoj fazi nije bilo grešaka, započinje se štampanje fiskalnog isečka. Ako tokom štampanja isečka dođe do prekida zbog nestanka papira, struje ili druge slične greške, WingsFiskal po otklanjanju uzroka, nastavlja isečak od mesta prekida. Na kraju isečka se opciono može navesti specifikacija plaćanja. Ako se specifikacija plaćanja ne navede, celokupan iznos isečka se plaća gotovinom. Primer 1: #FISKAL 131 Cokolada kom10 80.50 Đ 255 Keks kg1.5 300.00 Đ #PLACANJE GOTOVINA 100 CEKOVI 200 Primer 2: #FISKAL 131 Cokolada kom10 80.50 Đ 255 Keks kg 1.5 300.00 Đ 255 Keks kg -1.5 300.00 Đ Sintaksa: #OTVORI_FISKALNI_ISECAK #PRODAJA {} #ZATVORI_FISKALNI_ISECAK {} Opis: Grupa komandi kojom se obavlja evidentiranje fiskalnog isečka, stavku po stavku. Najpre se komandom #OTVORI_FISKALNI_ISECAK započne fiskalni isečak, uzastopnim komandama #PRODAJA se evidentiraju stavke isečka a na kraju se komandom #ZATVORI_FISKALNI_ISECAK fiskalni isečak završava. Kod prosleđenih stavki se proverava ispravnost formata, dozvoljeni interval i broj stavki, ostale provere i funkcionalnost opisanu u komandi FISKALNI_ISECAK ne obezbeđuje drajver već aplikacija koja ga koristi. Na kraju isečka se opciono može navesti specifikacija plaćanja. Primer: #OTVORI_FISKALNI_ISECAK #PRODAJA 131 Cokolada kom10 80.50 Đ 255 Keks kg 1.5 300.00 Đ #PRODAJA 255 Keks kg -1.5 300.00 Đ #ZATVORI_FISKALNI_ISECAK GOTOVINA 100 CEKOVI 200 Sintaksa: #ARTIKLI|#UPIS_ARTIKALA {} Opis: Komanda kojom se definišu artikli u bazi fiskalnog uređaja. Svaki red iza ključne reči sadrži definiciju jednog artikla. Ukoliko je artikal sa zadatom šifrom već definisan, briše se i definiše se novi. Primer: #ARTIKLI 211 Cokolada kom 10 123.45 Đ 215 Keks kg 1.5 300.00 Đ Sintaksa: #READ_ARTIKLI|#CITANJE_ARTIKALA [{|PRVI|SLEDECI}] Opis: Komanda kojom se preuzimaju artikli iz baze fiskalnog uređaja. Mogu se preuzeti svi definisani artikli, samo oni čije šifre su navedene ili sekvencijalno jedan po jedan artikal. Kao rezultat se dobija lista definisanih artikala u obliku . Primer 1: #READ_ARTIKLI Rezultat: 123 Sok lit 1 80.00 Đ 211 Cokolada kom 1 123.45 Đ 215 Keks kg 1 300.00 Đ Primer 2: #READ_ARTIKLI 123 211 Rezultat: 123 Sok lit 1 80.00 Đ 211 Cokolada kom 1 123.45 Đ Primer 3: #READ_ARTIKLI PRVI SLEDECI SLEDECI Rezultat: 123 Sok lit 1 80.00 Đ 211 Cokolada kom 1 123.45 Đ 215 Keks kg 1 300.00 Đ Sintaksa: #DELETE_ARTIKLI|#BRISANJE_ARTIKALA {} Opis: Komanda za brisanje artikala iz baze fiskalnog uređaja. Argumenti komande su definicije artikala koje treba izbrisati u obliku s tim što je dovoljno navesti samo šifru artikla. Komanda se ne prekida u slučaju neuspešnog brisanja pojedinih artikala, ali se može prekinuti u slučaju gubitka komunikacije sa uređajem. Primer: #DELETE_ARTIKLI 411 Cokolada kom 1 123.45 Đ 215 Keks kg 1 300.00 Đ Sintaksa: #DELETE_ALL_ARTIKLI Opis: Komanda kojom se brišu svi artikli iz baze fiskalnog uređaja. Primer: #DELETE_ALL_ARTIKLI2 Sintaksa: #SET_TAX_AMOUNT|#PORESKE_STOPE {} Opis: Komanda definiše iznose prosleđenih poreskih stopa dok izostavljene stope postavlja za zabranjene. Ako se komanda navede bez parametara, preuzimaju se i vraćaju iznosi poreskih stopa iz fiskalnog uređaja. Primer 1: #SET_TAX_AMOUNT G 0.00 Đ 18.00 E 8.00 Primer 2: #SET_TAX_AMOUNT Rezultat: G 0.00 Đ 18.00 E 8.00 Sintaksa: #Z_REPORT|#Z_IZVESTAJ Opis: Komanda za štampanje dnevnog fiskalnog izveštaja sa nuliranjem Z-izveštaj). Primer: #Z_REPORT Sintaksa: #X_REPORT|#X_IZVESTAJ [1|2] Opis: Komanda za štampanje preseka stanja (X-izveštaj). Opciono se može zadati parametar 1 ili 2, za osnovni, odnosno prošireni izveštaj. Primer: #X_REPORT 9 Sintaksa: #PERIODIC_REPORT|#PERIODICNI_IZVESTAJ Opis: Komanda za štampanje periodičnog fiskalnog izveštaja za zadati vremenski interval. Primer: #PERIODIC_REPORT 10105 300105 Sintaksa: #POR_GRUPE_REPORT, #OPERATERS_REPORT, #ARTIKLI_REPORT Opis: Razni dodatni izveštaji. POR_GRUPE_REPORT, izveštaj o poreskim stopama u zadatom periodu. Opcioni parametar je vremenski interval, ako se izostavi prikazuju se svi podaci. OPERATERS_REPORT, izveštaj o prodaji po operaterima. ARTIKLI_REPORT, izveštaj po artiklima, ima jedan parametar čija vrednost može biti 0 (samo artikli prodati u toku dana) ili 1 (svi artikli). Primeri: #POR_GRUPE_REPORT 010105 300105 #OPERATERS_REPORT #ARTIKLI_REPORT 0 Sintaksa: #DIAGNOSE_PRINT Opis: Štampaju se dijagnostičke informacije o samom fiskalnom uređaju. Primer: #DIAGNOSE_PRINT Sintaksa: #SET_HEADER|#ZAGLAVLJE {} Opis: Komanda definiše zaglavlje (header) u fiskalnim dokumentima. Ako se navede bez parametara, vraća se zaglavlje iz fiskalnog uređaja. Primer 1: #SET_HEADER ABC Komerc 11000 BEOGRAD Primer 2: #SET_HEADER Rezultat: ABC Komerc 11000 BEOGRAD Sintaksa: #SET_FOOTER|#REKLAMNI_BLOK {} Opis: Komanda za definisanje reklamnog bloka (futera) na fiskalnim isečcima. Ako se navede bez parametara vraća se reklamni blok iz fiskalnog uređaja. Primer: #SET_FOOTER Hvala na poverenju. Dodjite nam opet! Sintaksa: #OPERATER [[[]]] Opis: Komanda kojom se prijavljuje operater, menjaju naziv i lozinka ili čitaju podaci o operateru. Ako se navede samo broj operatera, komanda vraća podatke o zadatom operateru iz fiskalnog uređaja u obliku . Ako se navedu broj i lozinka operatera vrši se prijavljivanje odnosno odabir operatera koji izdaje fiskalne isečke, ovaj podatak se čuva i koristi sve do odabira novog operatera. Naziv i lozinka operatera se mogu promeniti ako se navedu treći (naziv) i po potrebi četvrti parametar (nova lozinka). Primer 1: #OPERATER 001 1234 Kasir1 Primer 2: #OPERATER 001 1234 Kasir1 5678 Primer 3: #OPERATER 001 1234 #FISKALNI_ISECAK 131 Cokolada kom 10 80.50 Đ Primer 4: #OPERATER 001 Rezultat: 001 1234 Kasir1 5 10.00 100.00 Sintaksa: #DISPLAY|#DISPLEJ {} Opis: Komanda za prikazivanje teksta na displeju fiskalnog uređaja. Može imati jedan ili više parametra, u zavisnosti od broja linija na konkretnom uređaju. Ako se parametri izostave, briše se displej fiskalnog uređaja. Primer: #DISPLAY Hvala na poverenju, Dodjite nam opet! Sintaksa: #PRINT|#NEFISKALNI_ISECAK {} Opis: Komanda za štampanje proizvoljnog teksta na fiskalnom uređaju. Primer: #PRINT Hleb 1 kom Mleko 1 lit Kisela voda 2 lit Sintaksa: #OPEN_DRAWER|#OTVORI_FIOKU [] Opis: Komanda kojom se vrši otvaranje fioke. Ima jedan opcioni parametar koji određuje dužinu impulsa za otvaranje u milisekundama. Primer: #OPEN_DRAWER 40 Sintaksa: #CUT_PAPER Opis: Komanda koja forsira sečenje papira. Primer: #CUT_PAPER Sintaksa: #POSLEDNJI_BROJ Opis: Dobijanje informacija o broju poslednjeg dnevnog fiskalnog izveštaja (Z-izveštaja) i broju poslednjeg fiskalnog isečka. Primer: #POSLEDNJI_BROJ Rezultat: 265181364 Sintaksa: #NOVAC [] Opis: Uplata, podizanje i provera stanja novca u blagajni. Opcioni parametar predstavlja iznos pozitivan označava uplatu a negativan podizanje novca. Komanda uvek vraća stanje novca u blagajni. Primer 1: #NOVAC Rezultat: 1500 Primer 2: #NOVAC 100 #NOVAC -50 Rezultat: 1600 1550 Sintaksa: #STATUS Opis: Određivanje statusa fiskalnog uređaja. Komanda u prvom redu vraća niz koji opisuje trenutni status fiskalnog uređaja a u nastavku opis svakog od statusa. Primer: #STATUS Rezultat: CJN CDisplej nije povezan JOstalo je malo papira NUređaj je fiskalizovan Sintaksa: #UREDJAJ [ ] Opis: Dobijanje i postavljanje informacija o fiskalnom uređaju. Ako se izostave parametri, komanda vraća podatke u formatu u više redova: 1.naziv uređaja 2.parametri serijske komunikacije 3.najveća dozvoljena šifra artikla 4.maksimalan dozvoljen broj stavki u uređaju po jednom fiskalnom isečku 5.da li storno stavke ulaze u ukupan broj stavki 6.PIB korisnika 7.IBFM fiskalnog uređaja (jedinstveni broj fiskalne memorije) Komanda se može koristiti i za odabir fiskalnog uređaja sa kojim se radi i podešavanje raznih parametara. Primer 1: #UREDJAJ Rezultat: Galeb FP-550 COM1 19200 N 8 1 N 65023 250 0 123456789 AB123456 Primer 2: #UREDJAJ Galeb FP-550 COM2 19200 N 8 1 N Sintaksa: #PODRZANE_KOMANDE Opis: Spisak podržanih komandi za trenutni fiskalni uređaj. Primer: #PODRZANE_KOMANDE Rezultat: FISKAL Z_REPORT X_REPORT DISPLAY ARTIKLI READ_ARTIKALI Sintaksa: #SET_DELIMITER [] Opis: Komanda kojom se menja delimiter. Opcioni parametar je novi karakter za delimiter, ako se parametar izostavi uzima se default delimiter (horizontalni tabulator). Primer: #DELIMITER ; Sintaksa: #SET_ERR_LEVEL Opis: Komanda kojom se podešava željeni error/debug nivo. Parametar se navodi kao celobrojna bitmaska željenih opcija. Moguće opcije su: 1 Generisanje detaljnih оpisa o greškama 2 Pravljenje kopije obrađenog zahteva 4 Logovanje odgovora uređaja Primer: #SET_ERR_LEVEL 3 Bitmaska 3 u primeru predstavlja kombinaciju dva parametra, 1 (generisanja detaljnih opisa grešaka) i 2 (pravljenje kopije obrađenog zahteva). Bitmaska 3 je podrazumevana vrednost. POVRATNE VREDNOSTI WingsFiskal redom izvršava zadate komande iz zahteva, ukoliko se neka komanda ne izvrši uspešno, prekida se izvršavanje narednih komandi tj. zahteva. Ukoliko fiskalni uređaj ne podržava neku od komandi, WingsFiskal ignoriše komandu i vraća povratnu informaciju kao da je komanda uspešno izvršena. U prvom redu rezultata se vraća vrednost “0” ako je čitav zahtev uspešno izvršen ili ukupan broj grešaka ako ih je bilo. Posle toga dolaze rezultati izvršavanja pojedinačnih komandi, na početku se ispisuje naziv obrađene komanda, slede povratne vrednosti ako ih komanda ima i eventualne greške. Ako je komanda uspešno izvrešena na kraju se ispisuje “OK”. Svaka greška sadrži kod greške, opis greške i detalje greške. Formalna specifikacija rezultata je: ::= 0| {} ::= {|} [OK] ::= ::= [] Primer 1: Komanda #READ_ARTIKLI vraća spisak artikala definisanih u fiskalnom uređaju: #READ_ARTIKLI Rezultat: 0 READ_ARTIKLI 345 Cokolada kom 10 150.00 Đ 445 Mleko lit 2 75.00 Đ OK Ukoliko komanda nije u celosti uspešno izvršena, rezultat može biti ovakav: 2 READ_ARTIKLI 345 Cokolada kom 10 150.00 Đ 6 Fiskalni uređaj nije povezan 8 Izvršenje komande nije uspelo Primer 2: #SET_FOOTER Hvala na poverenju. Dodjite nam opet! #OPERATER 001 1234 #FISKAL 131 Cokolada kom10 80.50 Đ 255 Keks kg1.5 300.00 Đ #PLACANJE GOTOVINA 100 CEKOVI 200Rezultat: 0 SET_FOOTER OK OPERATER OK FISKAL OK Ukoliko nisu sve komande uspele: 3 SET_FOTER OK OPERATER OK FISKAL 43Nije prihvaćena stavka računa255 Keks 44Nije uspelo evidentiranje plaćanjaGOTOVINA 41Nije uspelo zatvaranje fiskalnog isečka 0 Bez greške, komanda je uspešno izvršena] 1 Opšta greška 2 Zahtev je prazan 3 Sintaksna greška 4 Nepoznata komanda 6 Fiskalni uređaj nije povezan 7 Neispravan format podataka 8 Izvršenje komande nije uspelo 9 Očekivana je komanda ili parametar 11 Komanda nije dozvoljena (npr. zbog zakonskih odredbi) 12 Fiskalni uređaj je zamenjen 20 Nije uspelo definisanje artikla 21 Neispravna šifra artikla 22 Neispravna količina artikla 23 Neispravna cena artikla 24 Neispravan naziv artikla 25 Neispravna poreska stopa artikla 26 Vrednost stavke ili isečka je prevelika ili premala 27 Nije uspelo brisanje artikla 28 Preveliki broj stavki na isečku 29 Artikal nije pronađen 40 Nije uspelo otvaranje fiskalnog isečka 41 Nije uspelo zatvaranje fiskalnog isečka 42 Nije naveden operater (pre otvaranja fiskalnog isečka) 43 Nije prihvaćena stavka računa 44 Nije uspelo evidentiranje plaćanja 60 Nije uspelo definisanje operatera 70 Nije uspelo podešavanje iznosa poreskih stopa 80 Potrebno je uraditi Z-izveštaj Komanda #STATUS vraća trenutni status fiskalnog uređaja. Status se definiše stringom u kome svaki karakter opisuje određeno stanje uređaja. Na primer, status CFI označava da displej nije povezan, otvoren je fiskalni isečak i nema više kontrolnog papira. A Opšta greška, poslednja komanda nije uspela B Mehanička greška u uređaju C Displej nije povezan D Sintaksna greška E Operacija nije dozvoljena F Fiskalni isečak je otvoren G Nefiskalni isečak je otvoren H Ostalo je malo kontrolnog papira (žurnal papir) I Nema više kontrolnog papira J Ostalo je malo papira K Nema više papira L Ostalo je manje od 50 mesta u fiskalnoj memoriji M Fiskalna memorija je puna (više se ne može upisivati u nju) N Uređaj je fiskalizovan 4. Komunikacija Komunikacija se odvija preko direktorijuma u koji aplikacija upisuje zahteve a fiskalni drajver ih redom čita i obrađuje. Podrazumevana lokacija ovog direktorijuma je C:\Com, ali se lokacija može promeniti. Zahtevi su datoteke sa ekstenzijom .wng, WingsFiskal prati promene u komunikacionom diru i čim primeti novu datoteku sa ekstenzijom .wng, započinje obradu. Ukoliko postoji više datoteka, sortiraju se po nazivu i obrađuju redom. Povratne vrednosti (rezultate obrade) WingsFiskal snima u Res poddir komunikacionog dira, u fajl sa istim nazivom kao i originalni .wng fajl. Dok traje obrada zahteva, rezultat je otvoren u ekskluzivnom write modu (drugi programi mogu samo čitati sadržaj, ne i pisati), kada se završi obrada rezultat se zatvara a originalni zahtev se briše. Aplikacija kontroliše da li je WingsFiskal završio obradu tako što proverava da li datoteka zahteva postoji ili tako što pokušava da otvori rezultat u ekskluzivnom modu, kada u tome uspe zahtev je obrađen. FORMALNA DEFINICIJA KOMANDNOG JEZIKA ::= 0..9[] ::= 1..9[] ::= [][] ::= +|- ::= .|, ::= A..Z|a..z|0..9|!|@|#|$|%...[] ::= [] ::= ::= ::= ::= ::= ::= 0..8|| ::= A|G|D|Đ|E|Ž|I|J|K ::= А|Г|Д|Ђ|Е|Ж|И|Ј|К ::= ::= Chr(9) ::= ::= GOTOVINA|CEKOVI|KARTICA ::= ::= ::= ::= |.. ::= 01..31 ::= 01..12 ::= 00..99 ::= ::= ::= ::= ::= ::= ::= ::= ::= ::= 0|1 ::= ::= ::= ::= COM ::= ::= N|E|O|M|S ::= 5..8 ::= 1|2 ::= N|H|S ::= {} ::= || || || || |||| || || ||| |||| || ||| | ::= #FISKAL|#FISKALNI_ISECAK [ {} [#PLACANJE {}]] ::= #OTVORI_FISKALNI_ISECAK ::= #PRODAJA {} ::= #FORCE_FISKAL_CLOSE|#ZATVORI_FISKALNI_ISECAK {} ::= #ARTIKLI|#UPIS_ARTIKALA {} ::= #READ_ARTIKLI|#CITANJE_ARTIKALA [{|PRVI|SLEDECI}] ::= #DELETE_ARTIKLI|#BRISANJE_ARTIKALA {} ::= #DELETE_ALL_ARTIKLI ::= #SET_TAX_AMOUNT|#PORESKE_STOPE {} ::= #Z_REPORT|#Z_IZVESTAJ ::= #X_REPORT|#X_IZVESTAJ [1|2] ::= #PERIODIC_REPORT|#PERIODICNI_IZVESTAJ ::= #POR_GRUPE_REPORT [] ::= #OPERATERS_REPORT ::= #ARTIKLI_REPORT 0|1 ::= #DIAGNOSE_PRINT ::= #SET_HEADER|#ZAGLAVLJE {} ::= #SET_FOOTER|#REKLAMNI_BLOK {} ::= #OPERATER [[[ ::= #DISPLAY|#DISPLEJ {} ::= #PRINT|#NEFISKALNI_ISECAK {} ::= #OPEN_DRAWER|#OTVORI_FIOKU [] ::= #CUT_PAPER ::= #POSLEDNJI_BROJ ::= #NOVAC [] ::= #STATUS ::= #UREDJAJ [ ] ::= #PODRZANE_KOMANDE2.