Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

voidsn1010

JavaScript + ActiveX = niedziałający kod;

Rekomendowane odpowiedzi

Witam, muszę zintegrować kasę fiskalną firmy Novitus model Nano E z system sprzedażowym/sklepem internetowym. Producent udostępnił kontrolki ActiveX do obsługi kasy i przykłady kodu napisane bodajże w Pascalu. (swoją drogą droga przez mękę)

 

Problem mam taki, że IE pokazuje obiekt kontrolki jako pusty obiekt (console.log), mimo że wszystkie zmienne i metody działają poprawnie. Stąd prawdopodobnie nie mogę użyć kontrolki jako parametru i kod przestaje działać.

 

Mój kod w JS:

var ECR = new ActiveXObject("OICECRLIB.OICECR");
var Cashier = new ActiveXObject("OICECRLIB.OICECRCashier");
var time = 1;

ECR.ChangeDevice(0x00); //ECR.ecrdtCommDevice

ECR.CommOptions.Port = 'COM3';
ECR.CommOptions.Speed = 9600;
ECR.CommOptions.DataBits = 8;
ECR.CommOptions.StopBits = 1;
ECR.CommOptions.Parity = 0x00; //ECR.ecrptNone
ECR.CommOptions.TimeOut = 20000;
ECR.CommOptions.WaitTimeOut = 300000;
ECR.CommOptions.FlowControl = 0x02; //ECR.ecrfcRTS_CTS
ECR.PacketLibraryFile = 'C:/Windows/System32/tango.pkd';

function ProcessError()
{
if(ECR.LastErrorCode == ECR.odplpeRejected)
	alert(ECR.LastNativeErrorMessage);
else
	alert(ECR.LastErrorMessage);
}

function ECRCheck(ExecuteResult)
{
if(!ExecuteResult)
{
	console.log(time);
	ProcessError();
}

time++;

return ExecuteResult;
}

function ReadFlags()
{
if(ECRCheck(ECR.Connect()) && ECRCheck(ECR.BeginRead(0x00, '', '', 0x00, 0x00)) && ECRCheck(ECR.ReadFlags()) && ECRCheck(ECR.ConfirmRead()) && ECRCheck(ECR.Disconnect()))
{
	console.log(ECR.Flags.ScalesCodeType);
}
}

function ReadCashier()
{
if(ECRCheck(ECR.Connect()) && ECRCheck(ECR.BeginRead(0x04, 1, 1, 0x01, 0x00)) && ECRCheck(ECR.ReadCashier(Cashier)) && ECRCheck(ECR.ConfirmRead()) && ECRCheck(ECR.Disconnect()))
	alert(Cashier.Name);
}

ReadCashier();

 

Kod z dokumentacji technicznej:

function ECRCheck (ExecuteResult: Boolean): Boolean;
begin
 Result := ExecuteResult;
 if not Result then
   ProcessError;
end;

procedure ProcessError;
begin
 if ECR.LastErrorCode = odplpeRejected then
   MessageDlg(ECR.LastNativeErrorMessage, mtError, [mbOK], 0)
 else
   MessageDlg(ECR.LastErrorMessage, mtError, [mbOK], 0);
end;

procedure ReadFlags;
begin
 if ECRCheck (ECR.Connect) and
    ECRCheck (ECR.BeginRead (ecrdtFlags, '', '', ecrrtNone,
                              ecrrmNotResetting)) and
    ECRCheck (ECR.ReadFlags) and
    ECRCheck (ECR.ConfirmRead) and
    ECRCheck (ECR.Disconnect) then
   ShowMessage ('OK');
end;

procedure ReadCashier;
var
 Cashier: IOICECRCashier;
begin
 Cashier := CreateCOMObject (Class_OICECRCashier) as IOICECRCashier;
 try
   if ECRCheck (ECR.Connect) and
      ECRCheck (ECR.BeginRead (ecrdtCashier, 1, 1, ecrrtCodes,
                                ecrrmNotResetting)) and
      ECRCheck (ECR.ReadCashier (Cashier)) and
      ECRCheck (ECR.ConfirmRead) and
      ECRCheck (ECR.Disconnect) then
     ShowMessage ('OK');
 finally
   Cashier := nil;
 end;
end;

 

O ile funkcja ReadFlags działa poprawnie, to niestety ReadCashier wykłada się na ECRCheck(ECR.ReadCashier(Cashier)) i zwraca komunikat 'brak danych'. Podejrzewam się mogłem źle przerobić ten kod. Pełna dokumentacja tech. dla masochistów znajduje się TUTAJ.

 

Proszę o pomoc. Gdyby ktoś wiedział jak lepiej obsługiwać kasy Novitus niech da znać.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Z tego co pamiętam, to najpierw trzeba było wysłać polecenie resetu (o ile tak to szło). Ze 4 godziny siedziałem i kombinowałem zanim drukarka ruszyła.

 

Edit: nazwa drukarki nie jest ważna, skup się na przekazaniu danych do paragonu (i pamiętaj o tym, że drukarka nie lubi produktów bez ceny; chyba, że producent coś zmienił).

 

I ogólnie jest tak: przekazujesz nazwę produktu, liczbę i wartość. Na koniec musisz przekazać jeszcze sumę zamówienia. Dopiero wtedy drukarka uzna, że dostała cały paragon.

 

 

Szkoda, że spalił mi się dysk w laptopie. Przekopiowałbym Tobie działający kod. Ale na pewno ściągałem to: "Sterownik ActiveX do drukarek fiskalnych (również z kopią elektroniczną) wraz z dokumentacją (bogato ilustrowaną przykładami użycia), opisem protokołu drukarek fiskalnych, programem demonstracyjnym i jego źródłami oraz programem serwisowym do drukarek fiskalnych (wersja 6.6.4)".

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@januzi

 

Niestety, sposób który opisałeś (przekazywanie produktu itp. aby wydrukować paragon) nie może zostać zastosowany w kasie fiskalnej, a tylko w drukarce fiskalnej. Serwisant urządzenia twierdzi, że w przypadku kasy należy wykonać wszystko na odwrót tzn. można jedynie zarządzać produktami w kasie oraz odbierać informacje o przykładowo ostatnim paragonie. Paragon musi zostać nabity na kasie przez człowieka. Podejrzewam, że serwisant ma w tym przypadku rację, ponieważ w dokumentacji nie znalazłem funkcji/metody pozwalającej wydrukować paragon.

 

Jeśli chodzi o pakiet, który używałeś, też go używam i program demonstracyjny bez problemu odbiera i przekazuje dane. Mój skrypt w JS już niestety nie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

poszukaj funkcji bell/reset (jedno z dwojga), to powinno aktywować komunikację

i odpal sobie w firebugu nadzór nad javascriptem, będziesz mógł podejrzeć co idzie w odpowiedzi

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...