Skocz do zawartości

Jarek KοIaѕa

InsERT
  • Liczba zawartości

    224
  • Rejestracja

  • Ostatnia wizyta

Zawartość dodana przez Jarek KοIaѕa

  1. Miałem na myśli raczej usluga.Dane.StanyWMagazynachZakresy.Clear(); ponieważ ustawienie stanów na 0 pozostawia encję stanu dla magazynu.
  2. Ad.1. Wyzerować przed zmianą rodzaju. Ad.2. Usunąć pozycje z cenników.
  3. Nie ma takiego powiązania w bazie, więc jedyny sposób to faktycznie poszukiwania takiego przedstawiciela firmy. Przykładowy widok dla zamówień od klienta z dołożoną kolumną email, bo, jak rozumiem, robimy raport własny SQL: SELECT _Dokument.BlokujRealizacje AS Blokada, _Dokument.DataWydaniaWystawienia AS DataOryginalu, _DokumentyRealizujace.OstatniaData AS DataOstatniejRealizacji, _Dokument.DataWprowadzenia AS DataWystawienia, _FlagaWlasna.Kolor AS FLAG__Dokument__FlagaWlasna__Kolor, ISNULL(_FlagaWlasna.Ksztalt, 0) AS FLAG__Dokument__FlagaWlasna__Ksztalt, _FlagaWlasna.Nazwa AS FLAG__Dokument__FlagaWlasna__Nazwa, _FlagHeader.Description AS FLAG__Dokument__FlagHeader__Description, _Dokument.Id AS Id, ISNULL(CASE WHEN _Dokument.MiejsceDostawyTyp = 64 THEN _MiejsceDostawy.LiniaCalosc ELSE _MiejsceDostawyZewnetrzne.LiniaCalosc END, '') AS MiejsceDostawy, _Dokument.NumerWewnetrzny_PelnaSygnatura AS Numer, _Dokument.NumerZewnetrzny AS NumerOryginalu, _Dokument.NumerWewnetrzny_Numer AS NumerSort, CASE WHEN _WymaganaWplata.Termin IS NOT NULL AND _Dokument.BlokujRealizacje = 1 THEN DATEDIFF(day, GETDATE(), _WymaganaWplata.Termin) ELSE NULL END AS PozostaloDniDoWplaty, CAST(CASE WHEN _Przetworzenie.Wartosc >= 100.0 THEN 2 WHEN _Przetworzenie.Wartosc > 0.0 THEN 3 ELSE 1 END AS tinyint) AS PrzetworzoneNaZD, ISNULL(_StanRealizacjiZamowienia.CzyRealizacjaDOZaliczkowej, cast(0 as bit)) AS RealizacjaDoFL, CASE WHEN _WartoscDokumentu.Wartosc = 0 THEN '' ELSE _StanRealizacjiZamowienia.NumeryDokumentowRealizujacych END AS RealizacjePozycji, _StatusDokumentu.Mnemonik AS Status, _StatusDokumentu.Nazwa AS StatusDokumentuToolTip, _StanRealizacjiZamowienia.StanKompletacji AS StatusKompletacji, _Dokument.StatusPlatnosciTerminalowej AS StatusPlatnosciTerminalowych, ISNULL(_StanRealizacji.Stan, cast(0 as decimal)) AS StatusRealizacji, _Dokument.NumerWewnetrzny_SygnaturaPoNr AS SygnaturaNrPo, _Dokument.NumerWewnetrzny_SygnaturaPrzedNr AS SygnaturaNrPrzed, _Dokument.TerminRealizacji AS TerminRealizacji, _Waluta.Symbol AS Waluta, _Waluta.Precyzja AS WalutaPrecyzja, _Dokument.KwotaDoZaplaty AS Wartosc, _PodmiotWybrany.NazwaSkrocona AS Zamawiajacy, _Dokument.Odebral AS ZamowienieOdebral, _Dokument.Wystawil AS ZamowienieWystawil, (SELECT top 1 ModelDanychContainer.PodmiotHistorie.Email FROM ModelDanychContainer.Podmioty INNER JOIN ModelDanychContainer.PodmiotHistorie ON ModelDanychContainer.Podmioty.Id = ModelDanychContainer.PodmiotHistorie.PodmiotDlaKtoregoNajnowsza_Id INNER JOIN ModelDanychContainer.Osoby ON ModelDanychContainer.Podmioty.Id = ModelDanychContainer.Osoby.Podmiot_Id INNER JOIN ModelDanychContainer.Przedstawiciele ON ModelDanychContainer.Osoby.Id = ModelDanychContainer.Przedstawiciele.Osoba_Id INNER JOIN ModelDanychContainer.Podmioty AS PodmiotFirma ON ModelDanychContainer.Podmioty.Id = PodmiotFirma.Id WHERE PodmiotFirma.Id = _Dokument.PodmiotId AND ModelDanychContainer.Podmioty.NazwaSkrocona = CASE WHEN _Dokument.NumerZewnetrzny='' THEN _Dokument.Odebral ELSE _Dokument.Wystawil END) AS Email FROM [ModelDanychContainer].[Dokumenty] _Dokument LEFT JOIN (SELECT _DD.DokumentyRealizowane_Id AS Id, MAX(_D.DataWprowadzenia) AS OstatniaData FROM [ModelDanychContainer].[DokumentDokument] _DD INNER JOIN [ModelDanychContainer].[Dokumenty] _D ON _DD.DokumentyRealizujace_Id = _D.Id AND (_D.__MdmDiscriminator__ = 'DokumentWZ' OR _D.__MdmDiscriminator__ = 'DokumentDS') GROUP BY _DD.DokumentyRealizowane_Id) AS _DokumentyRealizujace ON _DokumentyRealizujace.Id = _Dokument.Id INNER JOIN [ModelDanychContainer].[StanyRealizacjiZamowien] _StanRealizacjiZamowienia ON _StanRealizacjiZamowienia.DokumentZK_Id = _Dokument.Id OUTER APPLY (SELECT _Dokument.Wartosc_BruttoPoRabacie + _Dokument.WartoscNPONettoPoRabacie AS Wartosc) AS _WartoscDokumentu OUTER APPLY (SELECT (CASE WHEN _WartoscDokumentu.Wartosc = 0 THEN 0 ELSE ISNULL(_StanRealizacjiZamowienia.ProcentowyStanRealizacji, cast(0 as decimal)) END) AS Stan) AS _StanRealizacji INNER JOIN [ModelDanychContainer].[StatusyDokumentow] _StatusDokumentu ON _StatusDokumentu.Id = _Dokument.StatusDokumentuId INNER JOIN [ModelDanychContainer].[Waluty] _Waluta ON _Waluta.Id = _Dokument.Dokument_Waluta_Id LEFT JOIN [ModelDanychContainer].[PodmiotHistorie] _PodmiotWybrany ON _PodmiotWybrany.Id = _Dokument.PodmiotWybranyId LEFT JOIN [ModelDanychContainer].[AdresHistorie] _MiejsceDostawy ON _MiejsceDostawy.Id = _Dokument.MiejsceDostawyId LEFT JOIN [ModelDanychContainer].[AdresHistorie] _MiejsceDostawyZewnetrzne ON _MiejsceDostawyZewnetrzne.Id = _Dokument.MiejsceDostawyZewnetrzneId LEFT JOIN [ModelDanychContainer].[WymaganeWplaty] _WymaganaWplata ON _WymaganaWplata.Id = _Dokument.Id LEFT JOIN (SELECT _P.Dokument_Id AS DokId, SUM(CASE WHEN _PR.Istnieje = 1 AND _PR.TypRealizacjiPozycji = 0 AND _PR.TypDokumentuRealizujacego = 2 THEN _PR.Ilosc ELSE 0 END) AS Przetworzenie FROM [ModelDanychContainer].[RealizacjePozycji] _PR INNER JOIN [ModelDanychContainer].[PozycjeDokumentu] _P ON _PR.PozycjaRealizowanaId = _P.Id AND _PR.TypDokumentuRealizowanego = 1 INNER JOIN [ModelDanychContainer].[JednostkiMiarAsortymentow] _JMA ON _P.JednostkaMiaryAsId = _JMA.Id GROUP BY _P.Dokument_Id) _PozycjeZD ON _PozycjeZD.DokId = _Dokument.Id LEFT JOIN (SELECT _Dokument.Id AS DokumentId, SUM(_Pozycje.IloscWJednostceBazowej) AS Ilosc, MAX(_JMA.Precyzja) AS MaxPrecyzja FROM [ModelDanychContainer].[Dokumenty] _Dokument INNER JOIN [ModelDanychContainer].[PozycjeDokumentu] _Pozycje ON _Pozycje.Dokument_Id = _Dokument.Id AND _Dokument.__MdmDiscriminator__ = 'DokumentZK' AND _Dokument.Zamkniety = 0 AND _Dokument.KonfiguracjaId <> '7dfedb6a-8a2e-49c6-b28f-507159208c6a' INNER JOIN [ModelDanychContainer].[JednostkiMiarAsortymentow] _JMA ON _JMA.Id = _Pozycje.JednostkaMiaryAsId GROUP BY _Dokument.Id) AS _Pozycje ON _Pozycje.DokumentId = _Dokument.Id LEFT JOIN [ModelDanychContainer].[FlagiWlasne] _FlagaWlasna ON _Dokument.Dokument_FlagaWlasna_Id = _FlagaWlasna.Id LEFT JOIN [ModelDanychContainer].[FlagHeaders] _FlagHeader ON _Dokument.Dokument_FlagHeader_Id = _FlagHeader.Id OUTER APPLY (SELECT CASE WHEN _Pozycje.Ilosc = 0 THEN 0 ELSE (_PozycjeZD.Przetworzenie / _Pozycje.Ilosc) * 100.0 END AS Wartosc) AS _Przetworzenie WHERE (_Dokument.__MdmDiscriminator__ = 'DokumentZK') AND (_Dokument.Zamkniety = 0) AND (_Dokument.KonfiguracjaId <> '7dfedb6a-8a2e-49c6-b28f-507159208c6a')
  4. Tak, ponieważ to jest związane z definicją tego raportu, na którą nie ma Pan wpływu. W raportach własnych, których dotyczy ten wątek, definicję tworzy się samemu i można wprowadzać takie ułatwienia.
  5. Chodzi Panu o wspomniany wcześniej raport "Wydania magazynowe wg asortymentu", czy o raport własny SQL, bo trochę się gubię? W raporcie własnym SQL oczywiście jest taka możliwość.
  6. Ad.1. Ustawić Properties-Position-Left na -1 dla odpowiednich paneli (_PanelGridHeader i _PanelGridData) Ad.2. Dodać Highlight Condition dla panelu _PanelGridData w Properties-Apperance-Conditions z typem Expression i wyrażeniem np. Line%2==0 i wybrać kolor tła (wiaderko).
  7. Kierowałbym się sugestiami zawartymi w komunikacie. Błąd jest faktycznie nietypowy, bo występuje tylko czasami i do tego sugeruje duplikat nazwy sieciowej. Może w innych przypadkach jest tez inny powód? Np. przekroczenie czasu oczekiwania.
  8. Nie wiem, czy dobrze rozumiem Pańskie pytanie. Jeśli chodzi o zapisanie ostatnich ustawień, które wykonane zostały po uruchomieniu raportu własnego SQL i dotyczą wartości parametrów (opcji) oraz ustawień widoku (kolumny itp) to tak. Po wykonaniu zmian w uruchomionym raporcie trzeba zamknąć zakładkę z raportem. Wtedy następuje zapis. Następne uruchomienie raportu uwzględnia te zmiany. Nie ma możliwości zapisywania wielu takich zestawów. Obecnie, żeby uzyskać taki efekt, należałoby utworzyć osobne raporty dla każdego zestawu parametrów (np. grup) jeśli są one powtarzalne i jako parametr pozostawić tylko datę lub skopiować ten raport tyle razy ile jest zestawów parametrów i dla każdego ustawić filtry i parametry widoku wg uznania.
  9. W wersji 15 został rozwiązany problem parametru typu LI dla obiektów, których identyfikator nie jest typu int.
  10. Działanie funkcji UstawHarmonogram... zostało poprawione w wersji 15.
  11. Sprawdziliśmy przesłaną bazę i jest to specyficzny dla niej problem, związany z wcześniejszym uszkodzeniem przy zakładaniu pól własnych zaawansowanych. Zostanie Pan poinformowany o możliwościach rozwiązania problemu. W każdym razie da się tę bazę dość łatwo naprawić i zaktualizować.. Generalnie nie ma problemów z aktualizacją do wersji 14. Te zarejestrowane pojedyncze przypadki są specyficzne i są obsługiwane przez pomoc techniczną.
  12. W tej chwili nie ma oficjalnego sposobu wydrukowania samej kopii. Będzie to poprawione w najbliższym czasie. Jeśli już w tej chwili musi Pan to wykonać, to proszę o kontakt.
  13. Przede wszystkim o jakiej rezerwacji na ZK mówimy. Jeśli nie mamy tego towaru i będziemy dopiero zamawiać to chyba o rezerwacji stanu, a nie dostaw. Zacznijmy od UI. W UI nie trzeba wszystkiego zerować. Wystarczy wyzerować rozbicie na pozycji, gdzie jest 1000kg (zwolnić tę partię) i w rozbiciu pozycji z 2000kg poprawić tak, aby cała ilość była brana z partii AAA. Następnie wrócić do pozycji z 100kg i w rozbiciu ustawić 100 kg z partii BBB. Tak może zrobić człowiek. Maszyna (czyt. rozwiązanie sferyczne) najłatwiej to zrealizuje przez wyzerowanie ilości na pozycjach i ponowne ich ustawienie od razu przez rozbicie. W sumie podobnie jak w UI, tylko przemiata wszystko. Zgadzam się, że statusem tu nie należy mieszać.
  14. Tak. Zmieniamy tylko to co trzeba - ilość w rozbiciu, bez zmiany statusu i zerowania ilości na pozycji. Proszę spróbować przejść tę drogę w programie i mam nadzieję, że już będzie jasne.
  15. Wydaje mi się, że nie do końca się zrozumieliśmy. W tej chwili mam taki obraz sytuacji, tzn. tak rozumiem scenariusz: 1. Wystawiamy ZK z pełną rezerwacją (na konkretne partie). 2. Realizujemy ZK za pomocą WZ, ale nie w całości tylko częściowo, wykorzystując rezerwacje zrobione przez ZK. W UI zrobiłbym to tak, że dodałbym nowe WZ dla kontrahenta. Potem dodawałbym pozycje z listy pozycji zamówień do realizacji, wchodziłbym w rozbicie takiej pozycji i zmniejszałbym ilość na wybranej partii (do ustalonego poziomu realizacji) a zerował (albo też odpowiednio zmniejszał) na pozostałych. Po zakończeniu rozbicia na pozycji, ilość jest aktualizowana do sumy ilości podanych w rozbiciu. Po zapisaniu takiej WZ wydaje ona z partii wcześniej zarezerwowanych przez ZK tyle ile wpisałem, a na ZK zostaje zarezerwowana niewydana reszta. Jeśli o to chodzi to sferycznie zrobiłbym dokładnie tak samo, bez sztucznego zerowania wszystkiego, bo to właśnie doprowadza do "odczepienia" WZ od rezerwacji z ZK. Czyli na nowododanej WZ ze statusem wydania towarów dodaję nową pozycję na podstawie (WypelnijNaPodstawie) odnalezionej pozycji z ZK i to powoduje wstawienia pozycji na WZ, która w pełni wydaje towary. Teraz rozpoczynam rozbicie. Wyszukuję partię, która mnie interesuje i ustawiam dla niej żądaną ilość. Zeruję ilości na pozostałych pozycjach rozbicia. W ten sposób działam tak jak w UI i to się musi udać. Po zakończeniu rozbicia ilość na pozycji jest aktualizowana, a po zapisie WZ żądane partie są wydawane, a na ZK zostaje zarezerwowana niezrealizowana reszta. Po zmodyfikowaniu wcześniej wpisanego kodu: // wypełnienie pozycji foreach (var posadd in results.pos) { // dane pozycji do wprowadzenia int posdocid; int posid; decimal posq; int posbatch; posdocid = posadd.docid; posid = posadd.id; posq = posadd.quantity; posbatch = posadd.batch; var poz = wz.WypelnijNaPodstawieZK(zamowienie.Pozycje.Where(p => p.Id == posid), zamowienie, parametryGrupowania).Single(); // dodanie pozycji z ZK Console.WriteLine("Dodanie pozycji: " + posid); var r = dok.RozpocznijRozbicie(poz) as IRozbiciePozycjiRozchodowe; Console.WriteLine("Wprowadzenie partii: " + posbatch + " w ilości " + posq); r.Pozycje.Where(p => p.PartiaZrodlowa.Id == posbatch).Single().Ilosc = posq; foreach (var pozr in r.Pozycje.Where(p => p.PartiaZrodlowa.Id != posbatch && p.Ilosc > 0m)) pozr.Ilosc = 0m; Console.WriteLine("Partia wprowadzona: " + posbatch); r.ZakonczRozbicie(); wz.Przelicz(); }
  16. No to musielibyśmy wrócić do tamtego problemu i odtworzyć o co chodziło. W tej chwili rozumiem, że ma zostać wystawiona WZ do ZK i przejąć jej rezerwacje. Przynajmniej u mnie w UI (dane prezentacyjne) tak to działa, że dodaję nową partię prze PW, rezerwuję ją na ZK i przy zrealizuj jako WZ (WZ domyślnie wywołuje skutek magazynowy) rozbicie pozycji na WZ jest prawidłowe - tzn. rozchodowuje dokładnie wskazaną partię.
  17. Na ZK powstają rezerwacje. Jeśli wykona się WypelnijNaPodstawieZK to powinny one zostać przejęte przez tworzoną WZ. Oczywiście przekazanie rezerwacji na rozchody powinno nastąpić przy zapisie. Odkładanie skutku magazynowego, tak jak w cytowanym kodzie, może jedynie zaburzyć ten proces. Generalnie sferycznie powinno się odtworzyć proces taki jaki jest w UI - operator nie odkłada skutku magazynowego na WZ na czas dodawania pozycji.
  18. No to ok. Inaczej nie można robić rozbicia. Co mamy uzyskać? Jaki jest scenariusz?
  19. Rozbicie pozycji należy wykonywać z użyciem interfejsu IDokumentZRozbiciem.
  20. Jeśli magazyn na pozycji nie jest określony, brany jest magazyn z nagłówka dokumentu. To jest prawdopodobnie sferycznie dodany dokument, w którym nie zostały określone magazyny na pozycjach bo nie było takiej potrzeby. Można w procedurze to dodać i będzie zawsze tak samo, albo dodać ifa we wzorcu.
  21. Przy "odkładaniu dokumentu" przyjęcie i partie dla pozycji nie są usuwane. Usuwane są tylko przychody, które mają wpływ na stan magazynowy.
×
×
  • Dodaj nową pozycję...