Skocz do zawartości

Sfera - Subiekt Nexo - różnice w wyliczanych wartość pozycji między klientem a sferą

Polecane posty

Witam, 

 

Mam rozwiązanie które ściąga zamówienia z zewnętrznego systemu, a następnie wrzuca je do subiekta. Raz na jakiś czas zdarzają się błędy gdzie wyliczane podsumowanie z poziomu subiekta różni się od wyliczeń, z zewnętrznego rozwiązania. Wziąłem jeden z takich przypadków do analizy i wyszła dziwna rzecz. Po wprowadzeniu danych ręcznie do subiekta wychodzą takie same wartości jak z zewnętrznego systemu. Natomiast po wprowadzeniu tych samych danych przez sferę wychodzą różnice, prawdopodobnie w zaokrągleniach.

image.png.e3da8085cf9d6076095ce565c771f92b.png

 

Klient subiekta "pod spodem" używa tych samych rozwiązań sferycznych. Dlaczego w takim razie klient liczy inaczej niż sfera?

image.thumb.png.b9b38b0dc50275f0ac85e42fc6e2c82c.png

 

W każdej pozycji został użyty rodzaj rabatu procent od wartości (20%). Dokument jest liczony od brutto.

 

Link to postu

Dokumentu sferycznie jest również liczony od brutto:

destination.OperacjePrzeliczaniaPozycji = OperacjePrzeliczaniaPozycji.Brutto_ID;

Poniżej sposób uzupełnienia pozycji:

  public void Convert(ItemDto sourceMember, PozycjaDokumentu destination)
        {
            //logger.Debug("Convert: " + sourceMember + ", destination: " + destination);
            if (sourceMember == null)
            {
                throw new ArgumentNullException(nameof(sourceMember));
            }
            if (destination == null)
            {
                throw new ArgumentNullException(nameof(destination));
            }
            var uchwyt = launcher.Connect();
            destination.Ilosc = sourceMember.Quantity;
            destination.StawkaVat = uchwyt.Dane<StawkaVat>().SingleOrDefault(x => x.Stawka == sourceMember.TaxRate);
            destination.Cena.RodzajRabatu = (int)InsERT.Moria.Dokumenty.Logistyka.RodzajRabatu.ProcentowyOdWartosci;
            destination.Cena.BruttoPrzedRabatem = sourceMember.GrossPrice;
            destination.Cena.RabatProcent = sourceMember.DiscountPercent;


            logger.Debug($"NettoPrzedRabatem: {destination.Cena.NettoPrzedRabatem}, BruttoPrzedRabatem: { destination.Cena.BruttoPrzedRabatem}, RabatProcent:  {destination.Cena.RabatProcent}, NettoPoRabacie: { destination.Cena.NettoPoRabacie}, BruttoPoRabacie: { destination.Cena.BruttoPoRabacie}, WartośćBruttoPoRabacie: {destination.Wartosc.BruttoPoRabacie}");


        }


 

Link to postu

Pytanie, czy później jeszcze Pan nie zmienia w kodzie klienta, bo zmiana klienta będzie powodować zmianę sposobu wyliczania (jeśli w kartotece klienta przypisane jest "od netto", to dokument zmieni się na liczony "od netto"). Proszę sprawdzić w interfejsie, jaki sposób wyliczania ma ten dokument wystawiony przez sferę.

Edytowane przez Przemysław Werner
Link to postu

:) Zgadza się. Podmiot był definiowany po wymuszeniu liczenia po brutto...

Dokładnie tak sam problem był z ustawieniem pola "Realizuj jako".

 if (sourceMember.IsInvoice > 0)
            {
                destination.KonfiguracjaRealizujacego = uchwyt.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.FakturaVAT;
            }
            else
            {
                destination.KonfiguracjaRealizujacego = uchwyt.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.ParagonImienny;
            }

 

Po przeniesieniu tej sekcji po zdefiniowaniu kontrahenta problem ustąpił. Dziękuję za pomoc.

 

Czy jest gdzieś w API opisane, jaka powinna być sekwencja ustalania wartości dla pól w dokumencie, aby mieć pewność, że API pod spodem samo sobie tego nie pozmienia?

Albo chociaż relacje, jakie pola mają wpływ na jakie właściwości dokumentu? 

 

Link to postu
Godzinę temu, Tomasz Lapke napisał:

Czy jest gdzieś w API opisane, jaka powinna być sekwencja ustalania wartości dla pól w dokumencie

O ile wiem nie, ale sugeruję robić to w takiej kolejności jak wypełnianie dokumentu z poziomu interfejsu.

Tam przecież też może się Pan spodziewać zmian po zmianie klienta, prawda?

Link to postu

Rozumiem, postaram się właśnie w taki sposób to ustalać. Mam pytanie pomocnicze jeszcze. Czy istnieje możliwość sprawdzenia który kod sferyczny jest wywoływany przez GUI subiekta? Czy mają Państwo może kiedyś w planach nagrywanie makr? Czy na chwilę obecną zostaje reverse engineering i używanie narzędzi typu ILSpy?

 

Edytowane przez Tomasz Lapke
Link to postu
×
×
  • Dodaj nową pozycję...