This is my corner for documenting my ideas.
It mostly contains posts for Access Databases (samples, full applications, etc.) as i like rapid software application development. Occasionally you will find other stuff like physics notes.

Sunday, 12 September 2010

Χειρισμός των hyperlinks στο Access Runtime

Το Access Runtime είναι μία δωρεάν παρεχόμενη εφαρμογή από την Microsoft με σκοπό όσοι δεν διαθέτουν την Microsoft Access (βρίσκεται στην έκδοση Professional του Office) να μπορούν να ανοίξουν και να τρέξουν τις εφαρμογές της Access όχι όμως και να επέμβουν στον σχεδιασμό τους. Δυστυχώς όμως δεν διαθέτει 100% τη λειτουργικότητα της πλήρους εφαρμογής με συνέπεια μερικά χαρακτηριστικά να είναι απόντα και ο σχεδιαστής θα πρέπει να το λαμβάνει αυτό υπόψιν του όταν θα σχεδιάζει την εφαρμογή καθώς μπορεί να χρειαστεί να την διανείμει μαζί με το Runtime όταν δεν είναι διαθέσιμη στον παραλήπτη της εφαρμογής η Access.

Δυστυχώς ένα από τα χαρακτηριστικά που απουσιάζουν από το Runtime είναι η διαχείριση των hyperlinks, δεν γίνεται δηλαδή να προσθέσεις ή να αφαιρέσεις κάπου αν αυτό απαιτείται. Μία συχνή χρήση τους σε εφαρμογές που φτιάχνονται στην Access είναι να χρησιμοποιούνται ως διαδρομές αρχείων γιατί με το πάτημα επάνω τους ανοίγει το αρχείο στο οποίο δείχνουν. Για παράδειγμα μπορεί για ένα πρόσωπο να θέλουμε να έχουμε τις διαδρομές των αρχείων που σχετίζονται με αυτό (έγγραφα word/acrobat/excel ή οτιδήποτε άλλο) και με ένα πίνακα να τις καταχωρούμε στα αντίστοιχο πεδίο. Θα δούμε μία μέθοδο ώστε να μπορούμε να προσθέσουμε τις διαδρομές των αρχείων σε μορφή hyperlink παρακάμπτοντας την αδυναμία του Runtime.

Πρώτα από όλα θα χρειαστούμε μία ρουτίνα που να ανοίγει το πλαίσιο διαλόγου για την επιλογή της διαδρομής. Αυτή η ρουτίνα παρέχεται στο παράδειγμα και είναι εκτός σκοπού η ανάλυση της, μιας και είναι πολύ διαδεδομένη και υπάρχει σε πολλές παραλλαγές παντού στο Διαδίκτυο. Μας ενδιαφέρει η ρουτίνα η οποία αφού θα πάρει τη διαδρομή του αρχείου να τη μετατρέψει σε hyperlink. Έτσι ο πίνακας μας με ονομασία tblPaths πέρα από το Primary Key θα πρέπει να έχει ένα πεδίο memo (DocPath) που θα κρατάει τις διαδρομές και δεν θα έχει περιορισμούς στο μήκος των χαρακτήρων. Στη σχεδίαση φόρμας αφού βάλουμε τα πεδία του πίνακα επάνω θα πρέπει να τοποθετήσουμε και ένα Command Button στον οποίο θα αντιστοιχίσουμε κώδικα ώστε να ανοίξει το πλαίσιο διαλόγου, να προστεθεί η διαδρομή και να αποθηκευτεί ως hyperlink.

Ο κώδικας που παραθέτω είναι από αυτό εδώ το παράδειγμα 


στο οποίο χρησιμοποείται για να δώσει τη διαδρομή ενός αρχείου εικόνας ώστε αυτή να μην ενσωματώνεται στη βάση (πολύ χρήσιμο) και που εδώ δεν μας ενδιαφέρουν τα κομμάτια που αφορούν την εικόνα οπότε απλοποιείται πολύ. Έτσι αν ονομάσoυμε το Command Button cmdAddFilePath τότε πρέπει να ενσωματώσουμε τον παρακάτω κώδικα ως EventProcedure στο Event OnClick:


Private Sub cmdAddFilePath_Click()
On Error GoTo cmdAddFilePath_Err
    Dim strFilter As String
    Dim lngflags As Long
    Dim varFileName As Variant

    strFilter = "All Files (*.*)" & vbNullChar & "*.*" _
              & vbNullChar & "All Files (*.*)" & vbNullChar & "*.*"

    lngflags = tscFNPathMustExist Or tscFNFileMustExist _
               Or tscFNHideReadOnly

    varFileName = tsGetFileFromUser( _
                  fOpenFile:=True, _
                  strFilter:=strFilter, _
                  rlngflags:=lngflags, _
                  strDialogTitle:="ÅðéëÝîôå ôï áñ÷åßï...")

    If IsNull(varFileName) Then
    Else
        Me![DocPath] = varFileName & "#" & varFileName & "#"
    End If

cmdAddFilePath_End:
    On Error GoTo 0
    Exit Sub

cmdAddFilePath_Err:
    Beep
    MsgBox err.Description, , "Error: " & err.Number _
                            & " in file"
    Resume cmdAddFilePath_End
End Sub




Θα παρατηρήσατε ότι έχω κοκκινήσει τη γραμμή του κώδικα που κάνει όλη τη δουλειά και που στον αρχικό κώδικα ήταν απλά

Me![DocPath] = varFileName

και που η λειτουργία της είναι να δώσει στην ενεργή φόρμα (Me), στο πεδίο DocPath τη τιμή της μεταβλητής varFileName που δεν είναι παρά η διαδρομή του αρχείου. Η μετατροπή που κάναμε ήταν να προσθέσουμε ξανά τη varFileName με το σύμβολο # στην αρχή και το τέλος της πρόσθεσης ώστε να αποθηκεύονται μαζί και οι πληροφορίες που απαιτούν τα hyperlinks (& "#" & varFileName & "#").
Τέλος θα πρέπει να πούμε στην Access να εμφανίζει το πεδίο DocPath ως hyperlink και αυτό γίνεται από την ιδιότητα IsHyperlink θέτοντας το όρισμα της σε Yes.


Έχουμε τελειώσει. Πλέον στο Runtime μπορούμε να προσθέτουμε hyperlinks.



 και φυσικά μπορείτε να μελετήσετε το παράδειγμα


Saturday, 11 September 2010

Υπολογισμός Δόσης Δανείου (Σταθερού Επιτοκίου)

Συχνά ερχόμαστε αντιμέτωποι με το ερώτημα του πόση θα είναι η μηνιαία δόση για να αγοράσουμε ένα καταναλωτικό αγαθό που επιθυμούμε. Τα δάνεια που χορηγούνται σε αυτές τις περιπτώσεις είναι σταθερού επιτοκίου και χαμηλής διάρκειας (12-48 μήνες) οπότε χρησιμοποιείται ένας τύπος υπολογισμού της δόσης ο οποίος προκύπτει από μία μαθηματική διαδικασία, η οποία δεν είναι απαραίτητο να μας απασχολήσει σε αυτή την ανάρτηση. Τον τύπο αυτό τον ενσωματώνουν πολλές τράπεζες στις σελίδες τους για να δώσουν μία γρήγορη απάντηση στον επισκέπτη τους και είναι ο εξής:


Τα απαιτούμενα πεδία για τον υπολογισμό της Μηνιαίας Δόσης είναι το Αρχικό Κεφάλαιο, το Ετήσιο Επιτόκιο δανεισμού, και ο Αριθμός Μηνιαίων Δόσεων. Φυσικά ο υπολογισμός πολύ εύκολα μπορεί να γίνει με τη χρήση του Microsoft Excel αλλά εδώ ασχολούμαστε με την Microsoft Access όπου θα φτιάξουμε μία φόρμα ώστε να έχουμε καλύτερο οπτικό αποτέλεσμα και η οποία θα μπορεί να ενσωματωθεί σε οποιαδήποτε άλλη εφαρμογή μας (εγώ την κατασκεύασα ως βοηθητικό εργαλείο για το miniCRM).

Σε μορφή σχεδίασης επάνω σε μία κενή φόρμα τοποθετούμε τέσσερα πεδία κειμένου (text box) τα οποία αντιστοιχούμε στις απαραίτητες μεταβλητές για τον υπολογισμό της μηνιαίας δόσης που είναι όπως είπαμε το Αρχικό Κεφάλαιο (PrincipalAmount), το Ετήσιο Επιτόκιο (AnnualInterest) από το οποίο υπολογίζουμε το Μηνιαίο Επιτόκιο (MonthlyInterest) και τον Αριθμό των Μηνιαίων Δόσεων (Months). Στο πεδίο PrinicpalAmount μπορούμε να δώσουμε Format Euro μιας και πρόκειται για χρηματικό ποσό. Στο πεδίο AnnualInterest δεν δίνουμε Format Ποσοστού γιατί μπορεί να μπερδέψει τους υπολογισμούς ο τρόπος που χειρίζεται τα ποσοστά η Access. Το πεδίο MonthlyInterest θα ισούται με το πηλίκο του AnnualInterest προς 12 (μήνες του έτους) προς 100 (σε καθαρό αριθμό γιατί δίνουμε αριθμό ποσοστού %). Επειδή ο χρήστης δεν είναι ανάγκη να βλέπει το πεδίο MonthlyInterest το κάνουμε αόρατο θέτοντας την ιδιότητα Visible στα Properties του σε No. Το πεδίο Months που αντιστοιχεί στους Μήνες μπορούμε να το περιορίσουμε ώστε να μην δείχνει δεδαδικούς καθώς η τιμή που δέχεται αντιστοιχεί σε ακέραιο αριθμό.




Τέλος χρειάζεται άλλο ένα text box στο οποίο θα γίνεται ο υπολογισμός της μηνιαίας δόσης με βάση τον παραπάνω τύπο και που χρησιμοποιώντας τα ονόματα που δώσαμε στις απαραίτητες μεταβλητές θα πάρει τη μορφή:


[PrincipalAmount]*(([MonthlyInterest]/((1+[MonthlyInterest])^[Months]-1))+[MonthlyInterest])

Την έκφραση αυτή (με ένα ίσον μπροστά) την βάζουμε στο Control Source του text box που αντιστοιχεί στη μηνιαία δόση και που ας το ονομάσουμε MonthlyPayment και ας του δώσουμε Format Euro.

Θεωρητικά έχουμε τελειώσει αλλά για την την φιλικότητα προς τον χρήστη καλό είναι να υπάρχει και ένα πεδίο που να υπολογίζει τη συνολική επιβάρυνση, το ποσό δηλαδή που θα πληρώσουμε επιπλέον του Αρχικού Κεφαλαίου. Έτσι δεν έχουμε παρά να προσθέσουμε άλλο ένα text box που θα υπολογίζει το συνολικό κεφάλαιο με τους τόκους και θα αφαιρεί το Αρχικό Κεφάλαιο ώστε να παίρνουμε την επιβάρυνση. Οπότε στο Control Source θα μπει η εξής έκφραση

[MonthlyPayment]*[Months]-[PrincipalAmount]

Aποθηκεύουμε και ιδού το αποτέλεσμα εν δράσει:


Και φυσικά μπορείτε να πάρετε έτοιμο:


Friday, 9 July 2010

Γεννήτρια Τυχαίων Ημερομηνιών

Πρόσφατα χρειάστηκε να γεμίσω πίνακες που αποτελούνταν από στοιχεία καθορισμού φυσικών προσώπων και επιχειρήσεων. Τα στοιχεία αυτά ήταν ψευδή (τυχαία) και για τα πρόσωπα ήταν επώνυμο, όνομα, φύλο, ημερομηνία γέννησης, αριθμός ταυτότητας, διεύθυνση, τηλέφωνα κλπ., ενώ για τις επιχειρήσεις επωνυμία, ΑΦΜ, δραστηριότητα, διεύθυνση, τηλέφωνα κλπ.  Όπως γίνεται εύκολα αντιληπτό, όσο μεγαλύτερος ο πίνακας (ο αριθμός των εγγραφών δηλαδή - προσώπων και επιχειρήσεων) τόσο πιο δύσκολο το έργο, με την χειρωνακτική αντιμετώπιση του επιθυμητή όσο λιγότερο γίνεται.

Με αφορμή την εργασία αυτή, μου γεννήθηκε η ιδέα μιας εφαρμογής παραγωγής τέτοιων ψευδοστοιχείων προσαρμοσμένα στην ελληνική πραγματικότητα καθώς αντίστοιχα εργαλεία πχ. για την αμερικανική πραγματικότητα υπάρχουν και συχνά στο Microsoft Excel. Φυσικά τα Αγλλικά ονόματα ή οι αριθμοί κοινωνικής ασφάλισης άλλων χωρών μας είναι άχρηστα. Το πρόβλημα στην πλειοψηφία των περιπτώσεων που αποτελείται από επιλογή εγγραφών από μία υπάρχουσα λίστα (π.χ. ονόματα) είναι να δηλωθεί ο αριθμός των επιθυμητών εγγραφών και όποια άλλη ιδιαιτερότητα καθορίζει τη λίστα αυτή (π.χ. στα ονόματα μπορεί να επιθυμούμε μόνο ανδρικά ή γυναικεία). Στην περίπτωση των ονομάτων θα πρέπει να έχουμε συγκεντρώσει σε ένα πίνακα (λίστα) έναν μεγάλο αριθμό ελληνικών μικρών ονομάτων και να έχουμε αντιστοιχίσει τα ονόματα με το φύλο στο οποίο απευθύνονται. Εάν δε επιθυμούμε μεγάλη ακρίβεια στο τυχαίο επιθυμητό δείγμα των ονομάτων θα πρέπει να έχουμε ορίσει και τις πραγματικές συχνότητες εμφάνισης τους στον πληθυσμό και αυτές να αναπαράγονται με επιτυχία στο τυχαίο δείγμα αλλά αυτό είναι ένας βαθμός δυσκολίας παραπάνω.

Ξεκινώντας από την πιο εύκολη περίπτωση όπου δεν απαιτείται η ύπαρξη μίας τέτοιας λίστας από την οποία θα πρέπει να επιλεχθούν τυχαίες εγγραφές αλλά θα πρέπει να δημιουργηθούν όπως πχ. τυχαίες ημερομηνίες, οι απαραίτητες εισαγωγές από τον χρήστη θα πρέπει να είναι ο επιθυμητός αριθμός εγγραφών (ημερομηνιών) και το εύρος στο οποίο θα κινούνται, ένα έτος έναρξης και ένα έτος λήξης δηλαδή. Όταν ειδικά θέλουμε οι τυχαίες αυτές ημερομηνίες να αντιπροσωπεύουν ημερομηνίες γέννησης είναι πιο εύκολο για το χρήστη να δώσει το εύρος ηλικιών των προσώπων (πχ. από 22 εως 35 ετών).

Στο forum ms-office.gr στο οποίο είμαι γραμμένος (μαντέψτε με τι nickname) έθεσα τους παραπάνω προβληματισμούς και η συζήτηση έχει πάρει φωτιά ειδικά για το θέμα των ονομάτων και των συχνοτήτων εμφάνισης μιας και το επίπεδο δυσκολίας εξιτάρει τους φοβερούς σε γνώσεις συμφορουμίτες. Το θέμα των ημερομηνιών λύθηκε εύκολα και πρώτο και το παρουσιάζω και από εδώ. Πρώτα θα πρέπει να γραφεί μία συνάρτηση που θα παράγει τις τυχαίες ημερομηνίες. Ιδού:
Public Function fncRndDate() As Date
    Dim rY As Integer
    Dim rM As Integer
    Dim rD As Integer
    Randomize
       
    'Τυχαίο Έτος
    rY = CInt(Rnd * (Form_TyhaiesHmnies.EndYear - Form_TyhaiesHmnies.StartYear)) + Form_TyhaiesHmnies.StartYear + 1
    'Τυχαίος Μήνας
    rM = CInt(Rnd * 12) + 1
    'Τυχαία Μέρα
    rD = CInt(Day(DateSerial(rY, rM + 1, 0)) * Rnd) + 1
   
    'Τυχαία Ημερομηνία
    fncRndDate = DateSerial(rY, rM, rD)

End Function
Φτιάχνοντας μία μικρή φόρμα όπου ο χρήστης θα δηλώνει πόσες ημερομηνίες θέλει και για ποιες ηλικίες (εικόνα) θα πρέπει να αντιστοιχήσουμε τον παρακάτω κώδικα στο κουμπί που θα ξεκινάει την δημιουργία τους:

Private Sub CmdRndDate_Click()
    On Error GoTo CmdRndDate_Error
    Dim numOfDates As Long
    Dim i As Long
    
    DoCmd.SetWarnings False
    'Απόρριψη πινάκων αν υπάρχουν
    On Error Resume Next
    DoCmd.RunSQL "drop table tblRndDates"
    On Error GoTo 0

    'Δημιουργία πίνακα με τυχαίες ημερομηνίες
    DoCmd.RunSQL "create table tblRndDates (RndDate Date);"
    Application.RefreshDatabaseWindow
    numOfDates = Me.numOfDates
    For i = 1 To numOfDates
        DoCmd.RunSQL "Insert into tblRndDates (RndDate) values(fncRndDate());"
    Next

CmdRndDate_Exit:
    DoCmd.SetWarnings True
    Exit Sub
   
CmdRndDate_Error:
    MsgBox Err.Description
    GoTo CmdRndDate_Exit
End Sub

και είμαστε έτοιμοι. Τσεκάρετε την εφαρμογή στην Access, χρησιμοποιήστε τη όπου την έχετε ανάγκη και αν μπορείτε ως μικρή άσκηση εάν δεν επιθυμείτε να ορίζετε εύρος ηλικιών αλλά έτος έναρξης και έτος λήξης κάντε τις απαραίτητες τροποποιήσεις (είναι πολύ εύκολο). Και μην ξεχνάτε που τα βρήκατε όλα αυτά...







Saturday, 27 February 2010

eveonacloud (Σύντομη Παρουσίαση στα Ελληνικά)

Η παρακάτω ιδέα μου ήρθε πριν ενάμισυ χρόνο περίπου αλλά δεν μπόρεσα να την υλοποιήσω λόγω έλλειψης πόρων. Θα έχετε προσέξει ότι σε όλους πλέον τους χώρους κοινωνικής δικτύωσης υπάρχει ένα κομμάτι που αφορά συμβάντα αλλά ως πρόσθετο του υπόλοιπου χώρου. Πως θα ήταν ένα social network που θα ήταν αποκλειστικά γεγονοστραφές; Σε επόμενη ανάρτηση θα παρουσιάσω και λεπτομέρεις για την δομή του. Ιδού:



Friday, 19 February 2010

Δομές II (Πρόσωπα - Εταιρείες) και miniCRM Basics


UPDATE 31/12/2011:
Θα ανεβάσω νέα έκδοση εντός του μήνα. Stay tuned...




Όπως έχω πει το miniCRM είναι καθαρά μία προσωπική μου προσπάθεια, χωρίς την αναμονή άμεσου κέρδους, καθώς θα παρέχεται ελεύθερα για χρήση προσωπική και επαγγελματική και θα χρεώνεται μόνο η τροποποίηση/παραμετροποίηση για ειδικούς χώρους εργασίας. Το miniCRM δεν έχει ολοκληρωθεί ακόμα (υπολογίζω τουλάχιστον άλλους τρεις μήνες για μία πρώτη λειτουργική έκδοση), αλλά μπορείτε να έχετε μία χρηστική επαφή με μία έκδοση σε επίπεδο ατζέντας (miniCRM Basics), την οποία μπορείτε να χρησιμοποιήσετε και ως τεφτέρι προς το οικονομικό κομμάτι. Παρέχει μόνο τις δομές για την καταχώρηση προσώπων και εταιρειών και τις οικονομικές τους συναλλαγές. Θέλω να γίνει ορατή η χρησιμότητα της Access στο χτίσιμο εφαρμογών που εξυπηρετούν τις ανάγκες οποιασδήποτε ιδιομορφίας για προσωπική ή επαγγελματική χρήση. Φυσικά δεν μπορούν να δημιουργηθούν από τη μία ημέρα στην άλλη, ιδιαίτερα όταν απαιτείται και μία αισθητική προσέγγιση, αλλά το τελικό αποτέλεσμα είναι μακράν πιο αποδοτικό από τη χρήση excel-ό-φυλλων.

Εάν δεν έχετε την Microsoft Access ως κομμάτι του Microsoft Office θα χρειαστείτε να κατεβάσετε το Runtime της Access που επιτρέπει την εκτέλεση των αρχείων της αλλά όχι και την δημιουργία ή τροποποίηση τους, εντελώς δωρεάν από εδώ:
   

και το miniCRM Basics
 
από εδώ
(Rapidshare.com)
miniCRMBasics.exe

Αφού κάνετε εγκατάσταση του Runtime (για όσους δεν έχουν την Access) και την εγκατάσταση του miniCRM Basics, (θα δημιουργήσει και ένα directory στο root του δίσκου με όνομα db_images όπου εκεί θα πρέπει να αποθηκεύετε τις φωτογραφίες που θα χρησιμοποιεί - προσώπων και εμπορευμάτων) τρέξτε το miniCRM Basics από το φάκελο που δημιουργεί στον κατάλογο με τα προγράμματα στο μενού των Windows. 

Στην περίπτωση που εγκαταστήσατε το Runtime και ανοίγετε το miniCRM Basics και σας λέει ότι έχει ανοιχθεί "μόνο για ανάγνωση" (Read-Only) σώστε μία κόπια της εκεί που σας προτρέπει και αντιγράψτε το νέο αρχείο πάνω από το εγκατεστημένο στο φάκελο Program Files\miniCRM Basics

Με το που θα ξεκινήσει το πρόγραμμα θα ζητήσει χρήστη και κωδικό εισόδου. Παρ' ότι απαιτούνται τέτοια στοιχεία το miniCRM Basics δεν είναι κλειδωμένο και η λειτουργία έχει μπει για μελλοντική χρήση. 

Επιλέξτε χρήστη Admin και κωδικό εισόδου admin


Μετά την επιτυχημένη είσοδο θα πεταχτεί ένα διαφημιστικό παράθυρο (τόσο κόπο έκανα) και πατώντας κλείσιμο θα ανοίξει το κεντρικό μενού.

<αν δεν παινέψεις το σπίτι σου...>

<το κεντρικό μενού>

Ενώ μία εταιρεία μπορεί να απασχολεί περισσότερα από ένα πρόσωπα, η ποσότητα της πληροφορίας που απαιτείται (αριθμός πεδίων) είναι λίγο μικρότερη από αυτή του ενός προσώπου, διότι υπάρχουν πληροφορίες που αντιστοιχούν από τη φύση τους μόνο σε πρόσωπα ακόμα και αν αυτά ανήκουν σε εταιρείες. Για παράδειγμα πίσω από έναν λογαριασμό instant messaging (πχ. Windows Live), υπάρχει κατά 99% ένα πρόσωπο, ακόμα και αν τον διαχειρίζεται για εταιρικούς σκοπούς. Το CRM απλώς πρέπει να μας πληροφορεί κάπου ότι το συγκεκριμένο πρόσωπο είναι επαφή (υπάλληλος) μιας εταιρείας. Επίσης η επικοινωνία (με οποιαδήποτε μορφή, e-mail, τηλέφωνο, fax) γίνεται μεταξύ προσώπων ακόμα και για εταιρικούς σκοπούς, οπότε οι λεπτομέρειες της επικοινωνίας θα υπάρχουν στην καρτέλα των προσώπων. 

Σε πρώτο επίπεδο και για τα πρόσωπα και για τις εταιρείες θα πρέπει να υπάρχουν τα στοιχεία ταυτοποίησης και επικοινωνίας για τα οποία δεν θα μπω σε λεπτομέρειες μιας και είναι αυτονόητα. Φυσικά η μοναδικότητα μίας εταιρείας διαπιστώνεται μέσω του Α.Φ.Μ. και ενός προσώπου από τον αριθμό ταυτότητας του. Στη πρώτη περίπτωση, ο διαχειριστής και συνήθως οι υπάλληλοι της εταιρείας θυμούνται τον Α.Φ.Μ., στη δεύτερη όμως τις περισσότερες φορές τα πρόσωπα δεν έχουν αποστηθίσει τον αρ. ταυτότητας τους μιας και δεν απαιτείται συχνά σε συναλλαγές, γι' αυτό και μπορεί να χρησιμοποιηθεί εναλλακτικά ως αναφορά για τα πρόσωπα ο αριθμός του κινητού τους τηλεφώνου, καθώς είναι σχεδόν απίθανο, δύο πρόσωπα να έχουν (χρησιμοποιούν) τον ίδιο αριθμό κιν. τηλεφώνου. Μερικές εταιρείες χρησιμοποιούν αυτή την τακτική επιτυχημένα (e-shop.gr).

Ίσως το πιο σημαντικό κομμάτι σε ότι αφορά τη χρήση του CRM είναι η δήλωση της σχέσης που συνδέει κάθε πρόσωπο ή εταιρεία με την δική μας εταιρεία (αν είναι πχ. πελάτης λιανικής, προμηθευτής ή κάτι άλλο) από όλες τις πιθανές περιπτώσεις που είδαμε σχηματοποιημένα στην προηγούμενη ανάρτηση για τις δομές. Μόνο με την δήλωση αυτών των σχέσεων μπορεί το πρόγραμμα να λειτουργήσει ολοκληρωμένα και όχι απλά ως μία ατζέντα καταχώρησης στοιχείων.


Εάν κάποιο πρόσωπο είναι υπάλληλος της εταιρείας και επιλέξουμε το check box "Εργαζόμενος" (επάνω εικόνα) τότε ανοίγει και μία νέα καρτέλα (εικόνα κάτω) που περιέχει στοιχεία για τον εργαζόμενο πιο πολύ με μία προσέγγιση Human Resources παρά μισθολογική. Περιλαμβάνει επίσης και ένα παρουσιολόγιο στην περίπτωση που οι εργαζόμενοι χτυπάνε κάρτες (χειρόγραφα ή ηλεκτρονικά) ώστε αν θέλει ο εργοδότης να ελέγξει τα ωράρια. Αργότερα αυτή τη καρτέλα θα μπορεί να την δει μόνο όποιος έχει μπει στο πρόγραμμα με δικαιώματα διαχειριστή (admin).

 <στο πρόγραμμα μου μπορώ να λαμβάνω ότι μισθό θέλω ε; :Ρ>

Ενώ για πολλά χρόνια τα στοιχεία (άμεσης) επικοινωνίας περιορίζονταν στην καταχώρηση του αριθμού τηλεφώνου και του fax, με την έλευση της ψηφιακής εποχής και του Διαδικτύου, προστέθηκε το e-mail (συνήθως περισσότερα του ενός), τα προγράμματα instant messaging, οι ιστότοποι, τα blogs και άλλες υπηρεσίες. Έτσι υπάρχει χωριστή καρτέλα για την επικοινωνία Web, όπου μέσω των παραμέτρων (πχ. διαδικτυακές παρουσίες), μπορούμε να ορίσουμε μία νέα υπηρεσία του Web, (ένα καινούργιο κοινωνικό δίκτυο όπως το Facebook) και για το οποίο να έχουμε την αντίστοιχη για κάθε πρόσωπο (ή εταιρεία) διεύθυνση. 


Η καρτέλα δραστηριότητα υπάρχει για την καταγραφή δραστηριότητας μεταξύ της εταιρείας μας και ενός προσώπου (που μπορεί να εργάζεται σε άλλη εταιρεία) και υπάρχει μόνο στην επιλογή των προσώπων. Μπορεί να καταχωρηθεί πληροφορία για τον τύπο της δραστηριότητας, την προτεραιότητα και την κατάσταση της. Επίσης μπορεί να τεθεί σύνθετο ερώτημα σχετικά με τις δραστηριότητες που σχετίζονται με ένα πρόσωπο και να πάρουμε αναφορά την οποία μπορούμε να εξάγουμε σε excel, pdf ή να την τυπώσουμε.


Στην καρτέλα με τίτλο Τράπεζες καταχωρούμε τους τραπεζικούς λογαριασμούς που μπορεί να έχει στην κατοχή του κάθε πρόσωπο ή εταιρεία. Σε αυτή η καρτέλα καταχωρούμε επίσης τα αξιόγραφα που εκδίδει ανά τραπεζικό λογαριασμό κάθε πρόσωπο ή εταιρεία. Στην έκδοση miniCRM Basics όμως κάτι τέτοιο ξεφεύγει από το σκοπό της και για αυτό έχει αφαιρεθεί. 

Τέλος στην καρτέλα Χρεώσεις/Πιστώσεις μπορούμε να έχουμε λογαριασμούς υπολοίπων για άλλα πρόσωπα ή εταιρείες. Αυτό που έχει προβλεφθεί και όπως έχω αναφέρει ξανά είναι ότι γίνεται υπολογισμός δύο μορφών υπολοίπων: του πραγματικού (εκτός παραστατικών) και του επίσημου (εντός παραστικών) καθώς στην ελληνική επιχειρηματική πραγματικότητα είναι κάτι το οποίο συναντάμε συνεχώς μπροστά μας. Επίσης έχει προβλεφθεί η δυνατότητα καταχώρησης υπολοίπων ανά διαφορετικούς λογαριασμούς. Αυτό είναι κάτι το οποίο συνάντησα μπροστά μου συχνά στον κατασκευαστικό τομέα, καθώς ο κάθε κατασκευαστής ήθελε διαφορετικό λογαριασμό για κάθε έργο (οικοδομή του) και κατ' επέκταση μία εταιρεία μπορεί να χρεώνεται σε διαφορετικές διευθύνσεις παραλαβής των εμπορευμάτων που αγοράζει. Έτσι ως ονοματολογία του λογαριασμού χρησιμοποιούμε συνήθως τη διεύθυνση του έργου, όπως συμβαίνει και στην πραγματικότητα στην πλειοψηφία των περιπτώσεων.  Δεξιά στα ερωτήματα πατώντας το κουμπί "Υπόλοιπα Συναλλασσομένων" θα πάρουμε αναλυτική αναφορά χρεώσεων και πιστώσεων (επίσημων και "μαύρων") ανά λογαριασμό.

<Ψηλά στη καρτέλα του προσώπου με κόκκινα γράμματα φαίνεται το συνολικό υπόλοιπο του προσώπου ενώ στην αναφορά δεξιά τα υπόλοιπα με λεπτομέρειες ανά λογαριασμό.>

Όσα είδαμε για την καρτέλα των προσώπων ισχύουν και για την καρτέλα των εταιρειών, εκτός του ότι δεν υπάρχουν στοιχεία για τους εργαζόμενους και τις δραστηριότητες αφού τα εξετάζουμε ως ιδιότητες των προσώπων. Στα ερωτήματα δεξιά μόνο υπάρχει η δυνατότητα για μία εύκολη και μαζική θέαση των σχετιζομένων προσώπων ή εταιρειών με την εταιρεία της οποίας την εγγραφή κοιτάμε.


Τέλος από το κεντρικό μενού στο κουμπί Οικονομικά μεταβαίνετε σε μία κατηγορία λειτουργιών της οποίας τα χαρακτηριστικά έχουν σχέση φυσικά με τον τίτλο της κατηγορίας. Θα υπάρχουν λογαριασμοί εσόδων/εξόδων, κινήσεις αξιογράφων και άλλα. Στο miniCRM Basics υπάρχει η δυνατότητα της δημιουργίας συγκεντρωτικών λιστών (2) με τα υπόλοιπα προσώπων και εταιρειών. 

Αυτά τα ολίγα προς το παρόν. θα ήθελα πάρα πολύ να έχω τις εντυπώσεις, τις απορίες, τις παρατηρήσεις, τις προτάσεις σας.

Saturday, 6 February 2010

Εισαγωγή (Δομές του miniCRM)

Μία μικρή εισαγωγή για την Microsoft Access και το miniCRM έχω κάνει εδώ. Τα κυρίως άρθρα που θα αφορούν το miniCRM θα τα βρίσκετε σε αυτή τη γωνιά (Projects) του χώρου  μου καθώς μαζί με το eveonacloud χρειάζονται τη δική τους στέγη. Σε αυτή την εισαγωγή στο miniCRM θα πούμε για τις βασικές δομές πάνω στο οποίο χτίζεται (όχι μόνο αυτό αλλά και οποιοδήποτε CRM). 

Ενώ ένα λογιστικό/εμπορικό πρόγραμμα αντιμετωπίζει τους συναλλασόμενους με βάση μόνο τις οικονομικές τους συναλλαγές, δηλαδή κυρίως χρεώσεις και πιστώσεις, ένα πρόγραμμα Customer Relationship Management όπως το miniCRM θα πρέπει να τους αντιμετωπίζει πρώτιστα με βάση τη φυσική ή νομική τους υπόσταση γιατί αλλάζουν οι ανάγκες τους καθώς και ο τρόπος αντιμετώπισης τους με βάση το διαχωρισμό αυτό. Η επιχείρηση μας (κυρίως μικρομεσαία), στις ανάγκες της οποίας θέτουμε το CRM, συναλλάσσεται εμπορικά με δύο κύριες κατηγορίες οντοτήτων: τα πρόσωπα και τις εταιρείες μέσω

- προϊόντων
- εμπορευμάτων
- υπηρεσιών

Από τις παραπάνω τρεις κατηγορίες θα εξαιρέσουμε τα προϊόντα με την αυστηρή έννοια του όρου καθώς τότε θα πρέπει να εξεταστεί και η διαδικασία παραγωγής τους, ζήτημα σύνθετο και εκτός σκοπών του CRM και από την άλλη διότι η πλειοψηφία των μικρομεσαίων επιχειρήσεων συνήθως πωλεί εμπορεύματα και υπηρεσίες. Επίσης σε μία απλούστευση της προσέγγισης μπορεί και το προϊόν μίας επιχειρήσης να "βαφτιστεί" ως εμπόρευμα, αγνοοώντας τις διαδικασίες παραγωγής για να επικεντρωθούμε στο εμπορικό κομμάτι.

Επόμενο βήμα είναι να οριστούν οι σχέσεις μεταξύ της εταιρείας μας και των προσώπων και άλλων εταιρειών. Όπως φαίνεται στη παρακάτω σχηματοποίηση ένα πρόσωπο μπρεί να είναι: εργαζόμενος στην εταιρεία μας, μία απλή επαφή, επαφή μία εταιρείας με την οποία συναλλασσόμαστε ή τέλος πελάτης (λιανικής). Επίσης δεν αποκλείεται ο συνδυασμός κάποιων από τα παραπάνω π.χ. ο εργαζόμενος στην εταιρεία μας μπορεί να "ψωνίζει" από αυτή οπότε είναι και πελάτης μας. Θα πρέπει δηλαδή το σύστημα να επιτρέπει παραπάνω από έναν ορισμούς σχέσεων μεταξύ εταιρείας μας και προσώπων.

 
Αντίστοιχα μία εταιρεία μπορεί να είναι η εταιρεία μας (εκτός αν ορίσουμε έναν πίνακα δεδομένων αποκλειστικά για αυτή - κάθε προσέγγιση έχει τα πλεονεκτήματα και τα μειονεκήματα της), μπορεί να είναι προμηθευτής μας ή να είναι πελάτης (χονδρικής) ή τέλος κάποιος συνδυασμός (πελάτης και προμηθευτής) οπότε και εδώ θα πρέπει να επιτρέπεται η πολλαπλή καταχώρηση ορισμών.

Κάτι το οποίο διευκολύνει πολύ αργότερα τον καθορισμό των τιμών των εμπορευμάτων και υπηρεσιών προς όλες τις παραπάνω δυνητικές μορφές πελατών είναι ένας προκαθορισμός του ποσοστού κέρδους ανά μορφή πελάτη π.χ. τα εμπορεύματα να πωλούνται στους πελάτες λιανικής με κέρδος 10% ώστε την καρτέλα του εμπορεύματος να δημιουργείται αυτόματα η τιμή πώλησης του για τον πελάτη λιανικής αλλά και από την άλλη αυτό το ποσοστό να μην είναι δεσμευτικό γιατί μπορεί για κάποιον εμπορικό λόγο να απαιτείται ένα μικρότερο ή μεγαλύτερο ποσοστό κέρδους από το αρχικά προκαθορισμένο π.χ. στην προώθηση παλαιού στοκ, η πώληση γίνεται με ελάχιστο, μηδενικό ή και αρνητικό κέρδος.

<Σε κάθε κατηγορία σχέσης με την οντότητα ΠΡΟΣΩΠΟ ορίζουμε ποσοστό κέρδους>

<Εδώ βλέπουμε πως διαμορφώνεται η τιμή πώλησης ενός εμπορεύματος ανά κατηγορία επαγγ. σχέσης και ποσοστού κέρδους. >

Σε επόμενες αναρτήσεις θα δούμε ποια είναι τα κύρια στοιχεία κάθε δομής, δηλαδή τι πληροφορία απαιτείται να έχουμε καταχωρημένη για τις δομές του miniCRM (πρόσωπα, εταιρείες, εμπορεύματα/υπηρεσίες).