Registru de casa

Informatii despre cum se utilizeaza Microsoft Access 2007. Baze de date, Interogari, Formulare, Rapoarte, etc
Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Registru de casa

Mesaj de mesersmith » Mie Aug 15, 2012 8:09 pm

Trebuie sa fac un registru de casa, un modul separat in bazele mele.
Faza este ca in registrul de casa, suma banilor intrati in ziua precedenta se aduna cu suma zilei curente.
Problema apare cand sunt zile libere si nu sunt inregistrari deloc.

Cum pot sa adun ziua precedenta, care poate fi cu oricate zile in urma, cu suma din ziua curenta, numita in query SumOfSum?
Cam asa trebuie sa arate:
ScreenShot050.jpg
Iata si un exemplu in care, in query, pe aceeasi linie, trebuie sa pun suma din ziua precedenta.
daily cash.accdb
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

cvmircea
Moderator
Moderator
Mesaje: 403
Membru din: Lun Aug 03, 2009 7:25 pm
Localitate: Alba Iulia
Contact:

Re: Registru de casa

Mesaj de cvmircea » Mie Aug 15, 2012 9:53 pm

Vrei neaparat ca acestea sa fie intr-un query sau ii ok daca ai un raport? Nu stiu cum ai organizate tabelele in baza ta de date dar sa presupunem ca ai un tabel cu incasari si un tabel cu cheltuieli, faci un formular cu doua cimpuri : DataInceput si DataSfirsit si un buton care iti deschide raportul .
In acest raport pui un subraport cu soldul pe care il calculezi Suma din incasari - Suma din Cheltuieli unde data este mai mica decit DataStart.
in Raport aduci intrarile si iesirile dintre cele doua date iar pe ultima coloana la diferenta adaugi si soldul din subraport. Nu am incercat aceasta varianta dar ced ca ar trebui sa functioneze.

EmanuelSerban
Mesaje: 38
Membru din: Mie Apr 27, 2011 3:06 pm
Localitate: Pitești

Re: Registru de casa

Mesaj de EmanuelSerban » Mie Aug 15, 2012 9:55 pm

Folosești două SubQuery-uri pentru a obține:

1. Ziua Precedentă (PreviousDay), selectând cea mai mare (MAX) zi, mai mică decât ziua curentă (< CurrentDay)
2. Soldul Zilei Precedente (SumOfPreviousDay), selectând Suma pentru Ziua Precedentă (rezultată din SubQuery-ul de la punctul 1.)

Select-ul final arată așa:

Cod: Selectaţi tot

SELECT
 CurrentDayCashIn.data                                                            AS CurrentDay
,SUM(CurrentDayCashIn.Sum)                                                       AS SumOfCurrentDay
,(SELECT
   MAX([cash in].data)
  FROM [cash in]
  WHERE [cash in].data < CurrentDayCashIn.data)                                  AS PreviousDay
,(SELECT
   SUM(PreviousDayCashIn.Sum)
  FROM [cash in] PreviousDayCashIn
  WHERE PreviousDayCashIn.data = (SELECT
                                   MAX([cash in].data)
                                  FROM [cash in]
                                  WHERE [cash in].data < CurrentDayCashIn.data)) AS SumOfPreviousDay
FROM [cash in] AS CurrentDayCashIn
GROUP BY CurrentDayCashIn.data;
Vezi și fișierul atașat.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Re: Registru de casa

Mesaj de mesersmith » Mie Aug 15, 2012 10:24 pm

Multumesc mult, exact asta vroiam sa-mi iasa.
Observ ceva absolut nou fata de tot ce stiam eu in access: codurile pe care le-ai folosit in query, nici nu stiam ca se poate.
Multumesc.

EmanuelSerban
Mesaje: 38
Membru din: Mie Apr 27, 2011 3:06 pm
Localitate: Pitești

Re: Registru de casa

Mesaj de EmanuelSerban » Joi Aug 16, 2012 1:32 pm

Query-urile au în spate cod în limbaj SQL.
Limbajul SQL reprezintă standard de pornire pentru orice sistem de gestiune al bazelor de date relaționale, indiferent că este vorba de Microsoft Access, Microsoft SQL Server, Oracle Database, Oracle MySQL, etc...

Tzica
Mesaje: 639
Membru din: Sâm Aug 11, 2012 10:52 pm

Re: Registru de casa

Mesaj de Tzica » Dum Aug 26, 2012 6:55 pm

Buna ziua,
eu am incercat alta abordare, si fireste m-am blocat.Pe scurt e musai cu doua tabele (incasari & plati) ?? ori se poate un union querry si in abordarea mea ? :oops:
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Tzica
Mesaje: 639
Membru din: Sâm Aug 11, 2012 10:52 pm

Re: Registru de casa

Mesaj de Tzica » Lun Aug 27, 2012 8:02 pm

Scuze, am mai gasit o bubitza...daca am o singura operatiune (numai o incasare sau numai o plata) intr-o zi, nu afiseaza nimic la soldul zilei.

Tzica
Mesaje: 639
Membru din: Sâm Aug 11, 2012 10:52 pm

Re: Registru de casa

Mesaj de Tzica » Dum Oct 07, 2012 6:45 pm

1.
"daca am numai o incasare sau numai o plata...nu afiseaza nimic"
Se rezolva cu ajutorul functiei Nz adica, =Nz(Sum([...]));
2.
Ca sa nu aglomerez forumul (intrebarea tine de VBA), si avand respectiva BD ca si material de lucru, o sa o pun aici (moderatorii o pot muta ).
Anumite documente musai sa fie tiparite in doua - trei exemplare, si chiar sa scrie pe ele "exemplar 1", "exemplar2", "exemplar 3" (deci un singur document, acelasi, cu un label sau un control box, pe care sa il completeze un cod VBA, care dupa fiecare print sa completeze cifra).Am incercat eu un DoCmd..dar..fireste ca nu functioneaza.Am"descoperit" pe net un cod, elegant cu un contor,dar este pentru word sau excel.
:roll:

newbie
Moderator
Moderator
Mesaje: 559
Membru din: Mie Mar 09, 2011 9:38 am
Localitate: Tirgu Mures

Re: Registru de casa

Mesaj de newbie » Lun Oct 08, 2012 11:22 am

Pentru a imprima mai multe copii ale aceluiasi raport:

Cod: Selectaţi tot

DoCmd.SelectObject acReport,"NumeleRaportuluiTau", True 

DoCmd.Printout ,,,,5, false
Si undeva pe internet gasisem asta, acum citva timp, dar cu regret nu iti pot spune unde. Codul de mai jos il folosesc si eu intr-o baza de date access.

Cod: Selectaţi tot

Print multiple copies of a report in Microsoft Access

The situation may arise where it is always necessary to print out a specified number of copies of a Microsoft Access report. If you want to print out multiple copies of a report, then you can use the PrintOut Method, provided that the report is the active object, i.e. you need to firstly open the report in Preview mode.

Private Sub [Your_Command_Button]_Click()
'Open report in Preview mode
    DoCmd.OpenReport "[Your_Report_Name_Goes_Here]", acViewPreview
'Print out specified number of report copies
    DoCmd.PrintOut , , , , 2
End Sub

Another approach to this is to use a function, that incorporates a loop, that will then accept the Microsoft Access report name and specified number of report copies to be printed:

Public Function PrintMultipleCopies(strReportName As String, _
                                    bytNumberOfCopies As Byte)
    Dim bytCounter As Byte
    For bytCounter = 1 To bytNumberOfCopies
        DoCmd.OpenReport strReportName
    Next bytCounter
End Function

You can then call this function, from a command button in your Microsoft Access Form for example, by using:

Private Sub [Your_Command_Button]_Click()
'Prints out named [report x amount of copies] required
    Call PrintMultipleReports("[Your_Report_Name_Goes_Here]", 2)
End Sub


newbie
Moderator
Moderator
Mesaje: 559
Membru din: Mie Mar 09, 2011 9:38 am
Localitate: Tirgu Mures

Re: Registru de casa

Mesaj de newbie » Lun Oct 08, 2012 6:54 pm

am facut un exemplu rapid, dar nu am apucat sa il testez.
te rog testeaza si spune daca merge au ba

L.E. Am gasit asta Contor imprimare
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Închis

Înapoi la “Intrebari despre Access 2007”