Search  
Wednesday, May 23, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Visual FoxPro in general  Ajutor calcul d...
 Ajutor calcul date
 
 4/7/2011 12:06:33 AM
User is offlinepepito
7 posts


Ajutor calcul date
 (Romania)

  Salut.
  Sunt un incepator in FoxPro si m-am lovit de o mica problema.
  M-am apucat sa fac un program despre clientii unei societati care furnizeaza energie electrica (ceva asemanator ENEL) si nu stiu cum sa aflu perioada de calcul (nr_zile) scazand din data curenta ultima data inregistrata (data_cit) pentru o anumita serie_c (serie contor) (ex. 123456).
  Acesta este tabelul cu inregistrarile (index.dbf):


client

data_cit

nr_zile

index_cit

consum

ionescu

15-01-2011

 

19356

 

ionescu

16-03-2011

 

19653

297

popescu

03-01-2011

 

10247

 

popescu

04-03-2011

 

10421

174

vasilescu

25-01-2011

 

32315

 

vasilescu

26-03-2011

 

32415

100


  Iar acesta este programul index.prg :


CLEAR
SET TALK OFF
CLOSE databases
CLOSE TABLES all
SET DATE DMY
SET CENTURY on
SELECT 1
USE clienti
SELECT 2
USE index
SELECT 3
USE tarife
SELECT 4
USE taxe

DEFINE WINDOW w FROM 10,60 TO 64,114
ACTIVATE WINDOW w
SELECT 1
accept 'Numele abonatului=' to mnume
SET EXACT ON
LOCATE FOR nume=mnume
IF FOUND() then
SELECT 2
?' Ultima data',data_cit
?' Data citire',DATE()
?' Index vechi=',index_cit
input ' Index nou  =      ' to index_nou
?
con=index_nou-index_cit
?' Consum='+ltrim(STR(con)),'KWH'
?
?' Perioada facturare=        ',data_cit,'-',date()
?
z=DATE()-data_cit
?' Numar zile='+LTRIM(STR(z)),'ZILE'
?
SELECT 3
valc=con*cr
?' Valoare=                    ',ROUND(valc,2),'LEI'
tva=valc*24/100
?' Valoare T.V.A.=             ',ROUND(tva,2),'LEI'
?
rez1=tarife.rez*z
?' Valoare rezervare=          ',ROUND(rez1,2),'LEI'
tva_rez=rez1*24/100
?' T.V.A. rezervare=           ',ROUND(tva_rez,2),'LEI'
?
val_acc=acc*con
?' Valoare acciza=             ',ROUND(val_acc,2),'LEI'
tva_acc=val_acc*24/100
?' T.V.A. acciza=              ',ROUND(tva_acc,2),'LEI'
?
SELECT 4
?' Taxa radio=                        ',ROUND(radio,2),'LEI'
?
?' Taxa TV=                           ',ROUND(tv,2),'LEI'
?
total=valc+rez1+val_acc
?' Valoare factura fara T.V.A.=',ROUND(total,2),'LEI'
total_tva=tva+tva_acc+tva_rez
?' Valoare T.V.A. factura=     ',ROUND(total_tva,2),'LEI'
?
total_f=total+total_tva+radio*2+tv*2
?' Valoare factura=            ',ROUND(total_f,2),'LEI'
ENDIF
?

lady=" "
do iesire with lady,"Doresti sa mai continui ?"
if lady="D" then
        close data
        do index
else
   close databases
    return
ENDIF

 PROCEDURE iesire

PARAMETER intreb,mess1

DEFINE WINDOW day FROM 64,63 TO 69.1,111.8 ;
COLOR w+/gr  SHADOw
ACTIVATE WINDOW day
@0,1 SAY PADC(mess1,WCOLS());
   PICTURE "@I"
@2,10 GET intreb;
   PICTURE "@*HT <  \<Da  >;<  \<Nu  >";
   SIZE 1,10,5;
   MESSAGE " "
READ
intreb=SUBSTR(intreb,4,1)
DEACTIVATE WINDOW day
DEACTIVATE WINDOW w
RETURN


  Cu speranta ca poate m-am facut inteles astept ajutor din partea ASILOR in ale Visual FoxPro-ului.

 4/7/2011 12:09:43 AM
User is offlinepepito
7 posts


Re: Ajutor calcul date
 (Romania)
Scuze am pus un tabel cu date gresite.
Acesta este tabelul :

Serie_c

data_cit

nr_zile

index_cit

consum

123456

15-01-2011

 

19356

 

123456

16-03-2011

 

19653

297

965834

03-01-2011

 

10247

 

965834

04-03-2011

 

10421

174

5378924

25-01-2011

 

32315

 

5378924

26-03-2011

 

32415

100


 4/7/2011 7:06:15 AM
User is offlineaurelian ungureanu
232 posts
4th




Re: Ajutor calcul date
 (N/A) Modified By aurelian ungureanu  on 4/7/2011 7:07:32 AM)
replace nr_zile with date()-data_cit, unde date() este data sistemului.
 4/8/2011 6:54:00 PM
User is offlinepepito
7 posts


Re: Ajutor calcul date
 (N/A)
 Multumesc pentru ajutor.
 Dar eu vroiam ca din data curenta(date()) sa scad ultima data inregistrata a unui anumit abonat.
 Am incercat cu max(data_cit), dar nu dau de cap, cand scriu "select max(data_cit) as maxdata_cit from index where serie_c=mserie_c",
imi afiseaza respectiva data in tabelul index.dbf, dar cand e vorba de scaderea ei din data curenta nu face nimic.
 Am simplificat putin programul ca sa ne referim numai la operatiile cu data calendaristica.

CLEAR
SET TALK OFF
CLOSE databases
CLOSE TABLES all
SET DATE DMY
SET CENTURY on
SELECT 1
USE index


DEFINE WINDOW w FROM 10,60 TO 64,114
ACTIVATE WINDOW w
SELECT 1
input 'Numele abonatului=' to mserie_c
SET EXACT ON
LOCATE FOR serie_c=mserie_c
IF FOUND() then

SELECT 2

select max(data_cit) as maxdata_cit from index where serie_c=mserie_c

?' Ultima data',maxdata_cit
?' Data citire',DATE()
?
?' Perioada facturare=        ',date(),'-',max(data_cit)
?
z=DATE()-max(data_cit)
?' Numar zile facturare=',z,'ZILE'
ENDIF
?

lady=" "
do iesire with lady,"Doresti sa mai continui ?"
if lady="D" then
        close data
        do index
else
   close databases
    return
ENDIF

 PROCEDURE iesire

PARAMETER intreb,mess1

DEFINE WINDOW day FROM 64,63 TO 69.1,111.8 ;
COLOR w+/gr  SHADOw
ACTIVATE WINDOW day
@0,1 SAY PADC(mess1,WCOLS());
   PICTURE "@I"
@2,10 GET intreb;
   PICTURE "@*HT <  \<Da  >;<  \<Nu  >";
   SIZE 1,10,5;
   MESSAGE " "
READ
intreb=SUBSTR(intreb,4,1)
DEACTIVATE WINDOW day
DEACTIVATE WINDOW w
RETURN
 4/8/2011 11:00:57 PM
User is offlinemgabi
135 posts
5th


Re: Ajutor calcul date
 (N/A)
in loc de:
z=DATE()-max(data_cit)

incearca:
z=DATE()-maxdata_cit

Adica rezultatul, nu functia.
 4/8/2011 11:04:55 PM
User is offlineDaniel Buduru
2332 posts
1st




Re: Ajutor calcul date
 (N/A) Modified By Daniel Buduru  on 4/8/2011 11:18:38 PM)
@Pepito
Codul pe care l-ai scris este cod FoxPro 2.x, nu VFP.
In vfp, problema se rezolva mult mai simplu :

* Crearea unei tabele de test
SET NULL on
CREATE TABLE c1 (serie_c i, data_cit d, index_cit i, data_ant d null, index_ant i null, nr_zile i, consum i, consum_z n(6,2) null)
INSERT INTO c1 (serie_c, data_cit, index_cit) VALUES (12345, DATE(2011,1,15), 19356)
INSERT INTO c1 (serie_c, data_cit, index_cit) VALUES (12345, DATE(2011,3,16), 19653)
INSERT INTO c1 (serie_c, data_cit, index_cit) VALUES (965834, DATE(2011,1,3), 10247)
INSERT INTO c1 (serie_c, data_cit, index_cit) VALUES (965834, DATE(2011,3,4), 10421)
INSERT INTO c1 (serie_c, data_cit, index_cit) VALUES (5378924, DATE(2011,1,3), 32315)
INSERT INTO c1 (serie_c, data_cit, index_cit) VALUES (5378924, DATE(2011,3,26), 32415)

*Calculul numarului de zile si al consumui intre citirea indexului
SELECT * FROM c1 INTO CURSOR c11 ORDER by serie_c, data_cit readwrite
USE DBF('c11') ALIAS c12 IN (SELECT('c12')) AGAIN
SELECT c11
SET RELATION TO RECNO()-1 INTO c12
replace ALL data_ant WITH c12.data_cit, index_ant WITH c12.index_cit, nr_zile WITH data_cit-c12.data_cit, consum WITH index_cit-c12.index_cit FOR c11.serie_c=c12.serie_c
BROWSE LAST nowait

*Actualizarea tabelei
UPDATE c1 SET data_ant=c11.data_ant, index_ant=c11.index_ant, nr_zile=c11.nr_zile, consum=c11.consum, consum_z=c11.consum/c11.nr_zile ;
    from c11 WHERE c11.serie_c=c1.serie_c AND c11.data_cit=c1.data_cit

SELECT c1
GO TOP
BROWSE LAST nowait

Comenzile @SAY, @GET exista in VFP doar pentru compatibilitatea cu aplicatiile scrise in FoxPro, dar nu se mai folosesc.
In VFP se utilizeaza form, label, textbox in locul afisarii direct in screen si a preluarii datelor cu ACCEPT.

Daniel Buduru
 4/22/2011 12:34:34 PM
User is offlinepepito
7 posts


Re: Ajutor calcul date
 (N/A)
Multumesc, dar problema e ca nu stiu cum sta treaba cu comenzile si cum sa le folosesc in form-uri, de exemplu pentru preluare date din tabele, afisare, inregistrare in tabele si eventual printarea lor.
Daca mi-ati putea spune unde sa gasesc o carte sau ceva in care sa explice cum sta treaba cu procedurile pentru INIT, ACTIVATE s.a.m.d. si cu cateva exemple.
Va multumesc inca odata pentru ajutor.

 4/22/2011 1:51:09 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Ajutor calcul date
 (N/A)

Comenzile le folosesti in exact acelasi mod ca si in prg-uri. Singura diferenta e ca le scrii in codul unei metode.

Pentru parte a doua a intrebarii - trebuie sa intelegi conceptul de "eveniment".

#1. Evenimentul este o chestie care "se intampla". Click-ul pe un buton, redimensionarea unei ferestre, activarea ferestrei, etc, etc. Daca "se intampla" este eveniment. Daca o apelezi in mod explicit (un exemplu ar fi Form.Hide()), atunci e metoda. Inca o data, ca sa fiu sigur ca sunt inteles: evenimentele se executa singure, metodele trebuie apelate.

Evenimentul este CHESTIA care se intampla. "Chestia" are si niste cod asociat (de exemplu, codul din Button.Click). VFP prezinta evenimentul si codul sau asociat ca fiind unul si acelasi lucru, dar in realitate nu este asa. Evenimentul Click are ASOCIATA o metoda Click() care este apelata automat de catre eveniment.

Bun. Revizuim definitia de mai sus: exista evenimente si metode. Evenimentele NU pot fi apelate, tocmai pentru ca sunt evenimente; metodele se pot apela (inclusiv cele asociate evenimentelor). Altfel spus, daca executi Button.Click(), NU inseamna ca ai apelat EVENIMENTUL Click, ci METODA asociata evenimentului Click. Sper ca este clar.

#2. In VFP ai o prietena; o cheama Lisa G. Mdap. Draga de Lisa: Load Init Show Activate GotFocus. Asta este ordinea in care se executa evenimentele la instantierea oricarui obiect in VFP. Daca trimiti parametri in procesul de instantiere (de ex: CreateObject("form", par1, par2, par3)), parametrii sunt primiti in Init, desi NU este primul eveniment. (Evenimentul Load exista tocmai ca sa-ti dea voie sa faci eventuala bucatarie interna INAINTE de a primi parametri. Daca n-ai bucatarie de facut, ignori Load si folosesti direct Init). Unele obiecte nu au toate evenimentele LisaG, dar in cazul lor se aplica numai cele care exista. Ordinea se pastreaza. Lisa G. Tine minte numele asta.

#3. E unu' aici pe forum care si-a exprimat disponibilitatea sa tina cursuri. (adica eu). Daca vrei, oferta este inca valabila. Pe de alta parte, pana acum am avut 0 (zero) doritori. E forumul plin de experti si nu-mi dau eu seama, cred.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 4/22/2011 2:38:28 PM
User is offlinepepito
7 posts


Re: Ajutor calcul date
 (N/A)
Da, sunt interesat de oferta.
 4/22/2011 2:55:19 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Ajutor calcul date
 (N/A)
http://www.profox.ro/Forum/tabid/55/forumid/1/threadid/34697/scope/posts/Default.aspx
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 4/22/2011 3:09:09 PM
User is offlinepepito
7 posts


Re: Ajutor calcul date
 (N/A)
Cred ca o sa fie o problema cu distanta.
  Visual FoxPro  Visual FoxPro in general  Ajutor calcul d...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement