Search  
Friday, May 25, 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  Cod, sintaxa si comenzi  algoritm...
 algoritm
 
 6/16/2006 4:27:13 PM
User is offlinebisocp
141 posts
5th


algoritm
 (Romania)

incerc sa fac un programel pt registru de casa

am o tabela in care bag data documentului, tipul operatiei "P" pt plata, "I" pt incasare si suma

cum sa fac sa calculez total incasari, total plati si sold ( mai ales cand revin si introduc o inragistrare cu data mai veche si trebuie recalculate toate )

eu am mai facut o tabela cu data, total incasat, total platit si sold

 6/16/2006 5:02:54 PM
User is offlineGrigore Dolghin
3592 posts
www.class-software.eu
1st






Re: algoritm
 (Romania)

Nu e nevoie de inca o tabela - ai tot ce-ti trebuie in prima tabela.

SUM suma To lnTotalIncasari For Tip_Operatie = "I" AND BETWEEN(data, data_inceput, data_sfarsit)
SUM suma To lnTotalPlati For Tip_Operatie = "P" AND BETWEEN(data, data_inceput, data_sfarsit)
lnSold = lnTotalIncasari - lnTotalPlati

Varianta asta te scuteste de recalculari cand introduci un document mai vechi. Nu vad de ce este nevoie sa tii soldul dupa fiecare document (ca in varianta ta cu doua tabele), pentru ca poti sa recalculezi soldul ori de cate ori ai nevoie. Daca ai milioane de inregistrari (desi nu cred) ai putea sa salvezi un sold periodic (sa zicem, la sfarsitul fiecarei luni) si sa incepi de la soldul respectiv:

Singura problema care apare si care trebuie rezolvata este aceea ca afisarea registrului de casa ar putea sa nu inceapa de la data de 1 (adica de la soldul salvat). In cazul asta va trebui sa calculezi soldul real la data de inceput a intervalului. O sa-ti dau un exemplu:

Sa zicem ca ultimul sold salvat este la 31.03.2006. Tu vrei un registru de casa incepand cu data de 17 aprilie 2006 pana la 31 mai 2006. Codul ar trebui sa arate cam asa:

lnSoldInitialLuna = && rutina care citeste soldul din tabela de solduri, la data de 31 martie.
SUM suma To lnPlatiIntermediare FOR tip_operatiune = "P" AND BETWEEN(data, {01.04.2006}, {16.04.2006})
SUM suma To lnIncasariIntermediare FOR tip_operatiune = "I" AND BETWEEN(data, {01.04.2006}, {16.04.2006})
lnSoldInitialInterval = lnSoldInitial + lnIncasariIntermediare - lnPlatiIntermediare
*-- now start real job:
SUM suma TO lnTotalPlati FOR tip_operatiune = "P" AND BETWEEN(data, {17.04.2006},{31.05.2006})
SUM suma TO lnTotalIncasari FOR tip_operatiune = "I" AND BETWEEN(data, {17.04.2006},{31.05.2006})
lnSoldFinal = lnSoldInitialInterval + lnTotalIncasari - lnTotalPlati

Din cate stiu, registrul de casa se tine pe zile - iti trebuie soldul la inceputul zilei, total incasari pe zi, total plati pe zi si sold la sfarsitul zilei. N-are rost sa tii soldul dupa fiecare document.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 6/16/2006 5:44:56 PM
User is offlinebisocp
141 posts
5th


Re: algoritm
 (Romania)

dupa fiecare document trebuie sa verific cateva conditii ( 50000=>sold >=0, total plati <=10000 etc )

cand listezi intre data1 si data2 in raport la fiece terminare de zi trebuie scris total plati, total incasari, sold

 6/16/2006 7:08:02 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: algoritm
 (N/A)
 bisocp wrote

incerc sa fac un programel pt registru de casa

am o tabela in care bag data documentului, tipul operatiei "P" pt plata, "I" pt incasare si suma

cum sa fac sa calculez total incasari, total plati si sold ( mai ales cand revin si introduc o inragistrare cu data mai veche si trebuie recalculate toate )

eu am mai facut o tabela cu data, total incasat, total platit si sold



De ce nu faci coloane explicite incasari, plati la tabela de inregistrari detaliate?
Daca pui tip Currecy, amandoua o sa ocupe 16 bytes

Eu am facut cu o tabela principala, cu data,valuta,total_incasari, total_plati, curs_valutar,...
O tabela de detalii incasari/plati legata de prima dupa data+valuta
O tabela cu solduri initiale de referinta/valute si datele acestora

La parcurgerea tabelei principale cu ceva tip _datanav din ffc sau alegerea datei din calendar, se da requery() pe view-ul care are inregistrarile corepunzatoare datei+valuta si se calculeaza sum de total_incasari si total_plati, din aceeasi tabela, pana la data curenta. Soldul initial al zilei ar fi sold_referinta + total_incasari_precedente - total_plati_precedente iar soldul final ar fi sold_initial + total_incasari - total_plati

total_incasari si total_plati din tabela de rulaje/zile s-ar actualiza la fiecare inregistrare adaugata sau modificat cu noile totaluri rezultate



  Visual FoxPro  Cod, sintaxa si comenzi  algoritm...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement