Skocz do zawartości

[Sfera] Błąd dostępności na magazynie, mało precyzyjny

Polecane posty

Wystawiam DS na podstawie pozycji ZK. Czasem się zdarza, że nie ma czegoś na magazynie i wtedy oczywiście dostaję błąd:

Błąd podczas dodawania DS: Nie można wykonać danego ruchu magazynowego: Niewystarczająca ilość towaru na magazynie do zadysponowania pozycji. Zadysponowano 1 szt. na polach: PozycjaDokumentu.Ilosc
Dokument nie może wykonywać skutku magazynowego dla innej ilości, niż ilość na pozycji na polach: PozycjaDokumentu.Wydanie

Czy można jakoś sprawić, aby błąd był bardziej precyzyjny? Czy pozostaje jedynie przejrzenie pozycji, jedna po drugiej i znalezienie, której brakuje.

Link to postu

W jaki sposób pobiera Pan treść błędów? Większość błędów jest podpięta do encji (w tym przypadku do encji pozycji dokumentu), której błąd dotyczy. W dokumentacji SDK w sekcji "Walidacja, błędy i ostrzeżenia" jest opisane przeglądanie informacji o błędach i tam w kodzie funkcji "WypiszBledy" zmienna "encjaZBledami" jest właśnie encją, której dotyczy błąd.

Dodatkowo stosunkowo niedawno została dodana wbudowana funkcja PobierzKomunikatyBledow, którą można wywołać na dowolnym obiekcie biznesowym, która zwraca komunikaty walidacji w formie ustrukturyzowanej i pozwala ona również na pobranie informacji o encji, której dotyczy błąd.

W przypadku błędów ruchu magazynowego jest również dostępny interfejs IBraki, który również w ustrukturyzowanej formie pozwala na przejrzenie informacji o pozycjach, dla których nie udało się wykonać ruchu magazynowego. Można się do niego dostać poprzez własność Braki od strony każdego obiektu biznesowego dokumentu, który wykonuje ruch magazynowy (np. IDokumentSprzedazy.Braki).

Edytowane przez Wojciech Szopiński
Link to postu

To starszy program i korzystam w nim zapewne z starych implementacji WypiszBledy. Porównam z nowymi i zobaczę co ofertują dodatkowe interfejsy, dziękuje.

 

public static class Rozszerzenia
{
    internal static void WypiszBledy(this InsERT.Mox.ObiektyBiznesowe.IObiektBiznesowy obiektBiznesowy)
    {
        Console.ForegroundColor = ConsoleColor.DarkRed;
        WypiszBledy((InsERT.Mox.BusinessObjects.IBusinessObject)obiektBiznesowy);
        var uow = ((InsERT.Mox.BusinessObjects.IGetUnitOfWork)obiektBiznesowy).UnitOfWork;
        foreach (var innyObiektBiznesowy in uow.Participants.OfType<InsERT.Mox.BusinessObjects.IBusinessObject>().Where(bo => bo != obiektBiznesowy)) { WypiszBledy(innyObiektBiznesowy); }
    }
    internal static void WypiszBledy(this InsERT.Mox.BusinessObjects.IBusinessObject obiektBiznesowy)
    {
        Console.ForegroundColor = ConsoleColor.DarkRed;
        foreach (var encjaZBledami in obiektBiznesowy.InvalidData)
        {
            foreach (var bladNaCalejEncji in encjaZBledami.Errors) Globals.errors = Globals.errors + bladNaCalejEncji + " na encjach: " + encjaZBledami.GetType().Name + "\n";
            foreach (var bladNaKonkretnychPolach in encjaZBledami.MemberErrors) Globals.errors = Globals.errors + bladNaKonkretnychPolach.Key + " na polach: " + string.Join(", ", bladNaKonkretnychPolach.Select(b => encjaZBledami.GetType().Name + "." + b)) + "\n";
        }
    }
}

 

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