[ popmilan76 @ 15.03.2018. 21:16 ] @
Treba da izvucem iz stringa koji je u formatu 12g11m12d,treba da izvucem integer 12,znaci samo godine,probao sa copy
staz := strtoint(copy(edit5.Text,1,2)); ali nece u debugeru prikazuje prazno polje...
[ savkic @ 15.03.2018. 21:26 ] @
Negde gresis ili ti ulazni podatak nije kakav ocekujes. Copy(StringValue, 1, 2) vraca prva dva slova stringa i ako su to cifre, StrToInt ce ih pretvoriti u broj.
[ popmilan76 @ 15.03.2018. 21:34 ] @
Da,izgleda da je problem da mi ne vraca iz prethodne forme podatak...
[ popmilan76 @ 15.03.2018. 21:48 ] @
Taj podatak treba da mi se pojavi iz druge forme,odnosno iz eventa dbgrid1.dblclick , tu izracunavam taj podatak i posle ga zatvaram,tu drugu formu,i kako sacuvati taj podatak kada se zatvori druga forma,i da li treba da uradim form1.activate prve forme?
[ savkic @ 15.03.2018. 22:01 ] @
> Taj podatak treba da mi se pojavi iz druge forme,odnosno iz eventa dbgrid1.dblclick , tu izracunavam taj podatak i posle ga
> zatvaram,tu drugu formu,i kako sacuvati taj podatak kada se zatvori druga forma,i da li treba da uradim form1.activate prve forme?

Ako je svrha te druge forme da korisnik odabere neki record odnosno neki string onda napravi funkciju koja prikazuje formu2 i vraca zeljeni string.
Dobar primer je InputBox Delphi funkcija koja prikazuje posebnu formu sa edit boxom i upisani rezultat vraca natrag.
[ popmilan76 @ 15.03.2018. 22:19 ] @
Da,to bi trebalo da odabere radnika,i jos mnogo toga jos,ja sam postavio neke var na tim formama,ali se negde podatak ubije,meni bi trebalo iz druge forme u prvu da vrati ovo:
frmgodisnjiodmori.staz1 := IntToStr(god_zbir)+ 'g ' + IntToStr(mes_ostatak) + 'm ' + IntToStr(dan_ostatak) + 'd ';
ovo je prva forma a ovo podatak iz druge forme.
[ popmilan76 @ 16.03.2018. 21:46 ] @
Sada mi se desava da samo prvi put na dbgrid dbl click se pojavi greska,a posle toga radi normalno...Ne prelazi mi iz nekog razloga varijabla iz druge forme na prvu,negde gresim...Kada izlazim iz druge forme,posle dblclick,treba da mi radi edit1.onchenge,sa tom varijablom iz druge forme...
[ savkic @ 16.03.2018. 22:40 ] @
Ne dajes dovoljno informacija, moras jasno formulisati pitanje ako ocekujes pomoc od ljudi sa grupe.
[ popmilan76 @ 17.03.2018. 20:17 ] @
Izvanjavam se,u brzini sam pisao...Evo ovako,imam dve forme,frmgodisnjiodmori i frmizbor radnika.U prvoj formi izmedju ostalog,tu su mi dva edita,edit 9 i edit1,u editu 9 kada kliknem f3,pojavi se ova druga forma,sa tabelom radnika,i kada kliknem dva puta na dbgrid,nekog radnika,zatvori se druga forma,i ostaje ova prva,gde iz druge vucem staz u obliku 12g1m15d,i taj podatak mi izlazi kao greska,da mi '' nije integer,i to samo prvi put kada otvorim tu drugu formu,vec sledeci put bude sve ok...S tim sto mi u prvoj formi na edit1 mi je postavljen onchange event,gde je to rbr radnika.
[ Milan Milosevic @ 18.03.2018. 10:14 ] @
Koristi debager.
U delu koda gde ocitavas.
Inace 12g1m15d ne moze da ti ocita kao integer jer i nije.
[ popmilan76 @ 18.03.2018. 12:08 ] @
Uspeo sam,hvala svima,lose sam radio u kodu,umesto da prabacim samo godinu,kao integer,ja sam hteo preko copy,da izdvojim number iz stringa,sto je bilo pogresno i nepotrebno.Ali sam odmah uleteo u drugi problem,posto je ovo program koji racuna godine staza nekog radnika u preduzecu,a vec postoji program u Accessu,koji je to radio,ali zbog nekih zakonskih prohteva,vise nije u upotrebi,za sve radnike u accessu,staz racuna dva dana vise,u odnosu na mene...i zaista ne vidim gde gresim.Svi radnici su imali staz na dan pocetka programa u formatu 010314(god,mesec,dani) i odnosu na danasnji dan ,razlikuje se u dva dana.Inace od ovog,treba oduzeti samo neplaceno odsustvo,koje ne ide u staz,i to sam uradio,ali ovo neslaganje je za sve radnike.Da ne prave problem mozda prestupne godine?


Ovo je kod koji ja koristim:

d:= dan;//radni staz donet (broj dana)
m:= mes;//radni staz donet (broj meseci)
g:= god;//radni staz donet (broj godina)
ANow:= Danas;
AThen:=datumunosa;//postavka datuma
DMYBetween(ANow,AThen,Days, Months, Years);
DMYBetween(ANow1,AThen1,Days1, Months1, Years1);
br_mes:= (d + Days - days1) div 30;//broj meseci
dan_ostatak:= (d + Days - days1) - (br_mes * 30);//ostatak
br_god:= (m + Months + br_mes - months1) div 12;//broj godina
mes_ostatak:= (m + Months + br_mes - months1) - (br_god * 12);//ostatak
god_zbir:= (g + Years + br_god - years1);//zbir godine

[Ovu poruku je menjao popmilan76 dana 18.03.2018. u 13:25 GMT+1]
[ savkic @ 18.03.2018. 13:40 ] @
Za racunanje staza postoje posebna pravila koja nisu 1+1=2, moras pronaci ta pravila pa proveriti kod.
[ popmilan76 @ 18.03.2018. 14:02 ] @
Kad sam radio program,pre 5 godina,bilo je dobro sa tim programom u Accessu,a sada kasni dva dana,pa sam pomislio da nije nesto vezano za prestupnu godinu.
[ popmilan76 @ 21.03.2018. 16:03 ] @
znam ,da nije bas jednostavno,ali je u mom kodu izgleda problem,da ne racuna prvi dan,stavio sam nekog radnika,i taj dan mu izracuno staz i njemu je 00 00 00,a trebalo bi da bude 00 00 01...Negde sam videi slično rešenje,ali sada ne mogu naći...
[ popmilan76 @ 21.03.2018. 16:41 ] @
Zaboravih kod koji koristim,evo ga sada:

uses
DateUtils;

procedure DMYBetween(ANow, AThen: TDate; var Days, Months, Years: Integer);
begin
Years := YearsBetween(ANow, AThen);
AThen := IncYear(AThen, Years);
Months := MonthsBetween(ANow, AThen);
AThen := IncMonth(AThen, Months);
Days := DaysBetween(ANow, AThen);
end;

procedure TForm1.Button1Click(Sender: TObject);
var d,m,g,Days,Months,Years,br_mes,br_god,god_zbir,dan_ostatak,mes_ostatak : integer;
ANow, AThen: TDate;
begin
try
d:= 25;//radni staz donet (broj dana)
m:= 8;//radni staz donet (broj meseci)
g:= 15;//radni staz donet (broj godina)
ANow:= Now;
AThen:= StrToDate('26.06.2000');//postavka datuma
DMYBetween(ANow,AThen,Days, Months, Years);

br_mes:= (d + Days) div 30;//broj meseci
dan_ostatak:= (d + Days) - (br_mes * 30);//ostatak
br_god:= (m + Months + br_mes) div 12;//broj godina
mes_ostatak:= (m + Months + br_mes) - (br_god * 12);//ostatak
god_zbir:= (g + Years + br_god);//zbir godine


To je prepisano sa nekog od foruma.
[ popmilan76 @ 22.03.2018. 20:23 ] @
Nesto sam provalio,da mi je dobro samo kada mesec ima 30 dana...

br_mes:= (d + Days) div 30;//broj meseci
dan_ostatak:= (d + Days) - (br_mes * 30);//ostatak
br_god:= (m + Months + br_mes) div 12;//broj godina
mes_ostatak:= (m + Months + br_mes) - (br_god * 12);//ostatak
god_zbir:= (g + Years + br_god);//zbir godine

Kako da napravim da mi prepozna mesec koji ima 30,31 ili 28,29
[ popmilan76 @ 22.03.2018. 20:41 ] @
Ne treba,nasao sam,mislim da bi ovo trebalo da radi:

brojdana := DaysInAMonth(DateUtils.YearOf(Now), DateUtils.MonthOf(Now));
[ tkaranovic @ 23.03.2018. 11:07 ] @
Verovatno nisi cuo za Dejana Ristanovica ali on se pre nekih "100 godina" bavio kalendarom.
Moze da se pogleda na ovoj stani gde ima i pascal kod:

https://www.dejanristanovic.com/refer/kalendar.htm

[ popmilan76 @ 23.03.2018. 13:43 ] @
Nisam,ali je stvarno napravio nauku od kalendara...Najbolje bi bilo da se prihvati Milankovicev kalendar,pa sve meseci sem februara 30 dana,a prestupna svaka 4 godina,29 dana...i programski bi se lepo napravilo...
[ ravni @ 26.03.2018. 08:10 ] @
Bilo bi bolje, ali bi onda za radnike racunao staz na dva nacina: do promene i nakon promene kalendara :)