Skocz do zawartości

Problem z tworzeniem dokumentu sprzedaży z ZK

Polecane posty

Mamy bardzo duży problem z tworzeniem dokumentu sprzedaży w postaci FS z ZK, mianowicie zostały podjęte kroki opisane poniżej:

1. w ZK powstaje pozycja montaż plus inne pozycje
2. w ZK wszystkie pozycje są zarezerwowane
3. realizując akcję w sferze  "Faktura na podstawie ZK" w :dokument_ds.Braki.Lista" zgłasza błąd realizacji:
{Nie można wykonać danego ruchu magazynowego: Niewystarczająca ilość towaru na magazynie do zadysponowania pozycji. Zadysponowano 0 szt.}
TypBledu = NieMoznaZadysponowacRozchodu

4. w pulpicie nexo bez problemu da się zrealizować ten dokument

5. Stosowane rozwiązania doraźne:

a) "dokument_realizujący.ZwolnijRezerwacje"
b) zmiana statusu ZK przed utworzeniem faktury: status=BezRezerwacji
c) "rezerwacja.Ilosc=0" na tej pozycji nie przyniosły pozytywnego efektu


Rodzi się zatem pytanie jakie jest prawidłowe postępowanie podczas tworzenia faktury na podstawie ZK oraz kiedy ZK rezerwuje towar (montaż), którego jest jedna szt. na stanie?

Fragment kodu, który został użyty do zrealizowania dokumentu znajduje się poniżej, czy on może być przyczyną takiego stanu rzeczy? Jeżeli tak to gdzie leży problem?

using System;
using System.Collections.Generic;
using System.Linq;

using InsERT.Moria.Sfera;
using InsERT.Moria.ModelDanych;
using InsERT.Moria.Dokumenty.Logistyka;


namespace nexo.dokumenty.ds_na_podstawie_zk.test
{
class Test
{

public void wstaw(Uchwyt sfera)
{

string zk_kod = "ZK 887/05/02/2024/Podst";


IStatusyDokumentowDaneDomyslne statusy_dane_domyslne = sfera.PodajObiektTypu<IStatusyDokumentow>().DaneDomyslne;
IDokumentySprzedazy dokumenty_ds = sfera.PodajObiektTypu<IDokumentySprzedazy>();
IZamowieniaOdKlientow dokumenty_zk = sfera.PodajObiektTypu<IZamowieniaOdKlientow>();

DokumentZK dokument_zk = dokumenty_zk.Dane.Wszystkie().Where(nag => nag.NumerWewnetrzny.PelnaSygnatura == zk_kod).FirstOrDefault();
Konfiguracja konfiguracja_faktura = sfera.PodajObiektTypu<IKonfiguracje>().DaneDomyslne.FakturaVAT;

IDokumentSprzedazy dokument_ds = dokumenty_ds.Utworz(konfiguracja_faktura);

ParametryGrupowaniaDS parametry_grupowania = new ParametryGrupowaniaDS();
parametry_grupowania.MetodaGrupowaniaPozycji = MetodaGrupowaniaPozycji.BezKonsolidacji;
parametry_grupowania.MetodaWyliczeniaCen = MetodaWyliczeniaCen.PrzepisanieZDokumentuGlownego;
parametry_grupowania.MiejsceDostawy = dokument_zk.MiejsceDostawy;
parametry_grupowania.MiejsceDostawyTyp = MiejsceDostawyTyp.Domyslny;
parametry_grupowania.NabywcaSprzedawca = dokument_zk.NabywcaSprzedawcaWybrany;
parametry_grupowania.OdbiorcaDostawca = dokument_zk.OdbiorcaWybrany;
parametry_grupowania.PrzeniesNatychmiastowe = PrzenoszeniePlatnosciNatychmiastowych.Przepisz;
parametry_grupowania.PrzeniesPrzedplaty = PrzenoszeniePrzedplat.Przepisz;
parametry_grupowania.MetodaPrzenoszeniaKategorii = MetodaPrzenoszeniaKategorii.ZWyroznionegoDokumentu;
parametry_grupowania.OperacjePrzeliczaniaDokumentu = dokument_zk.OperacjePrzeliczaniaDokumentu;


Console.WriteLine("======== przepisanie pozycji ===========");
IEnumerable<PozycjaDokumentu> pozycje_dodane = dokument_ds.WypelnijNaPodstawieZK(pozycjeZK: dokument_zk.Pozycje, dokumentZKGlowny: dokument_zk, parametryGrupowania: parametry_grupowania);
foreach (PozycjaDokumentu pozycja_dodana in pozycje_dodane)
{

Console.WriteLine(String.Format("{0}, {1}, ilość={2}, magazyn: {3}", pozycja_dodana.AsortymentAktualny.Symbol, pozycja_dodana.AsortymentAktualny.Nazwa, pozycja_dodana.Ilosc, pozycja_dodana.Magazyn.Nazwa));

}
Console.WriteLine("--------------------");

Console.WriteLine("======== braki ===========");

foreach (BrakujacaPozycja brakujaca_pozycja in dokument_ds.Braki.Lista)
{
Console.WriteLine(String.Format("{0};{1} -> brakuje: {2}", brakujaca_pozycja.Pozycja.AsortymentAktualny.Symbol, brakujaca_pozycja.Pozycja.AsortymentAktualny.Nazwa, Convert.ToInt32(brakujaca_pozycja.IloscBrakujaca)));

}

Console.WriteLine("--------------------------");

dokument_ds.Dispose();

}

}

}
 

Edytowane przez marcin dragon
Link to postu

Kod wydaje się poprawny. Do analizy przydałby się jeszcze screen z tego ZK i FS po realizacji w interfejsie.
W programie sferycznym proszę sprawdzić jaka jest data magazynowa na wystawianej fakturze (dokument_ds.Dane.DataMagazynowa) - nie może być ona wcześniejsza od daty montażu. A także czy magazyn na pozycji zgadza się z magazynem montażu.

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