PosnetLibrary
pierdolenie z drukarka posnetu
Install / Use
/learn @kashiash/PosnetLibraryREADME
Posnet
Obsługa drukarki posnet
To nie jest kopia dokumentacji a jedynie moje notatki jakie robiłem podczas czytanie pdf'a z firmy posnet.
Może zawierać błędy literówki itd.
Dokumentacja
- Wykaz kodów błędów drukarki - kompletny wykaz wszystkich kodów błędów zwracanych przez drukarkę Posnet
Konfiguracja drukarki sieciowej
Po podłączeniu drukarki do sieci należy:
- Wejść do menu ustawień sieciowych w drukarce
- Ustawić adres IP na sztywno - najprawdopodobniej drukarka dostanie adres sieciowy z DHCP, ale dobrze jest ustawić adres statyczny, tak żeby się nie zmieniał na routerze. W przeciwnym razie później będzie ciężko do niej trafić.
- Sprawdzić port drukarki - aby się dowiedzieć na jakim porcie działa drukarka, trzeba wydrukować raporty niefiskalne. W menu raportów niefiskalnych znajduje się raport sieciowy, który zawiera informacje o porcie.
Testowanie połączenia z drukarką
Po skonfigurowaniu drukarki sieciowej, aby przetestować połączenie:
Klasa startowa - StartZabawyZDrukarkaTest
Zacznij od klasy testowej StartZabawyZDrukarkaTest - zawiera wszystkie podstawowe testy potrzebne do rozpoczęcia pracy z drukarką w odpowiedniej kolejności.
Plik: Posnettests/StartZabawyZDrukarkaTest.cs
Klasa zawiera:
DailyReportTest()- pierwszy test połączenia (raport dobowy) - to pierwsze koty za płotySetHeaderTest()- ustawienie nagłówka paragonu (nazwa firmy, miejscowość, kod pocztowy)SetFooterTest()- ustawienie stopki paragonu (dodatkowe informacje na dole paragonu)WszystkiePodstawoweTesty()- kompleksowy test wykonujący wszystkie kroki w odpowiedniej kolejności
WAŻNE: Przed uruchomieniem testów należy ustawić IP i port drukarki w zmiennych host i port na początku klasy.
Szczegółowe kroki testowania
-
Ustawić IP i port drukarki w testach - w klasie
StartZabawyZDrukarkaTest(lubUnitTest1.cs) w zmiennychhostiport:string host = "192.168.50.47"; int port = 6666; -
Wywołać raport dobowy - uruchomić test
DailyReportTest(), który wywołujePosnetHelper.DailyReport(). W tym momencie drukarka powinna zareagować i wydrukować raport dobowy.
To pierwsze koty za płoty - podstawowy test połączenia.
Dodatkowe testy konfiguracji
W pliku Posnettests/UnitTest1.cs dostępne są również inne testy pomocne przy konfiguracji i zaawansowanej pracy z drukarką.
E-paragony - ważne informacje
Wymagania dotyczące testowania e-paragonów
WAŻNE: Aby móc wysyłać testowo e-paragony, drukarka musi być zafiskalizowana.
Niestety nie ma innej możliwości - trzeba się uśmiechnąć do producenta i wypozyczyc drukarkę, która jest zafiskalizowana i pozwala wysyłać e-paragony. Bez zafiskalizowanej drukarki testowanie funkcjonalności e-paragonów nie jest możliwe.
Wysyłanie e-paragonu mailem do klienta
Jeśli chodzi o to, żeby klient dostał e-paragon mailem, to według obecnej wiedzy trzeba to obrabiać samemu.
Rekomendowane rozwiązanie:
- Najlepiej wydrukować paragon do PDF
- PDF załączyć do maila i wysłać do klienta
Uwaga: Obrazek paragonu nie powstaje automatycznie - trzeba to samemu ogarnąć. Przykład z aplikacji Lidla - paragon jest bardzo podobny do drukarkowego, ale to nie jest jego kopia, tylko samodzielnie przygotowany obrazek/PDF.
Dostępne metody e-paragonów w bibliotece
W bibliotece dostępne są następujące metody do pracy z e-paragonami (znajdują się w klasie PosnetHelper):
EparagonGet()- pobranie danych e-paragonuEparagonGetStatus()- pobranie statusu e-paragonuEparagonSetStatus(int status)- ustawienie statusu e-paragonuEparagonSetSchedule(...)- ustawienie harmonogramu wysyłkiEparagonGetSchedule()- pobranie harmonogramu wysyłkiEparagonSetServer(string url)- ustawienie serwera e-paragonówEparagonSetServer(int recNo, string url)- ustawienie serwera e-paragonów (z numerem rekordu)EparagonTestServerConnection(string url)- test połączenia z serweremEparagonSetNextIDZ(string idz)- ustawienie następnego IDZEparagonNewDocumentByIDZ(string idz)- utworzenie nowego dokumentu e-paragonu przez IDZ
Przykładowe testy znajdują się w pliku Posnettests/UnitTest1.cs:
EparagonReportTest()EparagongetStatusTest()EparagonSetStatusTest()EparagonSetScheduleTest()EparagonGetScheduleTest()EparagonSetTest()EparagonSetServerDodTest()EparagonServerConnectionTest()TestSetIDZ()TestCreateEdocument()
Wyliczanie wartości na paragonie - zaokrąglenia
Aby uniknąć problemów z zaokrągleniami podczas wyliczania wartości na paragonie, drukarka Posnet stosuje specjalne algorytmy obliczeniowe. Poniżej opisane są kluczowe zasady i metody.
Precyzja obliczeń
Wszystkie obliczenia są prowadzone z precyzją 10-cyfrową podczas całej transakcji. Wystąpienie nadmiaru obliczeniowego spowoduje zgłoszenie błędu (kod błędu 19 - błąd wartości CENA).
Zaokrąglanie wartości końcowych
Po zakończeniu transakcji i zastosowaniu rabatów/narzutów, wartości są zaokrąglane do 0,01 zł (drugiej cyfry po przecinku):
- Kwoty BRUTTO[A]...BRUTTO[G] po rabacie/narzucie są zaokrąglane do 0,01 zł
- Wartości podatku PTU[A]...PTU[G] są również zaokrąglane do drugiej cyfry po przecinku
- Wartości NETTO[A]...NETTO[G] obliczane są jako różnica: NETTO[PTU] = BRUTTO[PTU] - PTU[PTU]
Rozliczanie groszy - algorytm dystrybucji nadmiarowych groszy
W przypadku gdy suma poszczególnych totalizerów wynikająca z obliczeń nie równa się wysokości paragonu po udzieleniu rabatu/narzutu kwotowego, lub wysokości rabatu/narzutu nie da się rozdzielić poszczególnym totalizerom przy wykorzystaniu zwykłej arytmetyki, stosowany jest następujący algorytm dystrybucji nadmiarowych groszy:
Rabat kwotowy
Parametry:
r: kwota rabatuXvA...XvG: kwota sprzedaży dla poszczególnych stawek VAT przed rabatemXa = Suma(XvA...XvG): podsuma przed rabatemXaPo = Xa – r: podsuma po rabacie
Algorytm:
-
Inicjujemy roboczy parametr
Z = 0 -
Dla każdej i-tej stawki VAT (gdzie i = A..G) wyliczamy kwotę sprzedaży po rabacie, zaokrąglając w dół do pełnych groszy:
XviPo = (Xvi * XaPo) / Xa -
Do
Zdodajemy resztę z powyższego dzielenia:Z = Z + ((Xvi * XaPo) mod Xa) -
Jeśli w danej iteracji wartość
Zosiągnęła lub przekroczyła wartośćXa, wówczas:- Obliczoną w tej iteracji kwotę sprzedaży
XviPozwiększamy o 1 grosz:XviPo = XviPo + 1 - Wartość
Zzmniejszamy oXa:Z = Z - Xa
- Obliczoną w tej iteracji kwotę sprzedaży
Narzut kwotowy
Kwoty sprzedaży przy narzucie kwotowym wyliczane są analogicznie jak przy rabacie kwotowym, z tą różnicą, że wartość narzutu jest dodawana do kwoty podsumy:
Parametry:
n: kwota narzutuXvA...XvG: kwota sprzedaży dla poszczególnych stawek VAT przed narzutemXa = Suma(XvA...XvG): podsuma przed narzutemXaPo = Xa + n: podsuma po narzucie
Algorytm: identyczny jak dla rabatu kwotowego, z tą różnicą, że XaPo = Xa + n zamiast XaPo = Xa - r.
Rabat procentowy
W drukarce rabat procentowy obliczany jest dwiema metodami w zależności od konfiguracji urządzenia:
Metoda 1:
wartość' = ((100 - R) * wartość) / 100
Rabat = wartość - wartość' // kwota rabatu
Metoda 2:
Rabat = (wartość * R) / 100 // kwota rabatu
wartość' = wartość - Rabat
Gdzie:
wartość- wartość przed rabatemwartość'- wartość po rabacieR- wartość procentowa rabatu
Narzut procentowy
Narzutx' = (Xvatx * N) / 100
Xvatx' = Xvatx + Narzutx'
Ważne uwagi
-
Kontrola zgodności wartości: Po zakończeniu transakcji wartość
P_TOTALobliczona przez aplikację musi być identyczna z wartościąTOTALotrzymaną z systemu w sekwencji kończącej paragon. Obie kwoty muszą być jednakowe, aby poprawnie zakończyć transakcję. -
Korekcja sum BRUTTO: Jeżeli w sekwencji kończącej paragon przesłano niezerową wartość rabatu i niezerowy parametr
Px(rodzaj rabatu/narzutu), następuje korekcja sumBRUTTO[A]..BRUTTO[G]według odpowiednich wzorów, a następnie obliczane są wartości podatku PTU i netto. -
Zaokrąglenia w raportach: W raportach okresowych kontrola obliczania kwot należnego podatku w oparciu o sumy
RO_NETTO[A]..RO_NETTO[G]może wykazać nieznaczny błąd obliczeniowy wynikający z zaokrągleń kwot cząstkowych.
Przykład praktyczny
Przy rabacie kwotowym, jeśli mamy:
XvA = 1000(10,00 zł)XvB = 500(5,00 zł)Xa = 1500(15,00 zł)r = 50(0,50 zł rabatu)XaPo = 1450(14,50 zł)
Algorytm rozdzieli rabat proporcjonalnie między stawki A i B, a nadmiarowe grosze zostaną rozdzielone zgodnie z algorytmem dystrybucji.
Wystawianie faktury VAT na drukarce posnet
[trfvinit] Rozpoczecie faktury vat
Identyfikator polecenia: trfvinit
| Nazwa Parametru | Opis | Wymagany | Typ | Uwagi |
| --------------- | -------------------------------------------- | -------- | ---- | ------------------------------------------------------------ |
| nm | Nazwa faktury | NIE | Num. | Do 23 znaków dla parametru In=40. Do 39 znaków dla parametru In=56. |
| cc | Liczba kopii | NIE | Num. | Zakres 0 - 9. Domyślnie cc=0 |
| co | Drukowanie na fakturze napisu ORYGINAL/KOPIA | NIE | BOOL | True - drukowanie wtłaczone, False - brak drukowania. Wartość domyślna określana przez instrukcje fvcfgset. |
| In | Długość linii danych niefiskalnych | NIE | Num. | Przyjmuje wartość 40 (domyślnie) lub 56 (tylko dla trybu 56 znaków w linii). Dane niefiskalne przesyłane w poleceniu trfvfreedata. |
| fn | Długość linii danych fiskalnych | NIE | Num. | Przyjmuje wartość 40 (d
