Problema Baza de date pentru stocuri
Problema Baza de date pentru stocuri
Am trei tabele in Access: Produse, Intrari, Iesiri. Vreau stocul actual si folosesc urmatoarea formula: Sum([Cantitate intrata]-[Cantitatea iesita]).
Pentru [Cantitate intrata] si [cantitatea iesita] am facut 2 queries care imi fac cu SUM totalul de intrari si totalul de iesiri. Problema imi apara in momentul in care am produse care au intrat dar nu au ieist. Formula nu functioneaza bine si in raport nu se vad produsele existente din stoc care nu au iesiri la produsul respectiv. In raport apar doar produsele care au si intrari si iesiri. Cum as putea sa rezolv problema? Multumesc.
Pentru [Cantitate intrata] si [cantitatea iesita] am facut 2 queries care imi fac cu SUM totalul de intrari si totalul de iesiri. Problema imi apara in momentul in care am produse care au intrat dar nu au ieist. Formula nu functioneaza bine si in raport nu se vad produsele existente din stoc care nu au iesiri la produsul respectiv. In raport apar doar produsele care au si intrari si iesiri. Cum as putea sa rezolv problema? Multumesc.
-
- Mesaje: 88
- Membru din: Vin Sep 04, 2009 7:45 am
- Localitate: Slatina
Re: Problema Baza de date pentru stocuri
O solutie ar fi urmatoarea:
in ideea ca nu exista Iesiri fara Intrari
sau :
daca aceptam Iesiri fara Intrari.
Dezavantajul solutiei doi este ca se vor vizualiza toate produsele (indiferent daca au intrari sau iesiri).
IMPORTANT!!!!!
Din pacate aceasta solutie este eronata.
Cod: Selectaţi tot
SELECT Produse.ProdusID, First(Produse.Denumire) AS Denumire, Sum(Intrari.Cantitate) AS Intrari, Sum(NZ(Iesiri.Cantitate,0)) AS Iesiri, [Intrari]-[Iesiri] AS Stoc
FROM (Produse INNER JOIN Intrari ON Produse.ProdusID = Intrari.ProdusID) LEFT JOIN Iesiri ON Produse.ProdusID = Iesiri.ProdusID
GROUP BY Produse.ProdusID;
sau :
Cod: Selectaţi tot
SELECT Produse.ProdusID, First(Produse.Denumire) AS Denumire, Sum(NZ(Intrari.Cantitate,0)) AS Intrari, Sum(NZ(Iesiri.Cantitate,0)) AS Iesiri, [Intrari]-[Iesiri] AS Stoc
FROM (Produse LEFT JOIN Intrari ON Produse.ProdusID = Intrari.ProdusID) LEFT JOIN Iesiri ON Produse.ProdusID = Iesiri.ProdusID
GROUP BY Produse.ProdusID;
Dezavantajul solutiei doi este ca se vor vizualiza toate produsele (indiferent daca au intrari sau iesiri).
IMPORTANT!!!!!
Din pacate aceasta solutie este eronata.
Re: Problema Baza de date pentru stocuri
Multumesc pentru ajutor. Pentru ca sunt incepator in access te rog sa imi spui si unde sa pun codul: in queries, form sau report? Cred ca m-ai zapacit putin.
-
- Mesaje: 88
- Membru din: Vin Sep 04, 2009 7:45 am
- Localitate: Slatina
Re: Problema Baza de date pentru stocuri
Codul il pui in Query si folosesti acel Query ca RecordSource pentru Form sau Report.
Re: Problema Baza de date pentru stocuri
Am atasat si imaginile cu query pentru Total intrari produse, Total iesiri produse si Stoc Actual. Pentru afisarea in Forms foloses Stoc actual. Si totusi undeva gresesc. Unde?
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
-
- Mesaje: 88
- Membru din: Vin Sep 04, 2009 7:45 am
- Localitate: Slatina
Re: Problema Baza de date pentru stocuri
Nu imi dau seama unde gresesti.
Trimite-mi baza de date.
Pentru a te inspira iti atasez o baza de test.
Trimite-mi baza de date.
Pentru a te inspira iti atasez o baza de test.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Problema Baza de date pentru stocuri
Asta este baza de date pe care lucrez. Am facut ca tine si nu functioneza.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Problema Baza de date pentru stocuri
Din pacate am descoprit ceva si in exemplul tau. Toate intrarile si iesirile sunt dublate la rezultat.
-
- Mesaje: 88
- Membru din: Vin Sep 04, 2009 7:45 am
- Localitate: Slatina
Re: Problema Baza de date pentru stocuri
Din pacate ai dreptate.
Solutia corecta este:
iar al doilea query este folosit in form sau report.
Imi cer scuze pentr acest incident.
Atasez baza de date modificata corespunzator.
Solutia corecta este:
Cod: Selectaţi tot
SELECT Intrari.codmp, Sum(Intrari.Cant_intrata) AS Intrari, 0 AS Iesiri
FROM Intrari
GROUP BY Intrari.codmp
UNION ALL SELECT Iesiri.codmp, 0 AS Intrari, Sum(Iesiri.Cant_iesita) AS Iesiri
FROM Iesiri
GROUP BY Iesiri.codmp;
Cod: Selectaţi tot
SELECT Q_PregatireStoc.codmp, First(Produse.[Denumire produs]) AS [Denumire produs], Sum(Q_PregatireStoc.Intrari) AS Intrari, Sum(Q_PregatireStoc.Iesiri) AS Iesiri, [Intrari]-[Iesiri] AS [Stoc Actual]
FROM Q_PregatireStoc INNER JOIN Produse ON Q_PregatireStoc.codmp = Produse.codmp
GROUP BY Q_PregatireStoc.codmp;
Atasez baza de date modificata corespunzator.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: Problema Baza de date pentru stocuri
Am facut si eu o incercare:
1. Am creat 2 interogari asa cum ai spus si tu: una pentru intrari (_INTRARI) si alta pentru iesiri (_IESIRI) pentru a "totaliza" pentru fiecare tabela Intrari/Iesiri produsele.
Pentru _INTRARI:
Pentru _IESIRI:
2. Acum interogarea _STOC se bazeaza pe tabela PRODUSE pentru a selecta TOATE produsele chiar daca au avut sau nu intrari/iesiri:
La nevoie aceasta interogare se poate filtra suplimentar pentru a elimina produsele care indeplinesc sau nu anumite criterii (de ex. poate nu le vrei pe cele cu stoc 0)
Pentru detalii vezi si baza atasata:
1. Am creat 2 interogari asa cum ai spus si tu: una pentru intrari (_INTRARI) si alta pentru iesiri (_IESIRI) pentru a "totaliza" pentru fiecare tabela Intrari/Iesiri produsele.
Pentru _INTRARI:
Cod: Selectaţi tot
SELECT DISTINCTROW Produse.codmp, Produse.[Denumire produs], Sum(Intrari.Cant_intrata) AS [Sumă al Cant_intrata]
FROM Produse INNER JOIN Intrari ON Produse.codmp = Intrari.codmp
GROUP BY Produse.codmp, Produse.[Denumire produs];
Cod: Selectaţi tot
SELECT DISTINCTROW Produse.codmp, Produse.[Denumire produs], Sum(Iesiri.Cant_iesita) AS [Sumă al Cant_iesita]
FROM Produse INNER JOIN Iesiri ON Produse.codmp=Iesiri.codmp
GROUP BY Produse.codmp, Produse.[Denumire produs];
Cod: Selectaţi tot
SELECT Produse.codmp, Produse.[Denumire produs], [_Intrari].[Sumă al Cant_intrata], [_Iesiri].[Sumă al Cant_iesita], nz([_Intrari]![Sumă al Cant_intrata])-nz([_Iesiri]![Sumă al Cant_iesita]) AS [Stoc curent]
FROM (Produse LEFT JOIN _Intrari ON Produse.codmp = [_Intrari].codmp) LEFT JOIN _Iesiri ON Produse.codmp = [_Iesiri].codmp;
Pentru detalii vezi si baza atasata:
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.