Iesiri produse din magazie conditionat de timp-primul intrat

Informatii despre cum se utilizeaza Microsoft Access 2003. Baze de date, Interogari, Formulare, Rapoarte, etc
Închis
laura-27
Mesaje: 4
Membru din: Joi Noi 24, 2011 3:07 pm

Iesiri produse din magazie conditionat de timp-primul intrat

Mesaj de laura-27 » Mie Apr 04, 2012 10:16 am

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?

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

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de EmanuelSerban » Mie Apr 04, 2012 11:02 am

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ț... :roll:

alcoool2
Mesaje: 969
Membru din: Mie Dec 15, 2010 4:25 pm

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de alcoool2 » Mie Apr 04, 2012 11:27 am

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 ;)
10Q itlearning

laura-27
Mesaje: 4
Membru din: Joi Noi 24, 2011 3:07 pm

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de laura-27 » Mie Apr 04, 2012 12:00 pm

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);
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

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

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de EmanuelSerban » Mie Apr 04, 2012 1:13 pm

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?

laura-27
Mesaje: 4
Membru din: Joi Noi 24, 2011 3:07 pm

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de laura-27 » Mie Apr 04, 2012 1:27 pm

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

Marin Zanfir
Mesaje: 88
Membru din: Vin Sep 04, 2009 7:45 am
Localitate: Slatina

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de Marin Zanfir » Lun Apr 09, 2012 11:07 am

O solutie pentru selectarea primului pret ar fi urmatoarea:

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

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.

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

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de cvmircea » Mie Apr 11, 2012 9:30 pm

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.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

laura-27
Mesaje: 4
Membru din: Joi Noi 24, 2011 3:07 pm

Re: Iesiri produse din magazie conditionat de timp-primul in

Mesaj de laura-27 » Joi Apr 12, 2012 12:43 pm

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.

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

Închis

Înapoi la “Intrebari despre Access 2003”