Sterowniki‎ > ‎

Posnet101

Jest to obecnie polecany sterownik dla nowych drukarek POSNET Thermal, implementujących nowy protokół "Posnet". Ma on zastąpić stary protokół "Thermal", używany w starszych drukarkach firmy POSNET. Jeśli Państwa drukarka obsługuje ten protokół, rodzimy przede wszystkim go wykorzystywać przed starym protokołem.

Specyficzna konfiguracja
Zmiana stopki paragonu
Możliwość zmiany domyślnej stopki dokonywana jest poprzez zmianę w pliku Configuration.xml:

    <ClassProperty>
        <name.prokop.bart.hardware.fiscalprinter.Posnet101>
            <Footer line1="&amp;b&amp;c&amp;hDziękujemy" line2="&amp;c&amp;bZapraszamy ponownie" line3="&amp;i&amp;cPosnet 1.01, FPS (c) 2010 www.ttsoft.pl" />
        </name.prokop.bart.hardware.fiscalprinter.Posnet101>
...
    </ClassProperty>

Oczywiście konfiguracja ta nie jest konieczna dla prawidłowej pracy systemu. Zwracamy nadto uwagę na fakt, że konfigurację zapisujemy w pliku XML, tak więc występują pewne konsekwencje tego faktu:
  • kody formatujące w protokole POSNET, czyli np. &c czy &b powinny zostać zapisane w sposób prawidłowy dla XMLa. Dla przykładu & jest znakiem zastrzeżonym w XMLu i powinien być wpisany jako &amp;
  • polskie litery powinny być zakodowane w standardzie UTF-8
  • wymaga się zdefiniowana 3 niepustych linii dla stopki
  • nie jest wykonywana żadna walidacja poprawności linii stopek, w celu ich prawidłowego zdefiniowania należy zapoznać się z dokumentacją firmy POSNET.
  • dopuszczalne kody sterujące to: &b – czcionka pogrubiona, &c – wyśrodkowanie tekstu, &h – czcionka wysoka, &i – kursywa, &u – czcionka podkreślona, &w – czcionka poszerzona
Test sterownika



W tym momencie powinniśmy być w stanie wydrukować paragon testowy. W tym celu wydajemy polecenie:
Kod:
E:\Java3\bart-app\dist>java -cp bart-app.jar name.prokop.bart.apps.fps.PosnetThermal101 COM1
Stable Library
=========================================
Native lib Version = RXTX-2.1-7
Java lib Version   = RXTX-2.1-7

Oczywiście COM1 zastępujemy nazwą portu szeregowego do którego przyłączona jest drukarka. Uwaga !!! nazwy portów szeregowych piszemy z dużej litery w tej postaci: COM7 nie COM7: ani com7 czy com7: !!! Powinniśmy ujrzeć przykładowy paragon fiskalny. Jeśli mamy inną drukarkę, używamy zamiast klasy PosnetThermal101, klasy InnovaProfit451, OptimusVivo, PosnetThermalOld, iinych w miarę jak będę dodawał sterowniki dla drukerek "odstających" od formatu.

6. Tworzymy tabele w bazie danych mySQL:
Kod:
mysql> CREATE  TABLE IF NOT EXISTS `fps`.`SLIPS` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `CASHBOXLOGO` CHAR(8) NOT NULL ,
  `EXTERNALREFERENCE` CHAR(16) NOT NULL,
  `CASHIERNAME` VARCHAR(32) NOT NULL DEFAULT 'Operator' ,
  `CREATED_TS` TIMESTAMP NOT NULL DEFAULT now() ,
  `PRINTED_TS` TIMESTAMP NULL ,  PRIMARY KEY (`ID`)
) ENGINE = InnoDB;
Query OK, 0 rows affected (0.55 sec)
aha EXTERNALREFERENCE powinno być UNIQUE ale nie wiem jak to w mySQL wywołać.

Wytłumaczenie pól w bazie danych: ID - klucz podstawowy, CASHBOXLOGO identyfikator drukarki odpowiadający późniejszej konfiguracji serwera JAVA, pojawia się na wydruku, CASHIERNAME - kasjer, pojawia się na wydruku, CREATED_TS - timestamp kiedy paragon został utworzony, PRINTED_TS - gdy zawiera wartość (nie jest NULL) oznacza, że paragon został wydrukowany i zafiskalizowany w pamięci fiskalnej drukarki.

Kod:
mysql> CREATE  TABLE IF NOT EXISTS `fps`.`SLIPLINES` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `FKID_SLIP` INT NOT NULL ,
  `NAME` VARCHAR(40) NOT NULL ,
  `AMOUNT` DOUBLE NOT NULL ,
  `PRICE` DOUBLE NOT NULL ,
  `TAXRATE` CHAR(5) NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX FK_SLIPLINES (`FKID_SLIP` ASC) ,
  CONSTRAINT `FK_SLIPLINES` FOREIGN KEY (`FKID_SLIP`) REFERENCES `fps`.`SLIPS` (`ID` )
      ON DELETE CASCADE    ON UPDATE CASCADE)ENGINE = InnoDB;
Query OK, 0 rows affected (0.17 sec)

Opis kolumn tabeli: ID - klucz podstawowy, FKID_SLIP - klucz obcy do tabeli paragonów, NAME - nazwa towaru, AMOUNT - ilość towaru, PRICE - jednostkowa cena brutto, TAXRATE - stawka podatku, jedna z wartości: VAT22, VAT07, VAT03, VAT00, VATzw.

Kod:
mysql> CREATE  TABLE IF NOT EXISTS `fps`.`SLIPPAYMENTS` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `FKID_SLIP` INT NOT NULL ,
  `AMOUNT` DOUBLE NOT NULL ,
  `NAME` VARCHAR(16) NULL ,
  `FORM` CHAR(10) NOT NULL ,
  PRIMARY KEY (`ID`) ,  INDEX FK_SLIPPAYMENTS (`FKID_SLIP` ASC) ,
  CONSTRAINT `FK_SLIPPAYMENTS`    FOREIGN KEY (`FKID_SLIP` )    REFERENCES `fps`.`SLIPS` (`ID` )
           ON DELETE CASCADE    ON UPDATE CASCADE
) ENGINE = InnoDB;
Query OK, 0 rows affected (0.16 sec)

Opis kolumn tabeli: ID - klucz podstawowy, FKID_SLIP - klucz obcy do tabeli paragonów, AMOUNT - kwota płatności daną formą płatności, NAME - nazwa formy platnosci (gdy inna niż gotówka), FORM - forma płatności, jedna z wartości: Cash, CreditCard, Cheque, Voucher, Other, Credit (za instrukcją do drukarki POSNETu).

7. Przechodzimy do katalogu, gdzie rozpakowaliśmy plik dist.zip

8. Będąc w katalogu do którego rozpakowaliśmy zawartość katalogu dist.zip, wydajemy polecenie:

Kod:
E:\Java3\bart-app\dist>java -cp bart-app.jar name.prokop.bart.util.conf.Configuration
Generuję: persistence.properties
Creating Configuration - ok.

W wyniku działania tego polecenia w katalogu domowym użytkownika (pod linuxem np: /home/bart, a pod Windows Vista: C:\Users\Bart\) zostaje utworzony podkatalog o nazwie .bartprokop Jest to katalog zawierający pliki konfiguracyjne dla całego pakietu aplikacyjnego. Nas interesuje plik o nazwie Configuration.xml.

9. Używając edytora plików tekstowych który obsługuje standard kodowania UTF-8, edytujemy plik Configuration.xml. Można użyć edytora znajdujacego się w pakiecie aplikacyjnym:
Kod:
E:\Java3\bart-app\dist>java -cp bart-app.jar name.prokop.bart.util.conf.ConfTextEditor


10. Należy odnaleść w pliku konfiguracyjnym miejsce gdzie definiuje się podłączenia pakietu aplikacyjnego do baz danych. Interesuje nas element FiscalPrinterServer:

Kod:
    <DatabaseConnections>
        <!-- Zwyczajowa nazwa połączenia dla Serwer drukarki fiskalnej -->      
        <FiscalPrinterServer dbtype="mySQL" database="127.0.0.1:3306/fps" user="bart" pass="haslo" />
        ...


11. Używając narzędzia konfiguracyjnego do definiowania uruchamianych usług, wybieramy usługę FiscalPrinterServer:
Kod:
E:\Java3\bart-app\dist>java -cp bart-app.jar name.prokop.bart.apps.multiserver.JPanelServicesList

Obrazek
Jeśli chcemy mieć możliwość zakończenia w elegancki sposób pracy serwera, to należy również uruchomić usługę XMLHub.

12. Testowanie zapisu paragonu do bazy danych:
Kod:
E:\Java3\bart-app\dist>java -cp bart-app.jar name.prokop.bart.apps.fps.TestDBSLipSave
Jul 27, 2008 10:15:47 AM name.prokop.bart.util.sql.MySQL loadDriver
INFO: mySQL JDBC driver found in classpath and loaded
Jul 27, 2008 10:15:47 AM name.prokop.bart.util.sql.MySQL loadDriver
INFO: MySQL JDBC driver version 5.1 registered with driver manager.


Sprawdzenie czy Paragon zapisał się w bazie danych odbywa się z konsoli mySQL (fragmenty ekranów):
Kod:
mysql> select * from slips;
+----+-------------+-------------------+-----------------+---------------------+------------+
| ID | CASHBOXLOGO | EXTERNALREFERENCE | CASHIERNAME     | CREATED_TS          | PRINTED_TS |
+----+-------------+-------------------+-----------------+---------------------+------------+
|  2 | BP01        | R-k 463004        | Jacek Bielarski | 2008-07-27 10:08:42 |       NULL |
|  3 | BP01        | R-k 588130        | Jacek Bielarski | 2008-07-27 10:15:47 |       NULL |
+----+-------------+-------------------+-----------------+---------------------+------------+
3 rows in set (0.00 sec)

mysql> select * from slipLines;
+----+-----------+------------------+------------+----------+---------+
| ID | FKID_SLIP | NAME             | AMOUNT     | PRICE    | TAXRATE |
+----+-----------+------------------+------------+----------+---------+
|  1 |         1 | Test22           |          1 |     0.01 | VAT22   |
|  2 |         1 | Test07           |          1 |     0.01 | VAT07   |
|  3 |         1 | Test00           |          1 |     0.01 | VAT00   |
|  4 |         1 | TestZW           |          1 |     0.01 | VATzw   |
|  5 |         2 | Deska drewniania |      0.999 |    22.13 | VAT22   |
|  6 |         2 | Lejek metalowy   |     0.1171 |    18.01 | VAT07   |
|  7 |         2 | Pampers          |          1 |    39.99 | VAT00   |
|  8 |         2 | Cegla            |        123 | 0.123456 | VAT22   |
|  9 |         2 | Cement           |       9.99 |    99.99 | VAT22   |
| 10 |         2 | Pustak           |       9.99 |     0.01 | VAT07   |
| 11 |         2 | Beton            | 48.0011001 |  1005.01 | VAT07   |
| 12 |         2 | Paliwo           |      34.87 |     4.37 | VAT07   |

mysql> select * from slipPayments;
+----+-----------+----------+----------------+------------+
| ID | FKID_SLIP | AMOUNT   | NAME           | FORM       |
+----+-----------+----------+----------------+------------+
|  5 |         3 |      100 |                | Cash       |
|  6 |         3 |      200 | VISA **** 0127 | CreditCard |
|  7 |         3 |      300 | BPH127368      | Cheque     |
|  8 |         3 | 50396.44 | Karnet 653214  | Voucher    |
+----+-----------+----------+----------------+------------+
8 rows in set (0.00 sec)


13. Konfiguracja serwera wydruku fiskalnego. W pliku konfiguracyjnym należy odnaleść elementy odpowiedzialne za konfigurację serwera wydruku fiskalnego:

Kod:
    <!-- Konfiguracja serwera wydruku fiskalnego -->
    <FiscalPrinterServer>
        <!-- Definicje poszczególnych drukarek fiskalnych obsługiwanych przez serwer -->
        <!-- Możliwe wartośc pola type: PosnetThermal101 PosnetThermalOld OptimusVivo InnovaProfit451 -->
        <!-- Możliwe wartośc pola storageType: SimpleDatabase, TTSystemDatabase, EJB3 -->
        <!-- Pole databaseConnection powinno odnosić się do odpowiedniego elementu w DatabaseConnections -->
        <FiscalPrinter type="PosnetThermal101" storageType="SimpleDatabase" databaseConnection="FiscalPrinterServer" name="BP01" serialPort="COM1" />
        <FiscalPrinter type="PosnetThermalOld" storageType="SimpleDatabase" databaseConnection="FiscalPrinterServer" name="BP02" serialPort="/dev/ttyS0" />
    </FiscalPrinterServer>


Zwracam uwagę, że atrybut name powinien odpowiadać polu CASHBOXNAME, w tabeli SLIPS. Dzięki temu rozróżnieniu serwer może obsługiwać wiele drukarek fiskalnych równocześnie, a aplikacja decydować na której drukarce paragon zostanie wydrukowany.

14. Uruchomienie serwera:
Kod:
E:\Java3\bart-app\dist>java -jar bart-app.jar
Starting: name.prokop.bart.apps.multiserver.MultiServer
Configuring logger..OK
Welcome to JAVA MultiServer (c) 2000-2007.
Default 2 sec delay... please wait...
Staring module loading
Starting Fiscal Printer Server 1.3
  new fiscal printer added: BP01/PosnetThermalOld@/dev/ttyS0
Modules loaded
Starting the following services:
Uruchamiam: name.prokop.bart.apps.fps.FiscalPrinterServer
Uruchamiam: name.prokop.bart.util.xmlask.AskServer
All services started.


15. Testujemy naszą konfigurację.

_________________
Bartłomiej Prokop
tel. +48 509 258 502
http://bart.prokop.name
http://bartprokop.blogspot.com/

Góra    
 Zobacz profil 
 
bart    
 Tytuł: Zmiany w serwerze 2008 - 11 - 4
PostNapisane: 07 lis 2008, 21:01
Offline
Avatar użytkownika

Dołączył(a): 15 maja 2008, 13:32
Posty: 314
Lokalizacja: Mrowla    
Tabela SLIPS zostaje zmodyfikowana następująco:
Kod:
CREATE  TABLE IF NOT EXISTS `fps`.`SLIPS` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `CASHBOXLOGO` CHAR(8) NOT NULL ,
  `EXTERNALREFERENCE` CHAR(16) NOT NULL ,
  `CASHIERNAME` VARCHAR(32) NOT NULL DEFAULT 'Operator' ,
  `CREATED_TS` TIMESTAMP NOT NULL DEFAULT now() ,
  `PRINTED_TS` TIMESTAMP NULL ,
  `STAGE` INT NOT NULL DEFAULT 0 ,
  `ERROR` VARCHAR(120) NOT NULL DEFAULT 'OK' ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB;


Pole Stage oznacza los paragonu. 0 - zapisany do bazy 1 - serwer wydruku pobrał Paragon i próbuje go wydrukować. 2 - paragon wydrukowany (z sukcesem - zafiskalizowanie potwierdzone przez drukarkę), -1 - paragonu nie udało się wydrukować.

Pole Error zawiera bład zwrócony przez sterownik drukarki fiskalej.

Wygląd to w bazie danych mniej więcej tak (uwaga zrzut z bazy postgresql):
Obrazek

_________________
Bartłomiej Prokop
tel. +48 509 258 502
http://bart.prokop.name
http://bartprokop.blogspot.com/

Góra    
 Zobacz profil 
 
bart    
 Tytuł: Zmiany w nowej wersji
PostNapisane: 13 lis 2008, 17:43
Offline
Avatar użytkownika

Dołączył(a): 15 maja 2008, 13:32
Posty: 314
Lokalizacja: Mrowla    
Uwaga w bieżącej wersji zmieniło się położenie niektórych klas użytkowych - przykładowo cały szkielet multiserwera został przeniesiony z pakietu aplikacyjnego do bibliotek (bart-app -> bart-lib).

W związku z tym wywoływania Multiserwera i jego konfiguracji wyglądają następująco:
Kod:
E:\Java3\bart-app\dist>java -jar bart-app.jar name.prokop.bart.util.multiserver.JPanelServicesList

E:\Java3\bart-app\dist>


Podobnie uruchamianie multiserwera:
Kod:
E:\Java3\bart-app\dist>java -jar bart-app.jar name.prokop.bart.util.multiserver.MultiServer

E:\Java3\bart-app\dist>


Uwaga od nowej wersji w związku z przerobieniem klasy domyślnej w Manifest.mf wywołania -jar i -cp stały się równoważne (zmiana dokonana dla uproszczenia tworzenia skrótów w przypadku tworzenia instalki pod platformę Windows).

_________________
Bartłomiej Prokop
tel. +48 509 258 502
http://bart.prokop.name
http://bartprokop.blogspot.com/

Góra    
 Zobacz profil 
 
bart    
 Tytuł: Wygląd paragonu testowego
PostNapisane: 26 gru 2008, 18:35
Offline
Avatar użytkownika

Dołączył(a): 15 maja 2008, 13:32
Posty: 314
Lokalizacja: Mrowla    
Obrazek
Obrazek


Comments