Skip to content

Instantly share code, notes, and snippets.

@kashiash
Last active February 26, 2026 08:06
Show Gist options
  • Select an option

  • Save kashiash/6803cd6dd1c903f7f193a08e25479216 to your computer and use it in GitHub Desktop.

Select an option

Save kashiash/6803cd6dd1c903f7f193a08e25479216 to your computer and use it in GitHub Desktop.
posnet thermal hx by tcpip with c#
using NUnit.Framework;
using System.Diagnostics;
using System.Text;
using Shared.Services.Printers;
using Microsoft.Extensions.Hosting;
using System.Net.Sockets;
using System.IO.Ports;
using System.Collections;
using System.IO;
namespace PosnetTests
{
public class Tests
{
string host = "192.168.50.166";
int port = 6666;
string[] testParagon = {
"\u0002trinit\u0009#911D\u0003",
"\u0002trline\u0009naChleb\u0009vt1\u0009pr200\u0009#B23A\u0003",
"\u0002trpayment\u0009ty0\u0009wa200\u0009#5EF7\u0003",
"\u0002trend\u0009#2902\u0003"
};
const string STX = "\u0002";
const string TAB = "\u0009";
const string ETX = "\u0003";
const string LF = "\u000A";
[Test]
public void CrcTest()
{
var command1 = "trinit\u0009bm0\u0009";
var crc1 = LiczSumeKontrolnaZInstrukcji(command1);
Assert.AreEqual("4825", crc1);
var command1b = $"trinit{TAB}bm0{TAB}";
Assert.AreEqual(command1, command1b);
var crc1b = LiczSumeKontrolnaZInstrukcji(command1b);
Assert.AreEqual("4825", crc1b);
string[] command1cArr = { "trinit", "bm0" };
var command1c = fullCommand(command1cArr);
Assert.AreEqual(command1, command1c);
var crc3 = LiczSumeKontrolnaZInstrukcji(command1c);
Assert.AreEqual("4825", crc3);
var command2 = "trinit\u0009";
var crc2 = LiczSumeKontrolnaZInstrukcji(command2);
Assert.AreEqual("911D", crc2);
var command2b = $"trinit{TAB}";
var crc2b = LiczSumeKontrolnaZInstrukcji(command2b);
Assert.AreEqual("911D", crc2b);
var commandRtcGet = $"rtcget{TAB}";
var crcrtc = LiczSumeKontrolnaZInstrukcji(commandRtcGet);
Assert.AreEqual("7D61", crcrtc);
}
string fullCommand(string[] command)
{
string joinedString = string.Join(TAB, command);
return $"{joinedString}{TAB}";
}
string fullCommandCrced(string[] command)
{
string joinedString = fullCommand(command);
string crc = LiczSumeKontrolnaZInstrukcji(joinedString);
return $"{STX}{joinedString}#{crc}{ETX}";
}
string fullCommandCrced(string command)
{
string crc = LiczSumeKontrolnaZInstrukcji($"{command}{TAB}");
return $"{STX}{command}{TAB}#{crc}{ETX}";
}
[Test]
public void FullComandCrcTestTest()
{
string[] lineCommand = { "trline", "naChleb", "vt1", "pr200" };
var fullLineCommand = fullCommandCrced(lineCommand);
Assert.AreEqual("\u0002trline\u0009naChleb\u0009vt1\u0009pr200\u0009#B23A\u0003", fullLineCommand);
}
[SetUp]
public void Setup()
{
}
[Test]
public void AnulowanieTransakcjiTest()
{
using (TcpClient client = new TcpClient(host, port))
{
// Uzyskanie strumienia sieciowego
using (NetworkStream stream = client.GetStream())
{
var endLineCommand = fullCommandCrced(new string[] { "prncancel" });
SendCommand(endLineCommand, stream);
}
}
}
[Test]
public void SetFooterTest()
{
using (TcpClient client = new TcpClient(host, port))
{
// Uzyskanie strumienia sieciowego
using (NetworkStream stream = client.GetStream())
{
// "\u0002trinit\u0009#911D\u0003",
SendCommand(stream, new string[] { "ftrinfoset", $"tx&c&bPILES? NIE JEDZ!&c&b{LF}&c&b NIE PILES? WYPIJ!&c&b{LF}&c&HFLEETMAN RULEZ&H&c" });
}
}
}
[Test]
public void SimpleRecipetest()
{
using (TcpClient client = new TcpClient(host, port))
{
// Uzyskanie strumienia sieciowego
using (NetworkStream stream = client.GetStream())
{
// "\u0002trinit\u0009#911D\u0003",
SendCommand(stream, new string[] { "trinit", "bm1" });
//"\u0002trline\u0009naChleb\u0009vt1\u0009pr200\u0009#B23A\u0003",
SendCommand(stream, new string[] { "trline", "naPiwerko", "vt1", "pr200" });
SendCommand(stream, new string[] { "trline", "naOrzeszki", "vt1", "pr300" });
SendCommand(stream, new string[] { "trline", "naSledzik", "vt0", "pr500" });
SendCommand(stream, new string[] { "trline", "naFlaszeczka", "vt2", "pr2330" });
//"\u0002trpayment\u0009ty0\u0009wa200\u0009#5EF7\u0003",
SendCommand(stream, new string[] { "trpayment", "ty0", "wa1000" });
SendCommand(stream, new string[] { "trpayment", "ty2", "wa200" });
SendCommand(stream, new string[] { "trpayment", "ty3", "wa1800" });
// SendCommand(stream, new string[] { "trpayment", "ty4", "wa330" });
// SendCommand(stream, new string[] { "trpayment", "ty5", "wa330" });
// SendCommand(stream, new string[] { "trpayment", "ty6", "wa330" });
// SendCommand(stream, new string[] { "trpayment", "ty7", "wa330" });
SendCommand(stream, new string[] { "trpayment", "ty8", "wa330" });
//"\u0002trend\u0009#2902\u0003"
SendCommand(stream, new string[] { "trend", "to3330", "fp3330" });
}
}
}
enum paymentType
{
Gotowka = 0,
Karta = 2,
Czeka = 3,
Bon = 4,
Kredyt = 5,
Inna = 6,
Voucher = 7,
Przelew = 8
}
private void SendCommand(NetworkStream stream, string[] command)
{
SendCommand(fullCommandCrced(command), stream);
}
[Test]
public void EthernetTest()
{
string[] command = { "getrtc", "ln6" };
string dailyRep = "dailyrep";
string command3 = "\u0002trinit\u0009#911D\u0003";
using (TcpClient client = new TcpClient(host, port))
{
// Uzyskanie strumienia sieciowego
using (NetworkStream stream = client.GetStream())
{
string[] startCommand = { "trinit", "bm0" };
SendCommand(fullCommandCrced(startCommand), stream);
SendCommand(fullCommandCrced(new string[] { "trline", "naChleb", "vt0", "pr200" }), stream);
SendCommand(fullCommandCrced(new string[] { "trline", "naPiwo", "vt1", "pr200" }), stream);
SendCommand(fullCommandCrced(new string[] { "trline", "naPampers", "vt2", "pr200" }), stream);
SendCommand(fullCommandCrced(new string[] { "trline", "naWhisky", "vt3", "pr200" }), stream);
// "\u0002trpayment\u0009ty0\u0009wa200\u0009#5EF7\u0003",
var paymentLineCommand = fullCommandCrced(new string[] { "trpayment", "ty0", "wa500" });
SendCommand(paymentLineCommand, stream);
var paymentLineCommand2 = fullCommandCrced(new string[] { "trpayment", "ty2", "wa100" });
SendCommand(paymentLineCommand2, stream);
var paymentLineCommand3 = fullCommandCrced(new string[] { "trpayment", "ty8", "wa200" });
SendCommand(paymentLineCommand3, stream);
// "\u0002trend\u0009#2902\u0003"
var endLineCommand = fullCommandCrced(new string[] { "trend", "to800" });
SendCommand(endLineCommand, stream);
}
}
}
private static void SendCommand(string dataToSend, NetworkStream stream)
{
// Konwersja danych na tablicę bajtów
byte[] data = Encoding.UTF8.GetBytes(dataToSend);
// Wysyłanie danych
stream.Write(data, 0, data.Length);
//foreach (byte b in data)
//{
// Console.Write($"{b:X2} ");
//}
Console.WriteLine();
Console.WriteLine($"Wysłano: {dataToSend}");
// Odbieranie odpowiedzi
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
//foreach (byte b in buffer)
//{
// Console.Write($"{b:X2} ");
//}
Console.WriteLine();
Console.WriteLine($"Odpowiedź od serwera: {response}");
}
private string LiczSumeKontrolnaZInstrukcji(string ciagZnakow)
{
byte[] crc16htab =
{
0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
0x81, 0x91, 0xa1, 0xb1, 0xc1, 0xd1, 0xe1, 0xf1,
0x12, 0x02, 0x32, 0x22, 0x52, 0x42, 0x72, 0x62,
0x93, 0x83, 0xb3, 0xa3, 0xd3, 0xc3, 0xf3, 0xe3,
0x24, 0x34, 0x04, 0x14, 0x64, 0x74, 0x44, 0x54,
0xa5, 0xb5, 0x85, 0x95, 0xe5, 0xf5, 0xc5, 0xd5,
0x36, 0x26, 0x16, 0x06, 0x76, 0x66, 0x56, 0x46,
0xb7, 0xa7, 0x97, 0x87, 0xf7, 0xe7, 0xd7, 0xc7,
0x48, 0x58, 0x68, 0x78, 0x08, 0x18, 0x28, 0x38,
0xc9, 0xd9, 0xe9, 0xf9, 0x89, 0x99, 0xa9, 0xb9,
0x5a, 0x4a, 0x7a, 0x6a, 0x1a, 0x0a, 0x3a, 0x2a,
0xdb, 0xcb, 0xfb, 0xeb, 0x9b, 0x8b, 0xbb, 0xab,
0x6c, 0x7c, 0x4c, 0x5c, 0x2c, 0x3c, 0x0c, 0x1c,
0xed, 0xfd, 0xcd, 0xdd, 0xad, 0xbd, 0x8d, 0x9d,
0x7e, 0x6e, 0x5e, 0x4e, 0x3e, 0x2e, 0x1e, 0x0e,
0xff, 0xef, 0xdf, 0xcf, 0xbf, 0xaf, 0x9f, 0x8f,
0x91, 0x81, 0xb1, 0xa1, 0xd1, 0xc1, 0xf1, 0xe1,
0x10, 0x00, 0x30, 0x20, 0x50, 0x40, 0x70, 0x60,
0x83, 0x93, 0xa3, 0xb3, 0xc3, 0xd3, 0xe3, 0xf3,
0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
0xb5, 0xa5, 0x95, 0x85, 0xf5, 0xe5, 0xd5, 0xc5,
0x34, 0x24, 0x14, 0x04, 0x74, 0x64, 0x54, 0x44,
0xa7, 0xb7, 0x87, 0x97, 0xe7, 0xf7, 0xc7, 0xd7,
0x26, 0x36, 0x06, 0x16, 0x66, 0x76, 0x46, 0x56,
0xd9, 0xc9, 0xf9, 0xe9, 0x99, 0x89, 0xb9, 0xa9,
0x58, 0x48, 0x78, 0x68, 0x18, 0x08, 0x38, 0x28,
0xcb, 0xdb, 0xeb, 0xfb, 0x8b, 0x9b, 0xab, 0xbb,
0x4a, 0x5a, 0x6a, 0x7a, 0x0a, 0x1a, 0x2a, 0x3a,
0xfd, 0xed, 0xdd, 0xcd, 0xbd, 0xad, 0x9d, 0x8d,
0x7c, 0x6c, 0x5c, 0x4c, 0x3c, 0x2c, 0x1c, 0x0c,
0xef, 0xff, 0xcf, 0xdf, 0xaf, 0xbf, 0x8f, 0x9f,
0x6e, 0x7e, 0x4e, 0x5e, 0x2e, 0x3e, 0x0e, 0x1e
};
byte[] crc16ltab =
{
0x00, 0x21, 0x42, 0x63, 0x84, 0xa5, 0xc6, 0xe7,
0x08, 0x29, 0x4a, 0x6b, 0x8c, 0xad, 0xce, 0xef,
0x31, 0x10, 0x73, 0x52, 0xb5, 0x94, 0xf7, 0xd6,
0x39, 0x18, 0x7b, 0x5a, 0xbd, 0x9c, 0xff, 0xde,
0x62, 0x43, 0x20, 0x01, 0xe6, 0xc7, 0xa4, 0x85,
0x6a, 0x4b, 0x28, 0x09, 0xee, 0xcf, 0xac, 0x8d,
0x53, 0x72, 0x11, 0x30, 0xd7, 0xf6, 0x95, 0xb4,
0x5b, 0x7a, 0x19, 0x38, 0xdf, 0xfe, 0x9d, 0xbc,
0xc4, 0xe5, 0x86, 0xa7, 0x40, 0x61, 0x02, 0x23,
0xcc, 0xed, 0x8e, 0xaf, 0x48, 0x69, 0x0a, 0x2b,
0xf5, 0xd4, 0xb7, 0x96, 0x71, 0x50, 0x33, 0x12,
0xfd, 0xdc, 0xbf, 0x9e, 0x79, 0x58, 0x3b, 0x1a,
0xa6, 0x87, 0xe4, 0xc5, 0x22, 0x03, 0x60, 0x41,
0xae, 0x8f, 0xec, 0xcd, 0x2a, 0x0b, 0x68, 0x49,
0x97, 0xb6, 0xd5, 0xf4, 0x13, 0x32, 0x51, 0x70,
0x9f, 0xbe, 0xdd, 0xfc, 0x1b, 0x3a, 0x59, 0x78,
0x88, 0xa9, 0xca, 0xeb, 0x0c, 0x2d, 0x4e, 0x6f,
0x80, 0xa1, 0xc2, 0xe3, 0x04, 0x25, 0x46, 0x67,
0xb9, 0x98, 0xfb, 0xda, 0x3d, 0x1c, 0x7f, 0x5e,
0xb1, 0x90, 0xf3, 0xd2, 0x35, 0x14, 0x77, 0x56,
0xea, 0xcb, 0xa8, 0x89, 0x6e, 0x4f, 0x2c, 0x0d,
0xe2, 0xc3, 0xa0, 0x81, 0x66, 0x47, 0x24, 0x05,
0xdb, 0xfa, 0x99, 0xb8, 0x5f, 0x7e, 0x1d, 0x3c,
0xd3, 0xf2, 0x91, 0xb0, 0x57, 0x76, 0x15, 0x34,
0x4c, 0x6d, 0x0e, 0x2f, 0xc8, 0xe9, 0x8a, 0xab,
0x44, 0x65, 0x06, 0x27, 0xc0, 0xe1, 0x82, 0xa3,
0x7d, 0x5c, 0x3f, 0x1e, 0xf9, 0xd8, 0xbb, 0x9a,
0x75, 0x54, 0x37, 0x16, 0xf1, 0xd0, 0xb3, 0x92,
0x2e, 0x0f, 0x6c, 0x4d, 0xaa, 0x8b, 0xe8, 0xc9,
0x26, 0x07, 0x64, 0x45, 0xa2, 0x83, 0xe0, 0xc1,
0x1f, 0x3e, 0x5d, 0x7c, 0x9b, 0xba, 0xd9, 0xf8,
0x17, 0x36, 0x55, 0x74, 0x93, 0xb2, 0xd1, 0xf0
};
byte hi = 0, lo = 0, index;
string s = ciagZnakow;
foreach (var ch in s)
{
index = (byte)(hi ^ (byte)ch);
hi = (byte)(lo ^ crc16htab[index]);
lo = crc16ltab[index];
}
//return ($"{(hi << 8) | lo}");
return ((hi << 8) | lo).ToString("X");
}
}
// errorlist
Dictionary<int, string> frameErrorMessages = new Dictionary<int, string>()
{
{ 1, "PROTO_ERR_CMD_UNKNOWN: Nierozpoznana komenda" },
{ 2, "PROTO_ERR_CMD_MANDATORY_FIELDS: Brak obowiązkowego pola" },
{ 3, "PROTO_ERR_DATA_CONVERSION: Błąd konwersji pola (np.: przesłana została wartość z przecinkiem w polu którego wartość przesyła się w częściach setnych np.: 12,34 zamiast 1234, lub przekroczony zakres danych)" },
{ 4, "PROTO_ERR_TOKEN_INVALID: Błędny token" },
{ 5, "PROTO_ERR_CRC_INVALID: Zła suma kontrolna" },
{ 6, "PROTO_ERR_FLD_INVALID: Puste pole (kolejno dwa tabulatory)" },
{ 7, "PROTO_ERR_CMD_LENGTH: Niewłaściwa długość nazwy rozkazu" },
{ 8, "PROTO_ERR_TOKEN_LENGTH: Niewłaściwa długość tokena" },
{ 9, "PROTO_ERR_CRC_LENGTH: Niewłaściwa długość sumy kontrolnej" },
{ 10, "PROTO_ERR_DATA_LENGTH: Niewłaściwa długość pola danych" },
{ 11, "PROTO_ERR_INPUT_BUFFER_OVERRUN: Zapełniony bufor odbiorczy" },
{ 12, "PROTO_ERR_CMD_IMMEDIATE_FORBIDDEN: Nie można wykonać rozkazu w trybie natychmiastowym" },
{ 13, "PROTO_ERR_TOKEN_NOT_FOUND: Nie znaleziono rozkazu o podanym tokenie" },
{ 14, "PROTO_ERR_INPUT_QUEUE_FULL: Zapełniona kolejka wejściowa" },
{ 15, "PROTO_ERR_SYNTAX: Błąd budowy ramki" }
};
Dictionary<int, string> commandErrorMessages = new Dictionary<int, string>()
{
{ 10, "ERR_CANCEL: Błąd nietypowy - rezygnacja, przerwanie funkcji" },
{ 50, "ERR_UNKN: Błąd wykonywania operacji przez kasę" },
{ 51, "ERR_ASSERT_FM: Błąd wykonywania operacji przez kasę" },
{ 52, "ERR_ASSERT_DB: Błąd wykonywania operacji przez kasę" },
{ 53, "ERR_ASSERT_SALE: Błąd wykonywania operacji przez kasę" },
{ 54, "ERR_ASSERT_UI: Błąd wykonywania operacji przez kasę" },
{ 55, "ERR_ASSERT_CFG: Błąd wykonywania operacji przez kasę" },
{ 323, "ERR_OPER_BLOCKED: Funkcja zablokowana w konfiguracji" },
{ 360, "ERR_SERVICE_SWITCH_FOUND: Znaleziono zworę serwisową" },
{ 361, "ERR_SERVICE_SWITCH_NOT_FOUND: Nie znaleziono zwory serwisowej" },
{ 362, "ERR_SERVICE_KEY_DATA: Błąd weryfikacji danych klucza" },
{ 363, "ERR_SERVICE_KEY_TIMEOUT: Upłynął czas na odpowiedź od klucza" },
{ 382, "ERR_RD_ZERO: Próba wykonania raportu zerowego" },
{ 383, "ERR_RD_NOT_PRINTED: Brak raportu dobowego" },
{ 384, "ERR_FM_NO_REC: Brak rekordu w pamięci" },
{ 400, "ERR_WRONG_VALUE: Błędna wartość" },
{ 460, "ERR_CLOCK_RTC_FSK: Błąd zegara w trybie fiskalnym" },
{ 461, "ERR_CLOCK_RTC_NFSK: Błąd zegara w trybie niefiskalnym" },
{ 480, "ERR_AUTH_AUTHORIZED: Drukarka już autoryzowana, bezterminowo" },
{ 481, "ERR_AUTH_NOT_STARTED: Nie rozpoczęto jeszcze autoryzacji" },
{ 482, "ERR_AUTH_WAS_ADDED: Kod już wprowadzony" },
{ 483, "ERR_AUTH_DAY_CNT: Próba wprowadzenia błędnych wartości" },
{ 484, "ERR_AUTH_BLOCKED: Minął czas pracy kasy, sprzedaż zablokowana" },
{ 485, "ERR_AUTH_BAD_CODE: Błędny kod autoryzacji" },
{ 486, "ERR_AUTH_TOO_MANY_WRONG_CODES: Blokada autoryzacji. Wprowadź kod z klawiatury" },
{ 500, "ERR_STAT_MIN_OVF: Przepełnienie statystyki minimalnej" },
{ 501, "ERR_STAT_MAX_OVF: Przepełnienie statystyki maksymalnej" },
{ 502, "ERR_CASH_IN_MAX_OVF: Przepełnienie stanu kasy" },
{ 503, "ERR_CASH_OUT_BELOW_0: Wartość stanu kasy po wypłacie staje się ujemna (przyjmuje się stan zerowy kasy)" },
{ 700, "ERR_INVALID_IP_ADDR: Błędny adres IP" },
{ 701, "ERR_INVALID_TONE_NUMBER: Błąd numeru tonu" },
{ 702, "ERR_ILLEGAL_DRAWER_IMPULSE_LEN: Błąd długości impulsu szuflady" },
{ 703, "ERR_ILLEGAL_VAT_RATE: Błąd stawki VAT" },
{ 704, "ERR_INVALID_LOGOUT_TIME: Błąd czasu wylogowania" },
{ 705, "ERR_INVALID_SLEEP_TIME: Błąd czasu uśpienia" },
{ 706, "ERR_INVALID_TURNOFF_TIME: Błąd czasu wyłączenia" },
{ 713, "ERR_CONFIG_SET: Błędne parametry konfiguracji" },
{ 714, "ERR_ILLEGAL_DSP_CONTRAST: Błędna wartość kontrastu wyświetlacza" },
{ 715, "ERR_ILLEGAL_DSP_LUMIN: Błędna wartość podświetlenia wyświetlacza" },
{ 716, "ERR_ILLEGAL_DSP_OFF_DELAY: Błędna wartość czasu zaniku podświetlenia" },
{ 717, "ERR_LINE_TOO_LONG: Zbyt długa linia nagłówka albo stopki" },
{ 718, "ERR_ILLEGAL_COMM_CFG: Błędna konfiguracja komunikacji" },
{ 719, "ERR_ILLEGAL_PROTOCOL_CFG: Błędna konfiguracja protokołu komunikacji" },
{ 720, "ERR_ILLEGAL_PORT: Błędny identyfikator portu" },
{ 721, "ERR_ILLEGAL_INFO_TXT_NUM: Błędny numer tekstu reklamowego" },
{ 722, "ERR_ILLEGAL_TIME_DIFF: Podany czas wychodzi poza wymagany zakres" },
{ 723, "ERR_ILLEGAL_TIME: Podana data/czas niepoprawne" },
{ 724, "ERR_ILLEGAL_HOUR_DIFF: Inna godzina w różnicach czasowych 0<=>23" },
{ 726, "ERR_ILLEGAL_DSP_LINE_CONTENT: Błędna zawartość tekstu w linii wyświetlacza" },
{ 727, "ERR_ILLEGAL_DSP_SCROLL_VALUE: Błędna wartość dla przewijania na wyświetlaczu" },
{ 728, "ERR_ILLEGAL_PORT_CFG: Błędna konfiguracja portu" },
{ 738, "ERR_ETH_CONFIG: Nieprawidłowa konfiguracja Ethernetu" },
{ 739, "ERR_ILLEGAL_DSP_ID: Nieprawidłowy typ wyświetlacza" },
{ 740, "ERR_ILLEGAL_DSP_ID_FOR_OFF_DELAY: Dla tego typu wyświetlacza nie można ustawić czasu zaniku podświetlenia" },
{ 820, "ERR_TEST: Negatywny wynik testu" },
{ 821, "ERR_TEST_NO_CONF: Brak testowanej opcji w konfiguracji" },
{ 857, "ERR_DF_DB_NO_MEM: Brak pamięci na inicjalizację bazy drukarkowej" },
{ 1000, "ERR_FATAL_FM: Błąd fatalny modułu fiskalnego" },
{ 1001, "ERR_FM_NCONN: Wypięta pamięć fiskalna" },
{ 1002, "ERR_FM_WRITE: Błąd zapisu" },
{ 1003, "ERR_FM_UNKN: Błąd nie ujęty w specyfikacji bios" },
{ 1004, "ERR_FM_CHKSUM_CNT: Błędne sumy kontrolne" },
{ 1005, "ERR_FM_CTRL_BLK_0: Błąd w pierwszym bloku kontrolnym" },
{ 1006, "ERR_FM_CTRL_BLK_1: Błąd w drugim bloku kontrolnym" },
{ 1007, "ERR_FM_BAD_REC_ID: Błędny id rekordu" },
{ 1008, "ERR_FM_DATA_ADDR_INIT: Błąd inicjalizacji adresu startowego" },
{ 1009, "ERR_FM_DATA_ADDR_INITED: Adres startowy zainicjalizowany" },
{ 1010, "ERR_FM_NU_PRESENT: Numer unikatowy już zapisany" },
{ 1011, "ERR_FM_NU_NO_PRESENT_FSK: Brak numeru w trybie fiskalnym" },
{ 1012, "ERR_FM_NU_WRITE: Błąd zapisu numeru unikatowego" },
{ 1013, "ERR_FM_NU_FULL: Przepełnienie numerów unikatowych" },
{ 1014, "ERR_FM_NU_LANG: Błędny język w numerze unikatowym" },
{ 1015, "ERR_FM_TIN_CNT: Więcej niż jeden NIP" },
{ 1016, "ERR_FM_READ_ONLY_NFSK: Drukarka w trybie do odczytu bez rekordu fiskalizacji" },
{ 1017, "ERR_FM_CLR_RAM_CNT: Przekroczono liczbę zerowań RAM" },
{ 1018, "ERR_FM_REP_DAY_CNT: Przekroczono liczbę raportów dobowych" },
{ 1019, "ERR_FM_VERIFY_NU: Błąd weryfikacji numeru unikatowego" },
{ 1020, "ERR_FM_VERIFY_STAT: Błąd weryfikacji statystyk z RD." },
{ 1021, "ERR_FM_VERIFY_NVR_READ: Błąd odczytu danych z NVR do weryfikacji FM" },
{ 1022, "ERR_FM_VERIFY_NVR_WRITE: Błąd zapisu danych z NVR do weryfikacji FM" },
{ 1023, "ERR_FM_CTRL_BLK_2: Pamięć fiskalna jest mała 1Mb zamiast 2Mb" },
{ 1024, "ERR_FM_DATA_ADDR_NO_INITED: Nie zainicjalizowany obszar danych w pamięci fiskalnej" },
{ 1025, "ERR_FM_NU_FORMAT: Błędny format numeru unikatowego" },
{ 1026, "ERR_FM_REC_BAD_CNT: Za dużo błędnych bloków w FM" },
{ 1027, "ERR_FM_NO_BADBLK_MARKER: Błąd oznaczenia błędnego bloku" },
{ 1028, "ERR_FM_REC_EMPTY: Rekord w pamięci fiskalnej nie istnieje - obszar pusty" },
{ 1029, "ERR_FM_REC_DATE: Rekord w pamięci fiskalnej z datą późniejszą od poprzedniego" },
{ 1950, "ERR_TR_TOT_OVR: Przekroczony zakres totalizerów paragonu" },
{ 1951, "ERR_TR_PF_OVR: Wpłata formą płatności przekracza max. wpłatę" },
{ 1952, "ERR_TR_PF_SUM_OVR: Suma form płatności przekracza max. wpłatę" },
{ 1953, "ERR_PAYMENT_OVR: Formy płatności pokrywają już do zapłaty" },
{ 1954, "ERR_TR_CHANGE_OVR: Wpłata reszty przekracza max. wpłatę" },
{ 1955, "ERR_TR_CHANGE_SUM_OVR: Suma form płatności przekracza max. wpłatę" },
{ 1956, "ERR_TR_TOTAL_OVR: Przekroczony zakres totalizerów" },
{ 1957, "ERR_TR_FISC_OVR: Przekroczony maksymalny zakres paragonu" },
{ 1958, "ERR_TR_PACK_OVR: Przekroczony zakres wartości opakowań" },
{ 1959, "ERR_TR_PACK_STORNO_OVR: Przekroczony zakres wartości opakowań przy stornowaniu" },
{ 1961, "ERR_TR_PF_REST_TOO_BIG: Wpłata reszty zbyt duża" },
{ 1962, "ERR_TR_PF_ZERO: Wpłata formą płatności wartości 0" },
{ 1980, "ERR_TR_DISCNT_BASE_OVR: Przekroczony zakres kwoty bazowej rabatu/narzutu" },
{ 1981, "ERR_TR_DISCNT_AFTER_OVR: Przekroczony zakres kwoty po rabacie/narzucie" },
{ 1982, "ERR_TR_DISCNT_CALC: Błąd obliczania rabatu/narzutu" },
{ 1983, "ERR_TR_DISCNT_BASE_NEGATIVE_OR_ZERO: Wartość bazowa ujemna lub równa 0" },
{ 1984, "ERR_TR_DISCNT_ZERO: Wartość rabatu/narzutu równa 0" },
{ 1985, "ERR_TR_DISCNT_AFTER_NEGATIVE_OR_ZERO: Wartość po rabacie ujemna lub równa 0" },
{ 1990, "ERR_TR_STORNO_NOT_ALLOWED: Niedozwolone stornowanie towaru. Błędny stan transakcji" },
{ 1991, "ERR_TR_DISCNT_NOT_ALLOWED: Niedozwolony rabat/narzut. Błędny stan transakcji" },
{ 2000, "ERR_TR_FLD_VAT: Błąd pola VAT" },
{ 2002, "ERR_NO_HDR: Brak nagłówka" },
{ 2003, "ERR_HDR: Zaprogramowany nagłówek" },
{ 2004, "ERR_NO_VAT: Brak aktywnych stawek VAT" },
{ 2005, "ERR_NO_TRNS_MODE: Brak trybu transakcji" },
{ 2006, "ERR_TR_FLD_PRICE: Błąd pola cena (cena <= 0)" },
{ 2007, "ERR_TR_FLD_QUANT: Błąd pola ilość (ilość <= 0)" },
{ 2008, "ERR_TR_FLD_TOTAL: Błąd kwoty total" },
{ 2009, "ERR_TR_FLD_TOTAL_ZERO: Błąd kwoty total, równa zero" },
{ 2010, "ERR_TOT_OVR: Przekroczony zakres totalizerów dobowych" },
{ 2021, "ERR_RTC_WAS_SET: Próba ponownego ustawienia zegara" },
{ 2022, "ERR_RTC_DIFF: Zbyt duża różnica dat" },
{ 2023, "ERR_RTC_HOUR: Różnica większa niż godzina w trybie użytkownika w trybie fiskalnym" },
{ 2024, "ERR_RTC_BAD_FORMAT: Zły format daty (np. 13 miesiąc)" },
{ 2025, "ERR_RTC_FM_DATE: Data wcześniejsza od ostatniego zapisu do modułu" },
{ 2026, "ERR_RTC: Błąd zegara" },
{ 2027, "ERR_VAT_CHNG_CNT: Przekroczono maksymalną liczbę zmian stawek VAT" },
{ 2028, "ERR_VAT_SAME: Próba zdefiniowania identycznych stawek VAT" },
{ 2029, "ERR_VAT_VAL: Błędne wartości stawek VAT" },
{ 2030, "ERR_VAT_NO_ACTIVE: Próba zdefiniowania stawek VAT wszystkich nieaktywnych" },
{ 2031, "ERR_FLD_TIN: Błąd pola NIP" },
{ 2032, "ERR_FM_ID: Błąd numeru unikatowego pamięci fiskalnej" },
{ 2033, "ERR_FISC_MODE: Urządzenie w trybie fiskalnym" },
{ 2034, "ERR_NO_FISC_MODE: Urządzenie w trybie niefiskalnym" },
{ 2035, "ERR_TOT_NOT_ZERO: Niezerowe totalizery" },
{ 2036, "ERR_READ_ONLY: Urządzenie w stanie tylko do odczytu" },
{ 2037, "ERR_NO_READ_ONLY: Urządzenie nie jest w stanie tylko do odczytu" },
{ 2038, "ERR_TRNS_MODE: Urządzenie w trybie transakcji" },
{ 2039, "ERR_TOT_ZERO: Zerowe totalizery" },
{ 2040, "ERR_CURR_CALC: Błąd obliczeń walut, przepełnienie przy mnożeniu lub dzieleniu" },
{ 2041, "ERR_TR_END_VAL_0: Próba zakończenia pozytywnego paragonu wartością 0" },
{ 2042, "ERR_REP_PER_DATE_FORMAT_FROM: Błędy formatu daty początkowej raportu okresowego" },
{ 2043, "ERR_REP_PER_DATE_FORMAT_TO: Błędy formatu daty końcowej raportu okresowego" },
{ 2044, "ERR_REP_PER_CURR_MONTH: Próba wykonania raportu miesięcznego w danym miesiącu" },
{ 2045, "ERR_REP_PER_DATE_START_GT_CURR: Data początkowa późniejsza od bieżącej daty" },
{ 2046, "ERR_REP_PER_DATE_END_GT_FISK: Data końcowa wcześniejsza od daty fiskalizacji" },
{ 2047, "ERR_REP_PER_NUM_ZERO: Numer początkowy lub końcowy równy zero" },
{ 2048, "ERR_REP_PER_NUM_FROM_GT_END: Numer początkowy większy od numeru końcowego" },
{ 2049, "ERR_REP_PER_NUM_TOO_BIG: Numer raportu zbyt duży" },
{ 2050, "ERR_REP_PER_DATE_END_GT_START: Data początkowa późniejsza od daty końcowej" },
{ 2051, "ERR_REP_TXT_NO_MEM: Brak pamięci w buforze tekstów" },
{ 2052, "ERR_TR_NO_MEM: Brak pamięci w buforze transakcji" },
{ 2054, "ERR_TR_END_PAYMENT: Formy płatności nie pokrywają kwoty do zapłaty lub reszty" },
{ 2055, "ERR_LINE: Błędna linia" },
{ 2056, "ERR_EMPTY_TXT: Tekst pusty" },
{ 2057, "ERR_SIZE: Przekroczony rozmiar" },
{ 2058, "ERR_LINE_CNT: Błędna liczba linii" },
{ 2060, "ERR_TR_BAD_STATE: Błędny stan transakcji" },
{ 2062, "ERR_PRN_START: Jest wydrukowana część jakiegoś dokumentu" },
{ 2063, "ERR_PAR: Błąd parametru" },
{ 2064, "ERR_FTR_NO_HDR: Brak rozpoczęcia wydruku lub transakcji" },
{ 2067, "ERR_PRN_CFG_SET: Błąd ustawień konfiguracyjnych wydruków/drukarki" },
{ 2070, "ERR_WRONG_MAINTENANCE_TIME: Data przeglądu wcześniejsza od systemowej" },
{ 2101, "ERR_DF_DB_OVR: Zapełnienie bazy danych" },
{ 2102, "ERR_DF_DB_VAT_INACTIVE: Stawka VAT nieaktywna" },
{ 2103, "ERR_DF_DB_VAT_INVALID: Nieprawidłowa stawka VAT" },
{ 2104, "ERR_DF_DB_NAME: Błąd nazwy" },
{ 2105, "ERR_DF_DB_NAME_VAT: Błąd przypisania stawki" },
{ 2106, "ERR_DF_DB_LOCKED: Zablokowany" },
{ 2107, "ERR_DF_DB_NAME_NOT_FOUND: Nie znaleziono w bazie drukarkowej" },
{ 2108, "ERR_DF_DB_NOT_OVR: Baza nie jest zapełniona" },
{ 2501, "ERR_FORM_ID: Błędny identyfikator raportu" },
{ 2502, "ERR_FORM_LINE_NO: Błędny identyfikator linii raportu" },
{ 2503, "ERR_FORM_HDR_NO: Błędny identyfikator nagłówka raportu" },
{ 2504, "ERR_FORM_PAR_CNT: Zbyt mało parametrów raportu" },
{ 2505, "ERR_FORM_NOT_STARTED: Raport nie rozpoczęty" },
{ 2506, "ERR_FORM_STARTED: Raport rozpoczęty" },
{ 2507, "ERR_FORM_CMD: Błędny identyfikator komendy" },
{ 2521, "ERR_DB_REP_PLU_ACTIVE: Raport już rozpoczęty" },
{ 2522, "ERR_DB_REP_PLU_NOT_ACTIVE: Raport nie rozpoczęty" },
{ 2523, "ERR_DB_REP_PLU_VAT_ID: Błędna stawka VAT" },
{ 2532, "ERR_FV_COPY_CNT: Błędna liczba kopii faktur" },
{ 2600, "ERR_DISCNT_TYPE: Błędny typ rabatu/narzutu" },
{ 2601, "ERR_TR_DISCNT_VALUE: Wartość rabatu/narzutu spoza zakresu" },
{ 2701, "ERR_VAT_ID: Błąd identyfikatora stawki podatkowej" },
{ 2702, "ERR_FTRLN_ID: Błędny identyfikator dodatkowej stopki" },
{ 2703, "ERR_FTRLN_CNT: Przekroczona liczba dodatkowych stopek" },
{ 2704, "ERR_ACC_LOW: Zbyt słaby akumulator" },
{ 2705, "ERR_PF_TYPE: Błędny identyfikator typu formy płatności" },
{ 2801, "ERR_DISCNT_VERIFY: Błąd weryfikacji wartości rabatu/narzutu" },
{ 2802, "ERR_LNTOT_VERIFY: Błąd weryfikacji wartości linii sprzedaży" },
{ 2803, "ERR_PACKTOT_VERIFY: Błąd weryfikacji wartości opakowania" },
{ 2804, "ERR_CURRTOT_VERIFY: Błąd weryfikacji wartości formy płatności" },
{ 2805, "ERR_ENDTOT_VERIFY: Błąd weryfikacji wartości fiskalnej" },
{ 2806, "ERR_ENDPACKPLUS_VERIFY: Błąd weryfikacji wartości opakowań dodatnich" },
{ 2807, "ERR_ENDPACKMINUS_VERIFY: Błąd weryfikacji wartości opakowań ujemnych" },
{ 2808, "ERR_ENDPAYMENT_VERIFY: Błąd weryfikacji wartości wpłaconych form płatności" },
{ 2809, "ERR_ENDCHANGE_VERIFY: Błąd weryfikacji wartości reszty" },
{ 2851, "ERR_STORNO_QNT: Błąd stornowania, błędna ilość" },
{ 2852, "ERR_STORNO_AMT: Błąd stornowania, błędna wartość" },
{ 2900, "ERR_EC_NOT_ENOUGH_SPACE: Stan kopii elektronicznej nie pozwala na wydrukowanie tego dokumentu. Brak nośnika lub operacja na nośniku trwa" },
{ 2901, "ERR_EC_EDM_NOT_READY: Pamięć podręczna kopii elektronicznej zawiera zbyt dużą ilość danych. Brak pliku na nośniku." },
{ 2903, "ERR_EC_DATA_PENDING: Nieprawidłowy wynik testu." },
{ 2911, "ERR_EC_EDM_FILE_NOT_FOUND: Nie można zmienić 2 raz waluty ewidencyjnej po RD." },
{ 2913, "ERR_EC_TEST_FAILED: Próba ustawienia już ustawionej waluty." },
{ 3051, "ERR_CURRENCY_ALREADY_CHANGED: Błędna nazwa waluty." },
{ 3052, "ERR_CURRENCY_SAME: Automatyczna zmiana waluty." },
{ 3053, "ERR_CURRENCY_INVALID_NAME: Błędna wartość przelicznika kursu." },
{ 3054, "ERR_CURRENCY_SHOULD_CHANGE: Przekroczono maksymalną liczbę zmian walut." },
{ 3055, "ERR_CURRENCY_RATE: Błąd zmiany waluty." },
{ 3056, "ERR_CURRENCY_CHNG_CNT: Błędna liczba walut w bazie." },
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment