Skocz do zawartości

Sfera a fiskalizacja paragonów

Polecane posty

W Subiekcie GT przy wydruku dokumentu z poziomu Sfery były fiskalizowane paragony.
W Subiekcie nexo wydaje się to działać inaczej.
Czy da się wywołać drukowanie tak, aby wykonała się fiskalizacja wg ustawień Subiekta, czy trzeba ją osobno wymuszać?

 

Mamy funkcję drukowania:

 

private void DrukujDokument(Uchwyt sfera, int daneId)
        {
            IDokumenty dokumenty = _sfera.PodajObiektTypu<IDokumenty>();
            Dokument dokumentDoWydruku = dokumenty.Dane
                .Wszystkie()
                .FirstOrDefault(x => x.Id == daneId);


            IWydruki manager = _sfera.PodajObiektTypu<IWydruki>();
            TypDokumentu typ = dokumentDoWydruku.PodajTypDokumentu();
            string symbol = dokumentDoWydruku.Symbol;

            // utworzenie zadania drukowania
            TypWzorcaWydruku typWzorca = TypWzorcaWydruku.DokumentSprzedazy;
            if (symbol == "PI")
                typWzorca = TypWzorcaWydruku.ParagonImienny;
            else if (symbol == "PA")
                typWzorca = TypWzorcaWydruku.Paragon;
            else
                typWzorca = TypWzorcaWydruku.DokumentSprzedazy;

            using (IWydruk wydruk = manager.Utworz(typWzorca))
            {
                wydruk.ObiektDoWydruku = dokumentDoWydruku;
                wydruk.Drukuj();

                Loger.Instance.ZalogujInformacje($"Wydruk {daneId} {dokumentDoWydruku.Symbol} z sukcesem: {wydruk.OstatniaOperacjaZakonczonaSukcesem}");
                if (!wydruk.OstatniaOperacjaZakonczonaSukcesem)
                {
                    var listaBledow = wydruk.PobierzListeBledow().ToList();
                    var zlaczone = Laczenie.ZlaczStringi(listaBledow, Environment.NewLine);
                    Loger.Instance.ZalogujWaznaInformacje(zlaczone);
                }
            }
        }

Po takim wydruku paragon nie jest fiskalizowany.
Nie są zwracane żadne błędy podczas drukowania.
W ustawieniach paragonu Subiekta nexo jest ustawione "Zawsze" dla fiskalizacji nowych i istniejących dokumentów.

Próbowałem użyć interfejsu do fiskalizacji:

IDokumentySprzedazy dokumenty = _sfera.PodajObiektTypu<IDokumentySprzedazy>();
                DokumentDS dokument = dokumenty.Dane
                    .Wszystkie()
                    .FirstOrDefault(x => x.Id == daneId);

                IFiskalizacjaDokumentu fiskalizator = _sfera.PodajObiektTypu<IFiskalizacjaDokumentu>();

                StatusFiskalizacji statusFiskalizacji = (StatusFiskalizacji) dokument.StatusFiskalizacji;
                Loger.Instance.ZalogujInformacje($"{daneId} status fiskalizacji: {statusFiskalizacji}");

                fiskalizator.RozpoczetoFiskalizacje += FiskalizacjaRozpoczeta;
                fiskalizator.FiskalizacjaZablokowana += FiskalizacjaZablokowana;
                fiskalizator.PrzyjetoPolecenieFiskalizacji += PrzyjetoFiskalizacje;
                fiskalizator.ZakonczonoFiskalizacje += FiskalizacjaZakonczona;

                fiskalizator.Fiskalizuj(
                    daneId,
                    idDrukarki);

Id drukarki biorę z tabeli: UrzadzeniaZewnetrzne.
Wywoływane są zdarzenia rozpoczęcia i zakończenia fiskalizacji, ale paragon z drukarki nie wychodzi i z poziomu Subiekta nie ma statusu fiskalizacji.

Co powinniśmy zrobić aby wymusić fiskalizację (a najlepiej aby uzależnić fiskalizację od ustawień Subiekta)?

 

Edytowane przez Piotr Taraszkiewicz
Link to postu

Tak, dla każdej operacji otwieramy nową instancję i wykonujemy akcję Dispose();.
Czyli mogę rozumieć że kierunek jest właściwy, tylko może być problem z wykonaniem?

              ....              .... try
            {
                _sfera = PolaczBezOkna(_konfiguracja, _uzytkownik);

                ...

                fiskalizator.Fiskalizuj(
                    daneId,
                    idDrukarki);



                _sfera.Dispose();
                _sfera = null;
            }
            catch (Exception ex)
            {
                Loger.Instance.ZalogujBlad(ex);

                if (_sfera != null)
                {
                    _sfera.Dispose();
                    _sfera = null;
                }

                PrzechwycBledy(ex);
                throw;
            }

 

Link to postu

Fiskalizacja wykonywana jest w osobnym wątku i przez wykonanie Dispose na uchwycie do sfery operacja nie wykonuje się do końca. Należałoby poczekać na zakończenie procesu fiskalizacji na przykład odpytując cyklicznie o status fiskalizacji dokumentu. Można również wykorzystać zdarzenie "ZakonczonoFiskalizacje" podłączyć do niego handler, w którym wykorzystując semafor WaitEventHandler przyblokujemy główny wątek aplikacji żeby zaczekał na zakończenie fiskalizacji. Ewentualnie być może dobrze byłoby przemyśleć architekturę aplikacji bo może nie ma konieczności tworzenia nowego uchwytu do sfery przed wystawieniem każdego dokumentu.

  • Dziękuję 1
Link to postu
  • 1 rok później...

Pozwolę sobie odkopać wątek, gdyż po aktualizacji do najnowszej wersji (nexoSDK_36.0.0.4611) mam podobny problem - na wersji (nexoSDK_34.1.1.4334) ten sam kod prawidłowo fiskalizował dokumenty.


Kod (zgodnie z powyższą sugestią) czeka na zakończenie fiskalizacji (oczekuje na "ZakonczonoFiskalizacje"). Prawidłowo wywołuje się "RozpoczetoFiskalizacje" jak i "ZakonczonoFiskalizacje". 

 

W rejestrze zdarzeń dla drukarki - brak wpisu o zdarzeniu.


Czy mogę prosić o podpowiedź, gdzie szukać problemu?

 

Link to postu
4 godziny temu, R2 D2 napisał:

Pozwolę sobie odkopać wątek, gdyż po aktualizacji do najnowszej wersji (nexoSDK_36.0.0.4611) mam podobny problem - na wersji (nexoSDK_34.1.1.4334) ten sam kod prawidłowo fiskalizował dokumenty.


Kod (zgodnie z powyższą sugestią) czeka na zakończenie fiskalizacji (oczekuje na "ZakonczonoFiskalizacje"). Prawidłowo wywołuje się "RozpoczetoFiskalizacje" jak i "ZakonczonoFiskalizacje". 

 

W rejestrze zdarzeń dla drukarki - brak wpisu o zdarzeniu.


Czy mogę prosić o podpowiedź, gdzie szukać problemu?

 

Udało się rozwiązać problem poprzez usunięcie wszystkich plików wynikowych i zbudowanie rozwiązania na nowo (uprzednio próbowałem wymusić przebudowanie, ale w dalszym ciągu wystawianie paragonów nie działało). 

Link to postu
×
×
  • Dodaj nową pozycję...