freestuff.gr αρχική σελίδα
 FAQFAQ    ΑναζήτησηΑναζήτηση   Λίστα ΜελώνΛίστα Μελών   Ομάδες ΜελώνΟμάδες Μελών   <b>Εγγραφή Μέλους</b>Εγγραφή Μέλους 
 ΠροφίλΠροφίλ   Επιλογές μέλους Επιλογές   Τα bookmarks μου Τα bookmarks μου   Προσωπικά μηνύματαΠροσωπικά μηνύματα 
  διαφήμιση  

Καλώς ήρθατε στο forum μας! Για να συμμετάσχετε στις συζητήσεις θα πρέπει να είσαστε μέλος. Γίνετε μέλος τώρα!.

Διαχείριση Ποσοτήτων Προϊόντων με Αccess


 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » SQL και SQL Servers (RDBMS) » MS Access
Moderators:  Super-Moderators, WebDev Moderators
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [8 Μηνύματα]      Bookmarks Tags: διαχείριση Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
ΑποστολέαςΜήνυμα
it0466


Μέλος από: 15 Δεκ 2005
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 16 Μαη 2008 21:09    Θέμα: Διαχείριση Ποσοτήτων Προϊόντων με Αccess Απάντηση με παράθεση  Mark this post and the followings unread

Υλοποιώ ένα πρόγραμμα σε Access 2003 με VBA από πίσω. Περιγράφω αναλυτικά την κατάσταση στην οποία βρίσκομαι και πιο κάτω σας λέω το πρόβλημα:
Έχω ένα πίνακα με όνομα Προϊόντα και κάποια από τα πεδία του είναι τα εξής:
Αρχική Ποσότητα, Πωλήσεις, Ποσότητα προς Πώληση, Ποσότητα στο Μαγαζί, όπου και σας τα εξηγώ αναλυτικά αν και πιστεύω πως τα καταλαβαίνετε, τι στοιχεία κρατούνται μέσα σ’αυτά τα πεδία.
Πεδίο Αρχική Ποσότητα: Δηλώνω ρητά τα κομμάτια που έρχονται στο μαγαζί μου από ένα συγκεκριμένο προϊόν.
Πεδίο Πωλήσεις: Το πεδίο αυτό μου λέει πόσες πωλήσεις έχει κάνει συνολικά ένα συγκεκριμένο προϊόν.
Πεδίο Ποσότητα προς Πώληση: Στο πεδίο αυτό δηλώνω πόσα κομμάτια από ένα συγκεκριμένο προϊόν θέλει ο πελάτης να αγοράσει ερχόμενος στο μαγαζί μια συγκεκριμένη χρονική στιγμή.
Πεδίο Ποσότητα στο Μαγαζί: Πόσα κομμάτια από ένα συγκεκριμένο προϊόν μου απομένουν μέσα στο μαγαζί μου.
Έχω λοιπόν δημιουργήσει τη φόρμα για το παραπάνω πίνακα την οποία σας την δείχνω και κάτω και το μόνο που μου απομένει είναι να ορίσω τις σχέσεις που συνδέουν αυτά τα πεδία, δηλαδή τα σωστά νούμερα που πρέπει κάθε φορά να περιέχουν αυτά τα πεδία.
Η φόρμα για το Πίνακα Προϊόντα:

EIKONA1
Όπως βλέπετε καθώς καταχωρώ ένα από τα προϊόντα μου λέω ότι μου ήρθε αρχικά στο μαγαζί ποσότητα 5 κομμάτια. Μπαίνει ένας πελάτης μέσα στο μαγαζί βλέπει το προϊόν του αρέσει και μου ζητάει 2 κομμάτια. Έτσι εγώ γράφω στο πεδίο Ποσότητα προς Πώληση 2 και αμέσως η Access αυτόματα υπολογίζει τα άλλα δύο πεδία (Πωλήσεις (2), Ποσότητα στο Μαγαζί (3)) από τις εκφράσεις που έχω ορίσει στην ιδιότητα Control Source των πεδίων Πωλήσεις και Ποσότητα στο Μαγαζί. Συγκεκριμένα:
Ιδιότητα Control Source στο πεδίο Πωλήσεις: =nz([Πωλήσεις],0)+(nz([Ποσότητα προς Πώληση],0)).
Ιδιότητα Control Source στο πεδίο Ποσότητα στο Μαγαζί: =nz([Αρχική Ποσότητα],0)-(nz([Πωλήσεις],0)+(nz([Ποσότητα προς Πώληση],0))).
Το nz που γράφω πάνω σ’αυτές τις εκφράσεις είναι το γνωστό Νull to Zero όπου σε περίπτωση που σε κάποιο από τα πεδία ο χρήστης δε συμπλήρωσε αριθμό να θεωρείται μέσα σ’αυτό το πεδίο ότι υπάρχει το μηδέν αντί για το κενό. Μέχρι εδώ όλα φαίνονται ότι δουλεύουν καλά, όμως το πρόβλημα είναι όταν έρθει στο μαγαζί κάποιος νεός πελάτης και ζητήσει να αγοράσει ποσότητες από το παραπάνω προϊόν. Βλέποντας εγώ ως καταστηματάρχης από τα παραπάνω στοιχεία τα οποία είναι αποθηκευμένα στο πίνακα Προϊόντα ότι υπάρχουν στο πεδίο Ποσότητα στο Μαγαζί 3 κομμάτια, μου λέει αυτός ο καινούργιος πελάτης ότι θέλει να αγοράσει 1 κομμάτι. Πηγαίνω εγώ σαν χρήστης στην φόρμα στο πεδίο Ποσότητα προς Πώληση, σβήνω την παλιά τιμή 2 και γράφω 1 πατώ Enter και αντί να μου εμφανίζονται ότι έχω κάνει Πωλήσεις 3 και Ποσότητα στο Μαγαζί 2 αυτό που μου βγαίνει στη φόρμα και βεβαίως υπάρχει έπειτα και στον πίνακα είναι το εξής:

EIKONA2
Τι μπορεί να συμβαίνει; Δεν διαχειρίζομαι σωστά τα δεδομένα μου; Φαίνεται ότι οι εκφράσεις που έχω ορίσει είναι στατικές. Θα μπορούσε να μου προτείνει κανείς τι θα πρέπει να κάνω για να έχει δυναμική λειτουργία το πρόγραμμά μου; Θα πρέπει να χειριστώ συμβάν και αν ναι ποιο συμβάν;
kon73
Script Master

Μέλος από: 13 Απρ 2008
Βοηθήματα: 3
Μηνύματα: 224


View users profile Visit posters website
ΜήνυμαΣτις: 17 Μαη 2008 11:16    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Φίλε it0466

Σου γράφω έναν κώδικα που μπορείς να εισάγεις στην φόρμα σου στο before update.
Private Sub Form_BeforeUpdate(Cancel As Integer)
Me.Sales = Nz(Me.Sales, 0) + Nz(Me.Orders, 0)
Me.StockHouse = Nz(Me.InitialAmount, 0) - Nz(Me.Sales, 0) - Nz(Me.Orders, 0)
End Sub
Όπου Sales = Πωλήσεις
Orders = Προς Πώληση
StockHouse = Στο Μαγαζί
InitialAmount = Αρχική Ποσότητα
Λύνεται προσωρινά το πρόβλημα σου αλλά δεν είναι κατά την προσωπική μου γνώμη έτσι όπως πρέπει να δουλευτεί.
ΜΕΡΙΚΑ ΠΡΑΓΜΑΤΑ ΣΗΜΑΝΤΙΚΑ :
1. Τι γίνεται όταν είμαστε σε καινούργια εγγραφή ? (Δηλαδή υπολογίζει και όταν βρισκόμαστε στην αρχική καταχώρηση) Θα μπορούσα το λοιπόν να βάλω κώδικα και στο Before Insert. OXI. ΘΕΛΕΙ ΝΟΜΙΖΩ ΑΛΛΑΓΗ η όλη φιλοσοφία του στησίματος της βάσης.
2. Δεν πρέπει να καταχωρείται ιστορικό παραγγελιών ; Ποιος Πελάτης ; Ημερομηνία κλπ, τιμή προϊόντος ;

Σου παραθέτω το λοιπόν μία άλλη φιλοσοφία στησίματος της Βάσης.
ΠΙΝΑΚΕΣ :
1. Πελάτες
2. Προϊόντα
3. Παραγγελίες
4. Πωλήσεις

Στον πίνακα προϊόντα εκεί καταχωρούνται εκτός από τα Standard πεδία Κωδικός, Περιγραφή, κλπ και τα πεδία : Υπόλοιπο Απογραφής (Αρχή του έτους δηλαδή), Τρέχων Υπόλοιπο, Σε Παραγγελία (Ενvοείται ποσότητα) , Πωλήσεις Ποσότητα και αν θέλουμε βάζουμε και Σε παραγγελία αξία, Σε πωλήσεις Αξία.

Θα χρειαστούν και οι ανάλογες συνδέσεις - σχέσεις μεταξύ των πινάκων και τέλος
για τον υπολογισμό των παραγγελιών και πωλήσεων στην φόρμα πχ των παραγγελιών (που έχει RecordSource τον πίνακα Παραγγελίες) στο συμβάν After Update θα δουλεύεις με την συνάρτηση DSum με κριτήριο αυτής τον κωδικό προϊόντος. (H Dsum προσθέτει στο σύνολο των εγγραφών το πεδίο Ποσότητα) Θα χρειαστείς και το After Insert για να ξαναϋπολογίζει την Dsum μετά την νέα εγγραφή και το AfterDelConfirm για όταν διαγράφεται η εγγραφή.

Δεν θα χρειαστεί μόνο η DSum θα χρειαστούν και SQL strings ή έστω Update Queries (όπως βολεύει τον καθένα) για ενημέρωση του τρέχοντος υπόλοιπου του προϊόντος σε κάθε Event : After Update, AfterInsert, AfterDelConfirm.

Έτσι θα έχεις πίνακα παραγγελίες που κάθε πελάτης με την παραγγελία του θα δημιουργεί μία εγγραφή σε αυτόν τον πίνακα (Έτσι θα έχεις ιστορικό παραγγελιών) και αυτές οι παραγγελίες θα μπορούν να μετασχηματιστούν σε πωλήσεις [Εδώ θα χρησιμοποιήσεις SQL String ή INSERT Queries). Στον μετασχηματισμό των παραγγελιών να υπάρχει και ένα πεδίο boolean (Μετασχηματισμένο / True - False) ώστε να μην ξαναμετασχημαστούν οι ίδιες παραγγελίες.

Δες λοιπόν την πρόταση μου και ανάλογα μου στέλνεις ερωτήματα

Φιλικά
kon73

_________________
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
it0466


Μέλος από: 15 Δεκ 2005
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 18 Μαη 2008 15:55    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Σ'ευχαριστώ kon73, θα διαβάσω τη λύση σου,θα προσπαθήσω να δω τι μπορώ να κάνω και έπειτα σου απαντώ. Να με συγχωρείς για τις καθυστερήσεις αλλά σπίτι μου που εργάζομαι δεν έχω Internet, δουλεύω μ'ένα μόνο βιβλίο ως βοήθημα το Microsoft link to Microsoft Access Bible 2003&μερικά άλλα βιβλιαράκια για VBA. Σ'ευχαριστώ και πάλι για το ενδιαφέρον.
kon73
Script Master

Μέλος από: 13 Απρ 2008
Βοηθήματα: 3
Μηνύματα: 224


View users profile Visit posters website
ΜήνυμαΣτις: 18 Μαη 2008 22:45    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Στο site www.MsAccess.gr υπάρχουν και Links για e-books που ίσως σου φανούν χρήσιμα. Μπορώ όμως να σου στείλω και άλλα Links για διάφορα άλλα e-books ως βοήθημα.

Φιλικά
kon73

_________________
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
it0466


Μέλος από: 15 Δεκ 2005
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 19 Μαη 2008 11:58    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Kon73 η λύση που προτείνεις είναι όντως πολύ πιο επαγγελματική, αλλά ο πελάτης μου στον οποίο κάνω την εφαρμογή δεν θέλει να συνδέσει τους πελάτες που έχει στο μαγαζί του με τα προϊόντα που αυτοί αγοράζουν. Δεν τον ενδιαφέρει καθόλου αυτό το πράγμα και έτσι ούτε ιστορικό πελατών δεν θέλει να κρατάει σχετικά με τις αγορές που αυτοί κάνουν. Το μόνο που τον ενδιαφέρει είναι να καταχωρεί όλα τα προϊόντα του που έχει στο μαγαζί στη βάση που του φτιάχνω, να γνωρίζει ανά πάσα στιγμή πόσα προϊόντα έχει μέσα στο μαγαζί & πόση ποσότητα από κάθε προϊόν έχει πουληθεί. Επίσης θέλει να γνωρίζει αν του πάρει κάποιος πελάτης τηλέφωνο και του πει το έχεις αυτό το προϊόν να αναζητά μέσα στη βάση δεδομένων και να του λέει αν όντως το έχει ή όχι. Η λύση που μου πρότεινες αν και δεν τη δοκίμασα ακόμη νομίζω είναι η σωστή για την περίπτωσή μου. Όπως βλέπεις και από το σχεσιακό σχήμα που στέλνω, ο καταστηματάρχης παίρνει τιμολόγια. Μέσα σ’αυτά τα τιμολόγια ,υπάρχουν πολλά δέματα & μέσα σ’ένα δέμα υπάρχουν πολλά προϊόντα. Επομένως από αυτά που σου λέω εννοείται πως μέσα σ’ένα τιμολόγιο θα υπάρχουν και πολλά προϊόντα. Με άλλα λόγια όταν του έρχεται ένα προϊόν στο μαγαζί με συγκεκριμένες ποσότητες αυτό το προϊόν ανήκει σε ένα συγκεκριμένο αριθμό τιμολογίου & σε ένα συγκεκριμένο αριθμό δέματος & όπως υπονοείται αυτό το προϊόν του έρχεται με κάποια αρχική ποσότητα στο μαγαζί. Ακόμη και αν του έρθει το ίδιο ακριβώς προϊόν σε μεταγενέστερο στάδιο αυτό το ίδιο (από άποψη εμφάνισης) προϊόν θα ανήκει σε διαφορετικό τιμολόγιο και σε διαφορετικό δέμα. Εκτός από αυτά που σου ανέφερα από το σχεσιακό σχήμα καταλαβαίνεις πως πολλά προϊόντα ανήκουν σε μία κατηγορία και πολλά προϊόντα ανήκουν σε ένα κατασκευαστή.

Database relationship scheme
http://rapidshare.com/files/115986421/relationship_scheme.bmp.html
kon73
Script Master

Μέλος από: 13 Απρ 2008
Βοηθήματα: 3
Μηνύματα: 224


View users profile Visit posters website
ΜήνυμαΣτις: 19 Μαη 2008 12:29    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Φίλε it0466
Αν μένεις θεσσαλονίκη θα χαρώ να τα πούμε και από κοντά για να δούμε μαζί την βάση σου καθότι η αλήθεια να λέγεται ο σωστός σχεδιασμός μίας βάσης είναι σημαντικός για την περαιτέρω σωστή λειτουργία της βάσης σου.

Φιλικά
kon73

_________________
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
it0466


Μέλος από: 15 Δεκ 2005
Μηνύματα: 18

View users profile
ΜήνυμαΣτις: 19 Μαη 2008 23:04    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Nαι kon73 να βρεθούμε. Θεσσαλονίκη μένω, φοιτητής επί πτυχίο είμαι, πως όμως; Τα στοιχεία μου τα βλέπεις μέσα στο site; Αν και δε νομίζω, γιατί μπορεί να είναι ρυθμισμένα από τον admin να μη φαίνονται. Φοβάμαι να δώσω το email μου για τυχόν spam.
kon73
Script Master

Μέλος από: 13 Απρ 2008
Βοηθήματα: 3
Μηνύματα: 224


View users profile Visit posters website
ΜήνυμαΣτις: 20 Μαη 2008 01:00    Θέμα: Απάντηση με παράθεση  Mark this post and the followings unread

Μπες στο site μου http://www.MsAccess.gr όπου εκεί στείλε μου e-mail στο contact και θα επικοινωνήσουμε από εκεί.

Φιλικά
Kon73

_________________
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εμφάνιση Μηνυμάτων:   
Εισαγωγή νέου Θέματος   Απάντηση στο Θέμα Σελίδα 1 από 1 [8 Μηνύματα] Mark the topic unread :: Προηγούμενο θέμα :: Επόμενο θέμα
 Forum index » Δημιουργία Web Sites, Γραφικών & Προγραμματισμός » SQL και SQL Servers (RDBMS) » MS Access
Τώρα είναι 04 Δεκ 2016 10:05 | All times are UTC + 2


Email This Page to Someone! add to Favorites

     Powered by p h p B B © 2001,2005 p h p B B Group
Για άμεση επικοινωνία με τον διαχειριστή του freestuff.gr στο email: freestuff.gr(παπάκι)gmail.com


Copyright © 1999-2013 Freestuff.gr All Rights Reserved  
Version Aegean, designed by N. Tsaganos