Αποθήκευση τιμής 1c 8,3 παραδείγματα. Αποθήκευση δεδομένων σε πεδία του τύπου αποθήκευσης αξίας. Περιορισμοί κατά την εργασία με το πρόγραμμα-πελάτη Web

Πλατφόρμα 1C: Επιχείρησηπαρέχει πολλές δυνατότητες αποθήκευσης δεδομένων διαφόρων τύπων.

Συχνά όμως αυτές οι ευκαιρίες δεν είναι αρκετές. Και τότε ένα ειδικό αντικείμενο έρχεται στη βοήθειά μας - StorageValues. Αυτό το αντικείμενο σάς επιτρέπει να αποθηκεύετε σε ειδική μορφή τόσο τυπικά αντικείμενα 1C:Enterprise, για παράδειγμα, έναν πίνακα τιμών, όσο και μη τυπικά για τα οποία δεν παρέχεται τύπος στην πλατφόρμα. Οι μη τυπικοί τύποι μπορεί να περιλαμβάνουν αρχεία. Για παράδειγμα, χρησιμοποιώντας ένα χώρο αποθήκευσης αξίας σε μια βάση δεδομένων 1C, μπορείτε να αποθηκεύσετε φωτογραφίες υπαλλήλων, σαρώσεις εγγράφων, εξωτερική επεξεργασία κ.λπ. Το πλεονέκτημα εδώ είναι ότι όλα αυτά τα αντικείμενα αποθηκεύονται στην ίδια τη βάση δεδομένων. Κατά συνέπεια, κατά την ανάπτυξη μιας νέας βάσης δεδομένων από ένα αντίγραφο ασφαλείας, όλα αυτά τα αντικείμενα θα υπάρχουν επίσης στη νέα βάση δεδομένων. Από την άλλη πλευρά, εάν αποθηκεύετε μεγάλα αρχεία στη βάση δεδομένων, αυτό μπορεί να αυξήσει σημαντικά τον όγκο της και να επηρεάσει αρνητικά την απόδοσή της. Επομένως, εδώ πρέπει να διατηρηθεί μια λογική ισορροπία.

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

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

Η συνεργασία με ένα κατάστημα αξίας είναι πολύ απλή. Αν κοιτάξουμε τον βοηθό σύνταξης, θα δούμε ότι αυτό το αντικείμενο έχει μόνο μία μέθοδο και έναν κατασκευαστή.

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

&Στη διαδικασία διακομιστή LoadUnloadFile(Στοιχείο καταλόγου)Αντικείμενο καταλόγου =Στοιχείο καταλόγου. GetObject() ; //Τοποθετήστε την εικόνα στο χώρο αποθήκευσης τιμών LabelDownload = Νέα εικόνα("g:\musor\favicon.ico" ) NewValueStorage; //Γράψτε ένα στοιχείο καταλόγουΑντικείμενο καταλόγου. Αντικείμενο DirectoryObject. Write() ; //Μεταφόρτωση της εικόνας από το χώρο αποθήκευσης τιμών σε ένα αρχείο FileName = "g:\musor\favicon_1.ico" ; LabelUpload = Αντικείμενο καταλόγου. Ενα αντικείμενο. Get() ; LabelUpload. Write(FileName) ; Τέλος Διαδικασίας

Και μερικές εξηγήσεις για τον κώδικα.

  • Το αντικείμενο τοποθετείται στο χώρο αποθήκευσης απευθείας όταν το κατάστημα δημιουργείται χρησιμοποιώντας τον κατασκευαστή.

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

Στο 1C:Enterprise 8, είναι δυνατή η αποθήκευση διαφόρων δεδομένων σε πεδία τύπου Value Storage. Αυτά τα πεδία μπορούν να αποθηκεύσουν τιμές τύπου ValueStorage. Ο ίδιος ο τύπος ValueStorage προορίζεται, πρώτα απ 'όλα, να αποθηκεύει τιμές διαφόρων τύπων σε σειριακή μορφή, δηλαδή σε μια φόρμα που σας επιτρέπει να γράψετε δεδομένα και στη συνέχεια να τα επαναφέρετε. Στην τεκμηρίωση για την ενσωματωμένη γλώσσα, στην περιγραφή των αντικειμένων, η δυνατότητα σειριοποίησης υποδεικνύεται με το σήμα "Serializable". Αυτές οι τιμές, καθώς και οι τιμές των αρχέγονων τύπων, μπορούν να τοποθετηθούν σε ένα χώρο αποθήκευσης τιμών και έτσι μπορούν να εγγραφούν σε πεδία βάσης δεδομένων τύπου ValueStorage. Ένα σημαντικό χαρακτηριστικό της αποθήκευσης αξίας είναι η δυνατότητα αποθήκευσης δεδομένων σε συμπιεσμένη μορφή. Αυτό σας επιτρέπει να μειώσετε σημαντικά τον όγκο των αποθηκευμένων πληροφοριών για μεγάλα αντικείμενα.

Έτσι, χρησιμοποιώντας πεδία τύπου Value Storage, είναι δυνατή η αποθήκευση στη βάση δεδομένων μιας σημαντικά ευρύτερης λίστας τύπων δεδομένων, σε σύγκριση με αυτό που μπορεί να καθοριστεί ρητά για τα πεδία. Ωστόσο, θα πρέπει να ληφθεί υπόψη ότι αυτή η μέθοδος αποθήκευσης και η δυνατότητα χειρισμού τέτοιων δεδομένων διαφέρει σημαντικά από τη συνήθη αποθήκευση δεδομένων σε πεδία βάσης δεδομένων. Για τέτοια πεδία, το σύστημα δεν υποστηρίζει πρακτικά καμία άλλη λειτουργία εκτός από την πραγματική εγγραφή και ανάγνωση. Η ευρετηρίαση δεν μπορεί να χρησιμοποιηθεί για τέτοια πεδία, τα δεδομένα δεν μπορούν να ταξινομηθούν από αυτούς σε ερωτήματα και επιλογές, τέτοια πεδία δεν μπορούν να αθροιστούν κ.λπ. Σε αυτήν την περίπτωση, η μηχανή βάσης δεδομένων μπορεί να θεωρηθεί ότι αποθηκεύει κάποιες πληροφορίες χωρίς να γνωρίζει τίποτα για τη φύση της.

Αντίστοιχα, τα πεδία του τύπου Value Storage θα πρέπει να χρησιμοποιούνται μόνο σε περιπτώσεις όπου αυτό αντιστοιχεί στον σκοπό και τα τεχνολογικά χαρακτηριστικά τους.

Μία από τις κύριες χρήσεις των πεδίων τύπου Value Storage είναι η αποθήκευση εικόνων και εικόνων αρχείων. Για το σκοπό αυτό, χρησιμοποιούνται οι τύποι εικόνας και δυαδικών δεδομένων. Αυτό σας επιτρέπει να αποθηκεύετε στη βάση δεδομένων φωτογραφίες εργαζομένων, έγγραφα που έχουν δημιουργηθεί σε διάφορες μορφές κ.λπ. Κατά την υλοποίηση της αποθήκευσης τέτοιων πληροφοριών, μπορεί να προταθεί η δημιουργία δομών δεδομένων που θα διασφαλίζουν χωριστή αποθήκευση αυτών των πεδίων από τις κύριες πληροφορίες. Για παράδειγμα, για να αποθηκεύσετε φωτογραφίες υπαλλήλων, μπορείτε να εφαρμόσετε έναν ξεχωριστό κατάλογο ή μητρώο πληροφοριών, αντί να τοποθετήσετε πεδία του τύπου Value Storage στα ίδια τα αντικείμενα που αποθηκεύουν τη λίστα ατόμων. Θα πρέπει να ληφθεί υπόψη ότι τα αντικείμενα (για παράδειγμα, στοιχεία καταλόγου) διαβάζονται πάντα από το σύστημα ως σύνολο. Επομένως, η αποθήκευση μεγάλων ποσοτήτων πληροφοριών απευθείας σε πεδία αντικειμένων μπορεί να επιβραδύνει σημαντικά το σύστημα.

Στα πεδία του τύπου ValueStorage, είναι δυνατή, για παράδειγμα, η αποθήκευση πινάκων τιμών και δομών. Ταυτόχρονα, οποιοιδήποτε τύποι δεδομένων, συμπεριλαμβανομένων των τύπων αναφοράς, μπορούν να αποθηκευτούν σε πίνακες τιμών και δομές. Σημειώστε ότι μια συλλογή μπορεί να τοποθετηθεί στο Value Store εάν περιέχει μόνο σειριοποιήσιμες τιμές. Ωστόσο, θα πρέπει να ληφθεί υπόψη ότι αυτή η επιλογή για την αποθήκευση δεδομένων διαφέρει σημαντικά από τη ρητή αποθήκευση τιμών σε μεμονωμένα πεδία και από την αποθήκευση πληροφοριών σε ενότητες πίνακα ή μητρώα πληροφοριών. Το σύστημα δεν θα διατηρεί ακεραιότητα αναφοράς για τέτοια πεδία, δεν θα παρέχει αναζήτηση δεδομένων σε ερωτήματα κ.λπ. Έτσι, η αποθήκευση συλλογών σε τέτοια πεδία δεν μπορεί να χρησιμοποιηθεί για την υλοποίηση βασικών τμημάτων μιας λύσης εφαρμογής που είναι υπεύθυνη για την επιχειρηματική λογική. Αυτή η αποθήκευση επιτρέπεται μόνο για βοηθητικά δεδομένα που δεν είναι απαραίτητα για την επιχειρηματική λογική της λύσης εφαρμογής, για παράδειγμα, για την αποθήκευση τυχόν ρυθμίσεων χρήστη.

Παρόλο που το σύστημα δεν έχει ρητό όριο στο μέγεθος των δεδομένων που είναι αποθηκευμένα στα πεδία ValueStorage, θα πρέπει να είστε προσεκτικοί σχετικά με τον όγκο των αποθηκευμένων πληροφοριών. Θα πρέπει να ληφθεί υπόψη ότι η τοποθέτηση μεγάλων τόμων σε τέτοια πεδία αυξάνει τον συνολικό όγκο της βάσης πληροφοριών και αυτό θα επηρεάσει αρνητικά τη λειτουργία του συστήματος κατά την εκτέλεση διαφόρων διοικητικών λειτουργιών, όπως η δημιουργία αντιγράφου ασφαλείας βάσης δεδομένων. Για παράδειγμα, κατά την αποθήκευση εικόνων αρχείων, μπορεί να συνιστάται η αποθήκευση σε τέτοια πεδία των δεδομένων που είναι πραγματικά απαραίτητα στην εργασία, αλλά όχι η χρήση τους για την αποθήκευση μεγάλων όγκων αρχείων που δεν χρησιμοποιούνται στο πρόβλημα της εφαρμογής που επιλύεται.

Σχεδόν κάθε πληροφορία μπορεί να αποθηκευτεί σε ένα κατάστημα αξίας, π.χ.

... εικόνες (φωτογραφίες):

CurrentImage.Object = SprFabric.Link; CurrentImage.DataType = Enumerations.Types of Additional Information of Objects.Image; Storage = NewValueStorage(NewPicture, NewDataCompression()); CurrentImage.Storage = Storage.Get();

// σε αυτό το μέρος εμφανίζει τα πάντα... Form Elements.PictureField1.Picture = Storage.Get(); CurrentImage.Write();

...έγγραφο υπολογιστικού φύλλου:

TabDoc=Νέο TabularDocument; TabDoc.Output(FormElements.TabularDocumentField1); Storage=NewValueStorage(TabDoc); Γράφω();

Τέλος Διαδικασίας

Διαδικασία RestoreFromStoragePress(Element)

TabDoc=Storage.Get(); Εάν το TabDoc<>Undefined ThenFormElements.TabularDocumentField1.Output(TabDoc); τέλος εαν;

Τέλος Διαδικασίας

...αυθαίρετα αρχεία (δυαδικά δεδομένα):

XZ = NewValueStorage(NewBinaryData(αρχείο));

Το Eight υποστηρίζει τη συμπίεση των δεδομένων που τοποθετούνται στην αποθήκευση:

XZ = NewValueStorage(NewBinaryData(αρχείο),NewDataCompression(9));

... εξωτερική επεξεργασία και αναφορά:

Διαδικασία LoadProcessingIntoStorage(PropsStorageType)

CompressionRate = NewDataCompression(9); //9 μέγιστο PropsStorageType = New StorageValues(New BinaryData("c:\reports\report.epf", Compression Rate));

Τέλος Διαδικασίας

Διαδικασία StartProcessingFromStorage(PropsStorageType)

TemporaryFileName = TemporaryFileDirectory()+"report.epf"; BinaryData = PropsStorageType.Get(); BinaryData.Write(TemporaryFileName); ExternalProcessing = ExternalProcessing.Create(TemporaryFileName); ExternalProcessing.GetForm().Open();

Τέλος Διαδικασίας

Εργασία με αποθήκευση

Εάν ήταν Δυαδικά Δεδομένα, τότε μπορεί να γίνει επαναφορά από την αποθήκευση τιμών χρησιμοποιώντας τη μέθοδο Get και να εγγραφεί σε ένα αρχείο χρησιμοποιώντας τη μέθοδο Write().

Αν TypeValue (Αποθήκευση)<>Πληκτρολογήστε ("BinaryData") Στη συνέχεια

BinaryData = Storage.Get();

BinaryData = Αποθήκευση;

τέλος εαν; BinaryData.Write(FileName);

Εάν ήταν, για παράδειγμα, ένα έγγραφο του Word (αρχείο doc ή άλλος τύπος εγγεγραμμένου αρχείου), τότε μπορεί να ανοίξει ως εξής:

LaunchApplication(FileName);

Για να διαγράψετε ένα πεδίο τύπου Value Storage, πρέπει να το εκχωρήσετε Undefined:

PropsStorage = Απροσδιόριστο;

Εργασία με αρχεία και εικόνες στην ενσωματωμένη γλώσσα 1C:Enterprise 8

Σκοπός

Η διαχειριζόμενη εφαρμογή εφαρμόζει έναν νέο μηχανισμό για την εργασία με αρχεία. Παρέχει ανταλλαγή αρχείων μεταξύ της βάσης πληροφοριών και της εφαρμογής πελάτη. Η ιδιαιτερότητα αυτού του μηχανισμού είναι ότι έχει σχεδιαστεί για χρήση σε thin client και web client και έχει σχεδιαστεί λαμβάνοντας υπόψη τους περιορισμούς στην εργασία με αρχεία που επιβάλλονται από προγράμματα περιήγησης Web.

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

Πεδίο μεθόδου

Προσωρινή αποθήκευση

Η προσωρινή αποθήκευση είναι μια εξειδικευμένη περιοχή της βάσης πληροφοριών στην οποία μπορούν να τοποθετηθούν δυαδικά δεδομένα. Ο κύριος σκοπός είναι η προσωρινή αποθήκευση πληροφοριών κατά την αλληλεπίδραση πελάτη-διακομιστή πριν μεταφερθούν στη βάση δεδομένων.

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

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

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

Βάση πληροφοριών

Ο μηχανισμός σάς επιτρέπει να έχετε πρόσβαση σε δυαδικά δεδομένα που είναι αποθηκευμένα σε χαρακτηριστικά του τύπου Value Storage.

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

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

Περιγραφή μεθόδων εργασίας με αρχεία

Αποθήκευση δεδομένων σε προσωρινή αποθήκευση

Το πιο τυπικό σενάριο για τη χρήση αυτού του μηχανισμού περιλαμβάνει την αρχική τοποθέτηση δεδομένων χρήστη σε προσωρινή αποθήκευση. Υπάρχουν δύο μέθοδοι για αυτό: PlaceFile() και PlaceFileInTemporaryStorage().

Η πρώτη μέθοδος, PlaceFile(), τοποθετεί ένα αρχείο από το τοπικό σύστημα αρχείων σε προσωρινή αποθήκευση. Η μέθοδος μπορεί να δεχθεί μια διεύθυνση προορισμού στο χώρο αποθήκευσης. Εάν δεν έχει οριστεί ή είναι κενή συμβολοσειρά, τότε θα δημιουργηθεί ένα νέο αρχείο και η μέθοδος θα επιστρέψει τη διεύθυνσή της μέσω της αντίστοιχης παραμέτρου.

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

Ως αποτέλεσμα, η μέθοδος επιστρέφει False εάν ο χρήστης αρνήθηκε διαδραστικά να εκτελέσει μια λειτουργία στο παράθυρο διαλόγου επιλογής αρχείου. Η μέθοδος είναι διαθέσιμη μόνο στον πελάτη.

Η δεύτερη μέθοδος, PlaceFileInTemporaryStorage(), είναι παρόμοια με την προηγούμενη, με τη διαφορά ότι είναι διαθέσιμη στον διακομιστή και τα δεδομένα που πρέπει να εγγραφούν στην προσωρινή αποθήκευση αντιπροσωπεύονται όχι ως διαδρομή στο σύστημα αρχείων, αλλά ως μεταβλητή τύπου BinaryData. Ομοίως, εάν δεν έχει καθοριστεί διεύθυνση προορισμού, δημιουργείται ένα νέο αρχείο στον χώρο αποθήκευσης. Η διεύθυνσή του επιστρέφεται ως αποτέλεσμα της συνάρτησης.

Ανάκτηση αρχείου από προσωρινή αποθήκευση

Όταν γράφετε ένα αντικείμενο στη βάση πληροφοριών, μπορεί να χρειαστεί να εξαγάγετε δεδομένα από την προσωρινή αποθήκευση και να τα τοποθετήσετε, για παράδειγμα, σε ένα χαρακτηριστικό. Υπάρχει μια αντίστοιχη μέθοδος διακομιστή για αυτό - GetFileFromTemporaryStorage(). Αυτή η μέθοδος ανακτά δεδομένα από την προσωρινή αποθήκευση και ως αποτέλεσμα τα επιστρέφει. Για να το κάνετε αυτό, πρέπει να καθορίσετε τη διεύθυνση στην προσωρινή αποθήκευση. Αυτή η διεύθυνση επιστρέφεται με τις μεθόδους PlaceFile() που περιγράφονται παραπάνω και PlaceFileInTemporaryStorage() εάν εκτελεστούν με επιτυχία.

Διαγραφή αρχείου από προσωρινή αποθήκευση

Μετά την αποθήκευση των δεδομένων στις λεπτομέρειες, το αρχείο σε προσωρινή αποθήκευση μπορεί να διαγραφεί. Για το σκοπό αυτό, υπάρχει μια μέθοδος DeleteFileFromTemporaryStorage(), η οποία διαγράφει ένα αρχείο από την προσωρινή αποθήκευση. Η μέθοδος λαμβάνει ως παράμετρο τη διεύθυνση ενός αρχείου σε προσωρινή αποθήκευση. Διαθέσιμο στον διακομιστή.

Έλεγχος της διεύθυνσης για προσωρινή αποθήκευση

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

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

Λήψη της διεύθυνσης στηρίγματος

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

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

Σκοπός του είναι να επιστρέψει τη διεύθυνση αρχείου στη βάση πληροφοριών σύμφωνα με τις αρχικές παραμέτρους. Για να γίνει αυτό, πρέπει να περάσετε το κλειδί αντικειμένου (αυτό μπορεί να είναι είτε ένας σύνδεσμος προς το αντικείμενο είτε ένα κλειδί καταχώρισης μητρώου πληροφοριών) και το όνομα του χαρακτηριστικού. Εάν πρέπει να λάβετε τη διεύθυνση ενός αρχείου που είναι αποθηκευμένο σε ένα χαρακτηριστικό τμήματος πίνακα, πριν από το όνομα του χαρακτηριστικού στην παράμετρο που καθορίζει το όνομα του χαρακτηριστικού, πρέπει να προσθέσετε το όνομα του τμήματος πίνακα και μια τελεία «.». Η μέθοδος είναι διαθέσιμη τόσο στον πελάτη όσο και στον διακομιστή.

Ανάκτηση αρχείου από τη βάση πληροφοριών

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

Από προεπιλογή, η μέθοδος εκτελείται σε διαδραστική λειτουργία, δηλαδή η τελευταία παράμετρος είναι True. Αυτό σημαίνει ότι εμφανίζεται ένα παράθυρο διαλόγου στο οποίο μπορείτε να καθορίσετε μια ενέργεια με το ληφθέν αρχείο: να το εκτελέσετε ή να το αποθηκεύσετε σε μια θέση που καθορίζει ο χρήστης. Εάν η διαδραστική λειτουργία είναι ενεργή και η παράμετρος διαδρομή αρχείου δίσκου στόχου δεν έχει καθοριστεί, η λειτουργία ανοίγματος αρχείου δεν είναι διαθέσιμη. Επιστρέφει μια boolean τιμή. False σημαίνει ότι ο χρήστης επέλεξε να ακυρώσει τη λειτουργία στο διαδραστικό παράθυρο διαλόγου αποθήκευσης αρχείου.

Παράδειγμα χρήσης μεθόδων αρχείων

// Λήψη αρχείου από το δίσκο σε διαδραστική λειτουργία // και τοποθέτησή του σε προσωρινή αποθήκευση &Στη διαδικασία πελάτη SelectDiskFileAndWrite()

Μεταβλητή SelectedName; VariableTemporaryStorageAddress; Αν PutFile(TemporaryStorageAddress, SelectedName, True) Τότε Object.FileName = SelectedName; PlaceObjectFile(TemporaryStorageAddress); τέλος εαν;

Τέλος Διαδικασίας

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

Στοιχείο καταλόγου = Form AttributesValue("Object"); BinaryData = GetFileFromTemporaryStorage(TemporaryStorageAddress); Directory Element.File Data = NewValueStorage(BinaryData); FilePathOnDisk = Νέο αρχείο(DirectoryItem.FileName); Directory Item.FileName = FilePathOnDisk.Name; Στοιχείο καταλόγου.Write(); Τροποποιημένο = Λάθος; DeleteFileFromTemporaryStorage(TemporaryStorageAddress); ValueВFormAttributes(Στοιχείο καταλόγου, "Αντικείμενο");

Τέλος Διαδικασίας

// Ανάγνωση ενός αρχείου από τα στηρίγματα και αποθήκευση // στον τοπικό δίσκο σε διαδραστική λειτουργία &Στη διαδικασία πελάτη ReadFileAndSaveToDisk()

Address = GetFileAddressInInformationBase(Object.Link, "FileData"); GetFile(Address, Object.FileName, True);

Τέλος Διαδικασίας

Υποστήριξη για διευθύνσεις στο πεδίο εικόνας

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

Για να το κάνετε αυτό, πρέπει να ορίσετε ένα χαρακτηριστικό string type στην ιδιότητα Data του στοιχείου φόρμας. Η τιμή αυτού του χαρακτηριστικού θα ερμηνευτεί ως η διεύθυνση της εικόνας.

Παράδειγμα // Σύνδεση του πεδίου εικόνας στη διεύθυνση εικόνας στην προσωρινή αποθήκευση //. AddressPictures σχηματίζουν λεπτομέρειες τύπου συμβολοσειράς

PlaceFile (Διεύθυνση εικόνας, αληθές)

Picture.Data = AddressPictures

Περιορισμοί κατά την εργασία με το πρόγραμμα-πελάτη Web

Η λειτουργία του περιγραφόμενου μηχανισμού κατά τη χρήση του προγράμματος-πελάτη Web έχει ορισμένους περιορισμούς. Αυτοί οι περιορισμοί σχετίζονται με το μοντέλο ασφαλείας του προγράμματος περιήγησης. Έτσι, για παράδειγμα, ο πελάτης δεν μπορεί να αποθηκεύσει ανεξάρτητα ένα αρχείο στο τοπικό σύστημα αρχείων, δηλαδή είναι διαθέσιμη μόνο η διαδραστική έκδοση των μεθόδων πελάτη PlaceFile() και GetFile(). Δημιουργείται μια εξαίρεση όταν προσπαθείτε να χρησιμοποιήσετε τη μη διαδραστική λειτουργία. Τα παράθυρα διαλόγου που εμφανίζονται διαδραστικά είναι συγκεκριμένα για τον τύπο του προγράμματος περιήγησής σας.

Δυνατότητες κατά την εργασία με το Value Storage στον πελάτη

Πρόβλημα:

Όταν ένα Έγγραφο έχει ένα χαρακτηριστικό του τύπου Value Storage στην ενότητα πίνακα, επιβραδύνει το άνοιγμα της φόρμας εγγράφου εάν αυτό το χαρακτηριστικό περιέχει μεγάλα δεδομένα.

Υποτιθέμενος λόγος:

Ίσως, όταν ανοίγετε μια φόρμα, δεν αποστέλλεται στον πελάτη ο σύνδεσμος προς τα δεδομένα που βρίσκονται στο Value Store, αλλά τα ίδια τα δεδομένα.

Λύση

  • Στις ιδιότητες του χαρακτηριστικού πίνακα της φόρμας υπάρχει η σημαία "Να χρησιμοποιείται πάντα". Εάν έχει οριστεί, τα περιεχόμενα του πεδίου μεταφέρονται πάντα μεταξύ του διακομιστή και του πελάτη - για παράδειγμα, κατά το άνοιγμα μιας φόρμας. Αυτή η σημαία πρέπει να είναι απενεργοποιημένη, αλλά αυτό πρέπει να ληφθεί υπόψη στον κώδικα, καθώς από προεπιλογή δεν θα υπάρχει τιμή για αυτό το πεδίο στον πελάτη. Ένα παράδειγμα μπορεί να βρεθεί στο 1C:Archive.

Είναι ακόμη καλύτερο να το χρησιμοποιήσετε προσωρινή αποθήκευσηγια τη μεταφορά αρχείων μεταξύ πελάτη και διακομιστή.

Έχουμε έναν κατάλογο "Προϊόντα", στο χαρακτηριστικό "Δεδομένα" του οποίου οι πληροφορίες αποθηκεύονται με τη μορφή δυαδικών δεδομένων. Το ίδιο το χαρακτηριστικό έχει τον τύπο τιμής "Αποθήκευση αξίας". Το ακόλουθο στιγμιότυπο οθόνης δείχνει τη δομή μεταδεδομένων καταλόγου.

Για να επισυνάψετε ένα αυθαίρετο αρχείο από το δίσκο με τη μορφή στοιχείου, έχει εφαρμοστεί η εντολή "AttachFile". Ο κώδικας του προγράμματος παρουσιάζεται στην ακόλουθη λίστα:

& Στη διαδικασία πελάτη AttachFile(Command) // Χειριστής εντολών στον πελάτη. Επιλογή αρχείου // Διάλογος για την επιλογή ενός αρχείου από το δίσκο Mode = FileSelectionDialogMode. Ανοιγμα; OpenFileDialog = NewFileSelectDialog(Mode); Διάλογος OpenFile. FullFileName = " " ; Διάλογος OpenFile. MultipleSelect = False ; Διάλογος OpenFile. Title = "Επιλογή αρχείων"; Αν FileOpenDialog. Select() Στη συνέχεια FilePath = FileOpenDialog. FullFileName; // Λήψη δεδομένων δυαδικού αρχείου BinaryData = νέο BinaryData(PathToFile) ; // Μεταφορά δυαδικών δεδομένων στον διακομιστή AttachFileServer(BinaryData) ; Διαφορετικά Κείμενο = "ru = " " Αρχείο (σ) δεν έχει επιλεγεί!" " ; en =" " Αρχείο (σ) δεν έχει επιλεγεί!" " " ; Warning(NStr(Text) ) ; EndIf ; EndProcedure & OnServer Procedure AttachFileServer(BinaryData) // Χειριστής στον διακομιστή για την εγγραφή ενός αρχείου στην ασφάλεια πληροφοριών // Μετατρέψτε το αντικείμενο φόρμας σε αντικείμενο αναφοράς ObjectCurrent = FormAttributesValue("Object" ) ; // Εκχωρήστε μια νέα τιμή στο χαρακτηριστικό "Δεδομένα". ObjectCurrent. Δεδομένα = NewValueStorage(BinaryData) ; // Αποθήκευσε τις αλλαγές ObjectCurrent. Write() ; Τέλος Διαδικασίας

Εάν περιγράψουμε τον αλγόριθμο με γενικούς όρους, τότε πρώτα επιλέγεται ένα αρχείο από το δίσκο του προγράμματος-πελάτη. Τα προκύπτοντα δεδομένα δυαδικού αρχείου αποστέλλονται στον διακομιστή, όπου καταγράφονται στη βάση πληροφοριών, δηλαδή στο χαρακτηριστικό "Δεδομένα" του τρέχοντος στοιχείου καταλόγου.

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

Αντίκτυπος απόδοσης

Ας εκτελέσουμε μερικά τεστ απόδοσης. Οι δοκιμές θα χρησιμοποιήσουν δύο στοιχεία του καταλόγου "Προϊόντα", με και χωρίς συνημμένο αρχείο. Το μέγεθος του συνημμένου αρχείου είναι 5 megabyte.

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

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

Όπως βλέπουμε, ο χρόνος που χρειάζεται για να ανοίξει ένα στοιχείο με ένα συνημμένο αρχείο είναι 10 φορές μεγαλύτερος! Ας κάνουμε άλλη μια δοκιμή. Ας εκτελέσουμε τη μέθοδο "GetObject()" για να αναφερθούμε στο στοιχείο του καταλόγου προϊόντων. Μπορείτε να δείτε το αποτέλεσμα της δοκιμής στο παρακάτω στιγμιότυπο οθόνης.

Η διαφορά είναι αρκετά σημαντική. Η λήψη ενός στοιχείου χωρίς συνημμένο αρχείο είναι 194 φορές πιο γρήγορη!

Αυτό συμβαίνει επειδή η μέθοδος "GetObject()" λαμβάνει όλα τα δεδομένα από τις λεπτομέρειες του στοιχείου καταλόγου με αναφορά. Αντίστοιχα, η μέθοδος λαμβάνει τις τιμές όχι μόνο των χαρακτηριστικών "Code" και "Name", αλλά και την τιμή του χαρακτηριστικού "Data". Εάν αποθηκεύει δυαδικά δεδομένα μεγέθους 5 megabyte (όπως στο παράδειγμά μας), τότε όταν λαμβάνεται το αντικείμενο, αυτά τα δεδομένα τοποθετούνται στη μνήμη RAM (όπως και άλλες λεπτομέρειες) και στη συνέχεια μεταφέρονται στην πλευρά του πελάτη. Είναι η λήψη δεδομένων από αυτό το χαρακτηριστικό που αυξάνει τον χρόνο απόκτησης του αντικειμένου στοιχείου. Εάν χρησιμοποιηθεί ένα λεπτό κανάλι επικοινωνίας, τότε ο χρόνος ανοίγματος θα αυξηθεί ακόμη πιο σημαντικά λόγω της μεταφοράς μεγάλου όγκου πληροφοριών μέσω του δικτύου.

Σημείωση: κατά την εκτέλεση της μεθόδου "OpenValue()", το αντικείμενο του στοιχείου καταλόγου λαμβάνεται επίσης πρώτα, και στη συνέχεια μετατρέπεται σε αντικείμενο φόρμας και μεταβιβάζεται στον πελάτη (για διαχειριζόμενες φόρμες). Δηλαδή, όταν ένα στοιχείο ανοίγει με αναφορά, το αντικείμενο ανακτάται επίσης.

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

Φυσικό αποτέλεσμα. Ο χρόνος λήψης και μετά εγγραφής για ένα στοιχείο καταλόγου με συνημμένο αρχείο αποδείχθηκε ότι ήταν ~19 φορές μεγαλύτερος. Όπως αναφέρθηκε παραπάνω, κατά τη λήψη ενός αντικειμένου, λαμβάνονται οι τιμές όλων των λεπτομερειών του, συμπεριλαμβανομένου του χαρακτηριστικού "Δεδομένα" στο οποίο αποθηκεύονται 5 megabyte πληροφοριών. Όταν γράφεται ένα στοιχείο, αυτός ο όγκος δεδομένων γράφεται ξανά στη βάση πληροφοριών. Κατά συνέπεια, η αποθήκευση δεδομένων σε ένα χαρακτηριστικό καταλόγου (ή έγγραφο) με τον τύπο "Αποθήκευση τιμής" επηρεάζει αρνητικά την απόδοση τόσο κατά την ανάκτηση ενός αντικειμένου όσο και κατά την τοποθέτησή του στη βάση πληροφοριών.

Ποιος είναι ο πιο σωστός τρόπος για να λυθεί το πρόβλημα της αποθήκευσης δεδομένων για αντικείμενα βάσης πληροφοριών;

Σωστή λύση

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

Ο κατάλογος "Nomenclature" είναι ο κάτοχος του καταλόγου "NomenclatureAttachedFiles". Αυτό, με τη σειρά του, σχετίζεται με το μητρώο πληροφοριών AttachedFiles, η διάσταση AttachedFile του οποίου αναφέρεται στο στοιχείο του. Έτσι, τα δεδομένα που συνδέονται με αντικείμενα βάσης πληροφοριών αποθηκεύονται στην πραγματικότητα στον πίνακα μητρώου πληροφοριών, η λειτουργία του οποίου πρακτικά δεν επηρεάζεται από την ποσότητα των δεδομένων που είναι αποθηκευμένα στον πόρο. Ο ενδιάμεσος κατάλογος "Ονοματολογία Συνημμένων Αρχείων" είναι απαραίτητος για την αποθήκευση πρόσθετων πληροφοριών για το συνημμένο αρχείο, καθώς και για την υποστήριξη της πρόσβασης στο συνημμένο αρχείο με αναφορά.

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

Δοκιμή διαμόρφωσης με ένα παράδειγμα από το άρθρο: ΣΥΝΔΕΣΜΟΣ .