Skocz do zawartości

Jarek KοIaѕa

InsERT
  • Liczba zawartości

    224
  • Rejestracja

  • Ostatnia wizyta

Posty dodane przez Jarek KοIaѕa

  1. 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')

     

  2. 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.

  3.  

    45 minut temu, Marcin Gryska napisał:

    Pozwolę sobie się podpiąć.

     

    Czy istnieje sposób przechwycenia/zapisania całego zapytania SQL, łącznie z wyświetlaniem opcji, nazwami kolumn itd? Aby wywołać go następnym razem w danej postaci? Udało mi się przechwycić samo polecenie SQL w MSSQL, ale wiadomo - jest ono dla konkretnych parametrów, nazwy kolumn są jak w bazie itd.

     

    Co jakiś czas muszę przygotowywać zestawienie, w którym zmienia się w zasadzie tylko data, ale reszta ustawień jest trochę pracochłonna (wybieranie grup produktów, których trochę mamy), więc przydałaby się możliwość zapisywania w jakiś sposób wybranych ustawień danego zestawienia. Nie znam SQL

     

    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.

  4. 16 godzin temu, Użytkownik GT/NEXO napisał:

    TEMAT 1

    Zaryzykowałem i jednak mam te same objawy co autor wątku :(
    Bazę z przed aktualizacji (kopię robiłem ręcznie tuż przed aktualizacją z ver. 13) wyślę na zasób sieciowy i podeślę Państwu linka.

     

    Mimo powyższego nie poddałem się i spróbowałem zaktualizować (w kolejnym kroku) ten sam podmiot... tyle, że była to kopia z 24.01 bo akurat do testów miałem taką podłączoną i co ciekawe... udało się ją podnieść do wersji 14 i mogę ją odpalić.

     

    Zachęcony rozwojem wydarzeń :)... pomyślałem, że zatem może chodzi o kolejność, że jak już program jest w wersji 14 to poradzi sobie z podniesieniem bazy z wersji 13 do 14 (tak jak to udało się powyżej). Odtworzyłem zatem kopie poprzez SSMS z wersji 13 - aktualną na której co dzień pracujemy (tą którą wykonałem tuż przed próbą archiwizacji do wersji 14) i spróbowałem raz jeszcze ją podnieść do wersji 14. Niestety wystąpił ten sam błąd.

     

    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ą.

  5. 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ć.

  6. 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();
    }

     

  7. 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ę.

  8. 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.

×
×
  • Dodaj nową pozycję...