🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #334685

Dlaczego w ERP'e MemoryDataSet moim zdaniem jest optymalny

#334685
From: Roman Wilk
Date: Wed, 11 Jan 2012 06:04
101 lines
5968 bytes
Witam,
ponieważ wlochacz, jest bardzo ciekawy dlaczego (a noc dluga byla i w
chwilach relaxu, cos tam napisalem), dlatego ponizej podaje kilka
zasadniczych powodow, dla ktorych moim zdaniem przyjeta przeze mnie
filozofia w moim projekcie jest optymalna (wlochacz to material do
przemyslen dla Ciebie :-))


Projekt to klasa Aplikacji ERP/MRP/CRM

   (wymieniam tylko to co powinno pozwolic Ci zrozumiec dlaczego dane
pobrane lokalnie jest optymalnie trzymac w MemoryDataSet,
   oczywiscie dane sa pobierane automatycznie w oparciu o relacje
zdefiniowane w DM na TIBTable. Poza tym w takim rozwiazaniu podmiana
   bazy danych nie jest duzym problemem, co tez na pewnym etapie
tworzenia projektu bylo brane pod uwage)

1. Funkcjonalnosci :
   pelna obsluga gospodarki magazynowej w czasie rzeczywstym (FIFO/
LIFO liczone zgodnie z algorytmem w danej chwili, nie po
   zamknieciu okresu ewentulanie inne cuda (przelicz w cenach zakupu
czy jakies tam wynalazki). Co oznacza, ze dla pozycji
   przyjetej np. w 30 roznych cenach zakupu, stanowiacej np stan =
200, pozycja dokumentu sprzedazy rozchodujaca te 200 szt,
   bedzie jedna, natomiast algorytm FIFO/LIFO sobie sam poradzi z
prawidlowym rozchodem tych 200 szt. kontrolujac po drodze
   np. to czy na dzien wystawienia dokumentu sprzedazy jest wymagany
stan magazynu.

). Każdy dokumentu moze byc
   automatycznie ksiegowany w ksiedze handlowej zgodnie z definicja :
   - cel zakupu / sprzedazy
   - podstawy podatkow w stawkach VAT
   - kwoty VAT dla poszczegolnych stawek
   - drukowany jako kod EAN
   - podlegajacy usludze MWS (magazyn wysokiego skladowania)

2. Sprzedaz w dowolnej walucie
   - kazdy doument sprzedazy (zwiazny z podatkiem VAT jest
automatycznie ksiegowany)
   na np. FV moze byc dowolna sprzedaz ze wzgledu na jej cel np.
   - sprzedaz wyrobu
   - sprzedaz towaru
   - sprzedaz uslugi

   kazda z tych pozycji to inna 7 (konto zespolu 7 z planu kont),
czyli dokument musi byc zaksiegowany nie dosc, ze w stawkach i
podstawach VAT,
   to jeszcze musi byc zaksiegowany na okreslone 7-mki, w stawkach i
podstawach VAT. Co zgodnie z zasadami matematyki (suma iloczynow <>
iloczynu sumy)
   spowoduje zaokraglenia (czyli suma dokumentu <> zaksiegowanych
pozycji w ujeciu podstawy i vat i 7). To trzeba przed wyslaniem do
bazy
   walidowac. W MemoryDataSet mozna to wszystko przygotowac i wyslac
spojna postac danych koncowych do bazy danych.


3. Ksiega handlowa - full wypas, srodki trwale, platnosci
elektroniczne, automatyczne wyliczenie roznic kursowych (dla ludzi
kodujacych ERP'y, zmora,
   szczegolnie kompensowanie tych transakcji)

1. Sorotwanie zawartosci dokumentu (potrzebne utworzenie indeksow,
czesto dynamicznie i ponumerowanie pozycji dokumentu zgodnie z nowym
porzadkiem)
2. Agregowanie zawartosci dokumentu (sumowanie po indeks, EAN, cena,
ilosc, ewentualnie innych definiowalnych kryteriach)
3. Komentowanie pozycji dokumentow (pola blob), sumy posrednie
bezposrednio w widoku dokumentu .... (czyli suma np. po x- pozycjach)
4. Pelna walidacja kompletnej postaci danych (zaokraglenia, wartosci w
walucie, sprawdzenie zgodnosci dekretu WN/MA.
   Z tego powodu dokumenty zazwyczaj (jedyne sluszne rozwiazanie) sa
sumowame w podstawach stawek podatku VAT (od netto lub od brutto)).
Dokument w walucie, dodatkowo
   musi byc przeliczony do postaci odpowiadajacej zasadzie "wydruk
musi sie zamykac w walucie dokumentu", co oznacza przeliczenie PLN na
walute (jezeli masz rabaty
   rabat do cen w pozycjach to sytuacja sie dodatkowo komplikuje (kurs
to liczba #.0000, wynik to liczba #.00), z czego ponownie z waluty na
PLN, aby zaksiegowac w PLN)
5. Obsluga transakcji (pelna kontrola atomowosci transakcji w ujeciu
Firebird'a, czyli transakcji wspolbieznych)
6. Pelna transparentnosc Aplikacji w stosunku do bazy danych (oznacza
n-edycji tego samego dokumentu, w tym samym czasie, z obsluga
ewentualnych wyjatkow transakcyjnych)
7. Obsluga mozliwie najmniejszej liczby komponentow TTransaction (tzn.
model jednej globalnej transakcji w obrebie calej Aplikacji)
8. Kontrola FIFO / LIFO na okreslony dzien
9. Baza danych w tym modelu, nie wie co jest w edycji, jest tylko i
wylacznie uzywana do skladowania danych i ich raportowania
10. Wygodna obsluga laczenia dokumentow w jeden dokument (np. FV do n
Wz)
11. W modelu opartym na lokalnym przechowywaniu zawartosci kazdego
dokumnetu (kazdego obiektu biznesowego projektu), bardzo prosto
zbudowac API Aplikacji,
    po prostu tworzysz obiekt nie pokazujac go uzytkownikowi i
wywolujesz zdarzenia tak jak by uzytkownik obrabial go. Masz zachowana
kontrole integralnosci
    danych i spojnosc kodu w obsludze tego typu operacji. Memory
DataSet'y zawsze maja opcje zapisu / odczytu z pliku ... (np. XML)
Technical Details
Message-ID: <d6b9cb32-993a-470f-949f-9f6587ff0c86@m20g2000vbf.googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!postnews.google.com!m20g2000vbf.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!postnews.google.com!m20g2000vbf.googlegroups.com!not-for-mail
From: Roman Wilk <kameleonsql@gmail.com>
Newsgroups: pl.comp.lang.delphi
Subject: Dlaczego w ERP'e MemoryDataSet moim zdaniem jest optymalny
Date: Tue, 10 Jan 2012 22:04:04 -0800 (PST)
Organization: http://groups.google.com
Lines: 101
Message-ID: <d6b9cb32-993a-470f-949f-9f6587ff0c86@m20g2000vbf.googlegroups.com>
NNTP-Posting-Host: 83.0.131.226
Mime-Version: 1.0
X-Trace: posting.google.com 1326261844 6585 127.0.0.1 (11 Jan 2012 06:04:04 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Wed, 11 Jan 2012 06:04:04 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: m20g2000vbf.googlegroups.com; posting-host=83.0.131.226; posting-account=lJNmiQoAAAAcuwZEAibFvFBE7IgRs9bN
User-Agent: G2/1.0
X-Google-Web-Client: true
X-Google-Header-Order: ASELCHRU
X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.75 Safari/535.7,gzip(gfe)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit