Iesiri produse din magazie conditionat de timp-primul intrat
Iesiri produse din magazie conditionat de timp-primul intrat
Am o BD in access care gestioneaza o magazie. In ea intra diferite produse de la diferiti furnizori. Un produs de la un furnizor poate intra in magazie cu preturi diferite, la diferite momente de timp. Problema este: trebuie sa scot din magazie diferite cantitati din acel produs, la diferite momente de timp. Ideea este sa nu permit utilizatorului sa scoata de ex 30 bucati cu pretul de 10 lei, cand din acel produs mai sunt inca in magazie 30 bucati sau mai putine cu 5 lei, intrate inaintea celor cu 10 lei(furnizorul a modificat pretul produsului). Am incercat mai multe variante dar n-am rezolvat problema. In subformularul de iesire am facut un combo box, care afiseaza pe grupe in functie de data si pret, toate intrarile din magazie pt. acel produs. Din acest combo selectez pretul si automat data grupului de pret, pt. o anumita cantitate care se doreste a se scoate din magazie. cu functia Dsum am resusit sa vad daca mai exita in magzie o cantitate din acel produs cu pretul cerut.
Ex: combo box are coloanele: pret unitar; cantitate (suma tuturor intrarilor cu pretul unitar respectiv); data ultimei intrari cupretul unitar respectiv; buc.
30 lei 200 buc 27.02.2010
10 lei 100 buc 30.05.2011
11 lei 50 buc 04.02.2012
toate aceste intrari sunt pentru acelasi produs- sa zicem condensatoare.
Utilizatorului nu trebuie sa i se permita sa scoata din magazie o cantitate cu pretul de ex 10 lei, daca in magazie mai exista inca produsul cu 30 de lei.
Deci cum fac asta?
Ex: combo box are coloanele: pret unitar; cantitate (suma tuturor intrarilor cu pretul unitar respectiv); data ultimei intrari cupretul unitar respectiv; buc.
30 lei 200 buc 27.02.2010
10 lei 100 buc 30.05.2011
11 lei 50 buc 04.02.2012
toate aceste intrari sunt pentru acelasi produs- sa zicem condensatoare.
Utilizatorului nu trebuie sa i se permita sa scoata din magazie o cantitate cu pretul de ex 10 lei, daca in magazie mai exista inca produsul cu 30 de lei.
Deci cum fac asta?
-
- Mesaje: 38
- Membru din: Mie Apr 27, 2011 3:06 pm
- Localitate: Pitești
Re: Iesiri produse din magazie conditionat de timp-primul in
Din punct de vedere legal, la ieșirea din gestiune a stocurilor, acestea se evaluează și se înregistrează în contabilitate prin aplicarea uneia din următoarele metode:
a) metoda primul intrat – primul ieșit – FIFO;
b) metoda costului mediu ponderat – CMP;
c) metoda ultimul intrat – primul ieșit – LIFO.
Deci, metoda cel mai mare preț...
a) metoda primul intrat – primul ieșit – FIFO;
b) metoda costului mediu ponderat – CMP;
c) metoda ultimul intrat – primul ieșit – LIFO.
Deci, metoda cel mai mare preț...
Re: Iesiri produse din magazie conditionat de timp-primul in
Salut!
Problema s-ar rezolva cu 2 select query-uri astfel:primul query extrage din tabel produsele care corespund ca număr (indiferent de preț) iar al doilea query extrage din primul pe cel cu prețul cel mai mare (sau pe cel cu un anumit preț).
Pentru un exemplu mai concret te rog sa atașezi un fișier pe care sa putem lucra
Problema s-ar rezolva cu 2 select query-uri astfel:primul query extrage din tabel produsele care corespund ca număr (indiferent de preț) iar al doilea query extrage din primul pe cel cu prețul cel mai mare (sau pe cel cu un anumit preț).
Pentru un exemplu mai concret te rog sa atașezi un fișier pe care sa putem lucra
10Q itlearning
Re: Iesiri produse din magazie conditionat de timp-primul in
Nu este vorba de cel mai mare pret, ci de metoda FIFO, intamplator a fost 30 de lei, ideea este sa nu poti scoate pe bon cantitati din acel produs, decat in ordinea intrarii in magazie. De ex. produsul cu ID=2, de la furnizorul x a intrat in magazie la data y1 cu pretul z, tot cu pretul z a mai intrat si la datele y2 si y3, dupa care furnizrul a schimbat pretul in v, pret cu care a mai intrat la alte trei date (mai multe sau mai putine) in magazie, si asa mai departe.
Deci folosesc un query ca sursa pt. combo in subformularul de iesire.
SELECT IN_Magazie1.PretUnitar, IN_Magazie1.Moneda, Sum(IN_Magazie1.Cantitate) AS Total, IN_Magazie1.UM, IN_Magazie1.IDprod, Min(IN_Magazie1.DataInMag) AS Cronologic, IN_Magazie1.StocInitial AS StInitial
FROM IN_Magazie1
GROUP BY IN_Magazie1.PretUnitar, IN_Magazie1.Moneda, IN_Magazie1.UM, IN_Magazie1.IDprod, IN_Magazie1.StocInitial
HAVING (((IN_Magazie1.IDprod)=[Forms]![Produse].[IDProd]))
ORDER BY IN_Magazie1.IDprod, Min(IN_Magazie1.DataInMag);
Deci folosesc un query ca sursa pt. combo in subformularul de iesire.
SELECT IN_Magazie1.PretUnitar, IN_Magazie1.Moneda, Sum(IN_Magazie1.Cantitate) AS Total, IN_Magazie1.UM, IN_Magazie1.IDprod, Min(IN_Magazie1.DataInMag) AS Cronologic, IN_Magazie1.StocInitial AS StInitial
FROM IN_Magazie1
GROUP BY IN_Magazie1.PretUnitar, IN_Magazie1.Moneda, IN_Magazie1.UM, IN_Magazie1.IDprod, IN_Magazie1.StocInitial
HAVING (((IN_Magazie1.IDprod)=[Forms]![Produse].[IDProd]))
ORDER BY IN_Magazie1.IDprod, Min(IN_Magazie1.DataInMag);
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
-
- Mesaje: 38
- Membru din: Mie Apr 27, 2011 3:06 pm
- Localitate: Pitești
Re: Iesiri produse din magazie conditionat de timp-primul in
N-ar fi mai bine ca utilizatorul să introducă decât cantitatea pe care dorește să o scoată din magazie (fără să mai selecteze prețul manual din combobox), iar descărcarea FIFO să o faceți automat?
Re: Iesiri produse din magazie conditionat de timp-primul in
Ar fi, dar nu stiu cum automat. Stiu ca pe bonul pe care-l generez trebuie sa scriu si pretul cu care a intrat in magazie produsul, de aceea il selectez. Pratic la alegerea unui pret pt. cantitatea ceruta de produs, la ev. before-update verific daca mai am disponibil cu pretul selectat. Daca nu, s-au terminat, ies din eveniment si focusez iar pe Cantitate ceruta. Ce nu pot verifica este daca mai exista o cantitate din acel produs dintr-o data anterioara. De exemplu daca utilizatorul alege din greseala 40 de bucati cu pretul 30 de lei dar din data de 11.10.2011 si in magazie mai sunt inca bucati din acel produs fie din data de 10.05.2010 , cu 5 lei, fie din 27.12.2009 cu 30 de lei, sa-i dau un mesaj si sa-l fortez sa aleaga din nou.- Asta era problema
-
- Mesaje: 88
- Membru din: Vin Sep 04, 2009 7:45 am
- Localitate: Slatina
Re: Iesiri produse din magazie conditionat de timp-primul in
O solutie pentru selectarea primului pret ar fi urmatoarea:
Pentru varianta cand utilizatorul introduce cantitatea si deacarcarea FIFO se face automat trebuie scris ceva cod si schimbarea logicii.
Am codurile scrise pentru aceasta varianta dar pentru o structura de date asa cum am conceput-o eu.
Cod: Selectaţi tot
Private Sub Pret_BeforeUpdate(Cancel As Integer)
If Me.Pret.ListIndex <> 0 Then
MsgBox "Selectati primul pret."
Cancel = True
End If
End Sub
Am codurile scrise pentru aceasta varianta dar pentru o structura de date asa cum am conceput-o eu.
Re: Iesiri produse din magazie conditionat de timp-primul in
A mai fost o discutie asemanatoare :viewtopic.php?f=53&t=4546&start=40 poate te ajuta.
Baza din atasament am luat-o din topicul de mai sus.
Baza din atasament am luat-o din topicul de mai sus.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Iesiri produse din magazie conditionat de timp-primul in
Multumesc celor care au incercat sa ma ajute. Am rezolvat problema cu un query, qryDisponibil care calculeaza disponibilul la un moment dat pentru fiecare grupa de preturi ale unui produs, in cazul cand acel produs a intrat cu preturi diferite de-a lungul timpului. qryDisponibil are la baza 2 queries : unul care grupeaza intrarile in magazie pt fiecare produs, pe grupe de preturi si cronologic-ex: daca produsul x a intrat la o data z cu pretul y, la alta data z1 cu pretul y, .. la data zn cu pretul y, apoi si-a schimbat pretul si a intrat la datele q1..qn cu pretul y1, etc. face suma cantitatilor intrate pe preturi, iar data aleasa pt inregistrare este cea mai veche data din grup. Celalalt query face ceva similar pt. produsele iesite din magazie. iar qrydisponibil calculeaza dipsonibilul. Acest qry este sursa pt combo PretUnitarIesire.
practic problema se rezolva prin 2 evenimete aplicate aecstui combo- BeforeUpdate si On lost Focus.
practic problema se rezolva prin 2 evenimete aplicate aecstui combo- BeforeUpdate si On lost Focus.
Cod: Selectaţi tot
Private Sub PretUnitIesire_BeforeUpdate(Cancel As Integer)
Dim CDispi As Integer
Dim PretUniti As Integer ' pret unitar pentru articolul anterior
Dim DataCrti As Date ' data la momentul i
Dim NrLinii As Integer ' nr linii combobox
Dim iCrt As Long ' articol curent selectat
Dim i As Integer
Dim Mesaj1 As String ' mesaje
CCerut = Nz(Me!IesireMag)
NrLinii = Me!PretUnitIesire.ListCount
iCrt = Me!PretUnitIesire.ListIndex
PretUnit = Nz(Me!PretUnitIesire.Column(0)) 'pretul unitar selectat
CDispo = Nz(Me!PretUnitIesire.Column(1)) ' cantitatea disponibila cu pretul selectat, a fost considerat si stocul initial
DataCrt = Nz(Me!PretUnitIesire.Column(3)) ' data curenta a grupului de preturi
Umm = Nz(Me!PretUnitIesire.Column(2)) ' unitatea de masura
For i = (iCrt - 1) To 0 Step -1
PretUniti = Nz(Me!PretUnitIesire.Column(0, (i + 1)))
CDispi = Nz(Me!PretUnitIesire.Column(1, (i + 1)))
DataCrti = Nz(Me!PretUnitIesire.Column(3, (i + 1)))
If CDispi > 0 Then
Mesaj1 = "Nu puteti scoate produse cu pretul " & PretUnit & _
Chr(13) & Chr(10) & " Mai sunt inca " & CDispi & " " & Umm & " cu pretul " & PretUniti & " din data " & DataCrti
MsgBox Mesaj1, vbOKOnly
Cancel = True
End If
Exit For
Next
End Sub
Private Sub PretUnitIesire_LostFocus()
Dim Mesaj2 As String
CCerut = Nz(Me!IesireMag)
PretUnit = Nz(Me!PretUnitIesire.Column(0)) 'pretul unitar selectat
CDispo = Nz(Me!PretUnitIesire.Column(1)) ' cantitatea disponibila cu pretul selectat, a fost considerat si stocul initial
DataCrt = Nz(Me!PretUnitIesire.Column(3)) ' data curenta a grupului de preturi
Umm = Nz(Me!PretUnitIesire.Column(2)) ' unitatea de masura
If CCerut > CDispo Then
Mesaj2 = "In Magazie sunt doar" & CDispo & " " & Umm & " cu pretul cerut"
MsgBox Mesaj2, vbOKOnly
Me!IesireMag.SetFocus
Else
Me!DataGrupPret = DataCrt
DoCmd.Requery "DataGrupPret"
End If
DoCmd.Requery "PretUnitIesire"
End Sub