Elektroniczny obieg dokumentów

Elektroniczny obieg dokumentów
J1
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 7 lat
0

Witam,
przymierzam się do napisania systemu elektronicznego obiegu dokumentów w firmie, w której pracuję, ktoś na forum pisał o podobnym projekcie, ale nie mogę go znaleźć. Pytanie moje brzmi:
W jaki sposób zrobić historię zmian w dokumencie? - tzn. czy zapisywać go np. 3 razy w bazie, czy może jest jakaś inna metoda? I czy MySQL do tego wystarczy? czy lepiej bazę zrobić np. w Microsoftowym SQL Serwer?

Będę wdzięczny za wszelkie sugestie

Pozdrawiam

Misiekd
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
  • Postów:7923
0

na pewno nie nadaje się do tego wersja darmowa komercyjnej bazy, która ma ograniczenie na rozmiar bazy. Będziesz w bazie składował dokumenty, one trochę jednak ważą, szczególnie, że chcesz mieć historię zmian. MySQL też się tak sobie nadaje do takich rzeczy. Jeśli już to albo rozwiązanie komercyjne (trzeba płacić) albo darmowe ale bez ograniczeń. Może PostgrSQL np.

Co do samego sposobu trzymania różnic to są dwie opcje - albo trzymasz każdą wersję albo całą masz tylko pierwszą i ostatnią (ostatnią, żeby dostęp do niej był szybki) a z wersji pomiędzy trzymasz tylko różnicę - ale to już jest trudniejsze i trzeba to dobrze zrobić bo jak się gdzieś sypniesz to stracisz wersje "pomiędzy"


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij
crowa
  • Rejestracja:ponad 18 lat
  • Ostatnio:około 8 lat
  • Lokalizacja:Poznań
  • Postów:295
0

Jesli chcesz robic obieg dokumentow to zacznij od zaprojektowania tabel.
Ogolnie proces polega na przesylaniu wersji pewnego dokumentu miedzy kolejnymi osobami w firmie np:

do firmy przychodzi faktura, ktos generuje jej wersje elektroniczna i przesyla dalej, pozniej generowane sa np rozrachunki i polecenia ksiegowania i rozsylane do poszczegolnych dzialow.
Ostatecznie dokument moze trafiac do np prezesa.

Czyli masz tutaj kilka problemow:
a) przechowywanie dokumentu
b) sciezka mozliwych przekierowan
c) uprawniena.

ja bym zaczal od tabeli z dokumentem - powinna to byc tabela czysto opisowa (bez danych dokumentu). Typowy opis bytu jakim jest dokument (np nazwa, kto utworzyl, data utworzenia, dodatkowe informacje).

Pozniej tabela przekierowan dokumentu (i wlasnie tutaj trzymalbym wersje - pole typu image).

Wersja dokumentu zmienia sie w momencie przesylania go dalej (np ktos go akceptuje, zatwierdza itp).

Dodatkowo powiniennes zadbac o uprawnienia do podgladu (np prezes moze zobaczyc dokument w kazdym kroku, osoba tworzaca np tylo aktualny status i swoje zmiany)

Co do bazy to polecam MSSQL i najlepiej 2008


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance
J1
  • Rejestracja:prawie 16 lat
  • Ostatnio:ponad 7 lat
0

Dzięki za wszystkie uwagi. Właśnie próbuję stworzyć sensowny schemat bazy danych.
Crowa faktycznie jeżeli chodzi o dokumenty z zewnątrz to najrozsądniej trzymać je np. jako Image, ale czy dla dokumentów tylko wewnętrznych firmy (zgłoszenia usterek, złożenie zapotrzebowania na materiały elsploatacyjne) nie wystarczy zwykłe pole tekastowe? Wtedy mam ułatwione nanoszenie zmian (poprawek) - bo tak to musiałbym na nowo generować Image dla każdej zmiany i zapisywać do bazy.
Co do przekierowań dokumentu to myślę żeby stworzyć tablę ze wszystkiemi działami w firmie i przy przekazywaniu dokumenty zaciągać z niej do kogo ma być wysłany dokument? i zapisywać to w tabeli z dokumentem (jak radzi Crowa) Potem wyciągać selectem "do kogo" jest adresowany i na podstawie tego wyświetlać go w odpowiednich działach.

Jeszcze raz dzięki za uwagi

TO
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 4 lata
0

Zabieracie sie panowie do tego wszystkiego od d**y strony (przepraszam, jesli ktos sie poczul urazony).

Nie pisze sie systemu od technologii, a od opisania procesow biznesowych.

Zdefiniowania co sie dzieje w firmie, co sie dziac moze (w przyszlosci)
Zdefiniowania uczestnikow procesów (jakie działy, jakie osoby)
Rozpisania powiązań włęzłów procesów i powiązania uczestników w logiczną całość.

Kiedy powstaną punkty - okreslamy jakie dokumenty pojawiają się na każdym z nich i jaki zakres danych wprowadzany jest na poszczegolnych wezlach. Co wchodzi - co wychodzi.

Dokumenty typowo logistyczne (Magazynówka, Zamówienia, Produkcja, itp.) mają to do siebie, ze wynikają z siebie i oddziaływują jedne na drugie.

Zmierzam do tego, ze trzeba zrozumieć jak funkcjonuje firma od strony analogowej, a pozniej zrobic po prostu cyfrowy model, uogulniając tam gdzie się da.

System bazodanowy nie ma tutaj żadnego znaczenia - w przypadku MS SQL - system sprawdzi sie do 5 użytkowników i bazy (albo 1 albo 4 GB - nie pamietam teraz, ale to też się zmienia w zaleznosci czy mowa o 2000, 2005 czy 2008). Ograniczenie to jednak dotyczy jedynie motoru bazy danych, a nie bazy jako takiej - jeżeli użytkowników będzie więcej - kupisz licencje na SQL Server i już.

Co do MySQL - ja swoj system na razie opieram o niego, bo ma sympatyczny dialekt - to znaczy nie wali usera po łbie kiedy chce wykonać dziwną operację z punktu widzenia języka SQL, ale logiczną z punktu widzenia projektanta - np: żaden system poza MySQL nie pozwala pokazac pola, które nie jest ujęte w klauzuli GROUP BY. Owszem - trzeba mieć świadomość, że pokaże przypadkową wartość (pierwszą lub ostatnią z zakresu), ale jednak. Jedkakże - ja właśnie jestem na etapie przenoszenia logiki aplikacji do bazy danych (Aplikacja powoli staje sie tylko cienkim klientem) i coraz bardziej uwierają mnie dziwne ograniczenia MySQLa (nie potrafię teraz przytoczyć ale mialem niedawno jakiś problem i szlag mnie trafial na MySQLa.)

MS SQL ma najbardziej rozbudowany dialekt i przyznaje, że najfajniej pracuje mi sie właśnie z tym motorem i rozszerzeniami zrobionymi przez Microsoft.

Z musu używam PostgreSQL, który ma bardzo restrykcyjny dialekt SQL, ale tez ma rzutowanie typów, któych nie ma w MySQLu. System uprawnien jest tez sensowniej rozwiazany niz w MySQL (w MySQL nigdy do końca nie mam pewności, kto ma jakie uprawnienia do poszczegolnych obiektow). Inna sprawa, ze powoli przekonuje sie sie do postgresa, ale czy oparlbym swoj system o niego ... raczej nie. Za bardzo irytuje mnie restrykcyjnosc dialektu.

Używałem też Firebirda i przyznam, że czuje do niego sentyment ze względu na jedno narzędzie, któego kiedyś używałem, a które pozwalało debuggować procedury wbudowane tak jak sie to robi w Delphi (krok po kroku). Niby Toad dla MySQLa ma tez cos takiego, ale nie udalo mi sie tego odpalic.

Osobiscie, gdybym startował z aktualna wiedza od zera - zdecydowalbym sie na MS SQLa (mimo, ze jest platny).

Okej - ale co do samego systemu.

Jądro systemu powinno się operac o dwie banalne tabele: Nagłówek i szczegoly. Tabele te powinny zawierac zbior odnosnikow do tabel slownikowych - to znaczy. nie wpisujesz bezposrednio danych kontrahenta do tabeli naglowka, tylko identyfikator do tabeli slownika kontrahentow. Tabela szczegolow nie zawiera danych nt opisu towaru, a tylko odnosnik do kartoteki materialowej. Przy wyciaganiu joinujesz sie do odpowiednich tabel i wyciagasz dokaldnie tyle ile ci potrzeba (w zaleznosci od miejsca w syetemie mozesz dla danego dokumentu potrzebowac wyciagnac 9 lub 90 pol)

Co do historii - widzialem rozwiazanie, gdzie tabele glowne zawieraja ostatnia wersje, a tabela pomocnicza _HISTORY zawiera wszystkie poprzednie wersje (historia tworzy sie automatycznie za pomoca triggerow).

Ogolnie temat rzeka i moznaby pisac o najlepszych praktykach. Jednakze - bez zrozumienia jak dziala dany biznes ciezko bedzie zaprojektowac cos, co po roku uzywania nie okaze sie proteza do protezy podpieranej proteza. Miałem taki epizod i sprawia wielkie problemy w utrzymaniu.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)