Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Closed TopicStart new topic
> Komunikacja z lokalną drukarką fiskalną POSNET poprzez PHP
mlattari
post 2.01.2009, 14:42:30
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


Witam!

Czy ktoś wie jak komunikować się z drukarkami fiskalnymi POSNET Thermal za pomocą PHP z użyciem interfejsu Active-x ?
Stworzyłem obszerną aplikację wspomagającą zamówienia i sprzedarz, która działa w przeglądarce, i pojawił się problem z lokalną drukarką fiskalną, którego nie mogę rozwiązać w żaden sposób... podobno można się z nią komunikować za pomocą Active-x .... ale jak? Chodzi mi tylko o wystawianie paragonów do sporządzonych przez program faktur VAT.

Bardzo dziękuje z góry z pomoc


Czy naprawdę nikt nie wie jak się za to brać?

Dzięki z góry za pomoc!
Go to the top of the page
+Quote Post
erix
post 2.01.2009, 15:03:26
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czy ktoś wie jak komunikować się z drukarkami fiskalnymi POSNET Thermal za pomocą PHP z użyciem interfejsu Active-x ?


Jeśli chodzi o ActiveX, to serwer MUSI działać pod kontrolą Windows (wiadomo, ale lepiej nadmienić winksmiley.jpg). A przyda się rozszerzenie COM: http://pl.php.net/com


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
mlattari
post 2.01.2009, 17:26:34
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


No tak :-) ale chodzi mi o drukarkę fiskalną podłączoną lokalnie.... tzn klient łączy się z serwerem (na szczęście pod Linuxem), uruchamia pod Windowsem aplikację php w swojej przeglądarce i ma lokalną drukarkę fiskalną podłączoną do swojego kompa :-) Z tego co wiem, da się to zrobić ale nie mogę nigdzie znaleźć jak...
Chodzi o wielostanowiskowy system sprzedaży w firmowej sieci LAN, gdzie jest kilka stanowisk, każde ze swoją drukarką fiskalną :-)

Dzięki jeszcze raz za sugestie, podpowiedzi, pomoc :-)
Go to the top of the page
+Quote Post
bim2
post 2.01.2009, 17:40:01
Post #4





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


To już nie będzie od strony php smile.gif


--------------------
Go to the top of the page
+Quote Post
mlattari
post 2.01.2009, 17:58:49
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


hmmm czemu? z tego co się w necie naczytałem to raczej można poprzez php i active-x sterować różnymi urządzeniami podłączonymi do kompa... ale nie mogłem znaleźć konkretnych przykładów... w moim przypadku chodzi o komunikację z urządzeniem podłączonym do lokalnego portu rs-232...

Ten post edytował mlattari 2.01.2009, 17:59:51
Go to the top of the page
+Quote Post
bim2
post 2.01.2009, 18:10:00
Post #6





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


W php jedynie co zrobisz to wyświetlisz prośbę o kontrolkę. smile.gif ActiveX to nie PHP :]


--------------------
Go to the top of the page
+Quote Post
mlattari
post 2.01.2009, 19:01:43
Post #7





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


Czyli za pomocą samego PHP nie da się przesyłać danych poprzez lokalny port szeregowy... potrzebna jest kontrolka Active-x napisana specjalnie do danego urządzenia... hmm.. na to wygląda... no ale taka kontrolka jest na stronie producenta urządzenia tylko nie wiem jak się do niej zwrócić z poziomu php :-)
Go to the top of the page
+Quote Post
erix
post 2.01.2009, 19:35:19
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
no ale taka kontrolka jest na stronie producenta urządzenia tylko nie wiem jak się do niej zwrócić z poziomu php :-)

Przecież napisałem. :]

Ale warunek konieczny: PHP musi działać na tym samym systemie, co zainstalowana kontrolka.

Choć przypuszczam, że lepiej byłoby tu napisać skrypt VBS, a nie babrać się z PHP.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
mlattari
post 2.01.2009, 20:31:08
Post #9





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


To tak... ale skrypty chodzą na serwerze a klienty łączą się z sewerem poprzez przeglądarki z kompów do których są podpięte lokalne drukarki fiskalne.... zastanawiam się czy w ogóle jest na to jakieś rozwiązanie.... ewentualnie mógłbym podpiąć pod serwer kilka drukarek pod różnymi portami COM (w sumie są jak narazie tylko 3 drukarki, z których 2 są używane a jedna awaryjna) ... wtedy raczej by się dało... szkoda że nie można tego zrobić w prosty sposób... Jak wszystko będzie po stronie serwera to już nie problem i chyba tak zrobie... No nic... w każdym razie dzięki za pomoc :-)
Go to the top of the page
+Quote Post
erix
post 2.01.2009, 20:55:56
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




To wiesz, wcale niegłupim pomysłem byłoby skorzystanie z VBS po stronie klienta.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
mlattari
post 2.01.2009, 21:24:25
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


No lokalnie,pod Windowsem, przez VB to nie problem dostać się do portu COM: ale zastanawiam się jak połączyć lokalny VBS z działającym na serwerze skryptem php...
Go to the top of the page
+Quote Post
erix
post 2.01.2009, 22:30:08
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A kojarzysz ten obiekt:
Kod
new ActiveXObject("Microsoft.XMLHTTP")

? winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
mlattari
post 3.01.2009, 00:21:36
Post #13





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


Nie znam takiego obiektu :-( ale z tego co piszesz to chyba będę musiał się z nim zapoznać... ale to chyba właśnie chodzi o Active-x...
Uważasz, że za pomocą ActiveXObject("Microsoft.XMLHTTP") można przekazać dane z php do tego obiektu a z niego do portu COM: ?
Powiedzmy, że moje dane są $tutaj[] albo w $_POST, ale to wszystko jedno... no to jak je wysłać z php to portu com? Szukałem w sieci po tym jak wspomniałeś o tym rozwiązaniu ale nigdzie nie mogę znaleźć konkretów... Mógłbyś, jeżeli to nie kłopot, podać jakiś najprostszy przykład?

Dzięki z góry...
Go to the top of the page
+Quote Post
bim2
post 3.01.2009, 01:45:51
Post #14





Grupa: Zarejestrowani
Postów: 1 873
Pomógł: 152
Dołączył: 9.04.2006
Skąd: Berlin

Ostrzeżenie: (0%)
-----


W php generujesz powiedzmy jakiś text który chcesz wysłać do kontrolki. Więc robisz tak:
activex.php
  1. <?php
  2. echo 'tekst do kontrolki';
  3. ?>

I później za pomocą kontrolki otwierasz http:/twoja_strona.pl/activex.php i dostajesz tekst smile.gif


--------------------
Go to the top of the page
+Quote Post
mlattari
post 24.01.2009, 01:26:12
Post #15





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


ehhh znalazłem rozwiązanie.... wszystko jest bardzo ładnie udokumentowane przez producenta i do tego są dołączone działające skrypty java :-)
Rzecz ma się dużo prościej niż się spodziewałem.... mogę przekazać dane z php do skryptów java i drukuję paragon :-)

W każdym razie dzięki za pomoc

Witam!

Ponieważ już kilku z forumowiczów do mnie napisało, podpowiem wszystkim zainteresowanym tym tematem, jak się za to brać.

Otóż na stronie http://www.posnet.com.pl/index.php?pid=1307 jest do pobrania kontrolka Active-X dla drukarki Posnet Thermal (EXE; 644 KB). Trzeba ją najpierw pobrać i zainstalować :-)))

W katalogu DOC są 2 ważne pliki: strona_testowa_ocx.htm oraz instrukcja_ocx.pdf, natomiast biblioteka ThermalLib.ocx (najważniejsza z tego wszystkiego - ale jej nie modyfikujemy :-) ) znajduje się piętro wyżej :-)

Wszystkie potrzebne Wam funkcje są użyte w pliku strona_testowa_ocx.htm i można sobie je łatwo podejrzeć i użyć we własnych skryptach. Trzeba pamiętać o poprawnym osadzeniu obiektu:

<OBJECT id=ThermalLib height=0 width=0 classid=clsid:904511D2-5407-4033-8DAD-07B33EC7317E><PARAM NAME="_Version" VALUE="65536"><PARAM NAME="_ExtentX" VALUE="26"><PARAM NAME="_ExtentY" VALUE="26"><PARAM NAME="_StockProps" VALUE="0"></OBJECT>

a także o tym, że Active-x działa niestety tylko w IE no i trzeba go nieraz "włączyć" w zabezpieczeniach przeglądarki. Pamiętajcie, że także biblioteka .ocx musi być dostępna najlepiej w tym samych katalogu co Wasz skrypt.

Oto, w skrócie i bez kontekstu, jak dostosowałem funkcje do moich potrzeb - tzn bez formularzy itp i jak je połączyłem z moimi skryptami (przykład 3 podstawowych funkcji, które używam - inne mi są akurat w tej chwili niepotrzebne):


[funkcje]

...

<script LANGUAGE='JavaScript1.1'>

function OpenPort() {
data = ('COM1')
ThermalLib.THLOpenPort(data)
ThermalLib.THLSendBel()
}

function LBTRSHDR( ilosc_pozycji_sprzedazy,ilosc_dodatkowych_linii_tekstu,linia1,linia2,linia3 )
{
var ico = ThermalLib.LBTRSHDR(ilosc_pozycji_sprzedazy,ilosc_dodatkowych_linii_tekstu,linia
,linia2,linia3)
alert(\"LBTRSHDR: \" + ico)
}

function LBTRSLN( numer_linijki,rodzaj_rabatu,opis_rabatu,nazwa_towaru,ilosc,stawka_ptu,cena_jedno
tkowa_brutto,razem_brutto,
kwota_rabatu,opis_rabatu )
{
var ico = ThermalLib.LBTRSLN( numer_linijki,rodzaj_rabatu,opis_rabatu,nazwa_towaru,ilosc,stawka_ptu,cena_jedno
tkowa_brutto,razem_brutto,kwota_rabatu,opis_rabatu )
alert( \"LBTRSLN : \" + ico)
}

function LBTREXIT(rabatu_procentowy,ilosc_dodatkowych_linii_stopki,rodzaj_rabatu,kod_kasy
kasjera,linia1,linia2,linia3,razem_zaplacono,razem_naleznosc,rabat)
{
var ico = ThermalLib.LBTREXIT(rabatu_procentowy,ilosc_dodatkowych_linii_stopki,rodzaj_raba
u,kod_kasy_kasjera,linia1,linia2,linia3,razem_zaplacono,razem_naleznosc,rabat)
alert(\"LBTREXIT : \" + ico)
}

</script>

...

[zastosowanie funkcji (bez kontekstu - fragmenty wycięte ze skryptów)]

...

/* ##### FISKALIZACJA Etap I - Otwarcie portu COM + inicjalizacja fiskalizacji ##### */

echo "<script language='Javascript'>";
echo "OpenPort();";
echo "LBTRSHDR( '0','0','0','0','0' );";
echo "</script>";

/* ######################################################## */


/* ##### FISKALIZACJA Etap II - wysłanie pozycji sprzedaży ############################# */

echo "<script language='Javascript'>";
echo "LBTRSLN( '".$linijka."','0','0','".substr($produkt[0],0,20)."(".$produkt[2].")"."','".$produkt[1]."','".
$produkt[2]."','".$produkt[3]."','".$produkt[4]."','0','0' );";
echo "</script>";

/* ##################################################################### */


/* ##### FISKALIZACJA Etap III - zakończenia ####################### */

echo "<script language='Javascript'>";
echo "LBTREXIT( '0','0','0','1SW','0','0','0','".$laczna_naleznosc."','".$laczna_naleznosc."','0' );";
echo "</script>";

/* ###################################################### */

...

Nie zastanawiałem się jeszce nad tym co z kontrolą błedów ale nawet nie mam pojęcia jak przekazać do php wynik funkcji Javascript :-)

Wszystkie funkcje są dobrze udokumentowany w instrukcji .pdf

Pozdrawiam i zyczę powodzenia

mlattari



Witam!

Ponieważ już kilku z forumowiczów do mnie napisało, podpowiem wszystkim zainteresowanym tym tematem, jak się za to brać.

Otóż na stronie http://www.posnet.com.pl/index.php?pid=1307 jest do pobrania kontrolka Active-X dla drukarki Posnet Thermal (EXE; 644 KB). Trzeba ją najpierw pobrać i zainstalować :-)))

W katalogu DOC są 2 ważne pliki: strona_testowa_ocx.htm oraz instrukcja_ocx.pdf, natomiast biblioteka ThermalLib.ocx (najważniejsza z tego wszystkiego - ale jej nie modyfikujemy :-) ) znajduje się piętro wyżej :-)

Wszystkie potrzebne Wam funkcje są użyte w pliku strona_testowa_ocx.htm i można sobie je łatwo podejrzeć i użyć we własnych skryptach. Trzeba pamiętać o poprawnym osadzeniu obiektu:

<OBJECT id=ThermalLib height=0 width=0 classid=clsid:904511D2-5407-4033-8DAD-07B33EC7317E><PARAM NAME="_Version" VALUE="65536"><PARAM NAME="_ExtentX" VALUE="26"><PARAM NAME="_ExtentY" VALUE="26"><PARAM NAME="_StockProps" VALUE="0"></OBJECT>

a także o tym, że Active-x działa niestety tylko w IE no i trzeba go nieraz "włączyć" w zabezpieczeniach przeglądarki. Pamiętajcie, że także biblioteka .ocx musi być dostępna najlepiej w tym samych katalogu co Wasz skrypt.

Oto, w skrócie i bez kontekstu, jak dostosowałem funkcje do moich potrzeb - tzn bez formularzy itp i jak je połączyłem z moimi skryptami (przykład 3 podstawowych funkcji, które używam - inne mi są akurat w tej chwili niepotrzebne):


[funkcje]

...

<script LANGUAGE='JavaScript1.1'>

function OpenPort() {
data = ('COM1')
ThermalLib.THLOpenPort(data)
ThermalLib.THLSendBel()
}

function LBTRSHDR( ilosc_pozycji_sprzedazy,ilosc_dodatkowych_linii_tekstu,linia1,linia2,linia3 )
{
var ico = ThermalLib.LBTRSHDR(ilosc_pozycji_sprzedazy,ilosc_dodatkowych_linii_tekstu,linia
,linia2,linia3)
alert(\"LBTRSHDR: \" + ico)
}

function LBTRSLN( numer_linijki,rodzaj_rabatu,opis_rabatu,nazwa_towaru,ilosc,stawka_ptu,cena_jedno
tkowa_brutto,razem_brutto,
kwota_rabatu,opis_rabatu )
{
var ico = ThermalLib.LBTRSLN( numer_linijki,rodzaj_rabatu,opis_rabatu,nazwa_towaru,ilosc,stawka_ptu,cena_jedno
tkowa_brutto,razem_brutto,kwota_rabatu,opis_rabatu )
alert( \"LBTRSLN : \" + ico)
}

function LBTREXIT(rabatu_procentowy,ilosc_dodatkowych_linii_stopki,rodzaj_rabatu,kod_kasy
kasjera,linia1,linia2,linia3,razem_zaplacono,razem_naleznosc,rabat)
{
var ico = ThermalLib.LBTREXIT(rabatu_procentowy,ilosc_dodatkowych_linii_stopki,rodzaj_raba
u,kod_kasy_kasjera,linia1,linia2,linia3,razem_zaplacono,razem_naleznosc,rabat)
alert(\"LBTREXIT : \" + ico)
}

</script>

...

[zastosowanie funkcji (bez kontekstu - fragmenty wycięte ze skryptów)]

...

/* ##### FISKALIZACJA Etap I - Otwarcie portu COM + inicjalizacja fiskalizacji ##### */

echo "<script language='Javascript'>";
echo "OpenPort();";
echo "LBTRSHDR( '0','0','0','0','0' );";
echo "</script>";

/* ######################################################## */


/* ##### FISKALIZACJA Etap II - wysłanie pozycji sprzedaży ############################# */

echo "<script language='Javascript'>";
echo "LBTRSLN( '".$linijka."','0','0','".substr($produkt[0],0,20)."(".$produkt[2].")"."','".$produkt[1]."','".
$produkt[2]."','".$produkt[3]."','".$produkt[4]."','0','0' );";
echo "</script>";

/* ##################################################################### */


/* ##### FISKALIZACJA Etap III - zakończenia ####################### */

echo "<script language='Javascript'>";
echo "LBTREXIT( '0','0','0','1SW','0','0','0','".$laczna_naleznosc."','".$laczna_naleznosc."','0' );";
echo "</script>";

/* ###################################################### */

...

Nie zastanawiałem się jeszce nad tym co z kontrolą błedów ale nawet nie mam pojęcia jak przekazać do php wynik funkcji Javascript :-)

Wszystkie funkcje są dobrze udokumentowany w instrukcji .pdf

Pozdrawiam i zyczę powodzenia

mlattari
Go to the top of the page
+Quote Post
dr_bonzo
post 24.01.2009, 09:15:56
Post #16





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Cytat
Nie zastanawiałem się jeszce nad tym co z kontrolą błedów ale nawet nie mam pojęcia jak przekazać do php wynik funkcji Javascript :-)


AJAX AJAX AJAX

Ajaxem wywolasz request w php i mozesz do niego przekazac dane GETem czy POSTem


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
mlattari
post 24.01.2009, 22:20:44
Post #17





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 23.12.2008
Skąd: Piaseczno

Ostrzeżenie: (0%)
-----


hmm :-) nie jestem obeznany w AJAXie :-) Mógłbyś dać treściwy i prosty przykład? Wielkie dzięki z góry :-))
Go to the top of the page
+Quote Post
8bolek
post 25.05.2009, 14:16:56
Post #18





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 25.05.2009

Ostrzeżenie: (0%)
-----


mlattari czy Twoja aplikacja dziala online na zewnetrznym serwerze? czy lokalnie?

>u mnie dziala z kontrolka ale jedynie lokalnie, gdy odpalam z serwera przestaje dzialac...

Ten post edytował 8bolek 25.05.2009, 14:17:37
Go to the top of the page
+Quote Post
kurt
post 14.08.2009, 21:17:12
Post #19





Grupa: Zarejestrowani
Postów: 89
Pomógł: 3
Dołączył: 14.07.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Mam pytanie odświeżające temat. Czy ktoś uporał się z problemem użycia biblioteki ThermalLib.ocx w plikach php ? testowałem zamieszczony na stronie Posnet pliczek html (lokalnie!) i faktycznie ładnie komunikuje się z drukarką. Problem pojawia się kiedy chcę go użyć w php - wszystko przestaje działać.
Go to the top of the page
+Quote Post
f1xer
post 14.08.2009, 21:28:39
Post #20





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

Ostrzeżenie: (0%)
-----


jak może przestać działać javaScript? z tego co przeczytałem wcześniej to instalujesz kontrolkę ocx na kliencie i teraz masz scenariusz

Zapytanie do serwera -> twoja aplikacja generuje odpowiedną stronę z JavaScript -> użytkownik klika drukuj paragon co wywołuje przygotowany wcześniej kod Java Script ten kod komunikuje się z ocx a kontrolka komunikuje się z drukarką.

I to musi działać (chyba że przeglądarka nie obsługuje Active-x ale to inna bajka).


--------------------
Pomogłem? wyraź to i kliknij "Pomógł"
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 10:52