Thread View: pl.comp.bazy-danych
32 messages
32 total messages
Started by =?UTF-8?Q?Cezary
Tue, 13 Jun 2017 18:14
Baza ok 2500 tabel.
Author: =?UTF-8?Q?Cezary
Date: Tue, 13 Jun 2017 18:14
Date: Tue, 13 Jun 2017 18:14
8 lines
213 bytes
213 bytes
Witam. Co o tym sądzić? Czy to uzasadnione może być, czy spodziewać się więlkiej lipy? Branża ubezpieczeniowa. Jakie maksymalne ilości tabel spotykacie w praktyce? -- Cezary Grądys czarekgr@wa.onet.pl
Re: Baza ok 2500 tabel.
Author: "M.M."
Date: Tue, 13 Jun 2017 12:30
Date: Tue, 13 Jun 2017 12:30
35 lines
1552 bytes
1552 bytes
On Tuesday, June 13, 2017 at 6:14:27 PM UTC+2, Cezary Grądys wrote: > Witam. > > Co o tym sądzić? Czy to uzasadnione może być, czy spodziewać się > więlkiej lipy? Branża ubezpieczeniowa. > Jakie maksymalne ilości tabel spotykacie w praktyce? Nie można nic powiedzieć o systemie na podstawie samej ilości tabel :) Co w sytuacji, gdy automat w jakimś celu zakłada tabele? Co gdy jedna z tabel ma taką definicję: nazwa_tabeli, numer_rekordu, nazwa_pola, dane_wlasciwe - taka jedna tabela zastępuje dowolną ilość tabel w bazie :) Trzeba coś wiedzieć, albo chociaż założyć o tabelach. Gdy założy się rozsądek, to aplikacja pracująca na bazie zawierającej (powiedzmy) od 6 do 14 dobrze zaprojektowanych tabel i te tabele zawierają "dane główne", a nie jakieś szczegółowe ustawienia, to (ta aplikacja) może być już baaaardzo zaawansowaną i rozbudowaną aplikacją. A gdy ilość tabel idzie w tysiące to co można myśleć? Myślę, że tabele są generowane automatycznie, albo powstają/powstały w celu jakiejś optymalizacji. Wyłuskaj z tego "dane główne", zastanów się ile potrzeba tabel przy dobrej normalizacji, bez optymalizacji, wtedy będzie można jakieś zgrubne wnioski wyciągać. Pozdrawiam
Re: Baza ok 2500 tabel.
Author: wloochacz
Date: Tue, 13 Jun 2017 18:28
Date: Tue, 13 Jun 2017 18:28
14 lines
554 bytes
554 bytes
W dniu 2017-06-13 o 18:14, Cezary Grądys pisze: > Witam. > > Co o tym sądzić? Czy to uzasadnione może być, czy spodziewać się > więlkiej lipy? Branża ubezpieczeniowa. IMO lipa; taka ilość tabel sugeruje partycjonowanie w bieda wersji. Oczywiście mogę się mylić i ciekaw jestem czy się mylę ;-) > Jakie maksymalne ilości tabel spotykacie w praktyce? Ok. 1000 +/- 15% Ale to kobyła do wszystkiego była, której projekt wyrósł z baz ISAM... W formie stricte relacyjnej można by to było zrobić ciut inaczej i lepiej. -- wloochacz
Re: Baza ok 2500 tabel.
Author: "Marcin B."
Date: Wed, 14 Jun 2017 00:47
Date: Wed, 14 Jun 2017 00:47
17 lines
557 bytes
557 bytes
On 2017-06-13 18:14, Cezary Gr±dys wrote: > Witam. > > Co o tym s±dziæ? Czy to uzasadnione mo¿e byæ, czy spodziewaæ siê > wiêlkiej lipy? Bran¿a ubezpieczeniowa. > Jakie maksymalne ilo¶ci tabel spotykacie w praktyce? > Trzeba rzuciæ okiem na bazê, sama liczba tabel niewiele mówi. Z do¶wiadczenia wiem, ¿e wiêkszy ERP to grubo ponad 1000 tabel, a np. systemy bankowe to kilka tys. Chocia¿ widzia³em kiedy¶ w pewnym ERP tabele dokument_wz, dokument_mm, dokument_pw itd., przy czym 90% pól by³o wspólne - wtedy mo¿na siê przyczepiæ do struktury bazy. M.
Re: Baza ok 2500 tabel.
Author: Jivanmukta
Date: Wed, 14 Jun 2017 04:44
Date: Wed, 14 Jun 2017 04:44
2 lines
110 bytes
110 bytes
> Jakie maksymalne ilości tabel spotykacie w praktyce? Pracowałem z systemem SAP R/3 który ma 14000 tabel.
Re: Baza ok 2500 tabel.
Author: =?UTF-8?Q?Cezary
Date: Wed, 14 Jun 2017 08:32
Date: Wed, 14 Jun 2017 08:32
10 lines
328 bytes
328 bytes
W dniu 14.06.2017 o 04:44, Jivanmukta pisze: >> Jakie maksymalne ilości tabel spotykacie w praktyce? > > Pracowałem z systemem SAP R/3 który ma 14000 tabel. > Dzięki wszystkim, widzę, że na dwoje babka wróżyła. Bardziej skłaniam się, że to jakaś lipa, jakieś sprawy historyczne, bo dokumentacji prawie nie ma.
Re: Baza ok 2500 tabel.
Author: Adam
Date: Wed, 14 Jun 2017 12:07
Date: Wed, 14 Jun 2017 12:07
17 lines
497 bytes
497 bytes
W dniu 2017-06-14 o 04:44, Jivanmukta pisze: >> Jakie maksymalne ilo¶ci tabel spotykacie w praktyce? > > Pracowa³em z systemem SAP R/3 który ma 14000 tabel. > IMO - SAP nie jest dobrym przyk³adem :( Dla ichniejszych ludzików z IT najmniejsza pierdó³ka ros³a do rangi problemu miesi±ca. Spotyka³em siê z sytuacj±, ¿e zmiana jednego pola by³a awykonalna, a na przyk³ad zmiana adresu portu RS232 (dla wysy³ania danych do drukarki fiskalnej) trwa³a blisko trzy tygodnie :( -- Pozdrawiam. Adam
Re: Baza ok 2500 tabel.
Author: =?UTF-8?Q?Cezary
Date: Wed, 14 Jun 2017 13:36
Date: Wed, 14 Jun 2017 13:36
17 lines
590 bytes
590 bytes
W dniu 14.06.2017 o 12:07, Adam pisze: > W dniu 2017-06-14 o 04:44, Jivanmukta pisze: >>> Jakie maksymalne ilo¶ci tabel spotykacie w praktyce? >> >> Pracowa³em z systemem SAP R/3 który ma 14000 tabel. >> > > IMO - SAP nie jest dobrym przyk³adem :( > > Dla ichniejszych ludzików z IT najmniejsza pierdó³ka ros³a do rangi > problemu miesi±ca. Spotyka³em siê z sytuacj±, ¿e zmiana jednego pola > by³a awykonalna, a na przyk³ad zmiana adresu portu RS232 (dla wysy³ania > danych do drukarki fiskalnej) trwa³a blisko trzy tygodnie :( > > Chyba nie jest prosto, jak baza ma 14000 tabel :)
Re: Baza ok 2500 tabel.
Author: "Stokrotka"
Date: Wed, 14 Jun 2017 16:19
Date: Wed, 14 Jun 2017 16:19
30 lines
1097 bytes
1097 bytes
Raczej wielka lipa. Często pszyczyną jest to, że jak do konserwacji systemu zatrudniany jest nowy, kolejny programista, to zamiast wczytać się w dokumentację i używać istniejącej tabeli, po prostu zakłada garść nowyh tabel (bo tak jest szybciej: w końcu jak pszyjmowali do roboty pytali o znajomość SQL - a tu wystarczy jedna instrukcja by załozyć tabelę -, a nie pytali o stosunek do dokumentacji, a kandydat na pracownika - programistę nie pytał czy dokumentacja jest i ile już jest tabel marką auta.) Czasem tabele robi automat. Czasem właściwie, czasem bez sensu nie kasując tabeli bo programista zapomniał, że powinien założyć tymczasową. Jest jescze nadzieja, że ty spisując ilośc tabel , nie odzieliłeś, pomieszałeś tabele z indeksami i kluczami itp. Ale nawet jak odejmiesz jakiś procent, nawet 75%, to i tak wyjdzie za wiele. Raczj ktoś coś spiep... -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, często nielogiczny, ktury ludzie ociężali umysłowo, nażucają bezmyślnie następnym pokoleniom. ( ortografia . pev . pl ) .
Re: Baza ok 2500 tabel.
Author: Adam
Date: Wed, 14 Jun 2017 17:58
Date: Wed, 14 Jun 2017 17:58
37 lines
1222 bytes
1222 bytes
W dniu 2017-06-14 o 13:36, Cezary Gr±dys pisze: > W dniu 14.06.2017 o 12:07, Adam pisze: >> W dniu 2017-06-14 o 04:44, Jivanmukta pisze: >>>> Jakie maksymalne ilo¶ci tabel spotykacie w praktyce? >>> >>> Pracowa³em z systemem SAP R/3 który ma 14000 tabel. >>> >> >> IMO - SAP nie jest dobrym przyk³adem :( >> >> Dla ichniejszych ludzików z IT najmniejsza pierdó³ka ros³a do rangi >> problemu miesi±ca. Spotyka³em siê z sytuacj±, ¿e zmiana jednego pola >> by³a awykonalna, a na przyk³ad zmiana adresu portu RS232 (dla >> wysy³ania danych do drukarki fiskalnej) trwa³a blisko trzy tygodnie :( >> >> > > > Chyba nie jest prosto, jak baza ma 14000 tabel :) Ciê¿ko ogarn±æ. Je¶li jeszcze brakuje triggerów, to ju¿ prze¶ledzenie transakcji mo¿e byæ co najmniej problematyczne. Ja na szczê¶cie pracujê z programami, którym wystarcza kilkaset tabel. Praktycznie wszystko jest jeszcze obwarowane triggerami, wiêc grzebi±c w bazie nie jestem w stanie (oczywi¶cie bez wy³±czenia triggera) przyk³adowo wycofaæ dokumentu wydania towaru, aby ten¿e towar nie pojawi³ siê ponownie na stanie magazynowym. Niektóre triggery sprawdzaj± kilkadziesi±t warunków - te¿ nie sposób to robiæ rêcznie - ale to ju¿ OT. -- Pozdrawiam. Adam
Re: Baza ok 2500 tabel.
Author: "M.M."
Date: Thu, 15 Jun 2017 02:42
Date: Thu, 15 Jun 2017 02:42
53 lines
1999 bytes
1999 bytes
On Wednesday, June 14, 2017 at 5:58:20 PM UTC+2, Adam wrote: > W dniu 2017-06-14 o 13:36, Cezary Grądys pisze: > > W dniu 14.06.2017 o 12:07, Adam pisze: > >> W dniu 2017-06-14 o 04:44, Jivanmukta pisze: > >>>> Jakie maksymalne ilości tabel spotykacie w praktyce? > >>> > >>> Pracowałem z systemem SAP R/3 który ma 14000 tabel. > >>> > >> > >> IMO - SAP nie jest dobrym przykładem :( > >> > >> Dla ichniejszych ludzików z IT najmniejsza pierdółka rosła do rangi > >> problemu miesiąca. Spotykałem się z sytuacją, że zmiana jednego pola > >> była awykonalna, a na przykład zmiana adresu portu RS232 (dla > >> wysyłania danych do drukarki fiskalnej) trwała blisko trzy tygodnie :( > >> > >> > > > > > > Chyba nie jest prosto, jak baza ma 14000 tabel :) > > Ciężko ogarnąć. > > Jeśli jeszcze brakuje triggerów, to już prześledzenie transakcji może > być co najmniej problematyczne. > > Ja na szczęście pracuję z programami, którym wystarcza kilkaset tabel. > Praktycznie wszystko jest jeszcze obwarowane triggerami, więc grzebiąc w > bazie nie jestem w stanie (oczywiście bez wyłączenia triggera) > przykładowo wycofać dokumentu wydania towaru, aby tenże towar nie > pojawił się ponownie na stanie magazynowym. > Niektóre triggery sprawdzają kilkadziesiąt warunków - też nie sposób to > robić ręcznie - ale to już OT. Kilkaset to też dużo. Jeśli można spytać, ile było które nie zawierały danych nadmiarowych, jaka była średnia ilość rekordów w tabeli (licząc tylko te nienadmiarowe) i ile tabel miało ilość rekordów powyżej średniej - też licząc tylko te nienadmiarowe. Pozdrawiam
Re: Baza ok 2500 tabel.
Author: "M.M."
Date: Thu, 15 Jun 2017 07:22
Date: Thu, 15 Jun 2017 07:22
50 lines
2060 bytes
2060 bytes
On Thursday, June 15, 2017 at 2:37:35 PM UTC+2, Cezary Grądys wrote: > W dniu 14.06.2017 o 16:19, Stokrotka pisze: > > apomniał, że powinien założyć tymczasową. > > > > Jest jescze nadzieja, że ty spisując ilośc tabel , nie odzieliłeś, > > pomieszałeś > > tabele z indeksami i kluczami itp. > > > Nie miałem możliwości długo się przyglądać, rzuciłem okiem z poziomu > PgAdmina, a tam ilość tabel jest jednoznacznie podana... > > No to może jeszcze takie pytanie, kiedy taka ilość tabel jest > uzasadniona? Ty jesteś przy systemie, dlaczego Ty nie odpowiesz na to pytanie? Jest kilka tak oczywistych powodów z których ilość tabel rośnie, że aż wstyd te powody wymieniać. Ale czy urośnie w danym systemie do 300 czy do 5tys to nie mam bladego pojęcia. Wśród tych powodów jest optymalizacja: ktoś mógł ręcznie podzielić tabele w pionie i w poziomie - jak ktoś się uprze, to ilość tabel po takim zabiegu wzrośnie np. 10-50 razy. Może ciężki obliczeniowo raport jest generowany codziennie, więc na wypadek gdyby chcieli wrócić do raportu, wszystkie raporty są archiwizowane. Z trzech lat działania takiego systemu już masz ponad tysiąc tabel. Potem podsystemy w systemach zintegrowanych - na każdy pod system trzeba np. 20-100 tabelek, 10 pod-systemów (bez żadnej denormalizacji) już daje z 500-600 tabelek. Potem zapomniane tabele do skasowania - chociaż tego wiele nie powinno być. > Są podobno tacy, co robia tabele słownikowe nazwisk, ale > mimo wszystko jakoś trudno tyle tabel stworzyć. > Ja skłaniam się do wniosku, że brakuje odważnego do zrobienia > DROP TABLE... Jeszcze raz: Ty widzisz system, a nas pytasz skąd tyle tabel.
Re: Baza ok 2500 tabel.
Author: Jacek
Date: Thu, 15 Jun 2017 09:42
Date: Thu, 15 Jun 2017 09:42
6 lines
245 bytes
245 bytes
Dnia Wed, 14 Jun 2017 04:44:29 +0200, Jivanmukta napisa³(a): >> Jakie maksymalne ilo¶ci tabel spotykacie w praktyce? > > Pracowa³em z systemem SAP R/3 który ma 14000 tabel. To pewnie pozosta³o¶æ po programistach pisz±cych programy z DBFami...
Re: Baza ok 2500 tabel.
Author: =?UTF-8?Q?Cezary
Date: Thu, 15 Jun 2017 14:37
Date: Thu, 15 Jun 2017 14:37
19 lines
670 bytes
670 bytes
W dniu 14.06.2017 o 16:19, Stokrotka pisze: > apomniał, że powinien założyć tymczasową. > > Jest jescze nadzieja, że ty spisując ilośc tabel , nie odzieliłeś, > pomieszałeś > tabele z indeksami i kluczami itp. Nie miałem możliwości długo się przyglądać, rzuciłem okiem z poziomu PgAdmina, a tam ilość tabel jest jednoznacznie podana... No to może jeszcze takie pytanie, kiedy taka ilość tabel jest uzasadniona? Są podobno tacy, co robia tabele słownikowe nazwisk, ale mimo wszystko jakoś trudno tyle tabel stworzyć. Ja skłaniam się do wniosku, że brakuje odważnego do zrobienia DROP TABLE... -- Cezary Grądys czarekgr@wa.onet.pl
Re: Baza ok 2500 tabel.
Author: =?UTF-8?Q?Cezary
Date: Thu, 15 Jun 2017 20:57
Date: Thu, 15 Jun 2017 20:57
14 lines
428 bytes
428 bytes
W dniu 15.06.2017 o 16:22, M.M. pisze: > Ty jesteś przy systemie, dlaczego Ty nie odpowiesz na to pytanie? > Jest kilka tak oczywistych powodów z których ilość tabel rośnie, że aż > wstyd te powody wymieniać. Ale czy urośnie w danym systemie do 300 czy > do 5tys to nie mam bladego pojęcia. > Nie jestem przy systemie i nie wiem czy będę. Dlatego pytam co o tym sądzić. -- Cezary Grądys czarekgr@wa.onet.pl
Re: Baza ok 2500 tabel.
Author: irq
Date: Fri, 16 Jun 2017 05:23
Date: Fri, 16 Jun 2017 05:23
22 lines
726 bytes
726 bytes
W dniu czwartek, 15 czerwca 2017 20:57:21 UTC+2 użytkownik Cezary Grądys napisał: > > Nie jestem przy systemie i nie wiem czy będę. Dlatego pytam co o tym > sądzić. > > > -- > Cezary Grądys > czarekgr@wa.onet.pl Witaj, kolego, żeby się dowiedzieć, czy będziesz (chciał pozostać) przy systemie, musisz jednak przy nim nieco pobyć. Wtedy sam będziesz wiedział co o nim sądzić. Sprawdź czy nazwy tabel układają się w jakiś regularny schemat, czy ich struktura jest taka sama. Grupa za Ciebie nie znajdzie odpowiedzi na wszystkie pytania, ani nie podejmie decyzji. Pozdrawiam Irek.
Re: Baza ok 2500 tabel.
Author: "Stokrotka"
Date: Fri, 16 Jun 2017 18:16
Date: Fri, 16 Jun 2017 18:16
15 lines
544 bytes
544 bytes
>żeby się dowiedzieć, czy będziesz (chciał pozostać) przy systemie, musisz >jednak przy nim nieco pobyć. ... Nie zgadzam się. Czasem od pierwszego wejżenia widać , że system sie nie nadaje, że do du... Czasem nawet nie tszeba ogladać systemu, wystarczy kilka zdań opisu... np ....szukam programisty ktury dokończy rozgżebaną robotę.... -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, często nielogiczny, ktury ludzie ociężali umysłowo, nażucają bezmyślnie następnym pokoleniom. ( ortografia . pev . pl )
Re: Baza ok 2500 tabel.
Author: =?UTF-8?Q?Cezary
Date: Fri, 16 Jun 2017 22:06
Date: Fri, 16 Jun 2017 22:06
23 lines
696 bytes
696 bytes
W dniu 16.06.2017 o 18:16, Stokrotka pisze: > > > Nie zgadzam się. Czasem od pierwszego wejżenia widać , że system sie nie > nadaje, że do du... > Czasem nawet nie tszeba ogladać systemu, wystarczy kilka zdań opisu... > np ....szukam programisty ktury dokończy rozgżebaną robotę.... > > Albo przykład z którym się spotkałem dali polskie litery w loginach... Mi z tego powodu raport nie chciał zadziałać, szefowi też, kombinowali z uprawnieniami i w końcu doszli, że to to. No ale inteligentnie zmienili login na taki jak adres poczty, więc zamiast 7 znaków miałem 23 znaki! już po tym bylo widać czego się spodziewać. -- Cezary Grądys czarekgr@wa.onet.pl
Re: Baza ok 2500 tabel.
Author: Adam
Date: Mon, 19 Jun 2017 13:34
Date: Mon, 19 Jun 2017 13:34
466 lines
14047 bytes
14047 bytes
W dniu 2017-06-15 o 11:42, M.M. pisze: > On Wednesday, June 14, 2017 at 5:58:20 PM UTC+2, Adam wrote: >> W dniu 2017-06-14 o 13:36, Cezary Gr±dys pisze: >>> W dniu 14.06.2017 o 12:07, Adam pisze: >>>> W dniu 2017-06-14 o 04:44, Jivanmukta pisze: >>>>>> Jakie maksymalne ilo¶ci tabel spotykacie w praktyce? >>>>> >>>>> Pracowa³em z systemem SAP R/3 który ma 14000 tabel. >>>>> >>>> >>>> IMO - SAP nie jest dobrym przyk³adem :( >>>> >>>> Dla ichniejszych ludzików z IT najmniejsza pierdó³ka ros³a do rangi >>>> problemu miesi±ca. Spotyka³em siê z sytuacj±, ¿e zmiana jednego pola >>>> by³a awykonalna, a na przyk³ad zmiana adresu portu RS232 (dla >>>> wysy³ania danych do drukarki fiskalnej) trwa³a blisko trzy tygodnie :( >>>> >>>> >>> >>> >>> Chyba nie jest prosto, jak baza ma 14000 tabel :) >> >> Ciê¿ko ogarn±æ. >> >> Je¶li jeszcze brakuje triggerów, to ju¿ prze¶ledzenie transakcji mo¿e >> byæ co najmniej problematyczne. >> >> Ja na szczê¶cie pracujê z programami, którym wystarcza kilkaset tabel. >> Praktycznie wszystko jest jeszcze obwarowane triggerami, wiêc grzebi±c w >> bazie nie jestem w stanie (oczywi¶cie bez wy³±czenia triggera) >> przyk³adowo wycofaæ dokumentu wydania towaru, aby ten¿e towar nie >> pojawi³ siê ponownie na stanie magazynowym. >> Niektóre triggery sprawdzaj± kilkadziesi±t warunków - te¿ nie sposób to >> robiæ rêcznie - ale to ju¿ OT. > > Kilkaset to te¿ du¿o. Je¶li mo¿na spytaæ, ile by³o które nie zawiera³y > danych nadmiarowych, jaka by³a ¶rednia ilo¶æ rekordów w tabeli (licz±c > tylko te nienadmiarowe) i ile tabel mia³o ilo¶æ rekordów powy¿ej ¶redniej - > te¿ licz±c tylko te nienadmiarowe. > Poni¿ej wklei³em CSV z tabelami z systemu CDN-Optima. Baza produkcyjna z przed kilku lat. Mo¿esz to wkleiæ do jakiego¶ arkusza, aby lepiej widzieæ. W zasadzie nie ma nadmiarowych tabel, dane nadmiarowe trzymane s± w widokach. Czê¶æ tabel jest pustych, gdy¿ ich wype³nienie zale¿y m.in. od licencji wykupionych przez klienta (np. czy tylko Faktury, czy pe³ny Handel; czy czy Serwis; czy CRM) itp. Zale¿y te¿ od rodzaju dzia³alno¶ci klienta - np. czy Ksi±¿ka Przychodów i Rozchodów, czy pe³na Ksiêga Handlowa. Jeszcze dodatkowe informacje: O ilo¶ci kolumn w tabeli nie bardzo wiem, jak zapytaæ. Tabele maj± od kilku pól do ponad 100. Oprócz bazy roboczej (tu przedstawionej) jest jeszcze baza konfiguracyjna, wspólna dla wszystkich baz roboczych. Ma ok. 70 tabel. Zrzut bazy roboczej: Nr_kol;name;rows;reserved;data;index_size;unsed 1;AkordDefinicja;0;0;0;0;0 2;AkordProgres;0;0;0;0;0 3;Akordy;0;0;0;0;0 4;AkordyHist;0;0;0;0;0 5;AkordyHistWartosci;0;0;0;0;0 6;AnalizyBIParam;1;16;8;8;0 7;AutoEwid;0;0;0;0;0 8;AutoKoszty;0;0;0;0;0 9;AutoPrzejazd;0;0;0;0;0 10;AutoRozlicz;0;0;0;0;0 11;AutoTrasy;0;0;0;0;0 12;Awizo;0;0;0;0;0 13;AwizoOpakowania;0;0;0;0;0 14;AwizoTowary;0;0;0;0;0 15;AwizoTypyOpakowan;6;16;8;8;0 16;AwizoTypyTransportu;5;16;8;8;0 17;AwizoWarunkiDostawy;15;16;8;8;0 18;BnkBOMW;0;0;0;0;0 19;BnkCertyfikaty;0;0;0;0;0 20;BnkDokElem;24;48;8;40;0 21;BnkDokNag;13;96;8;88;0 22;BnkFormatyElem;461;112;24;48;40 23;BnkFormatyNag;35;32;8;24;0 24;BnkNazwy;4248;3072;1696;1104;272 25;BnkRachunki;6;128;8;120;0 26;BnkRachZakazy;0;0;0;0;0 27;BnkRaporty;3738;2264;912;1096;256 28;BnkRozKwoty;51576;44464;16504;26128;1832 29;BnkRozKwotyMW;0;0;0;0;0 30;BnkRozRelacje;103148;12168;3016;6952;2200 31;BnkZapisy;42241;45448;22152;21992;1304 32;BnkZapisyCDCSEPAInfo;0;0;0;0;0 33;BnkZdarzenia;50358;56040;24688;29784;1568 34;BnkZdarzeniaCDCSEPAInfo;0;0;0;0;0 35;BOElem;592;232;80;112;40 36;BONag;32;96;8;88;0 37;BRpAgregaty;3728;464;184;136;144 38;BudzetElem;0;0;0;0;0 39;BudzetNag;0;0;0;0;0 40;Centra;2;48;8;40;0 41;CentraKierownicy;0;0;0;0;0 42;CentraLink;2;48;8;40;0 43;CfgKlucze;1135;208;96;88;24 44;CfgWartosci;1143;176;80;48;48 45;CRMDokumenty;0;0;0;0;0 46;CRMKontakty;0;0;0;0;0 47;CrmKontaktyCykl;0;0;0;0;0 48;CrmUczestnicy;0;0;0;0;0 49;CTIWyslaneWyplaty;5;16;8;8;0 50;DaneBinarne;3;48;8;40;0 51;DaneBinarneLinki;0;0;0;0;0 52;DaneKad;57;32;16;16;0 53;DaneKadMod;32;16;8;8;0 54;DanePlac;28;16;8;8;0 55;DanePlacMod;136;64;32;32;0 56;DefAtrElem;14;32;8;24;0 57;DefAtrybuty;48;64;16;48;0 58;DefCeny;6;32;8;24;0 59;DefEtapy;0;0;0;0;0 60;DefinicjaZmian;2;32;8;24;0 61;DefinicjaZmianPola;4;48;8;40;0 62;DefinicjeStref;5;64;8;56;0 63;DefProjekty;1;48;8;40;0 64;DeklElem;30770;4560;3872;496;192 65;DeklKedu;68;32;8;24;0 66;DeklNag;446;256;104;144;8 67;DeklStr;169;1192;1112;32;48 68;DeklV27;0;0;0;0;0 69;DeklVUEK;0;0;0;0;0 70;DeklWydr;26734;4048;3336;488;224 71;DeklZaklady;0;0;0;0;0 72;DekretyElem;234058;84792;47440;36904;448 73;DekretyKonta;346390;60976;19944;40704;328 74;DekretyNag;91588;54624;23864;29856;904 75;DetalAtrybuty;0;0;0;0;0 76;DetalCeny;0;0;0;0;0 77;DetalFormyPlatnosci;0;0;0;0;0 78;DetalKntOsoby;0;0;0;0;0 79;DetalKontrahenci;0;0;0;0;0 80;DetalOperator;0;0;0;0;0 81;DetalPlatnosciDokumentu;0;0;0;0;0 82;DetalRaporty;0;0;0;0;0 83;DetalRoliczeniaZaleglosci;0;0;0;0;0 84;DetalStanFormyPlatnosci;0;0;0;0;0 85;DetalStanKonfiguracja;0;0;0;0;0 86;DetalStanKontrahenci;0;0;0;0;0 87;DetalStanOpakElem;0;0;0;0;0 88;DetalStanOpakNag;0;0;0;0;0 89;DetalStanOperatorzy;0;0;0;0;0 90;DetalStanowiska;0;0;0;0;0 91;DetalStanPlatnosciDokumentu;0;0;0;0;0 92;DetalStanStawkiVAT;0;0;0;0;0 93;DetalStanTowary;0;0;0;0;0 94;DetalStanTraElem;0;0;0;0;0 95;DetalStanTraNag;0;0;0;0;0 96;DetalStanTwrEan;0;0;0;0;0 97;DetalStanTwrJMZ;0;0;0;0;0 98;DetalStanZapisyKB;0;0;0;0;0 99;DetalStanZmiany;0;0;0;0;0 100;DetalTraElem;0;0;0;0;0 101;DetalTraNag;0;0;0;0;0 102;DetalWalKursy;0;0;0;0;0 103;DetalZakazyMagazyn;0;0;0;0;0 104;DetalZapisyKB;0;0;0;0;0 105;DlgDokumenty;0;0;0;0;0 106;DlgElem;0;0;0;0;0 107;DlgNag;0;0;0;0;0 108;DlgTrasy;0;0;0;0;0 109;DlgZaliczki;0;0;0;0;0 110;Dodatki;0;0;0;0;0 111;DodatkiHist;0;0;0;0;0 112;DodatkiUmowy;0;0;0;0;0 113;DokAtrybuty;188;280;16;160;104 114;DokDefinicje;103;88;24;64;0 115;DokNag;0;0;0;0;0 116;DokNagEtapy;0;0;0;0;0 117;DokNagEtapyHistoria;0;0;0;0;0 118;DokNagEtapyKolejne;0;0;0;0;0 119;DokNagPliki;0;0;0;0;0 120;DokNagProcesEtapy;0;0;0;0;0 121;DokPodmioty;0;0;0;0;0 122;DokRelacje;0;0;0;0;0 123;DPD;0;0;0;0;0 124;Dzialy;5;80;8;72;0 125;DzialZakazy;0;0;0;0;0 126;Dzienniki;48;32;8;24;0 127;DziennikZakazy;0;0;0;0;0 128;eSklepFormyPlatnosci;0;0;0;0;0 129;eSklepKntRelacje;0;0;0;0;0 130;eSklepMagazyny;0;0;0;0;0 131;eSklepROCechy;0;0;0;0;0 132;eSklepStanowiska;0;0;0;0;0 133;eSklepWaluty;0;0;0;0;0 134;EwidDodElem;0;0;0;0;0 135;EwidDodNag;0;0;0;0;0 136;FaCyklElem;0;0;0;0;0 137;FaCyklKnt;0;0;0;0;0 138;FaCyklNag;0;0;0;0;0 139;FaCyklTwrKnt;0;0;0;0;0 140;Firma;1113;176;120;48;8 141;FormatyRcp;0;0;0;0;0 142;FormyPlatnosci;11;64;8;56;0 143;FormyPlatnosciDF;37;32;8;24;0 144;FormyPlatnWaluty;2;48;8;40;0 145;FrsPromocje;0;0;0;0;0 146;Grupy;61;32;8;24;0 147;GrupyKontElem;0;0;0;0;0 148;GrupyKontNag;0;0;0;0;0 149;GrupyPotracen;2;48;8;40;0 150;GrupyPotrSkladniki;0;0;0;0;0 151;Harmonogram;0;0;0;0;0 152;HarmonogramLista;0;0;0;0;0 153;HisWyksztal;16;32;8;24;0 154;HisZatrud;45;64;16;48;0 155;Idn;0;0;0;0;0 156;IGaleriaAtrWartosci;0;0;0;0;0 157;IGaleriaAtrybuty;0;0;0;0;0 158;IGaleriaDefAtrWartosci;0;0;0;0;0 159;IGaleriaKategorie;0;0;0;0;0 160;IntrastatElem;0;0;0;0;0 161;IntrastatNag;0;0;0;0;0 162;Kalendarze;1;32;8;24;0 163;KalendDni;16;32;8;24;0 164;KalendDniGodz;18;48;8;40;0 165;KartyKredytowe;8;32;8;24;0 166;KasaChor;16;16;8;8;0 167;Katalogi;1;32;8;24;0 168;KatalogZakazy;0;0;0;0;0 169;Kategorie;83;104;24;80;0 170;KntAtrybuty;19;64;8;56;0 171;KntESklepy;0;0;0;0;0 172;KntGrupy;0;0;0;0;0 173;KntLinki;0;0;0;0;0 174;KntOdbiorcy;1;48;8;40;0 175;KntOsoby;321;96;32;32;32 176;KntPromocje;0;0;0;0;0 177;KntScalHist;0;0;0;0;0 178;KodyCN;1;32;8;24;0 179;KompensatyElem;0;0;0;0;0 180;KompensatyNag;0;0;0;0;0 181;KonfigText;0;0;0;0;0 182;Konta;9147;5152;1640;2960;552 183;KontaZakazy;0;0;0;0;0 184;Kontrahenci;1378;2576;1072;1288;216 185;KorektaPodatkuDochodowego;0;0;0;0;0 186;KragKosztElem;0;0;0;0;0 187;KragKosztNag;0;0;0;0;0 188;KRD;0;0;0;0;0 189;KsiDokElem;0;0;0;0;0 190;KsiDokNag;0;0;0;0;0 191;KsiRozrachunki;11427;16304;3872;11416;1016 192;KwotyCelne;3;32;8;24;0 193;KwotyDodatkowe;0;0;0;0;0 194;LimitNieobec;5;48;8;40;0 195;ListyPlac;332;296;96;176;24 196;Lokalizacje;1;48;8;40;0 197;Magazyny;2;32;8;24;0 198;MagazynZakazy;0;0;0;0;0 199;Marki;0;0;0;0;0 200;MarkiJezykObcy;0;0;0;0;0 201;Miasta;0;0;0;0;0 202;MiejscaUzytkowania;0;0;0;0;0 203;NotyOdsElem;0;0;0;0;0 204;NotyOdsNag;0;0;0;0;0 205;OAtrybuty;0;0;0;0;0 206;OAtrybutyGrupy;0;0;0;0;0 207;OAtrybutyGrupyLinki;0;0;0;0;0 208;OAtrybutyHist;0;0;0;0;0 209;OAtrybutyKlasy;0;0;0;0;0 210;OAtrybutyKlasyElem;0;0;0;0;0 211;Obroty;21592;5144;2336;1712;1096 212;OfertyDok;0;0;0;0;0 213;OfertyElem;0;0;0;0;0 214;OfertyElemCeny;0;0;0;0;0 215;OfertyKnt;0;0;0;0;0 216;OkresoweElem;6;48;8;40;0 217;OkresoweHarmonogram;0;0;0;0;0 218;OkresoweNag;2;64;8;56;0 219;OkresyObrach;6;48;8;40;0 220;OpisKadry;0;0;0;0;0 221;OpisPlace;0;0;0;0;0 222;Parametry;0;0;0;0;0 223;PKZP;0;0;0;0;0 224;PlikiJPK;0;0;0;0;0 225;PltPromocje;0;0;0;0;0 226;PodArkuszInwenElem;0;0;0;0;0 227;PodArkuszInwenNag;0;0;0;0;0 228;PodmiotyView;6137;3496;2720;696;80 229;PodtypWyplata;0;0;0;0;0 230;Poreczyciele;0;0;0;0;0 231;PozDeklPIT;73;32;16;16;0 232;PozDeklZUS;53;32;16;16;0 233;PracaSzczeg;66;40;24;16;0 234;PracEtaty;35;312;56;256;0 235;Pracidx;40;96;8;88;0 236;PracKartyRcp;0;0;0;0;0 237;PracKod;20;48;8;40;0 238;PracLimit;37;80;16;64;0 239;PracNieobec;518;208;80;80;48 240;PracPitKwoty;180;32;8;24;0 241;PracPitMies;77;32;8;24;0 242;PracPlanDni;0;0;0;0;0 243;PracPlanDniGodz;0;0;0;0;0 244;PracPracaDni;0;0;0;0;0 245;PracPracaDniGodz;0;0;0;0;0 246;PracSchorzenia;0;0;0;0;0 247;PracZestaw;0;0;0;0;0 248;PracZestawElem;0;0;0;0;0 249;PrmHistoria;0;0;0;0;0 250;PrmKarty;0;0;0;0;0 251;ProdElem;0;0;0;0;0 252;ProdReceptury;0;0;0;0;0 253;ProdSkladniki;0;0;0;0;0 254;Producenci;0;0;0;0;0 255;ProducenciJezykObcy;0;0;0;0;0 256;Progi;0;0;0;0;0 257;PrzeszacWalutElem;0;0;0;0;0 258;PrzeszacWalutNag;0;0;0;0;0 259;PrzWyrej;75;40;24;16;0 260;Rabaty;940;160;48;96;16 261;RegulyRcp;12;16;8;8;0 262;RemanentElem;0;0;0;0;0 263;RemanentNag;0;0;0;0;0 264;Rodzina;1;32;8;24;0 265;RptKolejka2;0;0;0;0;0 266;RptObrazy2;0;0;0;0;0 267;RptTemp2;0;16;8;8;0 268;RptZaznaczenia2;0;0;0;0;0 269;Ryczalt;0;0;0;0;0 270;SchematPlatnosci;216;128;32;96;0 271;SchematWindykacjiEtapy;3;16;8;8;0 272;SchematyOpakElem;0;0;0;0;0 273;SchematyOpakNag;0;0;0;0;0 274;SchematyWindykacji;1;32;8;24;0 275;SchKsiElem;245;96;56;32;8 276;SchKsiNag;47;48;16;32;0 277;SchKsiRelac;2;48;8;40;0 278;SenditAdresyNadawcze;2;16;8;8;0 279;SenditPaczki;17;16;8;8;0 280;SenditTypyPaczek;1;16;8;8;0 281;SenditZleceniePrzesylki;12;48;16;32;0 282;SerieKalNag;1;48;8;40;0 283;SerieKalPoz;7;32;8;24;0 284;SerieKalPozGodz;7;48;8;40;0 285;SrsCyklElem;0;0;0;0;0 286;SrsCyklNag;0;0;0;0;0 287;SrsCzesci;0;0;0;0;0 288;SrsCzynnosci;0;0;0;0;0 289;SrsNotatki;0;0;0;0;0 290;SrsRodzajeU;0;0;0;0;0 291;SrsUrzadzenia;0;0;0;0;0 292;SrsZlecenia;0;0;0;0;0 293;StatElem;0;0;0;0;0 294;StatNag;0;0;0;0;0 295;SystemCDN;9;16;8;8;0 296;SzDekElem;0;0;0;0;0 297;SzDekNag;0;0;0;0;0 298;Towary;13358;19032;9360;8104;1568 299;TraElem;1058563;896464;687976;207744;744 300;TraElemAtr;188994;15000;6992;6168;1840 301;TraElemKorZbiorcza;0;0;0;0;0 302;TraElemKwotyCelne;0;0;0;0;0 303;TraElemRelacje;6382;736;288;336;112 304;TraFakZaliczkowe;0;0;0;0;0 305;TraNag;98970;160624;97688;61408;1528 306;TraNagRelacje;96284;6944;2584;4264;96 307;TraSElem;542991;101560;43024;58232;304 308;TraSElemCechy;0;0;0;0;0 309;TraSElemDost;0;0;0;0;0 310;TraVat;149870;12368;10520;1688;160 311;TrSBlad;0;0;0;0;0 312;TrSBladOper;0;0;0;0;0 313;Trwale;46;176;16;160;0 314;TrwaleAIElem;0;0;0;0;0 315;TrwaleAINag;0;0;0;0;0 316;TrwaleAtrybuty;0;0;0;0;0 317;TrwaleCzesci;0;0;0;0;0 318;TrwaleHist;577;424;152;232;40 319;TrwaleHistPowiazania;2;32;8;24;0 320;TrwaleMaska;0;0;0;0;0 321;TrwaleMiejscaUzytkowania;0;0;0;0;0 322;TrwaleOsobyOdpowiedzialne;2;32;8;24;0 323;TrwalePowiazania;3;32;8;24;0 324;TrwaleZawieszeniaAmo;0;0;0;0;0 325;TwrAtrybuty;3465;600;232;344;24 326;TwrCeny;54842;7864;4672;2936;256 327;TwrDost;0;0;0;0;0 328;TwrEan;13372;1560;624;800;136 329;TwrESklep;0;0;0;0;0 330;TwrGrupy;17500;7856;2464;5032;360 331;TwrGrupyAtrybuty;0;0;0;0;0 332;TwrGrupyJezykObcy;0;0;0;0;0 333;TwrIlosci;820937;136200;61384;74624;192 334;TwrJezykObcy;0;0;0;0;0 335;TwrJm;0;0;0;0;0 336;TwrJMZ;5744;600;312;192;96 337;TwrKntAtrybuty;1;48;8;40;0 338;TwrLinki;39547;1768;1680;16;72 339;TwrPromocje;0;0;0;0;0 340;TwrPrzeceny;136902;19272;6104;9200;3968 341;TwrTSModEsklep;0;0;0;0;0 342;TwrZasoby;4671;808;328;368;112 343;TypNieobec;56;112;8;104;0 344;TypNieobecKartaPracy;20;16;8;8;0 345;TypWyplata;262;288;136;96;56 346;TypWyplataGrupa;0;0;0;0;0 347;TypWyplataGrupaSkladniki;0;0;0;0;0 348;TypWyplataStaz;0;0;0;0;0 349;TytUbezp;210;136;72;16;48 350;TytUmowy;0;0;0;0;0 351;Umowy;0;0;0;0;0 352;UmowyZestCzasu;0;0;0;0;0 353;Uprawnienia;1;48;8;40;0 354;Urzedy;491;352;168;160;24 355;UrzRachunki;1732;416;136;224;56 356;VatNag;37288;45272;27736;15912;1624 357;VatTab;60525;12184;9920;2008;256 358;VatTab7;56580;5400;3344;1696;360 359;VatZD;0;0;0;0;0 360;WdrKopieElektroniczne;2;296;208;88;0 361;WindykacjaLog;0;0;0;0;0 362;WkrZaznaczenia2;0;0;0;0;0 363;WypElementy;1947;1096;896;200;0 364;WypElementyPodstawa;270;96;48;48;0 365;WypElementyPodstawaElem;814;240;136;48;56 366;Wyplaty;1483;776;360;352;64 367;WyplatyElem;0;0;0;0;0 368;WyplatyNag;0;0;0;0;0 369;Wyposazenie;1;144;8;136;0 370;WyposazenieAIElem;0;0;0;0;0 371;WyposazenieAINag;0;0;0;0;0 372;WyposazenieMiejscaUzytkowania;0;0;0;0;0 373;WyposazenieOsobyOdpowiedzialne;0;0;0;0;0 374;WyposazeniePowiazania;0;0;0;0;0 375;WypSkladniki;2209;1064;664;360;40 376;Wzorce;0;0;0;0;0 377;WzorWartosci;0;0;0;0;0 378;ZajeciaWynagr;0;0;0;0;0 379;Zaklady;0;0;0;0;0 380;Zaliczki;0;0;0;0;0 381;Zamienniki;0;0;0;0;0 382;Zaniechania;0;0;0;0;0 383;ZaniechaniaRoz;0;0;0;0;0 384;ZapisyKPR;0;0;0;0;0 385;ZestawyRegul;2;48;8;40;0 386;ZestawyRegulElem;12;48;8;40;0 387;ZestawyTwr;0;0;0;0;0 388;ZestawyTwrSkladniki;0;0;0;0;0 389;ZestKsiKol;20;32;8;24;0 390;ZestKsiNag;15;48;8;40;0 391;ZestKsiPoz;592;192;88;64;40 392;ZestKsiWyniki;36;64;8;56;0 393;ZstPromocje;0;0;0;0;0 -- Pozdrawiam. Adam
Re: Baza ok 2500 tabel.
Author: "Stokrotka"
Date: Mon, 19 Jun 2017 17:03
Date: Mon, 19 Jun 2017 17:03
405 lines
12655 bytes
12655 bytes
> > Zrzut bazy roboczej: > > Nr_kol;name;rows;reserved;data;index_size;unsed > 1;AkordDefinicja;0;0;0;0;0 > 2;AkordProgres;0;0;0;0;0 > 3;Akordy;0;0;0;0;0 > 4;AkordyHist;0;0;0;0;0 > 5;AkordyHistWartosci;0;0;0;0;0 > 6;AnalizyBIParam;1;16;8;8;0 > 7;AutoEwid;0;0;0;0;0 > 8;AutoKoszty;0;0;0;0;0 > 9;AutoPrzejazd;0;0;0;0;0 > 10;AutoRozlicz;0;0;0;0;0 > 11;AutoTrasy;0;0;0;0;0 > 12;Awizo;0;0;0;0;0 > 13;AwizoOpakowania;0;0;0;0;0 > 14;AwizoTowary;0;0;0;0;0 > 15;AwizoTypyOpakowan;6;16;8;8;0 > 16;AwizoTypyTransportu;5;16;8;8;0 > 17;AwizoWarunkiDostawy;15;16;8;8;0 > 18;BnkBOMW;0;0;0;0;0 > 19;BnkCertyfikaty;0;0;0;0;0 > 20;BnkDokElem;24;48;8;40;0 > 21;BnkDokNag;13;96;8;88;0 > 22;BnkFormatyElem;461;112;24;48;40 > 23;BnkFormatyNag;35;32;8;24;0 > 24;BnkNazwy;4248;3072;1696;1104;272 > 25;BnkRachunki;6;128;8;120;0 > 26;BnkRachZakazy;0;0;0;0;0 > 27;BnkRaporty;3738;2264;912;1096;256 > 28;BnkRozKwoty;51576;44464;16504;26128;1832 > 29;BnkRozKwotyMW;0;0;0;0;0 > 30;BnkRozRelacje;103148;12168;3016;6952;2200 > 31;BnkZapisy;42241;45448;22152;21992;1304 > 32;BnkZapisyCDCSEPAInfo;0;0;0;0;0 > 33;BnkZdarzenia;50358;56040;24688;29784;1568 > 34;BnkZdarzeniaCDCSEPAInfo;0;0;0;0;0 > 35;BOElem;592;232;80;112;40 > 36;BONag;32;96;8;88;0 > 37;BRpAgregaty;3728;464;184;136;144 > 38;BudzetElem;0;0;0;0;0 > 39;BudzetNag;0;0;0;0;0 > 40;Centra;2;48;8;40;0 > 41;CentraKierownicy;0;0;0;0;0 > 42;CentraLink;2;48;8;40;0 > 43;CfgKlucze;1135;208;96;88;24 > 44;CfgWartosci;1143;176;80;48;48 > 45;CRMDokumenty;0;0;0;0;0 > 46;CRMKontakty;0;0;0;0;0 > 47;CrmKontaktyCykl;0;0;0;0;0 > 48;CrmUczestnicy;0;0;0;0;0 > 49;CTIWyslaneWyplaty;5;16;8;8;0 > 50;DaneBinarne;3;48;8;40;0 > 51;DaneBinarneLinki;0;0;0;0;0 > 52;DaneKad;57;32;16;16;0 > 53;DaneKadMod;32;16;8;8;0 > 54;DanePlac;28;16;8;8;0 > 55;DanePlacMod;136;64;32;32;0 > 56;DefAtrElem;14;32;8;24;0 > 57;DefAtrybuty;48;64;16;48;0 > 58;DefCeny;6;32;8;24;0 > 59;DefEtapy;0;0;0;0;0 > 60;DefinicjaZmian;2;32;8;24;0 > 61;DefinicjaZmianPola;4;48;8;40;0 > 62;DefinicjeStref;5;64;8;56;0 > 63;DefProjekty;1;48;8;40;0 > 64;DeklElem;30770;4560;3872;496;192 > 65;DeklKedu;68;32;8;24;0 > 66;DeklNag;446;256;104;144;8 > 67;DeklStr;169;1192;1112;32;48 > 68;DeklV27;0;0;0;0;0 > 69;DeklVUEK;0;0;0;0;0 > 70;DeklWydr;26734;4048;3336;488;224 > 71;DeklZaklady;0;0;0;0;0 > 72;DekretyElem;234058;84792;47440;36904;448 > 73;DekretyKonta;346390;60976;19944;40704;328 > 74;DekretyNag;91588;54624;23864;29856;904 > 75;DetalAtrybuty;0;0;0;0;0 > 76;DetalCeny;0;0;0;0;0 > 77;DetalFormyPlatnosci;0;0;0;0;0 > 78;DetalKntOsoby;0;0;0;0;0 > 79;DetalKontrahenci;0;0;0;0;0 > 80;DetalOperator;0;0;0;0;0 > 81;DetalPlatnosciDokumentu;0;0;0;0;0 > 82;DetalRaporty;0;0;0;0;0 > 83;DetalRoliczeniaZaleglosci;0;0;0;0;0 > 84;DetalStanFormyPlatnosci;0;0;0;0;0 > 85;DetalStanKonfiguracja;0;0;0;0;0 > 86;DetalStanKontrahenci;0;0;0;0;0 > 87;DetalStanOpakElem;0;0;0;0;0 > 88;DetalStanOpakNag;0;0;0;0;0 > 89;DetalStanOperatorzy;0;0;0;0;0 > 90;DetalStanowiska;0;0;0;0;0 > 91;DetalStanPlatnosciDokumentu;0;0;0;0;0 > 92;DetalStanStawkiVAT;0;0;0;0;0 > 93;DetalStanTowary;0;0;0;0;0 > 94;DetalStanTraElem;0;0;0;0;0 > 95;DetalStanTraNag;0;0;0;0;0 > 96;DetalStanTwrEan;0;0;0;0;0 > 97;DetalStanTwrJMZ;0;0;0;0;0 > 98;DetalStanZapisyKB;0;0;0;0;0 > 99;DetalStanZmiany;0;0;0;0;0 > 100;DetalTraElem;0;0;0;0;0 > 101;DetalTraNag;0;0;0;0;0 > 102;DetalWalKursy;0;0;0;0;0 > 103;DetalZakazyMagazyn;0;0;0;0;0 > 104;DetalZapisyKB;0;0;0;0;0 > 105;DlgDokumenty;0;0;0;0;0 > 106;DlgElem;0;0;0;0;0 > 107;DlgNag;0;0;0;0;0 > 108;DlgTrasy;0;0;0;0;0 > 109;DlgZaliczki;0;0;0;0;0 > 110;Dodatki;0;0;0;0;0 > 111;DodatkiHist;0;0;0;0;0 > 112;DodatkiUmowy;0;0;0;0;0 > 113;DokAtrybuty;188;280;16;160;104 > 114;DokDefinicje;103;88;24;64;0 > 115;DokNag;0;0;0;0;0 > 116;DokNagEtapy;0;0;0;0;0 > 117;DokNagEtapyHistoria;0;0;0;0;0 > 118;DokNagEtapyKolejne;0;0;0;0;0 > 119;DokNagPliki;0;0;0;0;0 > 120;DokNagProcesEtapy;0;0;0;0;0 > 121;DokPodmioty;0;0;0;0;0 > 122;DokRelacje;0;0;0;0;0 > 123;DPD;0;0;0;0;0 > 124;Dzialy;5;80;8;72;0 > 125;DzialZakazy;0;0;0;0;0 > 126;Dzienniki;48;32;8;24;0 > 127;DziennikZakazy;0;0;0;0;0 > 128;eSklepFormyPlatnosci;0;0;0;0;0 > 129;eSklepKntRelacje;0;0;0;0;0 > 130;eSklepMagazyny;0;0;0;0;0 > 131;eSklepROCechy;0;0;0;0;0 > 132;eSklepStanowiska;0;0;0;0;0 > 133;eSklepWaluty;0;0;0;0;0 > 134;EwidDodElem;0;0;0;0;0 > 135;EwidDodNag;0;0;0;0;0 > 136;FaCyklElem;0;0;0;0;0 > 137;FaCyklKnt;0;0;0;0;0 > 138;FaCyklNag;0;0;0;0;0 > 139;FaCyklTwrKnt;0;0;0;0;0 > 140;Firma;1113;176;120;48;8 > 141;FormatyRcp;0;0;0;0;0 > 142;FormyPlatnosci;11;64;8;56;0 > 143;FormyPlatnosciDF;37;32;8;24;0 > 144;FormyPlatnWaluty;2;48;8;40;0 > 145;FrsPromocje;0;0;0;0;0 > 146;Grupy;61;32;8;24;0 > 147;GrupyKontElem;0;0;0;0;0 > 148;GrupyKontNag;0;0;0;0;0 > 149;GrupyPotracen;2;48;8;40;0 > 150;GrupyPotrSkladniki;0;0;0;0;0 > 151;Harmonogram;0;0;0;0;0 > 152;HarmonogramLista;0;0;0;0;0 > 153;HisWyksztal;16;32;8;24;0 > 154;HisZatrud;45;64;16;48;0 > 155;Idn;0;0;0;0;0 > 156;IGaleriaAtrWartosci;0;0;0;0;0 > 157;IGaleriaAtrybuty;0;0;0;0;0 > 158;IGaleriaDefAtrWartosci;0;0;0;0;0 > 159;IGaleriaKategorie;0;0;0;0;0 > 160;IntrastatElem;0;0;0;0;0 > 161;IntrastatNag;0;0;0;0;0 > 162;Kalendarze;1;32;8;24;0 > 163;KalendDni;16;32;8;24;0 > 164;KalendDniGodz;18;48;8;40;0 > 165;KartyKredytowe;8;32;8;24;0 > 166;KasaChor;16;16;8;8;0 > 167;Katalogi;1;32;8;24;0 > 168;KatalogZakazy;0;0;0;0;0 > 169;Kategorie;83;104;24;80;0 > 170;KntAtrybuty;19;64;8;56;0 > 171;KntESklepy;0;0;0;0;0 > 172;KntGrupy;0;0;0;0;0 > 173;KntLinki;0;0;0;0;0 > 174;KntOdbiorcy;1;48;8;40;0 > 175;KntOsoby;321;96;32;32;32 > 176;KntPromocje;0;0;0;0;0 > 177;KntScalHist;0;0;0;0;0 > 178;KodyCN;1;32;8;24;0 > 179;KompensatyElem;0;0;0;0;0 > 180;KompensatyNag;0;0;0;0;0 > 181;KonfigText;0;0;0;0;0 > 182;Konta;9147;5152;1640;2960;552 > 183;KontaZakazy;0;0;0;0;0 > 184;Kontrahenci;1378;2576;1072;1288;216 > 185;KorektaPodatkuDochodowego;0;0;0;0;0 > 186;KragKosztElem;0;0;0;0;0 > 187;KragKosztNag;0;0;0;0;0 > 188;KRD;0;0;0;0;0 > 189;KsiDokElem;0;0;0;0;0 > 190;KsiDokNag;0;0;0;0;0 > 191;KsiRozrachunki;11427;16304;3872;11416;1016 > 192;KwotyCelne;3;32;8;24;0 > 193;KwotyDodatkowe;0;0;0;0;0 > 194;LimitNieobec;5;48;8;40;0 > 195;ListyPlac;332;296;96;176;24 > 196;Lokalizacje;1;48;8;40;0 > 197;Magazyny;2;32;8;24;0 > 198;MagazynZakazy;0;0;0;0;0 > 199;Marki;0;0;0;0;0 > 200;MarkiJezykObcy;0;0;0;0;0 > 201;Miasta;0;0;0;0;0 > 202;MiejscaUzytkowania;0;0;0;0;0 > 203;NotyOdsElem;0;0;0;0;0 > 204;NotyOdsNag;0;0;0;0;0 > 205;OAtrybuty;0;0;0;0;0 > 206;OAtrybutyGrupy;0;0;0;0;0 > 207;OAtrybutyGrupyLinki;0;0;0;0;0 > 208;OAtrybutyHist;0;0;0;0;0 > 209;OAtrybutyKlasy;0;0;0;0;0 > 210;OAtrybutyKlasyElem;0;0;0;0;0 > 211;Obroty;21592;5144;2336;1712;1096 > 212;OfertyDok;0;0;0;0;0 > 213;OfertyElem;0;0;0;0;0 > 214;OfertyElemCeny;0;0;0;0;0 > 215;OfertyKnt;0;0;0;0;0 > 216;OkresoweElem;6;48;8;40;0 > 217;OkresoweHarmonogram;0;0;0;0;0 > 218;OkresoweNag;2;64;8;56;0 > 219;OkresyObrach;6;48;8;40;0 > 220;OpisKadry;0;0;0;0;0 > 221;OpisPlace;0;0;0;0;0 > 222;Parametry;0;0;0;0;0 > 223;PKZP;0;0;0;0;0 > 224;PlikiJPK;0;0;0;0;0 > 225;PltPromocje;0;0;0;0;0 > 226;PodArkuszInwenElem;0;0;0;0;0 > 227;PodArkuszInwenNag;0;0;0;0;0 > 228;PodmiotyView;6137;3496;2720;696;80 > 229;PodtypWyplata;0;0;0;0;0 > 230;Poreczyciele;0;0;0;0;0 > 231;PozDeklPIT;73;32;16;16;0 > 232;PozDeklZUS;53;32;16;16;0 > 233;PracaSzczeg;66;40;24;16;0 > 234;PracEtaty;35;312;56;256;0 > 235;Pracidx;40;96;8;88;0 > 236;PracKartyRcp;0;0;0;0;0 > 237;PracKod;20;48;8;40;0 > 238;PracLimit;37;80;16;64;0 > 239;PracNieobec;518;208;80;80;48 > 240;PracPitKwoty;180;32;8;24;0 > 241;PracPitMies;77;32;8;24;0 > 242;PracPlanDni;0;0;0;0;0 > 243;PracPlanDniGodz;0;0;0;0;0 > 244;PracPracaDni;0;0;0;0;0 > 245;PracPracaDniGodz;0;0;0;0;0 > 246;PracSchorzenia;0;0;0;0;0 > 247;PracZestaw;0;0;0;0;0 > 248;PracZestawElem;0;0;0;0;0 > 249;PrmHistoria;0;0;0;0;0 > 250;PrmKarty;0;0;0;0;0 > 251;ProdElem;0;0;0;0;0 > 252;ProdReceptury;0;0;0;0;0 > 253;ProdSkladniki;0;0;0;0;0 > 254;Producenci;0;0;0;0;0 > 255;ProducenciJezykObcy;0;0;0;0;0 > 256;Progi;0;0;0;0;0 > 257;PrzeszacWalutElem;0;0;0;0;0 > 258;PrzeszacWalutNag;0;0;0;0;0 > 259;PrzWyrej;75;40;24;16;0 > 260;Rabaty;940;160;48;96;16 > 261;RegulyRcp;12;16;8;8;0 > 262;RemanentElem;0;0;0;0;0 > 263;RemanentNag;0;0;0;0;0 > 264;Rodzina;1;32;8;24;0 > 265;RptKolejka2;0;0;0;0;0 > 266;RptObrazy2;0;0;0;0;0 > 267;RptTemp2;0;16;8;8;0 > 268;RptZaznaczenia2;0;0;0;0;0 > 269;Ryczalt;0;0;0;0;0 > 270;SchematPlatnosci;216;128;32;96;0 > 271;SchematWindykacjiEtapy;3;16;8;8;0 > 272;SchematyOpakElem;0;0;0;0;0 > 273;SchematyOpakNag;0;0;0;0;0 > 274;SchematyWindykacji;1;32;8;24;0 > 275;SchKsiElem;245;96;56;32;8 > 276;SchKsiNag;47;48;16;32;0 > 277;SchKsiRelac;2;48;8;40;0 > 278;SenditAdresyNadawcze;2;16;8;8;0 > 279;SenditPaczki;17;16;8;8;0 > 280;SenditTypyPaczek;1;16;8;8;0 > 281;SenditZleceniePrzesylki;12;48;16;32;0 > 282;SerieKalNag;1;48;8;40;0 > 283;SerieKalPoz;7;32;8;24;0 > 284;SerieKalPozGodz;7;48;8;40;0 > 285;SrsCyklElem;0;0;0;0;0 > 286;SrsCyklNag;0;0;0;0;0 > 287;SrsCzesci;0;0;0;0;0 > 288;SrsCzynnosci;0;0;0;0;0 > 289;SrsNotatki;0;0;0;0;0 > 290;SrsRodzajeU;0;0;0;0;0 > 291;SrsUrzadzenia;0;0;0;0;0 > 292;SrsZlecenia;0;0;0;0;0 > 293;StatElem;0;0;0;0;0 > 294;StatNag;0;0;0;0;0 > 295;SystemCDN;9;16;8;8;0 > 296;SzDekElem;0;0;0;0;0 > 297;SzDekNag;0;0;0;0;0 > 298;Towary;13358;19032;9360;8104;1568 > 299;TraElem;1058563;896464;687976;207744;744 > 300;TraElemAtr;188994;15000;6992;6168;1840 > 301;TraElemKorZbiorcza;0;0;0;0;0 > 302;TraElemKwotyCelne;0;0;0;0;0 > 303;TraElemRelacje;6382;736;288;336;112 > 304;TraFakZaliczkowe;0;0;0;0;0 > 305;TraNag;98970;160624;97688;61408;1528 > 306;TraNagRelacje;96284;6944;2584;4264;96 > 307;TraSElem;542991;101560;43024;58232;304 > 308;TraSElemCechy;0;0;0;0;0 > 309;TraSElemDost;0;0;0;0;0 > 310;TraVat;149870;12368;10520;1688;160 > 311;TrSBlad;0;0;0;0;0 > 312;TrSBladOper;0;0;0;0;0 > 313;Trwale;46;176;16;160;0 > 314;TrwaleAIElem;0;0;0;0;0 > 315;TrwaleAINag;0;0;0;0;0 > 316;TrwaleAtrybuty;0;0;0;0;0 > 317;TrwaleCzesci;0;0;0;0;0 > 318;TrwaleHist;577;424;152;232;40 > 319;TrwaleHistPowiazania;2;32;8;24;0 > 320;TrwaleMaska;0;0;0;0;0 > 321;TrwaleMiejscaUzytkowania;0;0;0;0;0 > 322;TrwaleOsobyOdpowiedzialne;2;32;8;24;0 > 323;TrwalePowiazania;3;32;8;24;0 > 324;TrwaleZawieszeniaAmo;0;0;0;0;0 > 325;TwrAtrybuty;3465;600;232;344;24 > 326;TwrCeny;54842;7864;4672;2936;256 > 327;TwrDost;0;0;0;0;0 > 328;TwrEan;13372;1560;624;800;136 > 329;TwrESklep;0;0;0;0;0 > 330;TwrGrupy;17500;7856;2464;5032;360 > 331;TwrGrupyAtrybuty;0;0;0;0;0 > 332;TwrGrupyJezykObcy;0;0;0;0;0 > 333;TwrIlosci;820937;136200;61384;74624;192 > 334;TwrJezykObcy;0;0;0;0;0 > 335;TwrJm;0;0;0;0;0 > 336;TwrJMZ;5744;600;312;192;96 > 337;TwrKntAtrybuty;1;48;8;40;0 > 338;TwrLinki;39547;1768;1680;16;72 > 339;TwrPromocje;0;0;0;0;0 > 340;TwrPrzeceny;136902;19272;6104;9200;3968 > 341;TwrTSModEsklep;0;0;0;0;0 > 342;TwrZasoby;4671;808;328;368;112 > 343;TypNieobec;56;112;8;104;0 > 344;TypNieobecKartaPracy;20;16;8;8;0 > 345;TypWyplata;262;288;136;96;56 > 346;TypWyplataGrupa;0;0;0;0;0 > 347;TypWyplataGrupaSkladniki;0;0;0;0;0 > 348;TypWyplataStaz;0;0;0;0;0 > 349;TytUbezp;210;136;72;16;48 > 350;TytUmowy;0;0;0;0;0 > 351;Umowy;0;0;0;0;0 > 352;UmowyZestCzasu;0;0;0;0;0 > 353;Uprawnienia;1;48;8;40;0 > 354;Urzedy;491;352;168;160;24 > 355;UrzRachunki;1732;416;136;224;56 > 356;VatNag;37288;45272;27736;15912;1624 > 357;VatTab;60525;12184;9920;2008;256 > 358;VatTab7;56580;5400;3344;1696;360 > 359;VatZD;0;0;0;0;0 > 360;WdrKopieElektroniczne;2;296;208;88;0 > 361;WindykacjaLog;0;0;0;0;0 > 362;WkrZaznaczenia2;0;0;0;0;0 > 363;WypElementy;1947;1096;896;200;0 > 364;WypElementyPodstawa;270;96;48;48;0 > 365;WypElementyPodstawaElem;814;240;136;48;56 > 366;Wyplaty;1483;776;360;352;64 > 367;WyplatyElem;0;0;0;0;0 > 368;WyplatyNag;0;0;0;0;0 > 369;Wyposazenie;1;144;8;136;0 > 370;WyposazenieAIElem;0;0;0;0;0 > 371;WyposazenieAINag;0;0;0;0;0 > 372;WyposazenieMiejscaUzytkowania;0;0;0;0;0 > 373;WyposazenieOsobyOdpowiedzialne;0;0;0;0;0 > 374;WyposazeniePowiazania;0;0;0;0;0 > 375;WypSkladniki;2209;1064;664;360;40 > 376;Wzorce;0;0;0;0;0 > 377;WzorWartosci;0;0;0;0;0 > 378;ZajeciaWynagr;0;0;0;0;0 > 379;Zaklady;0;0;0;0;0 > 380;Zaliczki;0;0;0;0;0 > 381;Zamienniki;0;0;0;0;0 > 382;Zaniechania;0;0;0;0;0 > 383;ZaniechaniaRoz;0;0;0;0;0 > 384;ZapisyKPR;0;0;0;0;0 > 385;ZestawyRegul;2;48;8;40;0 > 386;ZestawyRegulElem;12;48;8;40;0 > 387;ZestawyTwr;0;0;0;0;0 > 388;ZestawyTwrSkladniki;0;0;0;0;0 > 389;ZestKsiKol;20;32;8;24;0 > 390;ZestKsiNag;15;48;8;40;0 > 391;ZestKsiPoz;592;192;88;64;40 > 392;ZestKsiWyniki;36;64;8;56;0 > 393;ZstPromocje;0;0;0;0;0 > Jak widaæ na pocz±tku kto¶ nad tym panowa³, a potem siê co¶ rozjecha³o. -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, czêsto nielogiczny, ktury ludzie ociê¿ali umys³owo, na¿ucaj± bezmy¶lnie nastêpnym pokoleniom. ( ortografia . pev . pl )
Re: Baza ok 2500 tabel.
Author: Adam
Date: Mon, 19 Jun 2017 19:55
Date: Mon, 19 Jun 2017 19:55
53 lines
1661 bytes
1661 bytes
W dniu 2017-06-19 o 17:03, Stokrotka pisze: >> >> Zrzut bazy roboczej: >> >> Nr_kol;name;rows;reserved;data;index_size;unsed >> 1;AkordDefinicja;0;0;0;0;0 >> 2;AkordProgres;0;0;0;0;0 >> 3;Akordy;0;0;0;0;0 >> 4;AkordyHist;0;0;0;0;0 >> 5;AkordyHistWartosci;0;0;0;0;0 >> (...) >> > Jak widaæ na pocz±tku kto¶ nad tym panowa³, > a potem siê co¶ rozjecha³o. > A w którym miejscu widzisz rozjazd? Funkcjonalnie jest raczej OK. Faktem jest, ¿e program ca³y czas ro¶nie. Co jaki¶ czas dochodzi nowa funkcjonalno¶æ. W du¿ym skrócie program rós³: - Kasa/Bank i KP - Faktury i Magazyn - KH - PiK - CRM - Serwis Poza tym by³y swego czasu zmiany wymagaj±ce te¿ nowych tabel i relacji. Przyk³adowo: najpierw na kartotece towaru by³o pole EAN. Pó¼niej trzeba by³o dodaæ wiele EAN-ów do jednej karty towarowej - wiêc powsta³a nowa tabela z relacj± 1:Many w rodzaju [TowarID] [kody EAN] W ci±gu roku jest wydawanych kilka nowych wersji. W wielu z nich s± nowe funkcjonalno¶ci oraz poprawiane zg³oszone b³êdy. Oczywi¶cie czê¶æ funkcjonalno¶ci (nie lubiê tego okre¶lenia) jest wymuszona przepisami - np. faktury wewnêtrzne, ksiêgowanie paliwa 50/50%, nieszczêsne JPK itd. Ale czê¶æ to zg³oszenia klientów lub dealerów. Oczywistym jest, ¿e pisz±c system na nowo mo¿na nieco inaczej ustawiæ tabele czy relacje, mo¿na pewnie trochê upro¶ciæ. Ciê¿ko "uczesaæ" ¿ywy system, zw³aszcza, ¿e zasada jest, aby struktura ros³a, ale raczej siê nie zmienia³a. Zasada ta wynika z tego, ¿e dealerzy pisz± dodatki, szablony wydruków, w³asne modu³y. Klienci "kumaci" tak¿e. Nie mo¿e raczej byæ tak, ¿e co¶ siê zmieni i nagle stare wydruki przestaj± dzia³aæ. -- Pozdrawiam. Adam
[OT] Re: Baza ok 2500 tabel.
Author: =?UTF-8?B?QW5kcn
Date: Tue, 20 Jun 2017 07:24
Date: Tue, 20 Jun 2017 07:24
13 lines
427 bytes
427 bytes
W dniu 2017-06-19 o 19:55, Adam pisze: [...] > Zasada ta wynika z tego, ¿e dealerzy pisz± dodatki, szablony wydruków, > w³asne modu³y. Klienci "kumaci" tak¿e. Nie mo¿e raczej byæ tak, ¿e co¶ > siê zmieni i nagle stare wydruki przestaj± dzia³aæ. Po aktualizacji wersji "obce" raporty dzia³aj± bez problemu w Optimie? Pytam, bo taka Symfonia wywala obce raporty przy ka¿dej aktualizacji (przynajmniej KDP) -- pozdrawiam AS
Re: [OT] Re: Baza ok 2500 tabel.
Author: Adam
Date: Tue, 20 Jun 2017 15:20
Date: Tue, 20 Jun 2017 15:20
68 lines
2814 bytes
2814 bytes
W dniu 2017-06-20 o 07:24, Andrzej Stró¿yñski pisze: > W dniu 2017-06-19 o 19:55, Adam pisze: > [...] >> Zasada ta wynika z tego, ¿e dealerzy pisz± dodatki, szablony wydruków,rystal Reportd >> w³asne modu³y. Klienci "kumaci" tak¿e. Nie mo¿e raczej byæ tak, ¿e co¶ >> siê zmieni i nagle stare wydruki przestaj± dzia³aæ. > > Po aktualizacji wersji "obce" raporty dzia³aj± bez problemu w Optimie? > Pytam, bo taka Symfonia wywala obce raporty przy ka¿dej aktualizacji > (przynajmniej KDP) > > Dzia³aj±. Pod jednym warunkiem: Starsze wersje Optimy (numeracja jedno- i dwu-cyfrowa, zakoñczona na wersji 17.x) by³y pisane w Clarionie. Wydruki ich czê¶ciowo te¿ by³y pisane w Clarionie (oprócz tego w Crystalu). Oko³o roku 2010 Optima zosta³a przepisana w Visualach i innych dotNetach, si³± rzeczy czê¶æ wydruków (w Clarionie) musia³a zostaæ przepisana w Crystal Reports. Od tej pory s± ju¿ tylko dwa rodzaje wydruków: 1/ Crystal 2/ GenRap GenRap jest bardzo prosty, sporo wydruków mo¿e sobie stworzyæ b±d¼ zmodyfikowaæ u¿ytkownik koñcowy - dzia³a to na zasadzie budowania raportów z klocków. Crystala nie bêdê omawia³ - raczej jest znany. Z jednej strony trochê ³atwiej operuje siê wygl±dem w porównaniu np. do raportów dotNET, jak w systemie Enova/Soneta, z drugiej czasem w dotNecie ³atwiej co¶ uzyskaæ. Ale zawsze w Crystalu mo¿na u¿yæ SQL-a, jak co¶ trudno zrobiæ (lub nie da siê) w czystej sk³adni Crystala. A dziêki kompatybilno¶ci systemu w dó³ (dopisywanie nowych kolumn, "poszerzanie" istniej±cych, nowe tabele) - raporty z przed kilku lat dzia³aj±. Jeszcze jedna zaleta: dziêki ODBC nie potrzeba raportów pisaæ pod konkretn± bazê. Raport odwo³uje siê tylko do nazwy tabeli, wiêc raport stworzony na jednaj bazie bêdzie dzia³a³ w zasadzie na dowolnej innej. Aczkolwiek mam raporty pisane pod OLE DB wywo³ywane z zewnêtrznych aplikacji - wtedy trzeba wo³aæ je przez instancjê i bazê. Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co napisa³e¶ jeszcze sporo innych problemów. Najpowa¿niejsze: brak spójno¶ci systemu. Bywa u klientów, ¿e towar zostanie pobrany na dokument, a nie zejdzie ze stanu magazynowego. W przypadku Optimy, CDN-XL czy Enovy - o spójno¶æ baz danych dbaj± triggery. Albo ca³a transakcja (w znaczeniu ¶cie¿ki logicznej zdarzeñ) przejdzie, albo ca³a zostanie wycofana. Nawet, gdybym grzeba³ bezpo¶rednio w tabelach z danymi, transakcje s± spójne, albo trigger nie pozwoli zmieniæ pola, gdy pozosta³e warunki nie s± zachowane. Jest to bardzo dobre dla serwisantów. Przyk³ad z ¿ycia: pad pr±du w ¶rodku wpisywania dokumentu. W ró¿nych systemach nastêpuje rozjazd pomiêdzy stanami handlowymi a stanami magazynowymi, natomiast w Optimie/XL/Enovie praktycznie nigdy. Znam tylko kilka zg³oszonych przypadków przez blisko 20 lat. -- Pozdrawiam. Adam
Re: [OT] Re: Baza ok 2500 tabel.
Author: "Stokrotka"
Date: Tue, 20 Jun 2017 18:53
Date: Tue, 20 Jun 2017 18:53
15 lines
706 bytes
706 bytes
> Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co napisa³e¶ > jeszcze sporo innych problemów. Najpowa¿niejsze: brak spójno¶ci systemu. Nie wiem co Symfonia ma w ¶rodku, ale by³am na kursie z urzêdu pracy, gdzie uczono ksiegowo¶ci na Symfoni. Podoba³ mi siê ten sytem z punktu widzenia u¿ytkownika, nie pisz±c ju¿ o tym, ¿e tani w zestawieniu z okszyczanymi du¿ymi systemami, z kturymi s± tylko k³opoty, bo to ani uniwersalne, ani nie pisane od konkretnego u¿ytkownika (u¿ytkownik w sensie zak³ad produkcyjny). -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, czêsto nielogiczny, ktury ludzie ociê¿ali umys³owo, na¿ucaj± bezmy¶lnie nastêpnym pokoleniom. ( ortografia . pev . pl )
Re: [OT] Re: Baza ok 2500 tabel.
Author: Adam
Date: Wed, 21 Jun 2017 11:42
Date: Wed, 21 Jun 2017 11:42
49 lines
1684 bytes
1684 bytes
W dniu 2017-06-20 o 18:53, Stokrotka pisze: > >> Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co napisa³e¶ >> jeszcze sporo innych problemów. Najpowa¿niejsze: brak spójno¶ci systemu. > > Nie wiem co Symfonia ma w ¶rodku, > ale by³am na kursie z urzêdu pracy, gdzie uczono ksiegowo¶ci na Symfoni. > Podoba³ mi siê ten sytem z punktu widzenia u¿ytkownika, > nie pisz±c ju¿ o tym, ¿e tani w zestawieniu z okszyczanymi du¿ymi > systemami, z kturymi s± tylko k³opoty, bo to ani uniwersalne, ani nie > pisane od konkretnego u¿ytkownika (u¿ytkownik w sensie zak³ad produkcyjny). > Symfonia siedzi nie na SQL, lecz na Pervasive. Czyli taki plikowy SQL, bardziej podobny jednak do dBase ni¿ do "normalnych" SQL-i. Od strony technicznej: naprawa bazy ¿mudna, baza ³atwa do przewrócenia. Od strony operatora: program bardzo siermiê¿ny. Nie ma automatów. S± tylko proste szablony ksiêgowañ. Przyk³adowo w innych systemach (Optima, CDN-XL, Enova) mo¿na stworzyæ wzorce, które jedn± fakturê: 1/ paliwo osobowy 2/ paliwo "z kratk±" 3/ papier xero 4/ kawa 5/ drukarka (¶rodek trwa³y) 6/ serniczek ;) rozksiêguj± odpowiednio - [1] - bez VAT; [2] - odliczanie 50% VAT; [3] - mo¿na pu¶ciæ w krêgi kosztów, równolegle na konta 4. i 5.; [5] - jako ST, z osobn± amortyzacj± bilansow± i kosztow±, i/lub z amortyzacj± sezonow±; [6] - omijamy, nie podlega ksiêgowaniu To do¶æ prosty przyk³ad. Nie wiem, jak w Symfonii wygl±da obs³uga kont bankowych. W innych systemach mo¿e nastêpowaæ automatyczne rozliczanie p³atno¶ci po imporcie przelewów z banku, lub wysy³ka wprost z programu przelewów do realizacji. Takich "licytacji" mo¿na tworzyæ jeszcze wiele. -- Pozdrawiam. Adam
Re: [OT] Re: Baza ok 2500 tabel.
Author: Adam
Date: Wed, 21 Jun 2017 11:49
Date: Wed, 21 Jun 2017 11:49
68 lines
2521 bytes
2521 bytes
W dniu 2017-06-21 o 11:42, Adam pisze: > W dniu 2017-06-20 o 18:53, Stokrotka pisze: >> >>> Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co napisa³e¶ >>> jeszcze sporo innych problemów. Najpowa¿niejsze: brak spójno¶ci systemu. >> >> Nie wiem co Symfonia ma w ¶rodku, >> ale by³am na kursie z urzêdu pracy, gdzie uczono ksiegowo¶ci na Symfoni. >> Podoba³ mi siê ten sytem z punktu widzenia u¿ytkownika, >> nie pisz±c ju¿ o tym, ¿e tani w zestawieniu z okszyczanymi du¿ymi >> systemami, z kturymi s± tylko k³opoty, bo to ani uniwersalne, ani nie >> pisane od konkretnego u¿ytkownika (u¿ytkownik w sensie zak³ad >> produkcyjny). >> > > > Symfonia siedzi nie na SQL, lecz na Pervasive. Czyli taki plikowy SQL, > bardziej podobny jednak do dBase ni¿ do "normalnych" SQL-i. > Od strony technicznej: naprawa bazy ¿mudna, baza ³atwa do przewrócenia. > > Od strony operatora: program bardzo siermiê¿ny. Nie ma automatów. S± > tylko proste szablony ksiêgowañ. > > Przyk³adowo w innych systemach (Optima, CDN-XL, Enova) mo¿na stworzyæ > wzorce, które jedn± fakturê: > > 1/ paliwo osobowy > 2/ paliwo "z kratk±" > 3/ papier xero > 4/ kawa > 5/ drukarka (¶rodek trwa³y) > 6/ serniczek ;) > > rozksiêguj± odpowiednio - [1] - bez VAT; [2] - odliczanie 50% VAT; [3] - > mo¿na pu¶ciæ w krêgi kosztów, równolegle na konta 4. i 5.; [5] - jako > ST, z osobn± amortyzacj± bilansow± i kosztow±, i/lub z amortyzacj± > sezonow±; [6] - omijamy, nie podlega ksiêgowaniu > > To do¶æ prosty przyk³ad. > > Nie wiem, jak w Symfonii wygl±da obs³uga kont bankowych. > W innych systemach mo¿e nastêpowaæ automatyczne rozliczanie p³atno¶ci po > imporcie przelewów z banku, lub wysy³ka wprost z programu przelewów do > realizacji. > > Takich "licytacji" mo¿na tworzyæ jeszcze wiele. > Jeszcze jeden przyk³ad: Modu³ "Biuro Rachunkowe" dla Optimy umo¿liwia pracê na wielu podmiotach (wa¿ne dla biur rachunkowych maj±cych kilkudziesiêciu czy wiêcej klientów) i robienie globalnie dla wszystkich lub wskazanych m.in. wysy³anie na serwery Ministerstwa plików JPK, wysy³anie VAT7, wydruki deklaracji, naliczanie wyp³at w³a¶cicieli, tworzenie ró¿nych raportów. Nie potrzeba wchodziæ do ka¿dej z firm z osobna. Jest to bardzo du¿e u³atwienie. A ceny systemów s± podobne. Jednak wa¿niejszy od ceny jest support. Wa¿ne te¿ jest, ¿e Optima, Enova czy XL s± systemami otwartymi i mo¿na zrobiæ czy dorobiæ du¿o wiêcej dodatków, wydruków, raportów czy osobnych modu³ów (np. import danych z innych systemów) ni¿ w Symfonii. -- Pozdrawiam. Adam
Re: [OT] Re: Baza ok 2500 tabel.
Author: "Stokrotka"
Date: Wed, 21 Jun 2017 14:22
Date: Wed, 21 Jun 2017 14:22
46 lines
1642 bytes
1642 bytes
>>> Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co napisa³e¶ >>> jeszcze sporo innych problemów. Najpowa¿niejsze: brak spójno¶ci systemu. >> >> Nie wiem co Symfonia ma w ¶rodku, >> ale by³am na kursie z urzêdu pracy, gdzie uczono ksiegowo¶ci na Symfoni. >> Podoba³ mi siê ten sytem z punktu widzenia u¿ytkownika, >> nie pisz±c ju¿ o tym, ¿e tani w zestawieniu z okszyczanymi du¿ymi >> systemami, z kturymi s± tylko k³opoty, bo to ani uniwersalne, ani nie >> pisane od konkretnego u¿ytkownika (u¿ytkownik w sensie zak³ad >> produkcyjny). >> > > > Symfonia siedzi nie na SQL, lecz na Pervasive. Czyli taki plikowy SQL, > bardziej podobny jednak do dBase ni¿ do "normalnych" SQL-i. > Od strony technicznej: naprawa bazy ¿mudna, baza ³atwa do przewrócenia. > > Od strony operatora: program bardzo siermiê¿ny. Nie ma automatów. S± > tylko proste szablony ksiêgowañ. S± wystarczaj±ce u³atwienia dla u¿ytkownika. Nie jest to system dla du¿ej firmy, wymagaj±cej pracy "hurtowej". > Nie wiem, jak w Symfonii wygl±da obs³uga kont bankowych. > W innych systemach mo¿e nastêpowaæ automatyczne rozliczanie p³atno¶ci po > imporcie przelewów z banku, lub wysy³ka wprost z programu przelewów do > realizacji. Nawet je¶li tego nie ma, a pewnie nie ma, to programy "z drugiej strony" umozliwiaj± to, wiem bo wdara¿a³am taki program , w³acznie z odpowiednim imortem danyh. -- (tekst bez: ó, ch, rz i -ii) Ortografia to NAWYK, czêsto nielogiczny, ktury ludzie ociê¿ali umys³owo, na¿ucaj± bezmy¶lnie nastêpnym pokoleniom. ( ortografia . pev . pl ) > > Takich "licytacji" mo¿na tworzyæ jeszcze wiele. > > > -- > Pozdrawiam. > > Adam
Re: [OT] Re: Baza ok 2500 tabel.
Author: =?UTF-8?B?QW5kcn
Date: Wed, 21 Jun 2017 14:32
Date: Wed, 21 Jun 2017 14:32
60 lines
2227 bytes
2227 bytes
W dniu 2017-06-21 o 11:42, Adam pisze: > W dniu 2017-06-20 o 18:53, Stokrotka pisze: >> >>> Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co napisa³e¶ >>> jeszcze sporo innych problemów. Najpowa¿niejsze: brak spójno¶ci systemu. >> >> Nie wiem co Symfonia ma w ¶rodku, >> ale by³am na kursie z urzêdu pracy, gdzie uczono ksiegowo¶ci na Symfoni. >> Podoba³ mi siê ten sytem z punktu widzenia u¿ytkownika, >> nie pisz±c ju¿ o tym, ¿e tani w zestawieniu z okszyczanymi du¿ymi >> systemami, z kturymi s± tylko k³opoty, bo to ani uniwersalne, ani nie >> pisane od konkretnego u¿ytkownika (u¿ytkownik w sensie zak³ad >> produkcyjny). >> > > > Symfonia siedzi nie na SQL, lecz na Pervasive. Czyli taki plikowy SQL, > bardziej podobny jednak do dBase ni¿ do "normalnych" SQL-i. > Od strony technicznej: naprawa bazy ¿mudna, baza ³atwa do przewrócenia. > > Od strony operatora: program bardzo siermiê¿ny. Nie ma automatów. S± > tylko proste szablony ksiêgowañ. > > Przyk³adowo w innych systemach (Optima, CDN-XL, Enova) mo¿na stworzyæ > wzorce, które jedn± fakturê: > > 1/ paliwo osobowy > 2/ paliwo "z kratk±" > 3/ papier xero > 4/ kawa > 5/ drukarka (¶rodek trwa³y) > 6/ serniczek ;) > > rozksiêguj± odpowiednio - [1] - bez VAT; [2] - odliczanie 50% VAT; [3] - > mo¿na pu¶ciæ w krêgi kosztów, równolegle na konta 4. i 5.; [5] - jako > ST, z osobn± amortyzacj± bilansow± i kosztow±, i/lub z amortyzacj± > sezonow±; [6] - omijamy, nie podlega ksiêgowaniu > > To do¶æ prosty przyk³ad. > > Nie wiem, jak w Symfonii wygl±da obs³uga kont bankowych. > W innych systemach mo¿e nastêpowaæ automatyczne rozliczanie p³atno¶ci po > imporcie przelewów z banku, lub wysy³ka wprost z programu przelewów do > realizacji. > > Takich "licytacji" mo¿na tworzyæ jeszcze wiele. Nie pastw siê nad Symfoni±, skoro jej nie znasz. Jest wersja SQL Z funkcjonalno¶ci± nie jest pewnie tak ¼le, skoro kilku znajomych ksiêgowych nie narzeka a niektórzy pracuj± te¿ na innych programach, wiêc maj± porównanie. Z³e do¶wiadczenie mam tylko z jednym dorabianym raportem w KDP (wersja na Pervasive) który, bez ¿adnej zmiany w kodzie, nale¿y na nowo doczytaæ po "du¿ej" aktualizacji wersji - z regu³y raz do roku. -- pozdrawiam AS
Re: [OT] Re: Baza ok 2500 tabel.
Author: wloochacz
Date: Wed, 05 Jul 2017 13:30
Date: Wed, 05 Jul 2017 13:30
35 lines
1643 bytes
1643 bytes
W dniu 2017-06-20 o 15:20, Adam pisze: /ciach/ > Natomiast Symfonia czy jakieś tam Inserty mają oprócz tego, co napisałeś > jeszcze sporo innych problemów. Najpoważniejsze: brak spójności systemu. > Bywa u klientów, że towar zostanie pobrany na dokument, a nie zejdzie ze > stanu magazynowego. > > W przypadku Optimy, CDN-XL czy Enovy - o spójność baz danych dbają > triggery. No popatrz, mam bazę Enovy (stan na rok 2015, ale nie sadzę aby były aż tak poważne zmiany) pod ręką i nie ma w niej ani jednego triggera. Tak wszystko co piszesz poniżej w kontekście Enovy, nie jest prawdziwe... > Albo cała transakcja (w znaczeniu ścieżki logicznej zdarzeń) > przejdzie, albo cała zostanie wycofana. Nawet, gdybym grzebał > bezpośrednio w tabelach z danymi, transakcje są spójne, albo trigger nie > pozwoli zmienić pola, gdy pozostałe warunki nie są zachowane. > Jest to bardzo dobre dla serwisantów. Dobre dla serwisantów? A co to za serwisant, który grzebie w bazie nie wiedząc jakie będę tego konsekwencje dla całego systemu? Taki "serwisant" niech lepiej trzyma lepkie łapki blisko siebie... > Przykład z życia: pad prądu w środku wpisywania dokumentu. W różnych > systemach następuje rozjazd pomiędzy stanami handlowymi a stanami > magazynowymi, natomiast w Optimie/XL/Enovie praktycznie nigdy. Znam > tylko kilka zgłoszonych przypadków przez blisko 20 lat. Zatem mylisz transakcję bazodanową (która została wycofana, po padł prąd), ze spójnością danych logicznych zapewnioną przez triggery, po stronie bazy danych. I tak przez blisko 20 lat :P -- wloochacz
Re: [OT] Re: Baza ok 2500 tabel.
Author: Adam
Date: Wed, 05 Jul 2017 15:21
Date: Wed, 05 Jul 2017 15:21
2161 lines
94998 bytes
94998 bytes
W dniu 2017-07-05 o 13:30, wloochacz pisze: > W dniu 2017-06-20 o 15:20, Adam pisze: > /ciach/ > >> Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co >> napisa³e¶ jeszcze sporo innych problemów. Najpowa¿niejsze: brak >> spójno¶ci systemu. Bywa u klientów, ¿e towar zostanie pobrany na >> dokument, a nie zejdzie ze stanu magazynowego. >> >> W przypadku Optimy, CDN-XL czy Enovy - o spójno¶æ baz danych dbaj± >> triggery. > No popatrz, mam bazê Enovy (stan na rok 2015, ale nie sadzê aby by³y a¿ > tak powa¿ne zmiany) pod rêk± i nie ma w niej ani jednego triggera. > Tak wszystko co piszesz poni¿ej w kontek¶cie Enovy, nie jest prawdziwe... A¿ zobaczy³em do jakiej¶ bazy: name id xtype uid info status base_schema_ver replinfo parent_obj crdate ftcatid schema_ver stats_schema_ver type userstat sysstat indexdel refdate version deltrig instrig updtrig seltrig category cache AdresyWWW_INTERFACEUPDATE 2151103 TR 1 0 0 0 0 85575343 2016-08-10 15:24:11.603 0 0 0 TR 0 8 0 2016-08-10 15:24:11.603 0 85575343 0 0 0 0 0 Zaplaty_INTERFACEDELETE 7723130 TR 1 0 0 0 0 1636916903 2016-08-10 15:24:13.190 0 0 0 TR 0 8 0 2016-08-10 15:24:13.190 0 1636916903 0 0 0 0 0 Nieobecnosci_INTERFACEDELETE 11199140 TR 1 0 0 0 0 733245667 2016-08-10 15:24:12.517 0 0 0 TR 0 8 0 2016-08-10 15:24:12.517 0 733245667 0 0 0 0 0 tr_bi_pik_UmowaHistorie 13959126 TR 1 0 0 0 0 1963870063 2016-08-10 15:24:01.140 0 0 0 TR 0 8 0 2016-08-10 15:24:01.140 0 1963870063 0 0 0 0 0 DefDokumentow_INTERFACEDELETE 14675150 TR 1 0 0 0 0 690101499 2016-08-10 15:24:11.947 0 0 0 TR 0 8 0 2016-08-10 15:24:11.947 0 690101499 0 0 0 0 0 Attachments_INTERFACEUPDATE 18151160 TR 1 0 0 0 0 533576939 2016-08-10 15:24:11.607 0 0 0 TR 0 8 0 2016-08-10 15:24:11.607 0 533576939 0 0 0 0 0 ZasInnyPlatnik_INTERFACEDELETE 23723187 TR 1 0 0 0 0 1700917131 2016-08-10 15:24:13.193 0 0 0 TR 0 8 0 2016-08-10 15:24:13.193 0 1700917131 0 0 0 0 0 OcenyArkusze_INTERFACEDELETE 27199197 TR 1 0 0 0 0 1181247263 2016-08-10 15:24:12.520 0 0 0 TR 0 8 0 2016-08-10 15:24:12.520 0 1181247263 0 0 0 0 0 tr_bi_pik_ZajKomornicze 29959183 TR 1 0 0 0 0 1060914851 2016-08-10 15:24:01.147 0 0 0 TR 0 8 0 2016-08-10 15:24:01.147 0 1060914851 0 0 0 0 0 DefElementow_INTERFACEDELETE 30675207 TR 1 0 0 0 0 754101727 2016-08-10 15:24:11.953 0 0 0 TR 0 8 0 2016-08-10 15:24:11.953 0 754101727 0 0 0 0 0 BasicDocs_INTERFACEUPDATE 34151217 TR 1 0 0 0 0 853578079 2016-08-10 15:24:11.607 0 0 0 TR 0 8 0 2016-08-10 15:24:11.607 0 853578079 0 0 0 0 0 ZbiegiPracyIRodz_INTERFACEDELETE 39723244 TR 1 0 0 0 0 1956918043 2016-08-10 15:24:13.197 0 0 0 TR 0 8 0 2016-08-10 15:24:13.197 0 1956918043 0 0 0 0 0 OcenyPracownikow_INTERFACEDELETE 43199254 TR 1 0 0 0 0 1501248403 2016-08-10 15:24:12.523 0 0 0 TR 0 8 0 2016-08-10 15:24:12.523 0 1501248403 0 0 0 0 0 tr_bi_pik_ZajKomorniczeHis 45959240 TR 1 0 0 0 0 1124915079 2016-08-10 15:24:01.153 0 0 0 TR 0 8 0 2016-08-10 15:24:01.153 0 1124915079 0 0 0 0 0 DefElementowOcen_INTERFACEDELETE 46675264 TR 1 0 0 0 0 818101955 2016-08-10 15:24:11.957 0 0 0 TR 0 8 0 2016-08-10 15:24:11.957 0 818101955 0 0 0 0 0 BudzetyProjektu_INTERFACEUPDATE 50151274 TR 1 0 0 0 0 1045578763 2016-08-10 15:24:11.610 0 0 0 TR 0 8 0 2016-08-10 15:24:11.610 0 1045578763 0 0 0 0 0 ZestawieniaKS_INTERFACEDELETE 55723301 TR 1 0 0 0 0 129435535 2016-08-10 15:24:13.200 0 0 0 TR 0 8 0 2016-08-10 15:24:13.200 0 129435535 0 0 0 0 0 PrzedmiotySzkol_Zakres_FK_RELATION 57103294 TR 1 0 0 0 0 1814297523 2016-08-10 15:24:11.157 0 0 0 TR 0 8 0 2016-08-10 15:24:11.157 0 1814297523 0 0 0 0 0 OcenyRealizacje_INTERFACEDELETE 59199311 TR 1 0 0 0 0 1565248631 2016-08-10 15:24:12.527 0 0 0 TR 0 8 0 2016-08-10 15:24:12.527 0 1565248631 0 0 0 0 0 DefElemOcenPrac_INTERFACEDELETE 62675321 TR 1 0 0 0 0 882102183 2016-08-10 15:24:11.960 0 0 0 TR 0 8 0 2016-08-10 15:24:11.960 0 882102183 0 0 0 0 0 DaneKnt_INTERFACEUPDATE 66151331 TR 1 0 0 0 0 1877581727 2016-08-10 15:24:11.610 0 0 0 TR 0 8 0 2016-08-10 15:24:11.610 0 1877581727 0 0 0 0 0 itd - 490 rekordów. Optimka ma 272, CDN-XL ma 852. Zreszt± do XL masz dokumentacjê, podsy³a³em Ci kiedy¶. > >> Albo ca³a transakcja (w znaczeniu ¶cie¿ki logicznej zdarzeñ) >> przejdzie, albo ca³a zostanie wycofana. Nawet, gdybym grzeba³ >> bezpo¶rednio w tabelach z danymi, transakcje s± spójne, albo trigger >> nie pozwoli zmieniæ pola, gdy pozosta³e warunki nie s± zachowane. >> Jest to bardzo dobre dla serwisantów. > Dobre dla serwisantów? > A co to za serwisant, który grzebie w bazie nie wiedz±c jakie bêdê tego > konsekwencje dla ca³ego systemu? > > Taki "serwisant" niech lepiej trzyma lepkie ³apki blisko siebie... E, tam, nie przesadzaj. Przyk³adowy trigger dotycz±cy elementu transakcji (np. faktury) poni¿ej. My¶lisz, ¿e bez triggera kto¶ by to zapamiêta³? GO /****** Object: Trigger [CDN].[TraElem_InsertUpdateDelete_Trigger] Script Date: 07/05/2017 15:13:13 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [CDN].[TraElem_InsertUpdateDelete_Trigger] ON [CDN].[TraElem] FOR INSERT, UPDATE, DELETE AS IF (SELECT TOP 1 TrE_TypDokumentu FROM inserted where TrE_TypDokumentu = 301) = 301 BEGIN DECLARE @EFakturaTrNId int Declare dodane Cursor Local Fast_Forward For Select TrE_TrNId From inserted Open Dodane While 1=1 Begin Fetch Next From Dodane InTo @EfakturaTrNID If @@Fetch_Status <> 0 Break IF exists (SELECT * FROM CDN.TraNag WHERE TrN_TrNid = @EfakturaTrNId AND TrN_DabID IS NOT NULL AND TrN_TypDokumentu = 301 and TrN_EfakturaGUID IS NOT NULL) AND Exists (SELECT tre_treid FROM inserted where tre_cenat = 0 and tre_trnid = @EfakturaTrNId) BEGIN RaisError ('Nie mo¿na modyfikowaæ e-faktury', 16,1) RollBack Tran Return END END END -- jesli zmienimy lppow na proformie to trzeba tez na wz do nich nalezacych IF exists (SELECT TrE_TypDokumentu FROM inserted where TrE_TypDokumentu in (308,309,320) ) BEGIN IF UPDATE( TrE_LpPow ) AND NOT UPDATE( TrE_TrEId ) AND NOT UPDATE( TrE_TrNId ) AND NOT UPDATE( TrE_ZwrId ) AND NOT UPDATE( TrE_TrEIdProd ) AND NOT UPDATE( TrE_TypDokumentu ) AND NOT UPDATE( TrE_Aktywny ) AND NOT UPDATE( TrE_DataDok ) AND NOT UPDATE( TrE_DataOpe ) AND NOT UPDATE( TrE_TwrId ) AND NOT UPDATE( TrE_Stawka ) AND NOT UPDATE( TrE_Flaga ) AND NOT UPDATE( TrE_Zrodlowa ) AND NOT UPDATE( TrE_TwCNumer ) AND NOT UPDATE( TrE_TypNB ) AND NOT UPDATE( TrE_Cena0 ) AND NOT UPDATE( TrE_Rabat ) AND NOT UPDATE( TrE_CenaW ) AND NOT UPDATE( TrE_CenaT ) AND NOT UPDATE( TrE_Ilosc ) AND NOT UPDATE( TrE_Jm ) AND NOT UPDATE( TrE_JmZ ) AND NOT UPDATE( TrE_JmCalkowite ) AND NOT UPDATE( TrE_JmPrzelicznikL ) AND NOT UPDATE( TrE_JmPrzelicznikM ) AND NOT UPDATE( TrE_IloscJM ) AND NOT UPDATE( TrE_WartoscNetto ) AND NOT UPDATE( TrE_WartoscBrutto ) AND NOT UPDATE( TrE_Cena0WD ) AND NOT UPDATE( TrE_CenaWWD ) AND NOT UPDATE( TrE_WartoscNettoWal ) AND NOT UPDATE( TrE_WartoscBruttoWal ) AND NOT UPDATE( TrE_KosztUslugi) AND NOT UPDATE (TrE_Atr1_DeAId) AND NOT UPDATE (TrE_Atr1_Kod) AND NOT UPDATE (TrE_Atr1_Wartosc) AND NOT UPDATE (TrE_Atr2_DeAId) AND NOT UPDATE (TrE_Atr2_Kod) AND NOT UPDATE (TrE_Atr2_Wartosc) AND NOT UPDATE (TrE_Atr3_DeAId) AND NOT UPDATE (TrE_Atr3_Kod) AND NOT UPDATE (TrE_Atr3_Wartosc) AND NOT UPDATE (TrE_Atr4_DeAId) AND NOT UPDATE (TrE_Atr4_Kod) AND NOT UPDATE (TrE_Atr4_Wartosc) AND NOT UPDATE (TrE_Atr5_DeAId) AND NOT UPDATE (TrE_Atr5_Kod) AND NOT UPDATE (TrE_Atr5_Wartosc) BEGIN set nocount on DECLARE @TrE_TrEId1 INT, @TrN_Rodzaj1 INT, @TrE_TrNId1 INT, @TrE_TypDokumentu1 INT, @TrE_LpPow1 INT, @TrE_TrEId2 INT, @PFzRO int, @TrE_TrEIdRO INT, @TrE_LpPow2 INT, @TrE_TrEIdWZ INT DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId, TrE_TrNId, TrE_LpPow, TrE_TypDokumentu FROM inserted ORDER BY TrE_TrNId, TrE_Lp OPEN Dodawane WHILE 1=1 BEGIN FETCH NEXT FROM Dodawane INTO @TrE_TrEId1, @TrE_TrNId1, @TrE_LpPow1, @TrE_TypDokumentu1 IF @@FETCH_STATUS <> 0 BREAK SELECT TOP 1 @TrN_Rodzaj1 = TrN_Rodzaj FROM cdn.TraNag JOIN cdn.TraElem ON TrN_TrNId = TrE_TrNId AND TrE_TrEId = @TrE_TrEId1 IF (UPDATE (TrE_LpPow) and @TrE_TypDokumentu1 = 320) begin SELECT TOP 1 @TrE_TrEIdWZ = a.TrE_TrEId FROM CDN.TraElem a JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp =320 AND TrR_TrNTyp NOT IN (317,309,320) JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow = b.TrE_LpPow JOIN CDN.tranag on TrR_TrNId = TrN_TrNID WHERE b.TrE_TrEId = @TrE_TrEId1 AND TrN_Rodzaj not in (302200,302202) AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEId1) AND a.TrE_TrEId not in (SELECT TeR_ParentId FROM CDN.TraElemRelacje WHERE TeR_ChildId = @TrE_TrEId1) ORDER BY TrR_TrRId DESC INSERT INTO CDN.TraElemRelacje (TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga) SELECT TOP 1 b.TrE_TypDokumentu,b.TrE_TrEId,a.TrE_TypDokumentu,a.TrE_TrEId,0 FROM CDN.TraElem a JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp =320 AND TrR_TrNTyp NOT IN (317,309,320) JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow = b.TrE_LpPow JOIN CDN.tranag on TrR_TrNId = TrN_TrNID WHERE b.TrE_TrEId = @TrE_TrEId1 AND TrN_Rodzaj not in (302200,302202) AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEId1) AND a.TrE_TrEId not in (SELECT TeR_ParentId FROM CDN.TraElemRelacje WHERE TeR_ChildId = @TrE_TrEId1) ORDER BY TrR_TrRId DESC select @PFzRO = a.Trr_TrNId from cdn.tranagrelacje a where a.TrR_FaId =@TrE_TrNId1 AND a.Trr_TrNTyp =308 AND a.Trr_FaTyp =320 if @PFzRO > 0 begin select @TrE_TrEIdRO = 0, @TrE_TrEId2 = 0 create table #RO (TrE_TrEIdRO int ,TrE_TrEIdFA int) insert into #RO(TrE_TrEIdRO) select TeR_ChildId from cdn.traelemrelacje where TeR_ParentId = @TrE_TrEId1 and TeR_ParentTyp = 320 and TeR_ChildTyp = 308 insert into #RO(TrE_TrEIdRO) select TeR_ParentId from cdn.traelemrelacje where TeR_ChildId = @TrE_TrEId1 and TeR_ChildTyp = 320 and TeR_ParentTyp = 308 select top 1 @TrE_TrEId2 = TeR_ChildId from cdn.traelemrelacje where TeR_ParentId = @TrE_TrEId1 and TeR_ParentTyp = 320 and TeR_ChildTyp in (302,306) and TeR_ChildId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId in (select TrE_TrEIdRO from #RO)) order by ter_terid desc if @TrE_TrEId2 = 0 select top 1 @TrE_TrEId2 = TeR_ParentId from cdn.traelemrelacje where TeR_ChildId = @TrE_TrEId1 and TeR_ChildTyp = 320 and TeR_ParentTyp in (302,306) and TeR_ParentId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId in (select TrE_TrEIdRO from #RO)) order by ter_terid desc if @TrE_TrEId2 <> 0 begin update #RO set TrE_TrEIdFA = @TrE_TrEId2 insert into CDN.TraElemRelacje (TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga) select 308,TrE_TrEIdRO,TrE_TypDokumentu,TrE_TrEIdFA,0 from #RO join cdn.traelem on TrE_TrEIdFA = TrE_TrEId--where TrE_TrEID = @TrE_TrEId2 --select 308,@TrE_TrEIdRO,TrE_TypDokumentu,@TrE_TrEId2,0 from cdn.traelem where TrE_TrEID = @TrE_TrEId2 exec [CDN].[UstawRezerwacje] @TrE_TrEId2,0,0 end drop table #RO /* select @TrE_LpPow2 = TrE_Lppow FROM Cdn.TraElem where TrE_TreId = @TrE_TrEId1 select @TrE_TrEIdRO = tre_treid from cdn.traelem where tre_trnid = @PFzRO and tre_lppow = @TrE_LpPow2 SELECT TOP 1 @TrE_TrEId2 = a.TrE_TrEId FROM CDN.TraElem a JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp IN (308,309) AND TrR_TrNTyp NOT IN (317,309,308,320) JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow = @TrE_Lppow1 WHERE b.TrE_TrEId = @TrE_TrEIdRO AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEIdRO) ORDER BY TrR_TrRId DESC INSERT INTO CDN.TraElemRelacje (TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga) SELECT TOP 1 b.TrE_TypDokumentu,b.TrE_TrEId,a.TrE_TypDokumentu,a.TrE_TrEId,0 FROM CDN.TraElem a JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp IN (308,309) AND TrR_TrNTyp NOT IN (317,309,308,320) JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow = @TrE_Lppow1 WHERE b.TrE_TrEId = @TrE_TrEIdRO AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEIdRO) ORDER BY TrR_TrRId DESC exec [CDN].[UstawRezerwacje] @TrE_TrEId2,0,0 */ end end /*IF (UPDATE (TrE_LpPow) and @TrN_Rodzaj1 = 320009) BEGIN UPDATE a SET a.TrE_LppowRel = d.TrE_Lppow FROM Cdn.TraElem a JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1 where a.TrE_TreId = @TrE_TrEId1 END*/ IF (UPDATE (TrE_LpPow) and @TrN_Rodzaj1 in (320000,320009)) BEGIN UPDATE a SET a.TrE_Lppow = d.TrE_Lppow FROM Cdn.TraElem a JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1 where a.TrE_TreId = @TrE_TrEId1 --poprawa zg³oszenia 150109 UPDATE a SET a.TrE_LppowRel = a.TrE_Lppow ,a.TrE_Lppow = @TrE_Lppow1 FROM Cdn.TraElem a JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1 join cdn.traelemrelacje on TeR_ChildId = a.tre_treid and TeR_ParentId = @TrE_TrEId1 and TeR_ChildTyp = 306 join cdn.tranag WZ on a.tre_trnid = WZ.trn_trnid join cdn.tranagrelacje on trr_faid = WZ.trn_trnid and TrR_TrNTyp = 302 join cdn.traelem b on b.tre_trnid = TrR_TrNId and b.tre_treid = @TrE_TrEIdWZ --poprawa zg³oszenia 154645 UPDATE a SET a.TrE_LppowRel = a.TrE_Lppow ,a.TrE_Lppow = @TrE_Lppow1 FROM Cdn.TraElem a where a.tre_zwrid in( select a.tre_treid FROM Cdn.TraElem a JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1 join cdn.traelemrelacje on TeR_ChildId = a.tre_treid and TeR_ParentId = @TrE_TrEId1 and TeR_ChildTyp = 306 join cdn.tranag WZ on a.tre_trnid = WZ.trn_trnid join cdn.tranagrelacje on trr_faid = WZ.trn_trnid and TrR_TrNTyp = 302 join cdn.traelem b on b.tre_trnid = TrR_TrNId and b.tre_treid = @TrE_TrEIdWZ) --UPDATE a SET a.TrE_LppowRel = a.TrE_Lppow ,a.TrE_Lppow = @TrE_Lppow1 --FROM Cdn.TraElem a --JOIN deleted d ON d.TrE_TreId = @TrE_TrEId1 and a.TrE_Lppow = d.TrE_Lppow and a.TrE_TwrId = d.TrE_TwrId --JOIN CDN.TraNagRelacje ON d.TrE_TrnId = TrR_FaId --WHERE TrR_TrNTyp = 306 AND a.TrE_TrnId = TrR_TrNId END IF (UPDATE (TrE_LpPow) and @TrE_TypDokumentu1 in (308,309)) BEGIN SELECT TOP 1 @TrE_TrEId2 = a.TrE_TrEId FROM CDN.TraElem a JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp IN (308,309) AND TrR_TrNTyp NOT IN (317,309,308,320) JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow = b.TrE_LpPow WHERE b.TrE_TrEId = @TrE_TrEId1 AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEId1) ORDER BY TrR_TrRId DESC INSERT INTO CDN.TraElemRelacje (TeR_ParentTyp,TeR_ParentId,TeR_ChildTyp,TeR_ChildId,TeR_Flaga) SELECT TOP 1 b.TrE_TypDokumentu,b.TrE_TrEId,a.TrE_TypDokumentu,a.TrE_TrEId,0 FROM CDN.TraElem a JOIN CDN.tranagrelacje on TrR_TrNID = a.TrE_TrNID AND TrR_FaTyp IN (308,309) AND TrR_TrNTyp NOT IN (317,309,308) JOIN CDN.traelem b on TrR_FaId = b.TrE_TrNID AND a.TrE_Lppow = b.TrE_LpPow WHERE b.TrE_TrEId = @TrE_TrEId1 AND a.TrE_TrEId not in (SELECT TeR_ChildId FROM CDN.TraElemRelacje WHERE TeR_ParentId = @TrE_TrEId1) AND a.TrE_TrEId not in (SELECT TeR_ParentId FROM CDN.TraElemRelacje WHERE TeR_ChildId = @TrE_TrEId1) and b.TrE_LppowRel is not null ORDER BY TrR_TrRId DESC UPDATE CDN.TraElem SET TrE_Lppow = TrE_LppowRel,TrE_LppowRel = NULL WHERE TrE_TrEId = @TrE_TrEId1 and TrE_LppowRel is not null exec [CDN].[UstawRezerwacje] @TrE_TrEId2,0,0 END END CLOSE Dodawane DEALLOCATE Dodawane set nocount off END end IF exists (SELECT TrE_TypDokumentu FROM inserted where TrE_TypDokumentu = 311 ) or exists (SELECT TrE_TypDokumentu FROM deleted where TrE_TypDokumentu = 311 ) BEGIN set nocount on DECLARE @TrE_TrEIdAI INT DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId FROM inserted ORDER BY TrE_TrNId, TrE_Lp OPEN Dodawane WHILE 1=1 BEGIN FETCH NEXT FROM Dodawane INTO @TrE_TrEIdAI IF @@FETCH_STATUS <> 0 BREAK If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update (TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod) Or Update (TrE_Atr2_Wartosc) Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update (TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod) Or Update (TrE_Atr4_Wartosc) Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update (TrE_Atr5_Wartosc)) BEGIN DELETE FROM Cdn.TraElemAtr WHERE Tra_TrEId =@TrE_TrEIdAI INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,1,TrE_Atr1_DeAId,TrE_Atr1_Kod,TrE_Atr1_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr1_DeAId>0 AND TrE_Atr1_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,2,TrE_Atr2_DeAId,TrE_Atr2_Kod,TrE_Atr2_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr2_DeAId>0 AND TrE_Atr2_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,3,TrE_Atr3_DeAId,TrE_Atr3_Kod,TrE_Atr3_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr3_DeAId>0 AND TrE_Atr3_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,4,TrE_Atr4_DeAId,TrE_Atr4_Kod,TrE_Atr4_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr4_DeAId>0 AND TrE_Atr4_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,5,TrE_Atr5_DeAId,TrE_Atr5_Kod,TrE_Atr5_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAI AND TrE_Atr5_DeAId>0 AND TrE_Atr5_DeAId is not NULL END END CLOSE Dodawane DEALLOCATE Dodawane set nocount off return end -- uruchamiamy procedurê obs³ugi zasobów, jesli s± podmieniane jakiekolwiek pola za wyjatkiem TrE_LpPow IF ( UPDATE( TrE_LpPow ) OR UPDATE( TrE_Lp ) OR UPDATE( TrE_PodmiotTyp ) OR UPDATE( TrE_PodId ) OR UPDATE( TrE_KatId ) OR UPDATE( TrE_TwrNazwa ) OR UPDATE( TrE_TwrEAN ) OR UPDATE( TrE_TwrNumerKat ) OR UPDATE( TrE_TwrKod ) OR UPDATE( TrE_TwrOpis ) OR UPDATE( TrE_KosztKGO ) OR UPDATE( TrE_TwrSWW ) OR UPDATE( TrE_Prog ) OR UPDATE( TrE_UpustTyp ) OR UPDATE( TrE_Upust ) OR UPDATE( TrE_UpustKnt ) OR UPDATE( TrE_UpustKntTyp ) OR UPDATE( TrE_Waluta ) OR UPDATE( TrE_KursNumer ) OR UPDATE( TrE_KursL ) OR UPDATE( TrE_KursM ) OR UPDATE( TrE_WartoscZakupuWylicz ) OR UPDATE (TrE_Atr1_DeAId) OR UPDATE (TrE_Atr1_Kod) OR UPDATE (TrE_Atr1_Wartosc) OR UPDATE (TrE_Atr2_DeAId) OR UPDATE (TrE_Atr2_Kod) OR UPDATE (TrE_Atr2_Wartosc) OR UPDATE (TrE_Atr3_DeAId) OR UPDATE (TrE_Atr3_Kod) OR UPDATE (TrE_Atr3_Wartosc) OR UPDATE (TrE_Atr4_DeAId) OR UPDATE (TrE_Atr4_Kod) OR UPDATE (TrE_Atr4_Wartosc) OR UPDATE (TrE_Atr5_DeAId) OR UPDATE (TrE_Atr5_Kod) OR UPDATE (TrE_Atr5_Wartosc) OR UPDATE (TrE_WartoscTymczasowa) OR UPDATE (TrE_ZTwID) OR UPDATE (TrE_ZTwGlowny) OR UPDATE (TrE_ZestawWiazanie) OR UPDATE (TrE_zTwKod) OR UPDATE (TrE_TwrTyp) OR UPDATE (TrE_TwrKodDostawcy) OR UPDATE (TrE_DoZwrotu) ) AND NOT UPDATE( TrE_TrEId ) AND NOT UPDATE( TrE_TrNId ) AND NOT UPDATE( TrE_ZwrId ) AND NOT UPDATE( TrE_TrEIdProd ) -- AND NOT UPDATE( TrE_Lp ) AND NOT UPDATE( TrE_TypDokumentu ) AND NOT UPDATE( TrE_Aktywny ) AND NOT UPDATE( TrE_DataDok ) AND NOT UPDATE( TrE_DataOpe ) -- AND NOT UPDATE( TrE_PodmiotTyp ) -- AND NOT UPDATE( TrE_PodID ) -- AND NOT UPDATE( TrE_KatID ) AND NOT UPDATE( TrE_TwrId ) -- AND NOT UPDATE( TrE_TwrNazwa ) -- AND NOT UPDATE( TrE_TwrEAN ) -- AND NOT UPDATE( TrE_TwrNumerKat ) -- AND NOT UPDATE( TrE_TwrKod ) -- AND NOT UPDATE( TrE_TwrOpis ) -- AND NOT UPDATE( TrE_TwrSWW ) AND NOT UPDATE( TrE_Stawka ) AND NOT UPDATE( TrE_Flaga ) AND NOT UPDATE( TrE_Zrodlowa ) AND NOT UPDATE( TrE_TwCNumer ) AND NOT UPDATE( TrE_TypNB ) AND NOT UPDATE( TrE_Cena0 ) AND NOT UPDATE( TrE_Rabat ) AND NOT UPDATE( TrE_CenaW ) -- AND NOT UPDATE( TrE_Waluta ) -- AND NOT UPDATE( TrE_KursNumer ) -- AND NOT UPDATE( TrE_KursL ) -- AND NOT UPDATE( TrE_KursM ) AND NOT UPDATE( TrE_CenaT ) AND NOT UPDATE( TrE_Ilosc ) AND NOT UPDATE( TrE_Jm ) AND NOT UPDATE( TrE_JmZ ) AND NOT UPDATE( TrE_JmCalkowite ) AND NOT UPDATE( TrE_JmPrzelicznikL ) AND NOT UPDATE( TrE_JmPrzelicznikM ) AND NOT UPDATE( TrE_IloscJM ) AND NOT UPDATE( TrE_WartoscNetto ) AND NOT UPDATE( TrE_WartoscBrutto ) AND NOT UPDATE( TrE_Cena0WD ) AND NOT UPDATE( TrE_CenaWWD ) AND NOT UPDATE( TrE_WartoscNettoWal ) AND NOT UPDATE( TrE_WartoscBruttoWal ) AND NOT UPDATE( TrE_MagId ) -- AND NOT UPDATE( TrE_Prog ) -- AND NOT UPDATE( TrE_UpustTyp ) -- AND NOT UPDATE( TrE_Upust ) -- AND NOT UPDATE( TrE_UpustKnt ) -- AND NOT UPDATE( TrE_UpustKntTyp ) AND NOT UPDATE( TrE_KosztUslugi) AND NOT UPDATE (TrE_WyborDostaw) BEGIN set nocount on If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update (TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod) Or Update (TrE_Atr2_Wartosc) Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update (TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod) Or Update (TrE_Atr4_Wartosc) Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update (TrE_Atr5_Wartosc)) begin DECLARE @TrE_TrEIdAtr INT DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId FROM inserted ORDER BY TrE_TrNId, TrE_Lp OPEN Dodawane WHILE 1=1 BEGIN FETCH NEXT FROM Dodawane INTO @TrE_TrEIdAtr IF @@FETCH_STATUS <> 0 BREAK If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update (TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod) Or Update (TrE_Atr2_Wartosc) Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update (TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod) Or Update (TrE_Atr4_Wartosc) Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update (TrE_Atr5_Wartosc)) BEGIN DELETE FROM Cdn.TraElemAtr WHERE Tra_TrEId =@TrE_TrEIdAtr INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,1,TrE_Atr1_DeAId,TrE_Atr1_Kod,TrE_Atr1_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr1_DeAId>0 AND TrE_Atr1_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,2,TrE_Atr2_DeAId,TrE_Atr2_Kod,TrE_Atr2_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr2_DeAId>0 AND TrE_Atr2_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,3,TrE_Atr3_DeAId,TrE_Atr3_Kod,TrE_Atr3_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr3_DeAId>0 AND TrE_Atr3_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,4,TrE_Atr4_DeAId,TrE_Atr4_Kod,TrE_Atr4_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr4_DeAId>0 AND TrE_Atr4_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,5,TrE_Atr5_DeAId,TrE_Atr5_Kod,TrE_Atr5_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEIdAtr AND TrE_Atr5_DeAId>0 AND TrE_Atr5_DeAId is not NULL END END CLOSE Dodawane DEALLOCATE Dodawane end set nocount off GOTO KOMUNIKAT end DECLARE @MyIdentity INT, -- niezwykle wa¿ne dla ProdElem -- zmienne pomocnicze dla kursora @TrE_TrEId INT, @TrE_TrNId INT, @TrE_ZwrId INT, @TrE_Lp INT, @TrE_LpPow INT, @TrE_TypDokumentu SMALLINT, @TrE_Aktywny SMALLINT, @TrE_DataDok DATETIME, @TrE_DataOpe DATETIME, @TrE_TwrId INT, @TrE_TwrKod NVarchar(40), @TrE_TwrNazwa NVarchar(255), @TrE_Stawka DECIMAL(5,2), @TrE_CenaW DECIMAL(15,2), @TrE_CenaWWD DECIMAL(15,2), @TrE_CenaT DECIMAL(15,2), @TrE_Waluta NVarchar(3), @TrE_KursNumer INT, @TrE_KursL DECIMAL(15,4), @TrE_KursM DECIMAL(5,0), @TrE_Ilosc DECIMAL(15,4), @TrE_WartoscNetto DECIMAL(15,2), @TrE_WartoscBrutto DECIMAL(15,2), @TrE_WartoscZakupu DECIMAL(15,2), @TrE_JMPrzelicznikL DECIMAL(15,2), @TrE_JMPrzelicznikM DECIMAL( 7,0), @TrE_IloscJM DECIMAL(15,4), @TrE_PodmiotTyp INT, @TrE_PodId INT, @TrE_KosztUslugi DECIMAL(15,2), @TrE_TypNB TINYINT, @Tre_WyborDostaw TINYINT, @TrE_IFA24Mag INT, @Tre_MagId INT, @TrE_KosztUslugiZDok DECIMAL(15,2), -- zmienne z naglowka dla poprawnego zbudowania subelementu @TrN_TrNId INT, @TrN_FaId INT, @TrN_ZwrId INT, @TrN_Rodzaj INT, @TrN_Bufor SMALLINT, @TrN_MagZrdId INT, @TrN_MagDocId INT, @TrN_DataDok DATETIME, @TrN_DataWys DATETIME, @TrN_DataOpe DATETIME, @TrN_TrSTyp SMALLINT, @TrN_TypNB TINYINT, @TrN_PodmiotTyp INT, @TrN_PodId INT, @TrN_Centrala TINYINT, @TrN_Waluta NVarchar(3), @TrN_KursNumer INT, @TrN_KursL DECIMAL(15,4), @TrN_KursM DECIMAL(5,0), @WalutaSys NVarchar(3), @TrN_DekId INT, @TrN_NumerPelny NVarchar(31), -- zmienne dla dokumentu pierwotnego @TrN_TrNId_Old INT, @TrN_TrNId_PAdoFA_Old INT, @TrN_FaId_Old INT, @TrE_TrEId_Old INT, -- zmienne dla kreowanego subelementu @TrS_TrSId INT, @TrS_TrEId INT, @TrS_TrSIdDost INT, @TrS_ZwrId INT, @TrS_TwrId INT, @TrS_MagId INT, @TrS_Rodzaj INT, @TrS_Typ INT, @TrS_Metoda INT, @TrS_DataOpe DATETIME, @TrS_Ilosc DECIMAL(15,4), @TrS_Wartosc DECIMAL(15,2), @TrS_Cena DECIMAL(15,2), @TrS_Termin DATETIME, -- zmienne pomocnicze dla metody @QUAN INT, @Metoda INT, @ZawszeBraki INT, @ZezwalajMimoRez INT, @DataZamowienia INT, -- zmienne pomocnicze symulacji mar¿y @Marza_Sym_Ostatnia INT, @Marza_Sym_Srednia INT, -- Pomocnicza dla kursora @TrS_TrSId_K INT, @TrS_TrEId_K INT, -- zmienna dla aktualizacji ceny zakupu i marz @TwC_TwCId INT, @TwC_TwCNumer INT, @TwC_Wartosc DECIMAL(15,2), @TwC_Marza DECIMAL(15,2), -- potrzebna, zeby zbadaæ, czy nie jest za du¿a @TwC_MarzaWStu DECIMAL(15,2), -- potrzebna, zeby zbadaæ, czy nie jest za du¿a @TwC_Waluta NVarchar(3), @TwC_Typ SMALLINT, @Twr_Typ SMALLINT, @Twr_KosztUslugiTyp SMALLINT, @Twr_KosztUslugi DECIMAL(15,2), @Twr_Stawka DECIMAL(5,2), @Twr_KursL DECIMAL(15,4), @Twr_KursM DECIMAL(5,0), @Twr_KosztUslugiNew DECIMAL(15,2), @Twr_KosztUslugiWalNew DECIMAL(15,2), @Waluta NVarchar(3), @KursNumer INT, @KursL DECIMAL(15,4), @KursM DECIMAL(5,0), @CenaW_New DECIMAL(15,2), -- aktualizacja ceny zakupu przy zapisie MM-OL @Aktualizuj_CenaZ_MMOL TINYINT, -- dla liczenia wzoru na mar¿e cen sprzeda¿y, gdy aktualizacja jest na "Nie" @CenaZakupuNew DECIMAL(15,2), @CenaZakupuNewPLN DECIMAL(15,2), @CenaZakupuNewWal DECIMAL(15,2), -- dla dostaw @DostIloscRecordowReal int, @DostIloscRecordow int, @DostIloscRecordowDodanych int, @DostTrS_Ilosc decimal(15,4), @DostTrS_TrSId int, @ResztaWartosc DECIMAL(15,2), -- pomocnicze dla komunikatu @Data_Dost DATETIME, @Komunikat NVarchar(250) SET NOCOUNT ON -- ustawienie komunikatu SET @Komunikat = '' -- symbol waluty systemowej SET @WalutaSys = ( SELECT SUBSTRING(Fir_Wartosc,1,3) FROM cdn.Firma WHERE Fir_Numer = 3 ) -- elementy kasowane jesli wybordostawy = 2 to nie robimy nic DECLARE @TrE TABLE ( TrEId INT ) INSERT INTO @TrE ( TrEId ) SELECT TrE_TrEId FROM deleted IF EXISTS(SELECT TrS_WyborDostaw FROM cdn.TraSElem JOIN @TrE ON TrEId = TrS_TrEId WHERE ISNULL(TrS_WyborDostaw,0) = 2) RETURN DELETE cdn.TraSElem FROM cdn.TraSElem JOIN @TrE ON TrEId = TrS_TrEId -- WHERE TrS_TrEId IN ( SELECT TrE_TrEId FROM deleted ) -- = @TrE_TrEId IF NOT EXISTS ( SELECT * FROM inserted ) AND EXISTS ( SELECT * FROM deleted ) BEGIN DECLARE @TrE_TrEId3 INT, @TrE_TypDok3 INT DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId, TrE_TypDokumentu FROM deleted ORDER BY TrE_TrEId OPEN Dodawane WHILE 1=1 BEGIN FETCH NEXT FROM Dodawane INTO @TrE_TrEId3, @TrE_TypDok3 IF @@FETCH_STATUS <> 0 BREAK EXEC [CDN].[UstawRezerwacje] @TrE_TrEId3, 1,@TrE_TypDok3 DELETE CDN.TraElemRelacje WHERE TeR_ParentTyp=@TrE_TypDok3 and TeR_ParentId=@TrE_TrEId3 DELETE CDN.TraElemRelacje WHERE TeR_ChildTyp=@TrE_TypDok3 and TeR_ChildId=@TrE_TrEId3 END CLOSE Dodawane DEALLOCATE Dodawane DELETE CDN.TraSElem WHERE TRS_TrEIdWydania in(SELECT TrE_TrEId FROM deleted) END -- elementy kasowane trzeba skasowac atrybuty --IF EXISTS ( SELECT * FROM deleted ) -- BEGIN -- DELETE FROM Cdn.TraElemAtr WHERE TrA_TrEId in (SELECT TrE_TrEId FROM deleted) -- END -- Metoda rozliczania magazynu IF EXISTS ( SELECT * FROM inserted ) BEGIN SET @Metoda = ( SELECT TOP 1 ISNULL( Fir_Wartosc,1 ) FROM cdn.Firma WHERE Fir_Numer = 1352 ) SET @QUAN = ( SELECT TOP 1 ISNULL( Fir_Wartosc,0 ) FROM cdn.Firma WHERE Fir_Numer = 1485 ) END -- elementy dodawane DECLARE Dodawane CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId, TrE_TrNId, TrE_ZwrId, TrE_Lp, TrE_TypDokumentu, TrE_Aktywny, TrE_DataDok, TrE_DataOpe, TrE_TwrId, TrE_TwrKod, TrE_Stawka , TrE_CenaW, TrE_CenaWWD, TrE_CenaT, TrE_Waluta, TrE_KursNumer, TrE_KursL, TrE_KursM, TrE_Ilosc, TrE_WartoscNetto, TrE_WartoscBrutto, TrE_JMPrzelicznikL, TrE_JMPrzelicznikM, TrE_PodmiotTyp, TrE_PodId, TrE_LpPow, TrE_IloscJM, TrE_TypNB, Tre_WyborDostaw, Tre_MagID, TrE_IFA24Mag, TrE_KosztUslugi FROM inserted ORDER BY TrE_TrNId, TrE_Lp OPEN Dodawane WHILE 1=1 BEGIN FETCH NEXT FROM Dodawane INTO @TrE_TrEId, @TrE_TrNId, @TrE_ZwrId, @TrE_Lp, @TrE_TypDokumentu, @TrE_Aktywny, @TrE_DataDok, @TrE_DataOpe, @TrE_TwrId, @TrE_TwrKod, @TrE_Stawka, @TrE_CenaW, @TrE_CenaWWD, @TrE_CenaT, @TrE_Waluta, @TrE_KursNumer, @TrE_KursL, @TrE_KursM, @TrE_Ilosc, @TrE_WartoscNetto, @TrE_WartoscBrutto, @TrE_JMPrzelicznikL, @TrE_JMPrzelicznikM, @TrE_PodmiotTyp, @TrE_PodId, @TrE_LpPow, @TrE_IloscJM, @TrE_TypNB, @Tre_WyborDostaw, @TrE_MagId, @TrE_IFA24Mag , @TrE_KosztUslugiZDok IF @@FETCH_STATUS <> 0 BREAK -- Zmiana towaru musimy usun±æ relacje na elementach IF UPDATE( TrE_TwrId ) BEGIN IF NOT EXISTS (SELECT TrE_TwrId FROM deleted WHERE @TrE_TrEId = TrE_TrEId AND @TrE_TwrId = TrE_TwrId) BEGIN DECLARE @TrE_TrEIdWiNi1 INT, @TrE_TypWiNi1 INT DECLARE Kasowane CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId, TrE_TypDokumentu FROM deleted ORDER BY TrE_TrEId OPEN Kasowane WHILE 1=1 BEGIN FETCH NEXT FROM Kasowane INTO @TrE_TrEIdWiNi1, @TrE_TypWiNi1 IF @@FETCH_STATUS <> 0 BREAK DELETE CDN.TraElemRelacje WHERE TeR_ParentTyp=@TrE_TypWiNi1 and TeR_ParentId=@TrE_TrEIdWiNi1 DELETE CDN.TraElemRelacje WHERE TeR_ChildTyp=@TrE_TypWiNi1 and TeR_ChildId=@TrE_TrEIdWiNi1 END CLOSE Kasowane DEALLOCATE Kasowane END END -- Sprawdzenie zgodno¶ci przeliczników i ilo¶ci IF (( @TrE_JMPrzelicznikL = @TrE_JMPrzelicznikM AND @TrE_Ilosc <> @TrE_IloscJM) OR ( @TrE_JMPrzelicznikL <> @TrE_JMPrzelicznikM AND @TrE_Ilosc = @TrE_IloscJM)) AND (@TrE_Ilosc<>0 AND @TrE_IloscJM<>0) BEGIN SET @Komunikat = 'Zapis niemo¿liwy ! Dla towaru ' + @TrE_TwrKod + ' przeliczniki miar niezgodne z ilo¶ciami ! ' IF @Komunikat <> '' GOTO KOMUNIKAT END -- Przepisujemy z PA na FA czy wybor dostaw IF @TrE_TypDokumentu = 302 update FA set FA.TrE_WyborDostaw = PA.TrE_WyborDostaw from cdn.TraElem FA left join cdn.TraElem PA on FA.TrE_PATrEID = PA.TrE_TrEID where FA.TrE_TrEId = @TrE_TrEId AND FA.TrE_PATrEID > 0 -- Niezwykle istotne ze wzglednu na prawidlowy FK dla ProdElem po wykonaniu triggera SET @MyIdentity = @@IDENTITY -- Odczytanie z naglowka informacji potrzebnych do zbudowania subelementu i decyzji o sposobie aktualizowania ceny zakupu SELECT TOP 1 @TrN_TrNId = TrN_TrNId, @TrN_FaId = case when TrN_TypDokumentu= 313 or TrN_TypDokumentu= 314 then CDN.TraNagRelacjeFaId (TrN_TrNID,0,2 ) else CDN.TraNagRelacjeFaId (TrN_TrNID,0,0 ) end , --@TrN_FaId = TrN_FaId, @TrN_ZwrId = TrN_ZwrId, @TrN_Rodzaj = TrN_Rodzaj, @TrN_Bufor = TrN_Bufor, @TrN_MagZrdId = TrN_MagZrdId, @TrN_MagDocId = TrN_MagDocId, @TrN_DataDok = TrN_DataDok, @TrN_DataWys = TrN_DataWys, @TrN_DataOpe = TrN_DataOpe, @TrN_TrSTyp = ISNULL(TrN_TrSTyp,3), @TrN_TypNB = TrN_TypNB, @TrN_PodmiotTyp = TrN_PodmiotTyp, @TrN_PodId = TrN_PodId, @TrN_Centrala = TrN_Centrala, @TrN_Waluta = TrN_Waluta, @TrN_KursNumer = TrN_KursNumer, @TrN_KursL = TrN_KursL, @TrN_KursM = TrN_KursM FROM cdn.TraNag JOIN cdn.TraElem ON TrN_TrNId = TrE_TrNId AND TrE_TrEId = @TrE_TrEId -- ustalenie symbolu waluty, je¶li jest to waluta systemowa IF ( @TrN_Waluta = '' OR @TrN_Waluta = @WalutaSys ) AND @TrN_KursL=1 AND @TrN_KursM = 1 SET @TrN_Waluta = @WalutaSys -- Sprawdzenie zgodno¶ci podmiotu miêdzy nag³ówkiem i elementem (ZB) If IsNull(@TrN_PodmiotTyp, 0) <> IsNull(@TrE_PodmiotTyp, 0) Or IsNull(@TrN_PodId, 0) <> IsNull(@TrE_PodId, 0) Update CDN.TraElem Set TrE_PodmiotTyp = @TrN_PodmiotTyp, TrE_PodId = @TrN_PodId Where TrE_TrEId = @TrE_TrEId -- Ustalenie metody rozliczania magazynu dla dodawanego elementu IF @QUAN = 1 AND @TrE_DataOpe > ( SELECT ISNULL(MAX(TrN_DataOpe),0) FROM cdn.TraNag WHERE TrN_Rodzaj = 310005 ) SET @Metoda = 4 -- ustawiamy lppow dla wz jesli zmienia sie lppow na proformie IF (Update (TrE_LpPow) and @TrN_Rodzaj in (320000,320009)) BEGIN UPDATE a SET a.TrE_Lppow = @TrE_Lppow FROM Cdn.TraElem a join deleted d on d.TrE_Treid = @TrE_TrEId and a.TrE_lppow = d.TrE_lppow and a.TrE_TwrId = d.TrE_TwrId JOIN CDN.TraNagRelacje ON d.TrE_TrnId = TrR_FaId --JOIN Cdn.TraNag c ON d.TrE_TrnId = c.TrN_RelTrnId WHERE TrR_FaTyp = 306 AND a.TrE_TrnId = TrR_TrNId --WHERE c.TrN_TypDokumentu = 306 and a.TrE_TrnId = c.TrN_TrNId END If (Update (TrE_Atr1_DeAId) Or Update (TrE_Atr1_Kod) Or Update (TrE_Atr1_Wartosc) Or Update (TrE_Atr2_DeAId) Or Update (TrE_Atr2_Kod) Or Update (TrE_Atr2_Wartosc) Or Update (TrE_Atr3_DeAId) Or Update (TrE_Atr3_Kod) Or Update (TrE_Atr3_Wartosc) Or Update (TrE_Atr4_DeAId) Or Update (TrE_Atr4_Kod) Or Update (TrE_Atr4_Wartosc) Or Update (TrE_Atr5_DeAId) Or Update (TrE_Atr5_Kod) Or Update (TrE_Atr5_Wartosc)) BEGIN DELETE FROM Cdn.TraElemAtr WHERE Tra_TrEId =@TrE_TrEId INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,1,TrE_Atr1_DeAId,TrE_Atr1_Kod,TrE_Atr1_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr1_DeAId>0 AND TrE_Atr1_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,2,TrE_Atr2_DeAId,TrE_Atr2_Kod,TrE_Atr2_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr2_DeAId>0 AND TrE_Atr2_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,3,TrE_Atr3_DeAId,TrE_Atr3_Kod,TrE_Atr3_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr3_DeAId>0 AND TrE_Atr3_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,4,TrE_Atr4_DeAId,TrE_Atr4_Kod,TrE_Atr4_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr4_DeAId>0 AND TrE_Atr4_DeAId is not NULL INSERT INTO Cdn.TraElemAtr SELECT Tre_TreId,5,TrE_Atr5_DeAId,TrE_Atr5_Kod,TrE_Atr5_Wartosc FROM Cdn.TraElem WHERE Tre_TreId=@TrE_TrEId AND TrE_Atr5_DeAId>0 AND TrE_Atr5_DeAId is not NULL END -- Kreowanie subelementów jest podejmowane tylko w uzasadnionych przypadkach -- Anulowane IF @TrE_Aktywny = 0 BEGIN DELETE FROM CDN.TrasElemDost WHERE TsD_TrEId = @TrE_TrEID -- Kasujemy rezerwacje na subelementach dla RO/ZD i ich relacje exec [CDN].[UstawRezerwacje] @TrE_TrEId, 1, @TrE_TypDokumentu DELETE CDN.TraSElem WHERE TRS_TrEIdWydania = @TrE_TrEId DELETE CDN.TraElemRelacje WHERE TeR_ParentTyp=@TrE_TypDokumentu and TeR_ParentId = @TrE_TrEId DELETE CDN.TraElemRelacje WHERE TeR_ChildTyp=@TrE_TypDokumentu and TeR_ChildId = @TrE_TrEId IF @TrN_Rodzaj IN (302006,302004) begin update WZ set WZ.TrE_LpPow = FA.TrE_LpPow from cdn.traelem WZ left join cdn.tranagrelacje on WZ.TrE_TrNId = TrR_TrNId and TrR_FaTyp = 305 and TrR_TrNTyp= 306 left join cdn.TraElem PA on PA.TrE_TrNId = TrR_FaId left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID where FA.TrE_TrEId = @TrE_TrEId AND WZ.TrE_Lppow = PA.TrE_LpPow and FA.TrE_PATrEID > 0 update PA set PA.TrE_LpPow = FA.TrE_LpPow from cdn.TraElem PA left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID where FA.TrE_TrEId = @TrE_TrEId AND FA.TrE_PATrEID > 0 end --PA z Pobraniem- >FA -> Korekta nie zwraca na magazyn IF @TrN_Rodzaj IN (302006) AND @TrN_Bufor = 0 begin --update TraS set trs_treid = @TrE_TrEId from cdn.TraSElem TraS join cdn.TraElem on tre_treid = trs_treid where TrE_TrNId = @TrN_FaId and TrE_LpPow = @tre_lppow and TrE_TypDokumentu != 304 --us³uga z³ozona RW nie przepinamy. update TraS set trs_treid = FA.TrE_TrEId from cdn.TraSElem TraS left join cdn.TraElem PA on PA.TrE_TrEID = TraS.TrS_TrEId left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID where FA.TrE_TrEId = @TrE_TrEId and PA.TrE_TypDokumentu != 304 --us³uga z³ozona RW nie przepinamy. update TraS set tsd_treid = FA.TrE_TrEId from cdn.TraSElemDost TraS left join cdn.TraElem PA on PA.TrE_TrEID = TraS.Tsd_TrEId left join cdn.TraElem FA on FA.TrE_PATrEID = PA.TrE_TrEID where FA.TrE_TrEId = @TrE_TrEId and PA.TrE_TypDokumentu != 304 --us³uga z³ozona RW nie przepinamy. end CONTINUE END /* -- FZ z PZ, FZKI z PZKI akceptowane trwale lub w buforze IF @TrN_Rodzaj IN ( 301004, 301005 ) AND @TrN_Bufor IN ( 0, 1 ) begin -- Sprawdzenie, czy nale¿y aktualizowaæ cenê zakupu na MM-OL -- Rodzaj mar¿y: 0 = "od stu", 1 = "w stu" IF @TrN_Rodzaj = 301004 AND @TrE_Ilosc > 0 AND @TrN_Bufor IN ( 0 ) BEGIN SELECT @Twr_Typ = Twr_Typ, @Twr_KosztUslugiTyp = Twr_KosztUslugiTyp, @Twr_KosztUslugi = Twr_KosztUslugi, @Twr_Stawka = Twr_Stawka, @Twr_KursL = Twr_KursL, @Twr_KursM = Twr_KursM FROM cdn.Towary WHERE Twr_TwrId = @TrE_TwrId IF @TrN_Waluta = @WalutaSys BEGIN SET @Waluta = @TrE_Waluta SET @KursNumer = @TrE_KursNumer SET @KursL = @TrE_KursL SET @KursM = @TrE_KursM SET @CenaW_New = @TrE_CenaW END -- parametry waluty z nag³ówka ELSE BEGIN SET @Waluta = @TrN_Waluta SET @KursNumer = @TrN_KursNumer SET @KursL = @TrN_KursL SET @KursM = @TrN_KursM SET @CenaW_New = @TrE_CenaWWD END -- parametry kursu waluty dla towaru lub us³ugi z typem kwotowym IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 ) UPDATE cdn.Towary SET Twr_Waluta = @Waluta, Twr_KursNumer = @KursNumer, Twr_KursL = @KursL, Twr_KursM = @KursM WHERE Twr_TwrId = @TrE_TwrId -- koszt us³ugi ( us³uga i typ kosztu kwotowy ) IF @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 BEGIN -- od netto IF @TrE_TypNB = 1 BEGIN SET @Twr_KosztUslugiNew = @TrE_CenaT SET @Twr_KosztUslugiWalNew = @CenaW_New END -- od brutto ELSE IF @TrE_TypNB = 2 BEGIN SET @Twr_KosztUslugiNew = @TrE_CenaT - ROUND ( @TrE_CenaT * @TrE_Stawka / (100 + @TrE_Stawka) , 2 ) SET @Twr_KosztUslugiWalNew = @CenaW_New - ROUND ( @CenaW_New * @TrE_Stawka / (100 + @TrE_Stawka) , 2 ) END UPDATE cdn.Towary SET Twr_KosztUslugi = @Twr_KosztUslugiNew, Twr_KosztUslugiWal = @Twr_KosztUslugiWalNew WHERE Twr_TwrId = @TrE_TwrId END -- Kursor po cenach dla towaru lub us³ugi z kosztem kwotowym: -- aktualizacja ceny zakupu (TwC_TwCNumer = 1) -- aktualizacja mar¿y dla cen sprzeda¿y z aktualizacj± ustawin± na "Nie" ( TwC_TwCNumer <> 1 AND TwC_Aktualizacja = 0 ) IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 ) BEGIN DECLARE TwrCeny CURSOR LOCAL FAST_FORWARD FOR SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta, TwC_Wartosc, TwC_Typ FROM cdn.TwrCeny WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer = 1 UNION ALL SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta, TwC_Wartosc, TwC_Typ FROM cdn.TwrCeny WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer <> 1 AND TwC_Aktualizacja = 0 OPEN TwrCeny WHILE 1=1 BEGIN FETCH NEXT FROM TwrCeny INTO @TwC_TwCNumer, @TwC_TwCId, @TwC_Waluta, @TwC_Wartosc, @TwC_Typ IF @@FETCH_STATUS <> 0 BREAK -- aktualizacja ceny zakupu IF @TwC_TwCNumer = 1 BEGIN -- od netto IF @TrE_TypNB = 1 IF @TwC_Typ = 1 SET @TwC_Wartosc = @CenaW_New * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) ELSE SET @TwC_Wartosc = ( @CenaW_New + ROUND( @CenaW_New * @TrE_Stawka / 100, 2 ) ) * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) -- od brutto ELSE IF @TrE_TypNB = 2 IF @TwC_Typ = 1 SET @TwC_Wartosc = ( @CenaW_New - ROUND( @CenaW_New * @TrE_Stawka / ( 100+@TrE_Stawka), 2 ) ) * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) ELSE SET @TwC_Wartosc = @CenaW_New * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) UPDATE cdn.TwrCeny SET TwC_Wartosc = @TwC_Wartosc, TwC_Waluta = @Waluta WHERE TwC_TwCId = @TwC_TwCId SET @CenaZakupuNew = @TwC_Wartosc SET @CenaZakupuNewWal = @CenaZakupuNew SET @CenaZakupuNewPLN = @CenaZakupuNew * @KursL/@KursM END -- @TwC_TWCNumer = 1 -- aktualizacja mar¿ dla cen sprzeda¿y -- tylko wtedy, gdy waluta zakupu i sprzeda¿y s± równe lub gdy waluta sprzedazy jest systemowa ELSE IF @TwC_TwCNumer <> 1 AND ( @TwC_Waluta = @Waluta OR @TwC_Waluta = @WalutaSys ) BEGIN -- cena sprzeda¿y brutto - obliczamy jej reprezentacjê netto IF @TwC_Typ = 2 SET @TwC_Wartosc = @TwC_Wartosc - ROUND( @TwC_Wartosc * @Twr_Stawka / ( 100 + @Twr_Stawka), 2 ) -- mar¿a "od stu" i "w stu" IF @CenaZakupuNew <> 0 BEGIN -- je¶li waluta zakupu i sprzeda¿y s± równe, to bierzemy cenê zakupu w walucie dokumentu -- w przeciwnym przypadku, gdy cena sprzeda¿y jest w walucie systemowej, to bierzemy cenê zakupu w walucie systemowej IF @TwC_Waluta = @WalutaSys AND @Waluta <> @WalutaSys SET @CenaZakupuNew = @CenaZakupuNewPLN ELSE SET @CenaZakupuNew = @CenaZakupuNewWal SET @TwC_Marza = ( ( @TwC_Wartosc / @CenaZakupuNew ) - 1 ) * 100 IF ( @TwC_Marza = -100 ) OR ( @CenaZakupuNew = @TwC_Wartosc ) SET @TwC_MarzaWStu = 100 ELSE IF @TwC_Wartosc = 0 SET @TwC_MarzaWStu = -100 ELSE SET @TwC_MarzaWStu = 100 * @TwC_Marza / ( 100 + @TwC_Marza ) IF @TwC_Marza > 99999.99 SET @TwC_Marza = 99999.99 IF @TwC_MarzaWStu > 99999.99 SET @TwC_MarzaWStu = 99999.99 IF @TwC_Marza < - 99999.99 SET @TwC_Marza = -99999.99 IF @TwC_MarzaWStu < - 99999.99 SET @TwC_MarzaWStu = -99999.99 END IF @TwC_Marza IS NOT NULL AND @TwC_MarzaWStu IS NOT NULL UPDATE cdn.TwrCeny SET TwC_Marza = @TwC_Marza, TwC_MarzaWStu = @TwC_MarzaWStu WHERE TwC_TwCId = @TwC_TwCId END END -- kursor TwrCeny CLOSE TwrCeny DEALLOCATE TwrCeny END -- Towar lub us³uga z kosztem kwotowym END -- aktualizacji ostatniej ceny zakupu CONTINUE end */ --dla 149306 mimo ze FAWZ to trzeba ustawiæ rezerwacjê IF UPDATE( TrE_Ilosc ) and @TrN_Rodzaj = 302004 and exists( SELECT Twr_Typ FROM cdn.Towary WHERE Twr_TwrId = @TrE_TwrId and Twr_Typ = 0) EXEC [CDN].[UstawRezerwacje] @TrE_TrEId,0,@TrE_TypDokumentu -- FA z WZ, PA z WZ, FAKI z WZKI, PAKI z WZ, FZKI z PZ, AI, AI z PW/RW, RO z PA, RO z FA, RO z WZ akceptowane trwale, PF z FA, PF z RO IF @TrN_Rodzaj IN ( 302004, 305004, 302005, 305005, 301005, 311000, 311001, 308008, 308009, 308010, 320008, 320009, 320000 ) AND @TrN_Bufor IN ( 0 ) and @TrE_TypDokumentu != 304 CONTINUE -- ZD konwertowane do PZ/FZ IF @TrN_Rodzaj IN ( /*309000,*/ 309008, 309009 ) --AND @TrN_FaId IS NOT NULL CONTINUE -- FZKW, PZKW w buforze IF @TrN_Rodzaj IN ( 301002, 307002, 310002, 301006, 307006,303002,307003, 307011 ) AND @TrN_Bufor IN ( 1 ) CONTINUE -- RO, ZD z pzeznaczeniem do centrali XL IF @TrN_Rodzaj IN ( 308000, 309000 ) AND @TrN_Centrala IN ( 1 ) CONTINUE -- FA z PA z buforze IF @TrN_Rodzaj IN (302006) AND @TrN_Bufor = 1 CONTINUE -- PWP - pierwszy przebieg (TrE_Aktywny = 1 - nie liczymy zasobów, najpierw RWS musi wyliczyæ koszt) IF @TrE_TypDokumentu IN (317) AND @TrE_Aktywny = 1 CONTINUE -- PWP - drugi przebieg (TrE_Aktywny = 2 - liczymy zsoby, PdE_Wartosc s± ju¿ policzone) IF @TrE_TypDokumentu IN (317) AND @TrE_Aktywny = 2 BEGIN UPDATE cdn.TraElem SET TrE_Aktywny = 1 WHERE TrE_TrEId = @TrE_TrEId SET @TrE_Aktywny = 1 END -- przeksztalcenia ZD do PZ, RO do FA/PA/WZ, PA do FA, PF do FS, PF do RO, ZD do FZ -- skasowanie subelementów zamowieniowych/rezerwacyjnych z dokumentu pierwotnego /* IF @TrN_Rodzaj IN ( 307010, 302008, 305008, 306008, 306010, 302006, 302009, 308011, 301011 ) BEGIN SET @TrN_FaId_Old = ( SELECT TOP 1 TrN_TrNId FROM cdn.TraNag WHERE TrN_TrNId = @TrE_TrNId ) -- tablica nag³ówków do przegl±dniêcia i skasowania subelemntów DECLARE @TrN_TrNId_Prw TABLE (TrN_TrNId INT) INSERT INTO @TrN_TrNId_Prw SELECT TrN_TrNId FROM cdn.TraNag JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId WHERE TrR_FaId = @TrN_FaId_Old DECLARE E CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId FROM cdn.TraElem WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM @TrN_TrNId_Prw ) -- AND TrE_TwrId = @TrE_TwrId OPEN E WHILE 1=1 BEGIN FETCH NEXT FROM E INTO @TrE_TrEId_Old IF @@FETCH_STATUS <> 0 BREAK -- skasowanie subelementów z dokumentu pierwotnego DELETE FROM cdn.TraSElem WHERE TrS_TrEId = @TrE_TrEId_Old END CLOSE E DEALLOCATE E END*/ IF @TrN_Rodzaj IN ( 306010, 302006, 302009, 308011 ) BEGIN DELETE FROM cdn.TraSElem WHERE TrS_TrEId in (SELECT TrE_TrEId FROM cdn.TraElem WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM cdn.TraNag JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId WHERE TrR_FaId = @TrE_TrNId and trn_typdokumentu = 320 and trn_trstyp = 3) ) /* SET @TrN_FaId_Old = ( SELECT TOP 1 TrN_TrNId FROM cdn.TraNag WHERE TrN_TrNId = @TrE_TrNId ) -- tablica nag³ówków do przegl±dniêcia i skasowania subelemntów DECLARE @TrN_TrNId_Prw TABLE (TrN_TrNId INT) INSERT INTO @TrN_TrNId_Prw SELECT TrN_TrNId FROM cdn.TraNag JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId WHERE TrR_FaId = @TrN_FaId_Old DECLARE E CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId FROM cdn.TraElem WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM @TrN_TrNId_Prw ) -- AND TrE_TwrId = @TrE_TwrId OPEN E WHILE 1=1 BEGIN FETCH NEXT FROM E INTO @TrE_TrEId_Old IF @@FETCH_STATUS <> 0 BREAK -- skasowanie subelementów z dokumentu pierwotnego DELETE FROM cdn.TraSElem WHERE TrS_TrEId = @TrE_TrEId_Old END CLOSE E DEALLOCATE E*/ END /*IF @TrN_Rodzaj IN ( 307010, 302008, 305008, 306008, 301011 ) BEGIN SET @TrN_FaId_Old = ( SELECT TOP 1 TrN_TrNId FROM cdn.TraNag WHERE TrN_TrNId = @TrE_TrNId ) -- tablica nag³ówków do przegl±dniêcia i skasowania subelemntów DECLARE @TrN_TrNId_Prw1 TABLE (TrN_TrNId INT) INSERT INTO @TrN_TrNId_Prw1 SELECT TrN_TrNId FROM cdn.TraNag JOIN CDN.TraNagRelacje ON TrN_TrNId = TrR_TrNId WHERE TrR_FaId = @TrN_FaId_Old DECLARE E CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId FROM cdn.TraElem WHERE TrE_TrNId IN ( SELECT TrN_TrNId FROM @TrN_TrNId_Prw1 ) -- AND TrE_TwrId = @TrE_TwrId OPEN E WHILE 1=1 BEGIN FETCH NEXT FROM E INTO @TrE_TrEId_Old IF @@FETCH_STATUS <> 0 BREAK -- skasowanie subelementów z dokumentu pierwotnego --DELETE FROM cdn.TraSElem WHERE TrS_TrEId = @TrE_TrEId_Old END CLOSE E DEALLOCATE E END*/ -- przed trwalym zapisem skasowanie subelemntów z dokumentu konwertowanego -- nie mo¿na przepinaæ zasobów, poniewa¿ na dokumencie pierwotnym mog± byæ us³ugi, które zaburzaja LP -- WZ z FA, WZ z PA, WZKI z FA, WZKI z PA, PZ z FZ, PZKI z FZKI, WZ z RO -- IF @TrN_Rodzaj IN ( /*306004, 306006,*/ 306005, 306007, /*307004,*/ 307005 /*, 306008*/ ) EXEC CDN.KasujTraSElemZDokZrodlowych @TrN_TrNId, @TrN_Rodzaj, @TrN_FaId /* -- ZG 9.0 BEGIN SET @TrN_TrNId_Old = ( SELECT TrN_FaId FROM cdn.TraNag WHERE TrN_TrNId = @TrE_TrNId ) -- przypadek szczególny - FA z PA nie przechodzi przez 302006, tylko od razu dostaje 302004 SET @TrN_TrNId_PAdoFA_Old = ( SELECT ISNULL(TrN_FaId,0) FROM cdn.TraNag WHERE TrN_TrNId = @TrN_TrNId_Old AND TrN_Rodzaj = 302004 ) -- ooptymalizacja 8.5 DECLARE @TrN TABLE ( TrNId INT ) INSERT INTO @TrN ( TrNId ) SELECT @TrN_TrNId_Old INSERT INTO @TrN ( TrNId ) SELECT @TrN_TrNId_PAdoFA_Old INSERT INTO @TrN ( TrNId ) SELECT TrN_TrNId FROM cdn.TraNag WHERE TrN_ZwrId = @TrN_TrNId_Old DECLARE E CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId FROM cdn.TraElem JOIN @TrN ON TrNId = TrE_TrNId AND TrE_TwrId = @TrE_TwrId OPEN E WHILE 1=1 BEGIN FETCH NEXT FROM E INTO @TrE_TrEId_Old IF @@FETCH_STATUS <> 0 BREAK -- subelementy ze starego elemntu sa kasowane -- najpierw korekcyjne PZKW, które wskazuj± na kasowane subelemnty DECLARE SKR CURSOR LOCAL FAST_FORWARD FOR SELECT K.TrS_TrSId, K.TrS_TrEId, TrN_DekId, TrN_NumerPelny FROM cdn.TraSElem P LEFT OUTER JOIN cdn.TraSElem K WITH ( INDEX = TrSZwrot) ON P.TrS_TrSId = K.TrS_ZwrId JOIN cdn.TraElem ON TrE_TrEId = K.TrS_TrEId JOIN cdn.TraNag ON TrN_TrNId = TrE_TrNId WHERE K.TrS_Rodzaj = 306072 AND P.TrS_TrEId = @TrE_TrEId_Old OPEN SKR WHILE 1=1 BEGIN FETCH NEXT FROM SKR INTO @TrS_TrSId_K, @TrS_TrEId_K, @TrN_DekId, @TrN_NumerPelny IF @@FETCH_STATUS <> 0 BREAK IF @TrN_DekId IS NOT NULL BEGIN SET @Komunikat = 'Zapis niemo¿liwy ! Dokument korekcyjny WZKK (' + @TrN_NumerPelny + '), na którym musi zostaæ zmodyfikowany koszt jest ju¿ zaksiêgowany ! ' IF @Komunikat <> '' GOTO KOMUNIKAT END DELETE FROM cdn.TraSElem WHERE TrS_TrSId = @TrS_TrSId_K EXEC CDN.sp_AktualizujWZKK @TrS_TrEId_K END CLOSE SKR DEALLOCATE SKR -- teraz w³a¶ciwy subelemnt z pierwotnego DELETE FROM cdn.TraSElem WHERE TrS_TrEId = @TrE_TrEId_Old END CLOSE E DEALLOCATE E END */ -- zainicjowanie typu SET @TrS_Typ = -1 -- dokumenty w buforze IF @TrN_Bufor = 1 BEGIN -- FZ, PW, PZ z ZD, BO, PWP, ZD, PW z AI, FZ z ZD IF @TrN_Rodzaj IN ( 301000, 303000, 307000, 307010, 310000, 317000, 309000, 303010, 312010, 301011, 301050, 313000, 313004 ) SET @TrS_Typ = 4 -- FA, FA z RO, PA, PA z RO IF @TrN_Rodzaj IN ( 302000, 302008, 305000, 305008, 318000, 302009, 320000 ) SET @TrS_Typ = @TrN_TrSTyp IF @TrN_Rodzaj IN ( 302004,305004 ) and @TrE_TypDokumentu = 304 SET @TrS_Typ = @TrN_TrSTyp -- FA z WZ dla elementów dodanych IF @TrN_Rodzaj IN ( 302004 ) AND @TrE_LpPow < 0 SET @TrS_Typ = @TrN_TrSTyp -- RO, RO z PF IF @TrN_Rodzaj IN ( 308000, 308011 ) SET @TrS_Typ = 3 -- RW, WZ, WZ z FA, WZ z PA, MM, RW z AI IF @TrN_Rodzaj IN ( 304000, 304006, 304004,304008, 306000, 306004, 306006, 312000,312008, 304010, 306008, 306010, 312100, 314000, 314004, 314006 ) SET @TrS_Typ = 2 -- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI, RWKI, WZKI w buforze IF @TrN_Rodzaj IN ( 302001, 302005, 305001, 305005, 304001, 306001, 314001, 318001 ) AND @TrN_Bufor IN ( 1 ) SET @TrS_Typ = 4 -- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI, RWKI, WZKI w buforze dla ilo¶ci dodatnich IF @TrN_Rodzaj IN ( 302001, 302005, 305001, 305005, 318001 ) AND @TrN_Bufor IN ( 1 ) AND @TrE_Ilosc > 0 BEGIN DECLARE @TrN_TrSTyp_Pierw INT -- dla nie RWSK z dokumentu pierwotnego IF @TrN_Rodzaj <> 318001 SELECT TOP 1 @TrN_TrSTyp_Pierw = ISNULL(MAX(TrN_TrSTyp),0) FROM cdn.TraNag JOIN cdn.TraElem ON TrE_TrNId = TrN_TrNId WHERE TrE_TrEId = @TrE_ZwrId -- dla RWSK ze skojarzonego dokumentu PWPK ELSE SELECT TOP 1 @TrN_TrSTyp_Pierw = ISNULL(MAX(PWP_N.TrN_TrSTyp),0) FROM cdn.TraNag RWS_N JOIN cdn.TraElem RWS_E ON RWS_E.TrE_TrNId = RWS_N.TrN_TrNId JOIN cdn.TraNag PWP_N ON PWP_N.TrN_TrNId = RWS_N.TrN_FaId WHERE RWS_E.TrE_TrEId = @TrE_TrEId -- je¶li na pierwotnym nie jest ustawione "pobranie", to z pierwotnego IF @TrN_TrSTyp_Pierw = 2 SET @TrS_Typ = @TrN_TrSTyp_Pierw ELSE SET @TrS_Typ = 3 END -- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI w buforze dla ilo¶ci dodatnich IF @TrN_Rodzaj IN ( 306001, 314001 ) AND @TrN_Bufor IN ( 1 ) AND @TrE_Ilosc > 0 SET @TrS_Typ = 2 -- FZKI, FZKI z PZKI, PWKI, PZKI, BOMKI w buforze IF (@TrN_Rodzaj IN ( 301001, 301005, 303001, 307001, 310001, 313001, 317001 ) AND @TrN_Bufor IN ( 1 )) or (@TrN_Rodzaj = 301051 AND @TrN_Bufor = 1 and not exists (select * from cdn.TraNag where TrN_FaId = @TrN_TrNId and TrN_Rodzaj = 307005)) SET @TrS_Typ = 3 -- FZKI, FZKI z PZKI, PWKI, PZKI, BOMKI w buforze dla ilo¶ci dodatnich IF (@TrN_Rodzaj IN ( 301001, 301005, 303001, 307001, 310001, 313001, 317001) AND @TrN_Bufor IN ( 1 ) AND @TrE_Ilosc > 0) or (@TrN_Rodzaj = 301051 AND @TrN_Bufor = 1 AND @TrE_Ilosc > 0 and not exists (select * from cdn.TraNag where TrN_FaId = @TrN_TrNId and TrN_Rodzaj = 307005)) SET @TrS_Typ = 4 END -- dokumenty zaakceptowane trwale ELSE IF @TrN_Bufor = 0 BEGIN -- FZ, FZKI, FZKI z PZKI, ZD, FZ z ZD IF @TrN_Rodzaj IN ( 301000, 301001, 301005, 309000, 301011, 301050) or (@TrN_Rodzaj = 301051 and not exists (select * from cdn.TraNag where TrN_FaId = @TrN_TrNId and TrN_Rodzaj = 307005)) SET @TrS_Typ = 4 -- PW, PWKI, PZ, PZ z FZ, PZKI, PZKI z FZKI, PZKW, PZKW z FZKW, PZ z ZD, BO, PWP, PW z AI, BOMKI, BOMKW IF @TrN_Rodzaj IN ( 303000, 303001, 303002, 307000, 307004, 307001, 307005, 307002, 307003, 307011, 307006, 307010, 310000, 317000, 303010, 310001, 310002, 312010, 313000, 313001, 313002, 313004, 317001 ) SET @TrS_Typ = 1 -- FAKI, PAKI - subelement o typie z dokumentu pierwotnego IF @TrN_Rodzaj IN ( 302001, 305001 ) SET @TrS_Typ = ISNULL( ( SELECT MAX(TrS_Typ) FROM cdn.TraElem JOIN cdn.TraSElem ON TrS_TrEId = TrE_TrEId WHERE TrE_TrEId = @TrE_ZwrId ), 0 ) -- FA, FA z WZ, PA, FA z RO, PA z RO, PF, PF z FA, PF z RO, FA z PF IF @TrN_Rodzaj IN ( 302000, 302006, 305000, 302008, 305008, 320000, 320008, 320009, 302009 ) SET @TrS_Typ = @TrN_TrSTyp IF @TrN_Rodzaj IN ( 302004,305004 ) and @TrE_TypDokumentu = 304 SET @TrS_Typ = @TrN_TrSTyp -- FA z WZ dla elementów dodanych IF @TrN_Rodzaj IN ( 302004 ) AND @TrE_LpPow < 0 SET @TrS_Typ = @TrN_TrSTyp -- RO, FA z RO, PA z RO IF @TrN_Rodzaj IN ( 308000, 308011 ) SET @TrS_Typ = 3 -- RW, RWKI, WZ, WZKI, WZ z FA, WZ z PA, WZKI, WZKI z FAKI, WZKI z PAKI, MM, RWS, RW z AI IF @TrN_Rodzaj IN ( 304000, 304006, 304004,304008, 304001, 306000, 306004, 306006, 306001, 306005, 306007, 312000,312008, 318000, 304010, 306008, 306010, 312100, 314000, 314001, 314004, 314006, 318001 ) SET @TrS_Typ = 2 END -- Jesli nie ustawiono prawidlowego typu - nie kreujemy subelementow IF @TrS_Typ NOT IN ( 1, 2, 3, 4 ) CONTINUE -- Update warto¶ci i cen elementu dla PWP - ( musi byæ przed ustawieniem subelementu - jest ju¿ RWS ) IF @TrE_TypDokumentu = 317 BEGIN SET @TrE_WartoscZakupu = ( SELECT ISNULL(SUM(PdE_WartoscZakupu),0) FROM cdn.ProdElem WHERE PdE_TrEId = @TrE_TrEId ) UPDATE cdn.TraElem SET TrE_WartoscNetto = @TrE_WartoscZakupu, TrE_WartoscBrutto = ROUND(@TrE_WartoscZakupu * ( ( 100 + TrE_Stawka ) / 100 ), 2 ), TrE_WartoscNettoWal = @TrE_WartoscZakupu, TrE_WartoscBruttoWal = ROUND(@TrE_WartoscZakupu * ( ( 100 + TrE_Stawka ) / 100 ), 2 ), TrE_Rabat = 0, TrE_CenaT = CASE TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_IloscJM END, TrE_CenaW = CASE TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_IloscJM END , TrE_Cena0 = CASE TrE_Ilosc WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_Ilosc END , TrE_CenaWWD = CASE TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_IloscJM END, TrE_Cena0WD = CASE TrE_Ilosc WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_Ilosc END, TrE_Waluta = @WalutaSys, TrE_KursNumer = 0, TrE_KursL = 1, TrE_KursM = 1 WHERE TrE_TrEId = @TrE_TrEId -- Wczytanie poprawionych warto¶ci SELECT @TrE_WartoscNetto = @TrE_WartoscZakupu, @TrE_CenaT = CASE @TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / @TrE_IloscJM END, @TrE_CenaW = CASE @TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / @TrE_IloscJM END, @TrE_CenaWWD = CASE @TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / @TrE_IloscJM END, @TrE_Waluta = @WalutaSys, @TrE_KursNumer = 0, @TrE_KursL = 1, @TrE_KursM = 1 END -- wartosci pozostalych pol SET @TrS_TrSId = ( SELECT ISNULL(MAX(TrS_TrSId),0) FROM cdn.TraSElem ) + 1 SET @TrS_TrEId = @TrE_TrEId SET @TrS_TrSIdDost = NULL SET @TrS_ZwrId = NULL SET @TrS_TwrId = @TrE_TwrId SET @TrS_MagId = CASE WHEN @TrN_Rodzaj <> 312010 THEN CASE WHEN @TrE_MagId is null THEN @TrN_MagZrdId ELSE @TrE_MagId END ELSE @TrN_MagDocId END SET @TrS_Rodzaj = @TrN_Rodzaj SET @TrS_Metoda = @Metoda SET @TrS_DataOpe = @TrE_DataOpe SET @TrS_Ilosc = @TrE_Ilosc SET @TrS_Wartosc = 0 SET @TrS_Cena = @TrE_CenaT SET @TrS_Termin = NULL -- dostawy IF @TrS_Typ = 1 BEGIN SET @TrS_Wartosc = @TrE_WartoscNetto SET @TrS_Cena = case when @TrE_Ilosc <> 0 THEN @TrE_WartoscNetto / @TrE_Ilosc ELSE @TrS_Wartosc END END -- Zwyk³e dostawy PZ, PZ z FZ, PW, BO, PZ z ZD, PWP, PW z AI, MM-OL IF @TrS_Rodzaj IN ( 307000, 307004, 303000, 310000, 307010, 317000, 303010, 312010, 313000, 313004 ) BEGIN -- TrS_TrSIdDost i TrS_ZwrId SET @TrS_TrSIdDost = @TrS_TrSId SET @TrS_ZwrId = NULL END -- Korekty ilo¶ciowe dostaw PZKI, PZKI z FZKI, PWKI, PZKW, BOMKI, BOMKW IF @TrS_Rodzaj IN ( 307001, 307005, 303001, 303002, 307002, 310001, 310002, 307003, 307011, 307006, 313001, 313002, 317001 ) BEGIN SELECT @TrS_TrSIdDost = TrS_TrSIdDost, @TrS_Cena = TrS_Cena, @TrS_ZwrId = TrS_TrSId FROM cdn.TraSElem WHERE TrS_TrSId = ( -- TrS_TrSId pierwotnej dostawy SELECT TOP 1 A.TrS_TrSId FROM cdn.TraSElem A JOIN cdn.TraElem B ON B.TrE_TrEId = A.TrS_TrEId WHERE B.TrE_TrEId = @TrE_ZwrId ) END -- Dostawa i QUAN - zerowa cena i wartosc subelementu IF @TrS_Typ = 1 AND @TrS_Metoda = 4 BEGIN SET @TrS_Wartosc = 0 SET @TrS_Cena = 0 END -- daty dla rezerwacji i zamowien -- Rezerwacja - bufor IF @TrN_Rodzaj IN ( 308000, 308011 ) -- AND @TrN_Bufor = 1 BEGIN SET @TrS_Termin = @TrN_DataWys END /* -- Rezerwacja - zapis trwaly (rezerwacja bezterminowa) IF @TrN_Rodzaj IN ( 308000 ) AND @TrN_Bufor = 0 SET @TrS_DataOpe = NULL --@TrE_DataDok */ -- Zamówienie - bufor i zapis trwaly IF @TrN_Rodzaj IN ( 309000 ) BEGIN SELECT @DataZamowienia = ISNULL(MAX(Fir_Wartosc),2) FROM cdn.Firma WHERE Fir_Numer = 2075 IF @DataZamowienia = 2 SET @TrS_DataOpe = @TrN_DataWys END -- odwrotne ilosci dla korekt w buforze -- FAKI, FAKI z WZKI, PAKI, PAKI z WZKI, FZKI, FZKI z PZKI, PWKI, RWKI, WZKI, PZKI, BOMKI w buforze IF (@TrN_Rodzaj IN ( 302001, 302005, 305001, 305005, 301001, 301005, 303001, 304001, 306001, 307001, 310001, 313001, 314001, 318001, 317001) AND @TrN_Bufor IN ( 1 ) AND @TrS_Typ IN ( 3, 4 ) AND @TrS_Ilosc < 0 ) or (@TrN_Rodzaj = 301051 AND @TrN_Bufor IN ( 1 ) AND @TrS_Typ IN ( 3, 4 ) AND @TrS_Ilosc < 0 and not exists (select * from cdn.TraNag where TrN_FaId = @TrN_TrNId and TrN_Rodzaj = 307005) ) BEGIN SET @TrS_Ilosc = - @TrE_Ilosc /* IF @TrS_Typ IN ( 3, 4 ) AND @TrS_Ilosc < 0 SELECT @TrS_Typ = CASE @TrS_Typ WHEN 4 THEN 3 ELSE 4 END, @TrS_Ilosc = -@TrS_Ilosc */ END -- insert subelemntu i procedura aktualizacji warto¶ci zakupu (subelement dodawany tylko dla towaru) -- odczytanie typu karty (towar/us³uga) oraz typu kosztu us³ugi i stawki VAT dla pó¼niejszej aktualizacji ceny zakupu SELECT @Twr_Typ = Twr_Typ, @Twr_KosztUslugiTyp = Twr_KosztUslugiTyp, @Twr_KosztUslugi = Twr_KosztUslugi, @Twr_Stawka = Twr_Stawka, @Twr_KursL = Twr_KursL, @Twr_KursM = Twr_KursM FROM cdn.Towary WHERE Twr_TwrId = @TrE_TwrId -- Kontrola ilosci przed dodaniem subelemntu IF @Twr_Typ = 1 AND (( @TrS_Typ = 1 AND @TrS_Ilosc < 0 ) OR ( @TrS_Typ = 2 AND @TrS_Ilosc > 0 )) AND @TrE_IFA24Mag = 0 BEGIN SELECT @ZawszeBraki = ISNULL(MAX(Fir_Wartosc),0) FROM cdn.Firma WHERE Fir_Numer = 1536 if (SELECT ISNULL(MAX(Fir_Wartosc),0) FROM cdn.Firma WHERE Fir_Numer = 1970) = 1 or (SELECT ISNULL(MAX(Fir_Wartosc),0) FROM cdn.Firma WHERE Fir_Numer = 1776) = 1 select @ZezwalajMimoRez = 1 else select @ZezwalajMimoRez = 0 --SELECT @ZezwalajMimoRez = ISNULL(MAX(Fir_Wartosc),0) FROM cdn.Firma WHERE Fir_Numer = 1970 IF ((@TrS_Rodzaj IN (305001,302001,306001,302000,302009, 305000, 306000,304000,302008, 305008, 306008,304008) AND @TrS_Typ = 2) and exists (select * from deleted join inserted on deleted.TrE_TrEID = inserted.TrE_TrEID and inserted.TrE_TrEID = @TrE_TrEId and deleted.tre_ilosc >= inserted.tre_ilosc and deleted.TrE_DataOpe = inserted.TrE_DataOpe)) or ((@TrS_Rodzaj IN ( 306004,306006) AND @TrS_Typ = 2) and exists (select TrN_TrSTyp from cdn.tranag join cdn.tranagrelacje on trr_faid= trn_trnid and trr_trnid = @TrE_TrNID where TrN_TrSTyp =2)) SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId, @TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 3) ELSE IF ((@TrS_Rodzaj IN (302008, 305008, 306008,304008,312008) AND @TrS_Typ = 2) OR (@TrS_Rodzaj =306010 AND @TrS_Typ = 2 and exists(select trr_trrid from cdn.tranagrelacje where trr_trnid = @trn_trnid and Trr_fatyp = 308 )) OR (@TrS_Rodzaj =302009 AND @TrS_Typ = 2 and exists(select trr_trrid from cdn.tranagrelacje where trr_trnid = @trn_trnid and Trr_fatyp = 308 )) OR (@TrS_Rodzaj =306004 AND @TrS_Typ = 2 and exists(select trr_trrid from cdn.tranagrelacje where trr_trnid = @trn_trnid and Trr_fatyp = 308 ))) and not exists (select * from deleted join inserted on deleted.TrE_TrEID = inserted.TrE_TrEID and inserted.TrE_TrEID = @TrE_TrEId and deleted.tre_ilosc < inserted.tre_ilosc) IF @ZezwalajMimoRez = 1 and(@TrS_rodzaj in (306008,306010,306004,304008,312008) or (@TrS_rodzaj in (302009) AND @TrS_Typ = 2) or (@TrS_rodzaj in (302008) AND @TrS_Typ = 2) or (@TrS_rodzaj in (305008) AND @TrS_Typ = 2)) SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId, @TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 2 ) ELSE SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId, @TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 1 ) else SET @Komunikat = CDN.TwrIlosciErr ( 1, @TrS_Typ, @TrS_TwrId, @TrS_MagId, @TrS_DataOpe, @TrS_Ilosc, 0) IF @Komunikat <> '' GOTO KOMUNIKAT END -- Marze symulowane dla FA, PA, FA z PA, RWS (symulacja poprzez ustawienie wartosci na subelemencie rezerwacyjnym) IF @Twr_Typ = 1 AND @TrS_Typ IN ( 3, 4 ) BEGIN SET @Marza_Sym_Ostatnia = ( SELECT TOP 1 ISNULL(Fir_Wartosc,0) FROM cdn.Firma WHERE Fir_Numer = 1481 ) SET @Marza_Sym_Srednia = ( SELECT TOP 1 ISNULL(Fir_Wartosc,0) FROM cdn.Firma WHERE Fir_Numer = 1482 ) -- Marze symulowane tylko dla elementów z subelementami rezerwacyjnymi - poprawa wartosæi na subelementach rezerwacyjnych IF @Marza_Sym_Ostatnia = 1 OR @Marza_Sym_Srednia = 1 BEGIN -- w ka¿dym przypadku symulwoana wg ostatniej ceny zakupu SET @TrS_Wartosc = @TrE_Ilosc * ( SELECT ROUND(ISNULL(TwC_Wartosc,0)*(@Twr_KursL/@Twr_KursM),2) FROM cdn.TwrCeny WHERE TwC_TwrId = @TrS_TwrId AND TwC_TwCNumer = 1 ) -- je¶li mar¿a ze ¶redniej z zasobów i nie brakuje zasobów IF @Marza_Sym_Srednia = 1 IF ( SELECT ISNULL(SUM(TwZ_Ilosc),0) FROM cdn.TwrZasoby WHERE TwZ_TwrId = @TrS_TwrId ) <> 0 SET @TrS_Wartosc = @TrE_Ilosc * ( SELECT ISNULL(SUM(TwZ_Wartosc)/SUM(TwZ_Ilosc),0) FROM cdn.TwrZasoby WHERE TwZ_TwrId = @TrS_TwrId ) SET @TrS_Cena = CASE @TrS_Ilosc WHEN 0 THEN 0 ELSE @TrS_Wartosc / @TrS_Ilosc END END END -- Liczenie kosztu us³ugi dla RWS (na pozosta³ych wewnêtrznych koszt us³ugi jest zapisywany z obiektu) IF @Twr_Typ = 0 AND @TrE_TypDokumentu = 318 and @TrE_KosztUslugiZDok = 0 BEGIN IF @Twr_KosztUslugiTyp = 1 SET @TrE_KosztUslugi = ROUND( @TrE_Ilosc * @Twr_KosztUslugi, 2 ) ELSE IF @Twr_KosztUslugiTyp = 2 SET @TrE_KosztUslugi = ROUND( @TrE_WartoscNetto * @Twr_KosztUslugi / 100, 2 ) UPDATE cdn.TraElem SET TrE_KosztUslugi = @TrE_KosztUslugi WHERE TrE_TrEId = @TrE_TrEId END -- AVCO - przed dodaniem subelementu dostawczego lub kosztowego sprawdziæ date ostatniej modyfikacji zasobu IF @TrS_Metoda = 3 AND @TrS_Typ IN ( 1, 2 ) BEGIN SET @Data_Dost = ( SELECT ISNULL(TwZ_Data,'1800-01-01') FROM cdn.TwrZasoby WHERE TwZ_TwrId = @TrS_TwrId AND TwZ_MagId = @TrS_MagId AND TwZ_TrSIdDost IS NULL ) IF @TrS_DataOpe < @Data_Dost BEGIN -- je¶li kontrola daty ostatniej modyfiakcji zasobu zaznaczona IF ( SELECT TOP 1 ISNULL(MAX(SUBSTRING(Fir_Wartosc,1,1)),0) FROM cdn.Firma WHERE Fir_Numer = 1688 ) = 0 BEGIN SET @Komunikat = 'Zapis niemo¿liwy ! Dla towaru ' + @TrE_TwrKod + ' data ostatniej modyfikacji zasobu (' + CONVERT( NVarchar(10), @Data_Dost, 120 ) + ') jest pó¼niejsza ni¿ data transakcji (' + CONVERT( NVarchar(10), @TrS_DataOpe, 120 ) + ')' IF @Komunikat <> '' GOTO KOMUNIKAT END END END -- ustawienia korekty wartosci dla PZ z dostawami SET @DostIloscRecordow = 0 SET @DostIloscRecordowReal = 0 IF @TrS_Rodzaj IN ( 307002,307006,310002,303002,307003, 307011) BEGIN SELECT @DostIloscRecordowReal =count(A.TrS_TrSId) FROM cdn.TraSElem A JOIN cdn.TraElem B ON B.TrE_TrEId = A.TrS_TrEId WHERE B.TrE_TrEId = @TrE_ZwrId END IF @DostIloscRecordowReal > 1 BEGIN SELECT @DostIloscRecordow =count(A.TrS_TrSId) FROM cdn.TraSElem A JOIN cdn.TraElem B ON B.TrE_TrEId = A.TrS_TrEId JOIN (SELECT A.TrS_TrSId, abs(ISNULL(A.TrS_Ilosc,0))-abs(ISNULL(B.TrS_Ilosc,0)) as Roznica FROM cdn.TraSElem A LEFT OUTER JOIN cdn.TraSElem B ON A.TrS_TrSId = B.TrS_ZwrId WHERE A.TrS_Typ = 1 AND A.TrS_TrEId = @TrE_ZwrId) AS C ON C.TrS_TrSId = A.TrS_TrSId WHERE B.TrE_TrEId = @TrE_ZwrId AND C.Roznica > 0 SELECT @DostTrS_Ilosc = (SELECT ISNULL(sum(TrS_Ilosc),0) FROM cdn.TraSElem WHERE Trs_Typ = 1 AND TrS_TrEId = @TrE_ZwrId) + (SELECT ISNULL(sum(TrS_Ilosc),0) FROM cdn.TraSElem WHERE Trs_Typ = 1 AND TrS_Zwrid in(SELECT TrS_TrSId FROM cdn.TraSElem WHERE Trs_Typ = 1 AND TrS_TrEId = @TrE_ZwrId )) SET @DostIloscRecordowDodanych = 1 SET @ResztaWartosc = @TrE_WartoscNetto DECLARE DostawyKorektaWartosci CURSOR LOCAL FAST_FORWARD FOR SELECT A.TrS_TrSId FROM cdn.TraSElem A JOIN cdn.TraElem B ON B.TrE_TrEId = A.TrS_TrEId JOIN (SELECT A.TrS_TrSId, abs(ISNULL(A.TrS_Ilosc,0))-abs(ISNULL(B.TrS_Ilosc,0)) AS Roznica FROM cdn.TraSElem A LEFT OUTER JOIN (SELECT B.TrS_ZwrId, SUM(ISNULL(B.TrS_Ilosc,0)) as TrS_Ilosc FROM cdn.TraSElem A LEFT OUTER JOIN cdn.TraSElem B ON A.TrS_TrSId = B.TrS_ZwrId WHERE A.TrS_Typ = 1 AND A.TrS_TrEId = @TrE_ZwrId AND B.TrS_ZwrId IS NOT NULL GROUP BY B.TrS_ZwrId) B ON A.TrS_TrSId = B.TrS_ZwrId WHERE A.TrS_Typ = 1 AND A.TrS_TrEId = @TrE_ZwrId) AS C ON C.TrS_TrSId = A.TrS_TrSId WHERE B.TrE_TrEId = @TrE_ZwrId AND c.roznica > 0 OPEN DostawyKorektaWartosci WHILE 1=1 BEGIN FETCH NEXT FROM DostawyKorektaWartosci INTO @DostTrS_TrSId IF @@FETCH_STATUS <> 0 BREAK IF @DostIloscRecordowDodanych = @DostIloscRecordow SELECT @TrS_TrSIdDost = TrS_TrSIdDost, @TrS_Cena = TrS_Cena, @TrS_Wartosc = @ResztaWartosc, @TrS_ZwrId = TrS_TrSId FROM cdn.TraSElem WHERE TrS_TrSId = @DostTrS_TrSId ELSE SELECT @TrS_TrSIdDost = MAX(TrS_TrSIdDost), @TrS_Cena = MAX(TrS_Cena), @TrS_Wartosc = ROUND( (@TrE_WartoscNetto/@DostTrS_Ilosc)*SUM(TrS_Ilosc),2), @TrS_ZwrId = MIN(TrS_TrSId) FROM cdn.TraSElem WHERE TrS_TrSId = @DostTrS_TrSId OR TrS_ZwrID = @DostTrS_TrSId SET @DostIloscRecordowDodanych = @DostIloscRecordowDodanych + 1 SET @ResztaWartosc = @ResztaWartosc - @TrS_Wartosc --select @TrS_TrSId, @TrS_TrEId, @TrS_TrSIdDost, @TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj, @TrS_Typ, @TrS_Metoda, @TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc as wartosc, @TrS_Cena, @TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor EXECUTE CDN.AktualizujTraSElem @TrS_TrSId, @TrS_TrEId, @TrS_TrSIdDost, @TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj, @TrS_Typ, @TrS_Metoda, @TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc, @TrS_Cena, @TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor END CLOSE DostawyKorektaWartosci DEALLOCATE DostawyKorektaWartosci UPDATE cdn.TraElem SET TrE_KosztUslugi = 0 WHERE TrE_TrEId = @TrE_TrEId END -- dodanie subelemntu (towary lub us³ugi gdy dokumenty rozchodowe ) IF @Twr_Typ = 1 AND ISNULL(@Tre_WyborDostaw,0) = 0 AND @DostIloscRecordowReal < 2 AND @TrE_IFA24Mag = 0 BEGIN EXECUTE CDN.AktualizujTraSElem @TrS_TrSId, @TrS_TrEId, @TrS_TrSIdDost, @TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj, @TrS_Typ, @TrS_Metoda, @TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc, @TrS_Cena, @TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor UPDATE cdn.TraElem SET TrE_KosztUslugi = 0 WHERE TrE_TrEId = @TrE_TrEId END -- dodanie subelemntu dla rezerwacji (us³ugi) IF @Twr_Typ = 0 BEGIN IF @TrS_Rodzaj IN ( 307010, 302008, 305008, 306008, 301011 , 306004, 307004, 302009, 302004, 306010,304000,304008,312008,312100) EXEC [CDN].[UstawRezerwacje] @TrS_TrEId,0,0 IF @TrE_TypDokumentu IN ( 308, 309) BEGIN SET @TrS_Typ = @TrS_Typ + 10 EXECUTE CDN.AktualizujTraSElem @TrS_TrSId, @TrS_TrEId, @TrS_TrSIdDost, @TrS_ZwrId, @TrS_TwrId, @TrS_MagId, @TrS_Rodzaj, @TrS_Typ , @TrS_Metoda, @TrS_DataOpe, @TrS_Ilosc, @TrS_Wartosc, @TrS_Cena, @TrS_Termin, @TrE_ZwrId, @TrN_TrNId, @TrN_MagDocId, @TrN_Bufor END END -- Update warto¶ci i cen elementu dla dokumentów wewnêtrznych IF @TrE_TypDokumentu IN ( 304, 312, 318 ) AND @TrN_Rodzaj NOT IN ( 312010 ) BEGIN SET @TrE_WartoscZakupu = ( SELECT TrE_WartoscZakupu FROM cdn.TraElem WHERE TrE_TrEId = @TrE_TrEId ) UPDATE cdn.TraElem SET TrE_WartoscNetto = @TrE_WartoscZakupu, TrE_WartoscBrutto = ROUND(@TrE_WartoscZakupu * ( ( 100 + TrE_Stawka ) / 100 ), 2 ), TrE_WartoscNettoWal = @TrE_WartoscZakupu, TrE_WartoscBruttoWal = ROUND(@TrE_WartoscZakupu * ( ( 100 + TrE_Stawka ) / 100 ), 2 ), TrE_Rabat = 0, TrE_CenaT = CASE TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_IloscJM END, TrE_CenaW = CASE TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_IloscJM END , TrE_Cena0 = CASE TrE_Ilosc WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_Ilosc END , TrE_CenaWWD = CASE TrE_IloscJM WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_IloscJM END, TrE_Cena0WD = CASE TrE_Ilosc WHEN 0 THEN 0 ELSE @TrE_WartoscZakupu / TrE_Ilosc END, TrE_Waluta = @WalutaSys, TrE_KursNumer = 0, TrE_KursL = 1, TrE_KursM = 1 WHERE TrE_TrEId = @TrE_TrEId END -- Aktualizacja ceny zakupu towaru i kosztu us³ugi na karcie magazynowej dla ka¿dego elementu PWP -- Je¶li waluta dokumentu (naglowka) jest systemowa, to zmiana ceny zakupu na podstawie waluty elemetnu -- parametry waluty z elementu IF @TrN_Waluta = @WalutaSys BEGIN SET @Waluta = @TrE_Waluta SET @KursNumer = @TrE_KursNumer SET @KursL = @TrE_KursL SET @KursM = @TrE_KursM SET @CenaW_New = @TrE_CenaW END -- parametry waluty z nag³ówka ELSE BEGIN SET @Waluta = @TrN_Waluta SET @KursNumer = @TrN_KursNumer SET @KursL = @TrN_KursL SET @KursM = @TrN_KursM SET @CenaW_New = @TrE_CenaWWD END /* -- Sprawdzenie, czy nale¿y aktualizowaæ cenê zakupu na MM-OL IF @TrN_Rodzaj = 312010 SELECT TOP 1 @Aktualizuj_CenaZ_MMOL = CONVERT(TINYINT, ISNULL(Fir_Wartosc,0)) FROM cdn.Firma WHERE Fir_Numer = 1758 -- Rodzaj mar¿y: 0 = "od stu", 1 = "w stu" IF ( @TrE_TypDokumentu IN ( 310, 303, 307, 301, 317, 313 ) OR ( @TrN_Rodzaj = 312010 AND @Aktualizuj_CenaZ_MMOL = 1 ) ) AND @TrE_Ilosc > 0 AND @TrN_Bufor IN ( 0 ) BEGIN -- parametry kursu waluty dla towaru lub us³ugi z typem kwotowym IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 ) UPDATE cdn.Towary SET Twr_Waluta = @Waluta, Twr_KursNumer = @KursNumer, Twr_KursL = @KursL, Twr_KursM = @KursM WHERE Twr_TwrId = @TrE_TwrId -- koszt us³ugi ( us³uga i typ kosztu kwotowy ) IF @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 BEGIN -- od netto IF @TrE_TypNB = 1 BEGIN SET @Twr_KosztUslugiNew = @TrE_CenaT SET @Twr_KosztUslugiWalNew = @CenaW_New END -- od brutto ELSE IF @TrE_TypNB = 2 BEGIN SET @Twr_KosztUslugiNew = @TrE_CenaT - ROUND ( @TrE_CenaT * @TrE_Stawka / (100 + @TrE_Stawka) , 2 ) SET @Twr_KosztUslugiWalNew = @CenaW_New - ROUND ( @CenaW_New * @TrE_Stawka / (100 + @TrE_Stawka) , 2 ) END UPDATE cdn.Towary SET Twr_KosztUslugi = @Twr_KosztUslugiNew, Twr_KosztUslugiWal = @Twr_KosztUslugiWalNew WHERE Twr_TwrId = @TrE_TwrId END -- Kursor po cenach dla towaru lub us³ugi z kosztem kwotowym: -- aktualizacja ceny zakupu (TwC_TwCNumer = 1) -- aktualizacja mar¿y dla cen sprzeda¿y z aktualizacj± ustawin± na "Nie" ( TwC_TwCNumer <> 1 AND TwC_Aktualizacja = 0 ) IF @Twr_Typ = 1 OR ( @Twr_Typ = 0 AND @Twr_KosztUslugiTyp = 1 ) BEGIN DECLARE TwrCeny CURSOR LOCAL FAST_FORWARD FOR SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta, TwC_Wartosc, TwC_Typ FROM cdn.TwrCeny WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer = 1 UNION ALL SELECT TwC_TwCNumer, TwC_TwCId, TwC_Waluta, TwC_Wartosc, TwC_Typ FROM cdn.TwrCeny WHERE TwC_TwrId = @TrE_TwrId AND TwC_TwCNumer <> 1 AND TwC_Aktualizacja = 0 OPEN TwrCeny WHILE 1=1 BEGIN FETCH NEXT FROM TwrCeny INTO @TwC_TwCNumer, @TwC_TwCId, @TwC_Waluta, @TwC_Wartosc, @TwC_Typ IF @@FETCH_STATUS <> 0 BREAK -- aktualizacja ceny zakupu IF @TwC_TwCNumer = 1 BEGIN -- od netto IF @TrE_TypNB = 1 IF @TwC_Typ = 1 SET @TwC_Wartosc = @CenaW_New * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) ELSE SET @TwC_Wartosc = ( @CenaW_New + ROUND( @CenaW_New * @TrE_Stawka / 100, 2 ) ) * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) -- od brutto ELSE IF @TrE_TypNB = 2 IF @TwC_Typ = 1 SET @TwC_Wartosc = ( @CenaW_New - ROUND( @CenaW_New * @TrE_Stawka / ( 100+@TrE_Stawka), 2 ) ) * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) ELSE SET @TwC_Wartosc = @CenaW_New * ( @TrE_JMPrzelicznikM / @TrE_JMPrzelicznikL ) UPDATE cdn.TwrCeny SET TwC_Wartosc = @TwC_Wartosc, TwC_Waluta = @Waluta WHERE TwC_TwCId = @TwC_TwCId SET @CenaZakupuNew = @TwC_Wartosc SET @CenaZakupuNewWal = @CenaZakupuNew SET @CenaZakupuNewPLN = @CenaZakupuNew * @KursL/@KursM END -- @TwC_TWCNumer = 1 -- aktualizacja mar¿ dla cen sprzeda¿y -- tylko wtedy, gdy waluta zakupu i sprzeda¿y s± równe lub gdy waluta sprzedazy jest systemowa ELSE IF @TwC_TwCNumer <> 1 AND ( @TwC_Waluta = @Waluta OR @TwC_Waluta = @WalutaSys ) BEGIN -- cena sprzeda¿y brutto - obliczamy jej reprezentacjê netto IF @TwC_Typ = 2 SET @TwC_Wartosc = @TwC_Wartosc - ROUND( @TwC_Wartosc * @Twr_Stawka / ( 100 + @Twr_Stawka), 2 ) -- mar¿a "od stu" i "w stu" IF @CenaZakupuNew <> 0 BEGIN -- je¶li waluta zakupu i sprzeda¿y s± równe, to bierzemy cenê zakupu w walucie dokumentu -- w przeciwnym przypadku, gdy cena sprzeda¿y jest w walucie systemowej, to bierzemy cenê zakupu w walucie systemowej IF @TwC_Waluta = @WalutaSys AND @Waluta <> @WalutaSys SET @CenaZakupuNew = @CenaZakupuNewPLN ELSE SET @CenaZakupuNew = @CenaZakupuNewWal SET @TwC_Marza = ( ( @TwC_Wartosc / @CenaZakupuNew ) - 1 ) * 100 IF ( @TwC_Marza = -100 ) OR ( @CenaZakupuNew = @TwC_Wartosc ) SET @TwC_MarzaWStu = 100 ELSE IF @TwC_Wartosc = 0 SET @TwC_MarzaWStu = -100 ELSE SET @TwC_MarzaWStu = 100 * @TwC_Marza / ( 100 + @TwC_Marza ) IF @TwC_Marza > 99999.99 SET @TwC_Marza = 99999.99 IF @TwC_MarzaWStu > 99999.99 SET @TwC_MarzaWStu = 99999.99 IF @TwC_Marza < - 99999.99 SET @TwC_Marza = -99999.99 IF @TwC_MarzaWStu < - 99999.99 SET @TwC_MarzaWStu = -99999.99 END IF @TwC_Marza IS NOT NULL AND @TwC_MarzaWStu IS NOT NULL UPDATE cdn.TwrCeny SET TwC_Marza = @TwC_Marza, TwC_MarzaWStu = @TwC_MarzaWStu WHERE TwC_TwCId = @TwC_TwCId END END -- kursor TwrCeny CLOSE TwrCeny DEALLOCATE TwrCeny END -- Towar lub us³uga z kosztem kwotowym END -- aktualizacji ostatniej ceny zakupu IF @MyIdentity IS NOT NULL BEGIN SET IDENTITY_INSERT cdn.Idn ON INSERT INTO cdn.Idn (i) VALUES (@MyIdentity) SET IDENTITY_INSERT cdn.Idn OFF DELETE FROM cdn.Idn WHERE i = @MyIdentity --WiNi END */ END CLOSE Dodawane DEALLOCATE Dodawane -- KosztUslugi = 0 dla towarów UPDATE CDN.TraElem SET TrE_KosztUslugi = 0 WHERE TrE_TrEId IN (select TrE_TrEId FROM inserted join cdn.towary on inserted.tre_twrid = twr_twrid and twr_typ = 1) -- sprawdzenie towaru z elementu po modyfikacjach dla dodawanych i kasowanych DECLARE EKI CURSOR LOCAL FAST_FORWARD FOR SELECT TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod, TrE_TwrNazwa FROM ( SELECT TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod, TrE_TwrNazwa FROM deleted where ISNULL(Tre_WyborDostaw,0) = 0 UNION ALL SELECT TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod, TrE_TwrNazwa FROM inserted where ISNULL(Tre_WyborDostaw,0) = 0 ) AS TrE_ERR GROUP BY TrE_TrEId, TrE_TwrId, TrE_DataOpe, TrE_TwrKod, TrE_TwrNazwa OPEN EKI WHILE 1=1 BEGIN FETCH NEXT FROM EKI INTO @TrE_TrEId, @TrE_TwrId, @TrE_DataOpe, @TrE_TwrKod,@TrE_TwrNazwa IF @@FETCH_STATUS <> 0 BREAK SET @Komunikat = CDN.TwrZasobyErr ( @TrE_TrEId, @TrE_TwrId, @TrE_TwrKod,@TrE_TwrNazwa, @TrE_DataOpe ) IF @Komunikat <> '' GOTO KOMUNIKAT END CLOSE EKI DEALLOCATE EKI -- Wyswietlenie komunikatu i rollback ca³ej transakcji KOMUNIKAT: IF @Komunikat <> '' BEGIN RAISERROR( '%s', 16, 1, @Komunikat) ROLLBACK TRAN SET NOCOUNT OFF RETURN END SET NOCOUNT OFF > >> Przyk³ad z ¿ycia: pad pr±du w ¶rodku wpisywania dokumentu. W ró¿nych >> systemach nastêpuje rozjazd pomiêdzy stanami handlowymi a stanami >> magazynowymi, natomiast w Optimie/XL/Enovie praktycznie nigdy. Znam >> tylko kilka zg³oszonych przypadków przez blisko 20 lat. > Zatem mylisz transakcjê bazodanow± (która zosta³a wycofana, po pad³ > pr±d), ze spójno¶ci± danych logicznych zapewnion± przez triggery, po > stronie bazy danych. > I tak przez blisko 20 lat :P > Byæ mo¿e mylê - nie przeczê. Bazodanowa - to jak co¶ w rodzaju TTS w Novellu? Ale to chyba na innym poziomie, ni¿ logiczna spójno¶æ. Muszê doczytaæ. Jaki¶ link? -- Pozdrawiam. Adam
Re: [OT] Re: Baza ok 2500 tabel.
Author: wloochacz
Date: Mon, 10 Jul 2017 19:47
Date: Mon, 10 Jul 2017 19:47
94 lines
4083 bytes
4083 bytes
W dniu 2017-07-05 o 15:21, Adam pisze: > W dniu 2017-07-05 o 13:30, wloochacz pisze: >> W dniu 2017-06-20 o 15:20, Adam pisze: >> /ciach/ >> >>> Natomiast Symfonia czy jakieś tam Inserty mają oprócz tego, co >>> napisałeś jeszcze sporo innych problemów. Najpoważniejsze: brak >>> spójności systemu. Bywa u klientów, że towar zostanie pobrany na >>> dokument, a nie zejdzie ze stanu magazynowego. >>> >>> W przypadku Optimy, CDN-XL czy Enovy - o spójność baz danych dbają >>> triggery. >> No popatrz, mam bazę Enovy (stan na rok 2015, ale nie sadzę aby były aż >> tak poważne zmiany) pod ręką i nie ma w niej ani jednego triggera. >> Tak wszystko co piszesz poniżej w kontekście Enovy, nie jest prawdziwe... > > Aż zobaczyłem do jakiejś bazy: /ciach/ > itd - 490 rekordów. No i co tam zobaczyłeś, bo nic z tego nie rozumiem... > Optimka ma 272, CDN-XL ma 852. > Zresztą do XL masz dokumentację, podsyłałem Ci kiedyś. Pisałem o Enovie, a Ty mi tu pokazujesz XL. A to, że "logika" w ERP XL jest w bazie danych, to jasne. Burdel z tym taki, że łooo matko... A najlepiej jest wtedy, gdy mam na przestrzeni kilku lat, kilka firm obsługujących ten sam system u klienta (tzw. fakt autentyczny i dotyczy ERP XL), robi własne zmiany w triggerach. Każda z tych firm grzebie sobie w bazie jak im się podoba. Po kilkunastu takich zmianach, nikt tak naprawdę nie wie co w tym trigger-hell się dzieje i kiedy się dzieje... >>> Albo cała transakcja (w znaczeniu ścieżki logicznej zdarzeń) >>> przejdzie, albo cała zostanie wycofana. Nawet, gdybym grzebał >>> bezpośrednio w tabelach z danymi, transakcje są spójne, albo trigger >>> nie pozwoli zmienić pola, gdy pozostałe warunki nie są zachowane. >>> Jest to bardzo dobre dla serwisantów. >> Dobre dla serwisantów? >> A co to za serwisant, który grzebie w bazie nie wiedząc jakie będę tego >> konsekwencje dla całego systemu? >> >> Taki "serwisant" niech lepiej trzyma lepkie łapki blisko siebie... > > E, tam, nie przesadzaj. Jasne, ale mam inną opinię. > Przykładowy trigger dotyczący elementu transakcji (np. faktury) poniżej. Myślę, że ten trigger jest z definicji zjebany. Select top 1? A co w przypadku, kiedy insert będzie batchowy i będzie więcej niż jeden rekord wkładany w tym samym czasie? Dlatego powtórzę: "Taki "serwisant" niech lepiej trzyma lepkie łapki blisko siebie..." Na co Ty - nie przesadzaj... > Myślisz, że bez triggera ktoś by to zapamiętał? Tak, ale to wymaga programowania w ERPie, a nie w jego bazie. Poza tym ten cały trigger, jest wzorcowym przykładem jak nie należy tego robić i dlaczego nie należy tak tego robić. Po prostu utrzymanie takiego systemu to istny horror-szoł... >>> Przykład z życia: pad prądu w środku wpisywania dokumentu. W różnych >>> systemach następuje rozjazd pomiędzy stanami handlowymi a stanami >>> magazynowymi, natomiast w Optimie/XL/Enovie praktycznie nigdy. Znam >>> tylko kilka zgłoszonych przypadków przez blisko 20 lat. >> Zatem mylisz transakcję bazodanową (która została wycofana, po padł >> prąd), ze spójnością danych logicznych zapewnioną przez triggery, po >> stronie bazy danych. >> I tak przez blisko 20 lat :P >> > > Być może mylę - nie przeczę. > Bazodanowa - to jak coś w rodzaju TTS w Novellu? Bazodanowa to bazodanowa, zgodna z ACID. W porównaniu do ACID, TTS w Novell to bieda wersja, ale głównie dlatego że operuje na plikach (czy na blokach pliku? Ja jestem noga od Novella i wiem tyle ile wyczytam) i z tego co wiem, wymaga interakcji z Novell TTS. W bazie danych nie posługujesz się pojęciem pliku i nic Cię on nie obchodzi, a sama transakcja dotyczy wszystkich (zazwyczaj chodzi o polecania DML, ale bywa różnie w różnych bazach danych) poleceń SQL, które są nią objęte. > Ale to chyba na innym poziomie, niż logiczna spójność. Muszę doczytać. > Jakiś link? ACID https://pl.wikipedia.org/wiki/ACID https://msdn.microsoft.com/en-us/library/aa480356.aspx?f%5&MSPPError=-2147217396 -- wloochacz
Re: [OT] Re: Baza ok 2500 tabel.
Author: Adam
Date: Mon, 10 Jul 2017 23:07
Date: Mon, 10 Jul 2017 23:07
155 lines
6145 bytes
6145 bytes
W dniu 2017-07-10 o 19:47, wloochacz pisze: > W dniu 2017-07-05 o 15:21, Adam pisze: >> W dniu 2017-07-05 o 13:30, wloochacz pisze: >>> W dniu 2017-06-20 o 15:20, Adam pisze: >>> /ciach/ >>> >>>> Natomiast Symfonia czy jakie¶ tam Inserty maj± oprócz tego, co >>>> napisa³e¶ jeszcze sporo innych problemów. Najpowa¿niejsze: brak >>>> spójno¶ci systemu. Bywa u klientów, ¿e towar zostanie pobrany na >>>> dokument, a nie zejdzie ze stanu magazynowego. >>>> >>>> W przypadku Optimy, CDN-XL czy Enovy - o spójno¶æ baz danych dbaj± >>>> triggery. >>> No popatrz, mam bazê Enovy (stan na rok 2015, ale nie sadzê aby by³y a¿ >>> tak powa¿ne zmiany) pod rêk± i nie ma w niej ani jednego triggera. >>> Tak wszystko co piszesz poni¿ej w kontek¶cie Enovy, nie jest >>> prawdziwe... >> >> A¿ zobaczy³em do jakiej¶ bazy: > /ciach/ > >> itd - 490 rekordów. > No i co tam zobaczy³e¶, bo nic z tego nie rozumiem... > Wylistowa³em triggery z bazy danych Enovy, baza z roku 2014. >> Optimka ma 272, CDN-XL ma 852. >> Zreszt± do XL masz dokumentacjê, podsy³a³em Ci kiedy¶. > Pisa³em o Enovie, a Ty mi tu pokazujesz XL. > A to, ¿e "logika" w ERP XL jest w bazie danych, to jasne. W Enovie chyba te¿. Mam tylko kilku klientów z Enovy, robionych zreszt± "z doskoku". Od ³adnych kilku lat jako¶ nie mogê siê zebraæ, aby skoczyæ do Roberta podpisaæ umowê. W ka¿dym razie bazy Enovy nie naprawia³em, nie znam jej tak, jak baz dawnego CDN-u. > Burdel z tym taki, ¿e ³ooo matko... Dopóki nie zatrudniali studentów, i dopóki CDN to by³ CDN a nie jaki¶ Comarch, to by³o dobrze :( > A najlepiej jest wtedy, gdy mam na przestrzeni kilku lat, kilka firm > obs³uguj±cych ten sam system u klienta (tzw. fakt autentyczny i dotyczy > ERP XL), robi w³asne zmiany w triggerach. Niestety, czasem nawet do wydruku w Crystalu trzeba podpi±æ pod bazê dodatkowe tabele i triggery. Mam tak w jednej specyficznej firmie - obrót "¿elastwem" na budowy (kszta³towniki, ramy, pojemniki, prêty, itp). > Ka¿da z tych firm grzebie sobie w bazie jak im siê podoba. > Po kilkunastu takich zmianach, nikt tak naprawdê nie wie co w tym > trigger-hell siê dzieje i kiedy siê dzieje... > Najgorzej to przej±æ takiego klienta. Robi siê dla niego jaki¶ dodatkowy wydruk lub mniej typowy obieg dokumentów, i to, co chodzi na bazach testowych albo u innych klientów, u niego nie chce :( >>>> Albo ca³a transakcja (w znaczeniu ¶cie¿ki logicznej zdarzeñ) >>>> przejdzie, albo ca³a zostanie wycofana. Nawet, gdybym grzeba³ >>>> bezpo¶rednio w tabelach z danymi, transakcje s± spójne, albo trigger >>>> nie pozwoli zmieniæ pola, gdy pozosta³e warunki nie s± zachowane. >>>> Jest to bardzo dobre dla serwisantów. >>> Dobre dla serwisantów? >>> A co to za serwisant, który grzebie w bazie nie wiedz±c jakie bêdê tego >>> konsekwencje dla ca³ego systemu? >>> >>> Taki "serwisant" niech lepiej trzyma lepkie ³apki blisko siebie... >> >> E, tam, nie przesadzaj. > Jasne, ale mam inn± opiniê. > >> Przyk³adowy trigger dotycz±cy elementu transakcji (np. faktury) poni¿ej. > My¶lê, ¿e ten trigger jest z definicji zjebany. > Wzi±³em pierwszy lepszy z brzegu, tam gdzie mi kursor myszki w Management Studio stan±³. > Select top 1? > A co w przypadku, kiedy insert bêdzie batchowy i bêdzie wiêcej ni¿ jeden > rekord wk³adany w tym samym czasie? Z tego, co na szybko popatrzy³em to TOP 1 wskazuje na typ i rodzaj dokumentu. Dokument mo¿e byæ tylko i wy³±cznie jednego rodzaju czy typu i nie podlega zmianom. Tu akurat IMO nie ma b³êdu. Zreszt± te flagi s± zak³adane w momencie inicjacji rekordu, a rekord jest blokowany na wy³±czno¶æ w trakcie inicjalizacji. > > Dlatego powtórzê: "Taki "serwisant" niech lepiej trzyma lepkie ³apki > blisko siebie..." > Na co Ty - nie przesadzaj... > >> My¶lisz, ¿e bez triggera kto¶ by to zapamiêta³? > Tak, ale to wymaga programowania w ERPie, a nie w jego bazie. > A pó¼niej kto¶ mnie wo³a do jakiego¶ Wf-Maga, ¿e posz³a faktura a towar dalej wisi na stanie. Wydaje mi siê, ¿e triggery w tym momencie du¿o pomagaj± i jeszcze wiêcej (a w zasadzie ca³kowicie) zabezpieczaj± bazê. Zwa¿ na to, ¿e systemy CDN-u (³±cznie z FPP) s± poniek±d "otwarte", mo¿na co¶ "wtykaæ" choæby przez API. Nie wyobra¿am sobie tworzenia w³asnych, nawet najprostszych formatek czy funkcji dodatkowych bez triggerów. > Poza tym ten ca³y trigger, jest wzorcowym przyk³adem jak nie nale¿y tego > robiæ i dlaczego nie nale¿y tak tego robiæ. > Po prostu utrzymanie takiego systemu to istny horror-szo³... Nie mam innych do¶wiadczeñ, brak podstaw abym siê wypowiada³. >>>> Przyk³ad z ¿ycia: pad pr±du w ¶rodku wpisywania dokumentu. W ró¿nych >>>> systemach nastêpuje rozjazd pomiêdzy stanami handlowymi a stanami >>>> magazynowymi, natomiast w Optimie/XL/Enovie praktycznie nigdy. Znam >>>> tylko kilka zg³oszonych przypadków przez blisko 20 lat. >>> Zatem mylisz transakcjê bazodanow± (która zosta³a wycofana, po pad³ >>> pr±d), ze spójno¶ci± danych logicznych zapewnion± przez triggery, po >>> stronie bazy danych. >>> I tak przez blisko 20 lat :P >>> >> >> Byæ mo¿e mylê - nie przeczê. >> Bazodanowa - to jak co¶ w rodzaju TTS w Novellu? > Bazodanowa to bazodanowa, zgodna z ACID. > W porównaniu do ACID, TTS w Novell to bieda wersja, ale g³ównie dlatego > ¿e operuje na plikach (czy na blokach pliku? Ja jestem noga od Novella i > wiem tyle ile wyczytam) i z tego co wiem, wymaga interakcji z Novell TTS. Novella zaprzesta³em serwisowaæ ju¿ gdzie¶ na v.5.x - wiêc do¶æ dawno temu. Aczkolwiek jeszcze kilka lat temu co¶ naprawia³em w bazach KH w jakiej¶ Spó³dzielni Mieszkaniowej - jako¶ mnie przez kogo¶ znale¼li. Mieli CDN Klasykê na Novellu, a sieæ na RG58. > W bazie danych nie pos³ugujesz siê pojêciem pliku i nic Ciê on nie > obchodzi, a sama transakcja dotyczy wszystkich (zazwyczaj chodzi o > polecania DML, ale bywa ró¿nie w ró¿nych bazach danych) poleceñ SQL, > które s± ni± objête. > >> Ale to chyba na innym poziomie, ni¿ logiczna spójno¶æ. Muszê doczytaæ. >> Jaki¶ link? > ACID > https://pl.wikipedia.org/wiki/ACID > https://msdn.microsoft.com/en-us/library/aa480356.aspx?f%5&MSPPError=-2147217396 Dziêki, w wolnej chwili poczytam. -- Pozdrawiam. Adam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads