Nove funkcije #31487
ZatvorenTSQLBrowse klasa unutar F18 - TEST
100%
Izmjenjeno od Saša Vranić prije skoro 13 godina
već sam ranije spominjao da sam vidio ovu klasu u contrib folderu harboura
Izmjenjeno od Saša Vranić prije skoro 13 godina
prebacio je u naše common stablo
napravio par korekcija
Izmjenjeno od Saša Vranić prije skoro 13 godina
Izmjenjeno od Saša Vranić prije skoro 13 godina
i evo primjer korištenja... u pitanju je tabela fmk.roba
Izmjenjeno od Saša Vranić prije skoro 13 godina
6000 stavki dobijemo u djeliću sekunde
Izmjenjeno od Saša Vranić prije skoro 13 godina
e sad, to je čisti browse
ovdje sada trebaju sve funkcije za obradu podataka, pretragu, filtere itd...
Izmjenjeno od Saša Vranić prije skoro 13 godina
- Naslov promijenjeno iz TSQLBrowse klasa unutar F18 u TSQLBrowse klasa unutar F18 - TEST
Izmjenjeno od Ernad Husremović prije skoro 13 godina
- Vrsta promijenjeno iz Podrška u Nove funkcije
Izmjenjeno od Saša Vranić prije više od 12 godina
napravio sam obradu tipki u browse-u...
recimo
- ctrl + T (briši zapis)
- ctrl + F9 (briši sve zapise)
sada se idem pozabaviti sa unos/ispravka podataka
naime, ovdje sada imamo jednu situaciju:
1) browse ne mora da pokazuje sve kolone tabele, nego samo ono što je selektom odabrano
2) kada editujemo neki zapis trebali bi da vidimo sva aktivna polja za unos
Izmjenjeno od Saša Vranić prije više od 12 godina
u FMK je to radilo na način,
zadajemo matricu sa poljima i karakteristikama i to je ono što će se prikazati u browse-u i editovati također
Izmjenjeno od Saša Vranić prije više od 12 godina
Izmjenjeno od Saša Vranić prije više od 12 godina
kod unosa novog zapisa treba ono da se pozicionira na njega kada se napravi novi zapis... nisam skontao kako to
Izmjenjeno od Saša Vranić prije više od 12 godina
pretraga je napravljena po svakom polju ali se ne koristi pretraga kroz oQuery objekat nego se rade upiti
znači, stanem na polje ID pritisnem "F" i pretražujem polje
- ako unesem "102" tražit će upravo takav zapis
- ako unesem "102%" radit će LIKE svih zapisa ...
- ako unesem "103;22%;51%; radit će egzaktnu pretragu prvog i like za dva ostala
Izmjenjeno od Saša Vranić prije više od 12 godina
najveća petljancija je oko GET-ova kod unosa/ispravke, tu sam se namučio
također recimo i SIFK tabela ostala nepovezana !
Izmjenjeno od Saša Vranić prije više od 12 godina
itd... itd... ima još posla kamara, ali ide dobro
Izmjenjeno od Saša Vranić prije više od 12 godina
dodao i
- F5 - refresh / vraćanje u originalno stanje tabele
- ALT+R - traži/zamjeni sa
- pozicioniranje nakon dodavanja zapisa / ovo je glupa array funkcija koja traži zapis po tabeli... pa je posporo na većem broju zapisa, ali šta je tu je
- CTRL+P - štampanje browse-a, kakvo takvo
invertovao BOX kao i klasični šifrarnici, dodao u vrh info o tabeli i da se radi o TSQLBrowse
dodao i one opcije na dnu...
Izmjenjeno od Saša Vranić prije više od 12 godina
dodao i
- F4 - dupliciranje zapisa
Izmjenjeno od Saša Vranić prije više od 12 godina
ostaje još da se vidi ta veza sa SIFK :( tu ima isto dosta posla...
Izmjenjeno od Saša Vranić prije više od 12 godina
skontao sam jednu divnu stvar, a to su return vrijednosti komandi INSERT, DELETE
tako da u svakom momentu imam podataka o tome
- koji je podatak insertovan
- koji je napravljen update
- itd...
Izmjenjeno od Saša Vranić prije više od 12 godina
- Status promijenjeno iz Novo u Dodijeljeno
- Prioritet promijenjeno iz Normalan u Visok
Izmjenjeno od Saša Vranić prije više od 12 godina
iščitavanje SIFV podataka
Izmjenjeno od Saša Vranić prije više od 12 godina
napravio sam i ostale opcije browse-a kao što su
- zabranjene opcije / restricted_keys
- header
- footer ispis
- itd...
Izmjenjeno od Saša Vranić prije više od 12 godina
postoji jedna interesantna stvar a to je da smo do sada kod browsa uvijek baratali sa tabelama, tako da ako imamo
// redovi
postoji_sifra( ..., {|| key_handler() })
function key_handler()
do case
case Ch = K_F2
? field->idtipdok + field->brdok
endcase
return
e sada će situacija biti malo drugačija...
praktično sada kada inicijalizujemo browsesql objekat
// redovi
_br := sql_browse( ..., {|| key_handler( @_br:current_row ) })
....
function key_handler( curr_row )
do case
case Ch = K_F2
// ovdje sada možemo koristiti _br:curRow
? curr_row:FieldGet( curr_row:curRow:FieldPos("idtipdok")) ....
endcase
return
Izmjenjeno od Saša Vranić prije više od 12 godina
ovo podvlačenje je sporno ostalo, ono da stavimo da neko polje bude druge boje itd...
Izmjenjeno od Saša Vranić prije više od 12 godina
Danas puni dan rađene kontrole...
Povratne vrijednosti objeta TBrowseSQL, commit
F4 opcija, dupliciranje šifre - korekcija SIFV vrijednosti za novo polje commit
Modifikacije na TBrowseSQL i F18SQLBrowse objektima da se ponašaju kao i ObjDbEdit()
znači, poziv šifrarnika, sa tačkom, sa dvije tačke itd...
Definisanje kolona kod F18SqlBrowse objekta commit
Izmjenjeno od Saša Vranić prije više od 12 godina
kodni blok za šifrarnik
//
// otvaranje šifrarnika artikala, kao što je to sada P_ROBA( @id )
//
//
function open_articles( id, x_pos, y_pos )
local oBr := F18TableBrowse():new()
// definisanje kolona
//
// oBr:browse_columns[ naziv_za_ispis, dužina, naziv_polja_iz_tabele, {|| when_block }, {|| valid_block } ]
//
AADD( oBr:browse_columns, { "Šifra", 10, "id", {|| .t. }, {|| .t. } } )
AADD( oBr:browse_columns, { "Naziv", 40, "naz" } ) // vidimo da when i valid blokovi nisu obavezni
AADD( oBr:browse_columns, { "JMJ", 3, "jmj" } )
AADD( oBr:browse_columns, { "Cijena", 12, "mpc" } )
// itd...
// definisanje parametara browse-a
// ref: https://github.com/knowhow/F18_knowhow/blob/master/common/table_browse_sql.prg#L70
// ovdje možemo vidjeti sve parametre box-a
//
oBr:browse_params["form_height"] := MAXROWS() - 15 // visina box-a
oBr:browse_params["form_width"] := MAXCOLS() - 15 // sirina box-a
oBr:browse_params["table_name"] := "fmk.roba" // naziv sql tabele (sa shemom)
oBr:browse_params["table_order_field"] := {"id"} // indeksno polje
oBr:browse_params["table_browse_return_field"] := "id" // polje koje služi za povratnu vrijednost
oBr:browse_params["key_fields"] := { "id", "naz" } // ključna polja, uvijek za šifrarnik idu 2
služi za indeksiranje i za ispise itd...
oBr:browse_params["codes_type"] := .t. // da se zna da je riječ o tip-u tabele šifrarnik
oBr:browse_params["read_sifv"] := .t. // čitaj SIFV podatke zajedno sa postojećim podacima šifrarnika
oBr:browse_params["restricted_keys"] := NIL // zabranjene tipke, inače se proslijeđuje matrica sa postavkama
{ K_F2, K_ESC, ... }
// prikazivanje box-a
oBr:show( @id, x_pos, y_pos )
return .t.
što se tiče parametara browse-a ima ih dosta... ref: ::initialize()
ono što gore nije definisano:
oBr:browse_params["table_filter"] := {"id = '25'", "vpc = 2.0", ... } // koristi se niz...
oBr:browse_params["direct_sql"] := NIL // ovdje možemo definisati skroz jedinstven upit i taj će biti korišten
oBr:browse_params["user_functions"] := NIL // navodi se kao {|| key_handler( @oBr:current_row ) }
oBr:browse_params["header_text"] := "" // tekst koji će se pojaviti na vrhu box-a
oBr:browse_params["footer_text"] := "" // tekst koji će se pojaviti na dnu box-a
oBr:browse_params["invert_row_block"] := NIL // ovo je ostalo nerješeno, a odnosi se na podvlačenje tj. drugi PICT za red
kodni blok za browse proizvoljne tabele
//
// pregled dokumenata
//
function browse_fakt_documents()
local oBr := F18TableBrowse():New()
local _qry
local _params
// ... otvori parametre za pregled
_params := get_params(...)
// na osnovu params sastavi upit
_qry := " SELECT idfirma, idtipdok, brdok ... "
" FROM fmk.fakt_doks "
" LEFT JOIN ..... "
" WHERE " + _params[1] + " AND " + _params[2] .....
" ORDER xyx "
// definisanje kolona
AADD( oBr:browse_columns, { "Firma", 2, "idfirma", {|| .t. }, {|| .t. } } )
AADD( oBr:browse_columns, { "TD", 2, "idtipdok" } ) // vidimo da when i valid blokovi nisu obavezni
AADD( oBr:browse_columns, { "Broj", 8, "broj" } )
AADD( oBr:browse_columns, { "Partner", 6, "idpartner" } )
// itd...
// definisanje parametara browse-a
oBr:browse_params["form_height"] := MAXROWS() - 15
oBr:browse_params["form_width"] := MAXCOLS() - 15
oBr:browse_params["table_name"] := "fmk.fakt_doks"
oBr:browse_params["table_order_field"] := {"idfirma", "idtipdok", "brook"}
oBr:browse_params["key_fields"] := { "idfirma", "idtipdok", "brdok" }
oBr:browse_params["direct_sql"] := _qry
oBr:browse_params["user_functions"] := {|| key_handler( @oBr:current_row )
oBr:browse_params["key_options"] := {"<c+N novi>", "<c+F> Traži", ... } // opcije na dnu forme
oBr:browse_params["key_options_column_count"] := 5 // broj kolona u koliko će biti raspoređene opcije
}
// prikazivanje box-a
oBr:show()
return
// obrada unosa korisničih tipki
static function key_handler( row )
do case
case Ch == K_CTRL_N
MsgBeep( row:FieldGet(1) ) // prikazat ce vrijednost prvog polja
endcase
return DE_CONT
Izmjenjeno od Saša Vranić prije više od 12 godina
treba provjeriti i funkcije koje bi se izvršavale na samom browse-u u kolonama... kako će to funkcionisati
Izmjenjeno od Saša Vranić prije više od 12 godina
definicija kolone, uvedena dva nova parametra
oBr:browse_columns =
{ column_name, column_lenght, column_edit_field_name, { when_block }, { valid_block }, is_editable, is_visible }
definisanje kolona, u primjeru:
Izmjenjeno od Saša Vranić prije više od 12 godina
još niz izmjena na tsqlbrowse
Izmjenjeno od Saša Vranić prije više od 12 godina
recimo, koristio sam delete metodu za brisanje zapisa, ali problem postoji kod JOIN-ovanih tabela, tu ne možemo koristiti, pa sam napravio ovakvu implementaciju
prvo se pokušava koristiti metoda delete samog browse objekta, pa ako ne uspije onda se pravi ekstra upit
Izmjenjeno od Saša Vranić prije više od 12 godina
- Status promijenjeno iz Dodijeljeno u Zatvoreno
- % završeno promijenjeno iz 0 u 100
ovaj tiket se može zatvoriti, sve osnovne funkcije su ubačene, ali se na klasi radi još...