NYILATKOZAT A COM for Web internetes számlázó alkalmazás (https://konyveles.multienergie.hu) számlázási rendjéről.
1. A számlák iktatószámainak felépítése: 1.1. Az iktatószám felépítése kimenő számla esetén: 2013 V00001 2013: évszám V: vevők 00001: 1-től növekvő sorszám 1.2. Az iktatószám felépítése bejövő számla esetén: 2013 S00001 2013: évszám S: szállítók 00001: 1-től növekvő sorszám
2. A számlák sorszámainak (iktatószámainak) kiadása: 2.1. Az iktatószámokat tároló adattábla felépítése: Az iktatószámokat a program által használt MySQL adatbázis „Bizonylatok” táblája tartalmazza. Az új iktatószámok kiadása szintén ebből a táblából történik. A „Bizonylatok” tábla struktúrája: MEZŐNÉV IKTATOSZAM CEGKOD SZERVKOD NAPLO BIZTIPUS DATUM BANKKOD
IKTATOSZAM: CEGKOD: NAPLO:
ADATTÍPUS Szöveg Szöveg Szöveg Szöveg Szám Dátum Szöveg
KULCSOLT MEZŐ Igen Igen
Pl.: 2013 V00001 (lásd az 1.1. És 1.2. pontokat) Pl.: 00000001 Vevők Szállítók Pénztár Bank Egyéb Tárgyi eszk
BIZTIPUS:
DATUM: BANKKOD:
Bér kimenő és bejövő számlák esetében: 0: számla 1: sztornó számla 2: előlegszámla 3: jóváíró számla 4: helyesbítő számla a teljesítés dátuma bank vagy pénztár kódja (csak bank és pénztár könyvelésénél használatos)
2.2. Új iktatószám kiadása kimenő számla esetében: Példa: A számla teljesítésének dátuma: A számla teljesítésének éve: Napló:
2013.01.03. 2013 (a teljesítés dátumából következően) Vevők
A program az adott számla iktatószámának kiadásához kikeresi a „Bizonylatok” táblában található, a szöveges karakterláncok rendezési szabályai szerinti utolsó iktatószámot, melyet: a teljesítés dátuma alapján 2013-ben a Vevők naplóban kiadtunk. A keresés az alábbi SQL mondattal történik az adatbázisban: „Select Max(IKTATOSZAM) From Bizonylatok Where DatePart(’yyyy’, DATUM) = 2013 And CEGKOD = ’00000001’ And NAPLO = ’Vevők’” A fenti SQL parancsot a MySQL adatbázis meghajtó programja futtatja le, mely a számlázó programtól független, így az adatbázisban végzett műveleteket az SQL parancs továbbítását követően a számlázó program nem befolyásolhatja. A keresés eredménye vagy üres, vagy tartalmazza a szöveges karakterláncok rendezési szabályai szerint utolsóként kiadott iktatószámot. Üres eredmény azt jelenti, hogy az adott évben az adott cég az adott naplóban még nem adott ki új iktatószámot. Ez esetben a kiadandó iktatószám 2013 V00001 lesz. Ha a keresés talált iktatószámot, az új iktatószám kiadása: Legyen a talált iktatószám: 2013 V00017 (ez a vevők naplóban a 2013. évben kiadott 17. iktatószám) Az új iktatószám: 2013 V00018 Az új iktatószámot a program az alábbi eljárással állítja elő (A ’Datum’ változó tartalmazza a számla teljesítésének dátumát, az ’UtolsoIktatoszam’ változó tartalmazza a fenti keresés eredményét): UjIktatoszam = Trim(Str(„yyyy”, Datum)) + ” V„ + String(„0”, 5 – Len(Trim(Str(Val(Right(UtolsoIktatoszam, 7)) + 1)))) + Trim(Str(Val(Right(UtolsoIktatoszam, 5) ) + 1))
Az eljárás értelmezése: az új iktatószám első négy karaktere tartalmazza a számla teljesítési dátumának évszámát, szöveges formátumban (Trim(Str(DatePart(„yyyy”, Datum)),) az ötödik karaktere üres („ „), a hatodik karakter tartalmazza a napló rövidítését („V”) az utolsó 5 karakter pedig az utolsó iktatószám utolsó 5 karakterének számértékét 1-gyel meghaladó sorszámot, szöveges formátumban. A sorszámozás évenként, könyvelt cégenként és naplónként kezdődik elölről, azaz mindig 00001-es sorszámmal. Az új iktatószámot az adatbázis meghajtó programjának továbbított alábbi SQL parancs tárolja le a „Bizonylatok” táblába: „Insert Into Bizonylatok (IKTATOSZAM, CEGKOD, NAPLO, BIZTIPUS, DATUM, BANKKOD) Values (’2013 V00018’, ’00000001’, ’S’, 0, ’2013.01.03.’, ’’)”
2.3. Új iktatószám kiadása bejövő számla esetében: Lásd a 2.2. pontot, azzal az eltéréssel, hogy az iktatószám hatodik karaktere minden esetben „S”, azaz szállítók.
2.4. Az iktatószámok hiánytalanságának és folyamatosságának biztosítása: A program az új iktatószámot a szöveges karakterláncok rendezési szabályai szerint utolsóként kiadott iktatószámból kiindulva állítja elő, úgy, hogy utolsó 5 karakterének számértékét növeli 1-gyel, így minden esetben biztosítja a sorszámok hiánytalan, megszakítás nélküli kiadását. Mivel a mindenkori utolsó iktatószám alapján történik az új iktatószám kiadása, a számlázó programtól függetlenül esetleg kitörölt, utolsót megelőző iktatószámok helyeit nem tölti fel újra, ezért ott sorszám-hiányok lesznek. A számlázó programmal létrehozott bizonylatokat a program az adatbázisból kitörölni nem tudja, mert erre nincs felkészítve. Ha egy bizonylatot hibásan vagy tévesen rögzítettünk, azt csak sztornózni lehet, mely új bizonylat létrehozását jelenti, új saját iktatószámmal. 2.5. Az iktatószámok ismétlődésének elkerülése: A „Bizonylatok” tábla kulcsolt mezője az IKATOTSZAM és a CEGKOD mezők, melyek tartalmazzák a könyvelt cégenként már kiadott iktatószámokat. A mezők kulcsolása azt eredményezi, hogy az adattáblában egy adott könyvelt cégre kiadott meghatározott iktatószám (pl. a 2013 V00018) csak egyszer fordulhat elő. Ha megkísérelnénk egy már létező iktatószámot az adattáblába még egyszer menteni, az adatmentésre kiadott SQL parancsot (lásd a 2.1. pont utolsó bekezdését) az adatbázis meghajtó programja visszautasítja és semmilyen körülmények között nem hajtja végre. A meghajtó program a neki kiadott SQL
parancsok átvétele után önállóan dolgozik, a parancsot kiadó alkalmazás (jelen esetben a számlázó program) által befolyásolhatatlanul. Iktatószámok ismétlődése (két bizonylat kapja ugyanazt az iktatószámot) különösen megosztott alkalmazások mellett fordulhat elő, amikor is egyszerre több munkaállomáson (számítógépen) számláznak vagy könyvelnek bejövő számlákat, egyéb bizonylatokat. Az új iktatószámot kiadó eljárás ezért egy úgynevezett hibafeldolgozó ciklusba épül, mely mindaddig új és új iktatószámot ad ki, amíg az adatbázis meghajtó programja a kulcsolási szabály megsértésére (azaz az iktatószám többszöröződésére) utaló hibajelzést küld az adatmentési parancsot kiadó programnak, esetünkben a számlázó programnak. Az új iktatószám mentése akkor történik meg, ha a számlázó program nem észlel az adatbázis meghajtó programja által küldött hibaüzenetet. 2.6. A hiánytalan adattárolás biztosítása: További problémát okozhat az iktatószám ismétlődésén felül az is, ha egy meghatározott adat vagy adatsor hiányosan kerül be az adatbázisba. Ez akkor fordulhat elő, ha egy adatmentési művelet közben, annak megkezdése és befejezése között áramszünet lép fel, vagy valamilyen oknál fogva megszakad a munkaállomás (számítógép) kapcsolata a kiszolgáló gépen (szerveren) lévő adatbázissal. Ez esetekben a „mindent vagy semmit” elv érvényesül, tehát vagy letároljuk az adatsor valamennyi elemét, vagy nem tárolunk le semmit. Az elv betartásáról az úgynevezett tranzakcióban történő adatmentés gondoskodik. A számlázó program ebben az esetben egy erre a célra szolgáló memóriatár létrehozására utasítja az adatbázis meghajtó programját, majd továbbítja az adatmentés végrehajtására felszólító parancsot. A parancs átadásának pillanatában kezdődik az adatmentési tranzakció. Az adatbázis meghajtó programja az új adatsort (jelen esetben az új iktatószámot és a hozzá tartozó egyéb adatokat) nem az adatbázisban, hanem a tranzakció megnyitásakor létrehozott memóriatárban hozza létre, majd a művelet befejezésével visszaadja a végrehajtást a parancsot továbbító programnak, esetünkben a számlázó programnak. Ha a végrehajtás visszatért a számlázó programhoz, az lezárja a tranzakciót, melynek során a memóriatár adatai egyben, egyszerre átkerülnek az adatbázisba. Ha az új adatsor létrehozása során bármilyen hiba lép fel (áramszünet, kapcsolat megszakadása a kiszolgáló gép és a munkaállomás között), a meghajtó program nem adja vissza végrehajtást a parancsot átadó programnak, hiszen nem tudja végrehajtani a kapott parancsot. A számlázó program, mivel nem kapja vissza a végrehajtást, nem tudja lezárni a tranzakciót, a memóriatár feltehetően sérült vagy hiányos adatai így nem kerülnek át az adatbázisba. 3. A számlázó programmal előállított kimenő számlák kinyomtatása: A COM for Web program Számlák főmenüjének Kimenő számlák menüjében létrehozott kimenő számlákat a program automatikusan, külön beavatkozás nélkül a kívánt példányszámban kinyomtatja. A rendszer nyilvántartja a nyomtatások számát, ennek megfelelően a számla tartalmazza a kinyomtatott számla sorszámát (pl. 1. példány), példányszámát (pl. készült 3 példányban) és
másolati sorszámát (az első nyomtatást követő nyomtatásoknál pl. 1. hiteles másolat). A program minden számlát kinyomtatottnak tekint, melynek kinyomtatására sikeresen elküldte a parancsot a nyomtatónak. Ha tehát a nyomtató valamilyen oknál fogva (pl. papírbegyűrődés miatt) nem nyomtatja ki a számlát, azt újra kell nyomtatni, mely így az első hiteles másolat lesz. 4. Kerekítési szabályok: 4.1. Kerekítés a vevők és szállítók naplóban: a 0,01 forinttól 0,49 forintig végződő összegeket lefelé, a 0,50 forinttól 0,99 forintig végződő összegeket felfelé kerekíti a program. 4.2. Kerekítés a pénztár naplóban: a 0,01 forinttól 2,49 forintig végződő összegeket lefelé, a legközelebbi 0-ra, a 2,50 forinttól 4,99 forintig végződő összegeket felfelé, a legközelebbi 5-re, az 5,01 forinttól 7,49 forintig végződő összegeket lefelé, a legközelebbi 5-re, a 7,50 forinttól 9,99 forintig végződő összegeket felfelé, a legközelebbi 0-ra kerekíti a program.
Mivel a COM for Web számlázó program biztosítja az iktatószámok ismétlődésének elkerülését, hiánytalanul növekvő sorszámozását, az adatok sérülésmentes tárolását, továbbá, hogy egy számla eredeti példányban csak egyszer nyomtatható, illetve nyilvántartja a hiteles másolatként kinyomtatott számlák számát, megfelel a 24/1995. (XI.22.) PM. rendeletet módosító 8/1999. (III.5.) PM. rendelet előírásaink.
Julis László fejlesztő 1074 Budapest, Dohány u. 71. Tel.: +36/30/385 6896