SkillAgentSearch skills...

PosnetLibrary

pierdolenie z drukarka posnetu

Install / Use

/learn @kashiash/PosnetLibrary
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

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

Konfiguracja drukarki sieciowej

Po podłączeniu drukarki do sieci należy:

  1. Wejść do menu ustawień sieciowych w drukarce
  2. 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ć.
  3. 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łoty
  • SetHeaderTest() - 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

  1. Ustawić IP i port drukarki w testach - w klasie StartZabawyZDrukarkaTest (lub UnitTest1.cs) w zmiennych host i port:

    string host = "192.168.50.47";
    int port = 6666;
    
  2. Wywołać raport dobowy - uruchomić test DailyReportTest(), który wywołuje PosnetHelper.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-paragonu
  • EparagonGetStatus() - pobranie statusu e-paragonu
  • EparagonSetStatus(int status) - ustawienie statusu e-paragonu
  • EparagonSetSchedule(...) - ustawienie harmonogramu wysyłki
  • EparagonGetSchedule() - pobranie harmonogramu wysyłki
  • EparagonSetServer(string url) - ustawienie serwera e-paragonów
  • EparagonSetServer(int recNo, string url) - ustawienie serwera e-paragonów (z numerem rekordu)
  • EparagonTestServerConnection(string url) - test połączenia z serwerem
  • EparagonSetNextIDZ(string idz) - ustawienie następnego IDZ
  • EparagonNewDocumentByIDZ(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 rabatu
  • XvA...XvG: kwota sprzedaży dla poszczególnych stawek VAT przed rabatem
  • Xa = Suma(XvA...XvG): podsuma przed rabatem
  • XaPo = Xa – r: podsuma po rabacie

Algorytm:

  1. Inicjujemy roboczy parametr Z = 0

  2. 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
    
  3. Do Z dodajemy resztę z powyższego dzielenia:

    Z = Z + ((Xvi * XaPo) mod Xa)
    
  4. Jeśli w danej iteracji wartość Z osiągnęła lub przekroczyła wartość Xa, wówczas:

    • Obliczoną w tej iteracji kwotę sprzedaży XviPo zwiększamy o 1 grosz: XviPo = XviPo + 1
    • Wartość Z zmniejszamy o Xa: Z = Z - Xa

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 narzutu
  • XvA...XvG: kwota sprzedaży dla poszczególnych stawek VAT przed narzutem
  • Xa = Suma(XvA...XvG): podsuma przed narzutem
  • XaPo = 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 rabatem
  • wartość' - wartość po rabacie
  • R - wartość procentowa rabatu

Narzut procentowy

Narzutx' = (Xvatx * N) / 100
Xvatx' = Xvatx + Narzutx'

Ważne uwagi

  1. Kontrola zgodności wartości: Po zakończeniu transakcji wartość P_TOTAL obliczona przez aplikację musi być identyczna z wartością TOTAL otrzymaną z systemu w sekwencji kończącej paragon. Obie kwoty muszą być jednakowe, aby poprawnie zakończyć transakcję.

  2. 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 sum BRUTTO[A]..BRUTTO[G] według odpowiednich wzorów, a następnie obliczane są wartości podatku PTU i netto.

  3. 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

View on GitHub
GitHub Stars4
CategoryDevelopment
Updated2mo ago
Forks0

Languages

C#

Security Score

85/100

Audited on Jan 23, 2026

No findings