Projekat

Općenito

Profil

Akcije

Nove funkcije #31295

Zatvoren

Brzo switchanje podataka ranijih sezona - ranijih poslovnih godina

Dodano od Ernad Husremović prije skoro 13 godina. Izmjenjeno prije skoro 13 godina.

Status:
Zatvoreno
Prioritet:
Urgentno
Odgovorna osoba:
Saša Vranić
Početak:
06.07.2013
Završetak:
% završeno:

100%

Procjena vremena:
Akcije #1

Izmjenjeno od Ernad Husremović prije skoro 13 godina

ako u sezonske baze - baze ranijih godina vratimo flag "read-only"

ako dodamo datum_zakljucavanja na serveru i taj parametar isti pohranimo i lokalno u ~/.fmk.ini

onda reći:

if db_read_only and datum_zakljucavanja(server) <= datum_zakljucavanja(klijent)
nema potrebe raditi sync
endif

algoritam je analogan načinu provjere verzije na serveru

Bitno je međutim radi eventualnih oštećenja lokalnih dbf-ova obezbjediti korisniku da forsirano uradi sinhronizaciju lokalnih podataka

Akcije #2

Izmjenjeno od Ernad Husremović prije skoro 13 godina

Bitno je međutim radi eventualnih oštećenja lokalnih dbf-ova obezbjediti korisniku da forsirano uradi sinhronizaciju lokalnih podataka

to će se obezbjediti sa #31296

Akcije #3

Izmjenjeno od Ernad Husremović prije skoro 13 godina

  • Naslov promijenjeno iz Brzo switchanje u sezonama u Brzo switchanje podataka ranijih sezona - ranijih poslovnih godina
Akcije #4

Izmjenjeno od Saša Vranić prije skoro 13 godina

što nam je bitan datum zaključavanja servera i klijenta ?

zar nije samo bitan

readonly = TRUE ili FALSE

Akcije #5

Izmjenjeno od Saša Vranić prije skoro 13 godina

Kod svičanja godina se koristi funkcija koja radi sinhronizaciju podataka te provjerava i stanje dbf fajlova, pa radi full sink po potrebi...

Praktično kod ulaska tu će biti parametar koji će se gledati, ako je readonly onda to ništa neće raditi, jednostavno će ući bez sinka

Akcije #6

Izmjenjeno od Saša Vranić prije skoro 13 godina

a to je post_login funkcija, koja se koristi unutar klase company_db_relogin

https://github.com/knowhow/F18_knowhow/blob/7c257a88687b089ece37ee11cdb72ce3e96a126d/common/f18_init_login.prg#L317

Akcije #7

Izmjenjeno od Ernad Husremović prije skoro 13 godina

što nam je bitan datum zaključavanja servera i klijenta ?

05.05 urađen lock datum_zakljucavanja=05.05
06.05 pristupam bazi
07.05 radim administrator radi izmjene datum_zakljucavanja=07.05
08.05 pristupam bazi i vidim da je moj lokalni datum_zakljucavanja 05.05 < server datum_zakljucavanja 07.05 znači da moram ponovo uraditi sync - najsigurnije full sync

Akcije #8

Izmjenjeno od Ernad Husremović prije skoro 13 godina

ispravka: vijeme_zaključavanja (timestamp varijabla)

Akcije #9

Izmjenjeno od Saša Vranić prije skoro 13 godina

Akcije #10

Izmjenjeno od Saša Vranić prije skoro 13 godina

hm... ovo je praktično zaobilaženje prvog init sinkanja, kod startanja aplikacije

ako ovo zaobiđem i odem recimo na karticu finansijku i bilo je promjena nekih, meni će se sinhronizacija odraditi opet

znači, ovo što sam gore naveo je samo inicijelni sink kod ulaska...

nije ni to loše, ako bude bilo šta za pokupiti pokupiti će se

Akcije #11

Izmjenjeno od Ernad Husremović prije skoro 13 godina

znači, dovoljno je da se uvede read_only - timestamp varijabla.
binarna read_only varijabla ne sadrži dovoljno informacija

Akcije #12

Izmjenjeno od Saša Vranić prije skoro 13 godina

zaključavanje baze znači da se niti jedan podataka ne bi smjeo izmjeniti nakon toga,

to znači obradu ovog parametra na

  • common/sifrarnici_browse
  • moduli/ažuriranje, povrat, itd....
  • svaka ostala izmjena podatka

kada je parametar uključen neće se dešavati:

  • init syncro
  • svaki sinhro kod ulaska u tabele O_TABELA

ne sviđa mi se baš ideja štimanja parametara po radnim stanicama, jer to bi značilo da imamo globalni parametar a i klijentski ini ili pg parametar svejedno, što znači da bi i svaka stanica trebala da setuje svoj klijentski parametar

pogotovo tamo gdje je više stanica... to nije baš jednostavno

Ako zaključamo bazu (na globalnom nivou) praktično sve ono što sam gore naveo ne bi trebalo da se dešava, a time ne bi trebalo da se dešava ni semaforanje.

A postoji li mogućnost setovanja na serverskoj strani, zabrane INSERT, DELETE, UPDATE ? ili nešto slično, na nivou baze

Akcije #14

Izmjenjeno od Ernad Husremović prije skoro 13 godina

nikakvo štimanje parametra po radnim stanicama nije ni predviđeno.

kako sam gore rekao - analogno je upgrade-u baze.

u config datoteci se nakon sinhronizacije i čitanja parametra read_only sa servera ovaj parametar postavlja lokalno.

isto kao što se setuje verzija baze.

- Admin zaključa kao readonly bazu 05.05 u 15:00 => server read_only = 2013050515:00
- nijedan klijent nema setovan read_only
- klijent na serveru nađe read_only - kod sebe ga nema => full sync. nakon synca setuje lokalno readonly = 2013050515:00

nikakva ručna intervencija nije predviđena

Akcije #16

Izmjenjeno od Saša Vranić prije skoro 13 godina

ako bi imali dva parametra

  • globalni / read_only_lock / 05.05.2013
  • korisnički / read_only_lock / 05.05.2013

praktično, korisnik koji bi zaključao bazu, odmah bi setovao

  • globalni
  • i svoj korisnički (isti datum)

ostali korisnici, prilikom ulaska:

  • ako postoji globalni, a ne postoji korisnički
  • setujemo korisnički parametar na osnovu globalnog
  • to će se desiti samo kod prvog ulaska nakon lock-a (sve dok nema korisničkog lock-a)

ako bi nekada napravio unlock/lock on bi opet setovao novi datum

  • globalnog
  • i meni korisničkog

ostali korisnici prilikom ulaska

  • provjera korisnički < globalnog
  • poruka da je nešto mjenjano
  • odradi se sinhro podataka kao u redovnom režimu
Akcije #17

Izmjenjeno od Ernad Husremović prije skoro 13 godina

s obzirom da je sada user = radna_stanica, može i ova varijanta

Akcije #18

Izmjenjeno od Saša Vranić prije skoro 13 godina

implementirana klasa F18_DB_LOCK

F18_DB_LOCK

Akcije #19

Izmjenjeno od Saša Vranić prije skoro 13 godina

Ubacio sam setovanje parametra zaključavanja/otključavanja...

Akcije #20

Izmjenjeno od Saša Vranić prije skoro 13 godina

također sam obradio ovaj lock na startu aplikcije...

tu sam shvatio da nisu semafori toliko sporni koliko prolazak kroz sve tabele

  • provjeri jel trebaš napraviti
  • kreiraj indekse
  • provjeri semafore

sada kada se baza zaključa, kraći je put do ulaska, međutim i dalje imamo taj mali delay radi čekiranja

  • provjeri jel trebaš napraviti dbf
  • kreiraj indekse

pa tako za bezbroj tabela (svi moduli)

Akcije #21

Izmjenjeno od Saša Vranić prije skoro 13 godina

napravljeno još niz korekcija, uvedena kontrola kod opcija unosa itd...

uvedena kontrola kod šifrarnika...

Opcija zaključavanja/otključavanja smještena pod slovo "L" na meniju odabira modula...

lozinka je ADMIN

Akcije #22

Izmjenjeno od Saša Vranić prije skoro 13 godina

ostaje jedino jedno pitanje...

kako setovati recimo svim bazama ovaj parametar automatski, za recimo sve stare godine

jer recimo knjigovodstveni servisi, moraju ući u svaku od godina pa izaći na ovaj meni pa setovati ovo, što i nije baš praktično...

što znači da bi locking sistem trebalo napraviti i na glavnom meniju kod odabira firmi, na F10 opciji gdje bi ona odradila

prošla kroz sve baze i zaključala sve godine koje su < 2013 recimo (tekuće)

Akcije #23

Izmjenjeno od Ernad Husremović prije skoro 13 godina

  • Projekat promijenjeno iz 103 u F18
Akcije #24

Izmjenjeno od Ernad Husremović prije skoro 13 godina

što znači da bi locking sistem trebalo napraviti i na glavnom meniju kod odabira firmi, na F10 opciji gdje bi ona odradila

ne ovo mi se ne sviđa

dovoljno je uraditi automatsko zaključavanje po ovom algoritmu:

if (lock parametar nije setovan u bazi) and (max(dat_dok) u fin_suban < tekuća_godina - 2)
onda automatski setuj parametar lock na današnje vrijeme

Akcije #25

Izmjenjeno od Ernad Husremović prije skoro 13 godina

znači, ako je aktuelna godina 2013, ako u bazi kojoj pristupamo imamo fin dokumente maksimalno iz 2011 => setuj lockovanje (ako ranije nije bilo setovano)

Akcije #26

Izmjenjeno od Ernad Husremović prije skoro 13 godina

ovdje treba razlučiti šta znači setovan parametar

recimo "0" znači da je parametar setovan, ali da je baza otključana (default)

Akcije #27

Izmjenjeno od Ernad Husremović prije skoro 13 godina

praktično treba init funkcija za parametar:

- 0 ako je tekuća godina ili prazna baza (nema fin dokumenata)
- setovati timestamp na današnji datum (datum pristupa) ako je max(datdok) = 2011

Akcije #28

Izmjenjeno od Ernad Husremović prije skoro 13 godina

- što se tiče pristupa tekuća godina - 1 (sada je to 2012) tu je najbolje korisnika prilikom prvog ulaska pitati - da li je poslovna godina zaključena. to je treća varijanta

Akcije #29

Izmjenjeno od Ernad Husremović prije skoro 13 godina

Ernad Husremović je napisao/la:

- što se tiče pristupa tekuća godina - 1 (sada je to 2012) tu je najbolje korisnika prilikom prvog ulaska pitati - da li je poslovna godina zaključena. to je treća varijanta

naravno ako do sada parametar nije bio setovan.

Akcije #30

Izmjenjeno od Ernad Husremović prije skoro 13 godina

naglasiću da se ovo automatsko setovanje treba napraviti prema fin_suban max(datdok) a ne prema imenu baze

Akcije #31

Izmjenjeno od Saša Vranić prije skoro 13 godina

da, ali masa je baza gdje se samo OS recimo koristi (ili neki ostali moduli) ili slično, znači nema FIN-a

Akcije #32

Izmjenjeno od Saša Vranić prije skoro 13 godina

tekuća godina - 1 treba da se ispituje sa 3 mjesecom ( nakon završnog obračuna )

Akcije #33

Izmjenjeno od Saša Vranić prije skoro 13 godina

a sve ostalo ispod da se zaključa automatski

Akcije #34

Izmjenjeno od Saša Vranić prije skoro 13 godina

:) ako je dobar datum na radnoj stanici

Akcije #35

Izmjenjeno od Ernad Husremović prije skoro 13 godina

Saša Vranić je napisao/la:

da, ali masa je baza gdje se samo OS recimo koristi (ili neki ostali moduli) ili slično, znači nema FIN-a

napraviti onda inteligentniju provjeru

if nema fin dokumenata vidi os max(datnab)

Akcije #36

Izmjenjeno od Ernad Husremović prije skoro 13 godina

Saša Vranić je napisao/la:

tekuća godina - 1 treba da se ispituje sa 3 mjesecom ( nakon završnog obračuna )

ovo automatsko zaključavanje je bitno prvenstveno sada kada se opcija uvodi.

a nakon toga je potrebno da korisnik zaključa bazu po napravljenom obračunu - tada se neće primjenjivati automatsko zakljuačvanje jer će parametar već biti setovan - 0 (otključano)

Akcije #37

Izmjenjeno od Ernad Husremović prije skoro 13 godina

Saša Vranić je napisao/la:

:) ako je dobar datum na radnoj stanici

datum se može uzeti sa servera. čak šta više poželjno je uzeti sa servera

Akcije #38

Izmjenjeno od Saša Vranić prije skoro 13 godina

dobro, datum se uzima sa servera

na kraju imamo 3 stanja

  • bez parametra - prvi put se ulazi... ili nije nikako setovano zaključavanje na serveru
  • "0" - otključana nakon zaključavanja
  • "date" - datum zaključavanja
Akcije #39

Izmjenjeno od Saša Vranić prije skoro 13 godina

Ubacio sam provjeru max datuma u finansijama...

Akcije #40

Izmjenjeno od Saša Vranić prije skoro 13 godina

testirao ulazak u prošlu godinu, desilo se automatsko zaključavanje...

situacija kao 2013/2012 se provjerava po sistemu

  • max datum naloga
  • tekuća godina da je dan + mjesec > od 15.03 (to je doba kada je već sve završeno oko završnog)

stare godine se zaključavaju odmah

Akcije #41

Izmjenjeno od Saša Vranić prije skoro 13 godina

kada se baza jednom zaključa i otključa status tog parametra je "0"

u toj situaciji se više ne provjerava stanje

F18_DB_LOCK:db_must_be_locked()
Akcije #42

Izmjenjeno od Saša Vranić prije skoro 13 godina

mislim da je to to, pa ću zapakovati sada verziju

1.4.208

Akcije #43

Izmjenjeno od Saša Vranić prije skoro 13 godina

  • Status promijenjeno iz Dodijeljeno u Zatvoreno
  • % završeno promijenjeno iz 0 u 100
Akcije

Također dostupno kao Atom PDF