🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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.
#188481
Author: =?UTF-8?Q?Cezary
Date: Tue, 13 Jun 2017 18:14
8 lines
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.
#188483
Author: "M.M."
Date: Tue, 13 Jun 2017 12:30
35 lines
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.
#188482
Author: wloochacz
Date: Tue, 13 Jun 2017 18:28
14 lines
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.
#188484
Author: "Marcin B."
Date: Wed, 14 Jun 2017 00:47
17 lines
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.
#188485
Author: Jivanmukta
Date: Wed, 14 Jun 2017 04:44
2 lines
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.
#188486
Author: =?UTF-8?Q?Cezary
Date: Wed, 14 Jun 2017 08:32
10 lines
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.
#188487
Author: Adam
Date: Wed, 14 Jun 2017 12:07
17 lines
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.
#188488
Author: =?UTF-8?Q?Cezary
Date: Wed, 14 Jun 2017 13:36
17 lines
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.
#188489
Author: "Stokrotka"
Date: Wed, 14 Jun 2017 16:19
30 lines
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.
#188490
Author: Adam
Date: Wed, 14 Jun 2017 17:58
37 lines
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.
#188492
Author: "M.M."
Date: Thu, 15 Jun 2017 02:42
53 lines
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.
#188494
Author: "M.M."
Date: Thu, 15 Jun 2017 07:22
50 lines
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.
#188491
Author: Jacek
Date: Thu, 15 Jun 2017 09:42
6 lines
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.
#188493
Author: =?UTF-8?Q?Cezary
Date: Thu, 15 Jun 2017 14:37
19 lines
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.
#188496
Author: =?UTF-8?Q?Cezary
Date: Thu, 15 Jun 2017 20:57
14 lines
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.
#188497
Author: irq
Date: Fri, 16 Jun 2017 05:23
22 lines
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.
#188498
Author: "Stokrotka"
Date: Fri, 16 Jun 2017 18:16
15 lines
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.
#188499
Author: =?UTF-8?Q?Cezary
Date: Fri, 16 Jun 2017 22:06
23 lines
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.
#188501
Author: Adam
Date: Mon, 19 Jun 2017 13:34
466 lines
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.
#188502
Author: "Stokrotka"
Date: Mon, 19 Jun 2017 17:03
405 lines
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.
#188503
Author: Adam
Date: Mon, 19 Jun 2017 19:55
53 lines
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.
#188504
Author: =?UTF-8?B?QW5kcn
Date: Tue, 20 Jun 2017 07:24
13 lines
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.
#188505
Author: Adam
Date: Tue, 20 Jun 2017 15:20
68 lines
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.
#188506
Author: "Stokrotka"
Date: Tue, 20 Jun 2017 18:53
15 lines
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.
#188507
Author: Adam
Date: Wed, 21 Jun 2017 11:42
49 lines
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.
#188508
Author: Adam
Date: Wed, 21 Jun 2017 11:49
68 lines
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.
#188509
Author: "Stokrotka"
Date: Wed, 21 Jun 2017 14:22
46 lines
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.
#188510
Author: =?UTF-8?B?QW5kcn
Date: Wed, 21 Jun 2017 14:32
60 lines
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.
#188514
Author: wloochacz
Date: Wed, 05 Jul 2017 13:30
35 lines
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.
#188515
Author: Adam
Date: Wed, 05 Jul 2017 15:21
2161 lines
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.
#188516
Author: wloochacz
Date: Mon, 10 Jul 2017 19:47
94 lines
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.
#188517
Author: Adam
Date: Mon, 10 Jul 2017 23:07
155 lines
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