Να ερθει μεσα
Όλα τα μυστικά υπολογιστών για αρχάριους και επαγγελματίες
  • Αλλαγή χρώματος κειμένου και φόντου
  • Δημιουργία της δικής σας παρουσίασης Πώς να αλλάξετε το φόντο σε μια παρουσίαση openoffice
  • Πώς να αφαιρέσετε κεφαλίδες και υποσέλιδα στο Excel Εισαγάγετε μια κεφαλίδα και υποσέλιδα στο Excel
  • Πώς να ορίσετε, να αλλάξετε, να κλιμακώσετε τις διαστάσεις στο AutoCAD;
  • Υπηρεσία FTP - μεταφορά αρχείων
  • Χρήση επιπέδων στο AutoCAD Δημιουργία νέου επιπέδου στο AutoCAD
  • Δυαδικά δεδομένα τύπου διάταξης 1s. Εργασία με δυαδικά δεδομένα

    Δυαδικά δεδομένα τύπου διάταξης 1s.  Εργασία με δυαδικά δεδομένα

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

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

    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 Ratio));

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

    Διαδικασία 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 εάν η διεύθυνση οδηγεί σε προσωρινή αποθήκευση. Η μέθοδος είναι διαθέσιμη στον διακομιστή.

    Λήψη της διεύθυνσης του props

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

    Αλλά προτού λάβετε δεδομένα, για παράδειγμα από μια ιδιοκτησία, πρέπει να λάβετε τη διεύθυνση αυτής της ιδιότητας. Για το σκοπό αυτό, υπάρχει μια μέθοδος 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.

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

    Εκτύπωση (Ctrl+P)

    16.3. Εργασία με δυαδικά δεδομένα

    16.3.1. γενικές πληροφορίες

    Κατά την εφαρμογή λύσεων εφαρμογών, μπορεί να υπάρχουν περιπτώσεις όπου είναι απαραίτητο να αναλυθούν διάφορα δυαδικά δεδομένα. Για παράδειγμα, πρέπει να προσδιορίσετε τον τύπο αρχείου χρησιμοποιώντας μια υπογραφή ή να εκτελέσετε κάποιους χειρισμούς με μια εικόνα. Για εργασία με δυαδικά δεδομένα, το 1C:Enterprise παρέχει ειδικές διεπαφές λογισμικού. Στη συνέχεια, θα εξετάσουμε τις δυνατότητες εργασίας με δυαδικά δεδομένα.
    Όλη η εργασία με δυαδικά δεδομένα βασίζεται στην έννοια της ροής. Ροήείναι μια λογική γενίκευση μιας αυθαίρετης (σε γενική περίπτωση) πηγή δεδομένων (Αντικείμενο ροής). Το σύστημα δεν παρέχει τη δυνατότητα δημιουργίας ανεξάρτητου αντικειμένου ροής που δεν σχετίζεται με καμία πηγή. Υπάρχουν όμως παράγωγα αντικείμενα που μπορούν να δημιουργηθούν - μια ροή που σχετίζεται με ένα αρχείο στο δίσκο (αντικείμενο FileStream) ή μια ροή που δημιουργείται στη μνήμη (αντικείμενο MemoryStream). Μια ροή σάς επιτρέπει τόσο να διαβάζετε δεδομένα όσο και να τα γράφετε. Για να προσδιορίσετε τη δυνατότητα εκτέλεσης ορισμένων λειτουργιών, μια ροή (και παράγωγα αντικείμενα) έχει ειδικές μεθόδους που σας επιτρέπουν να προσδιορίσετε ποιες
    είναι διαθέσιμες λειτουργίες με αυτό το νήμα (μέθοδοι AvailableRecord(), AvailableRead(), AvailableChangePosition()).
    Εάν πρέπει να εργαστείτε με μια ροή σε υψηλότερο επίπεδο, συγκεκριμένα, με δεδομένα ανάγνωσης/εγγραφής όπως ένας αριθμός (διαφορετικού βάθους bit) ή μια συμβολοσειρά, τότε τα αντικείμενα DataRead/DataWrite προορίζονται για αυτό. Χρησιμοποιώντας αυτά τα αντικείμενα, μπορείτε να ακολουθήσετε μια πιο δομημένη προσέγγιση στα δυαδικά δεδομένα που βρίσκονται στη ροή. Έτσι, για παράδειγμα, γνωρίζοντας τη μορφή ενός αρχείου, μπορείτε να διαβάσετε πολύ άνετα ένα τέτοιο αρχείο, λαμβάνοντας τα απαραίτητα δεδομένα από τις κεφαλίδες (οι οποίες, κατά κανόνα, αντιπροσωπεύονται από τους τύπους αριθμός και συμβολοσειρά), παρακάμπτοντας περιττά μπλοκ δεδομένων και φόρτωση των απαραίτητων για επεξεργασία.
    Το γενικό σχήμα για την εργασία με δυαδικά δεδομένα μπορεί να αναπαρασταθεί ως εξής:

    1. Λήψη ροής σε εξέλιξη
    2. Δημιουργείται ένα αντικείμενο Data Reader ή Data Writer.
    3. Χρησιμοποιώντας το αντικείμενο που δημιουργήθηκε στο βήμα 2, εκτελούνται οι απαιτούμενες ενέργειες.
    4. Το αντικείμενο που δημιουργήθηκε στο βήμα 2 είναι κλειστό.
    5. Εάν δεν απαιτούνται περισσότερες λειτουργίες, η ροή που λαμβάνεται στο βήμα 1 κλείνει.
    6. Εάν πρέπει να συνεχίσετε να εργάζεστε με τη ροή, μπορείτε να ορίσετε μια νέα θέση στη ροή (αν υποστηρίζεται αυτή η λειτουργία) και να συνεχίσετε να εργάζεστε ξεκινώντας από το βήμα 2.

    Αξίζει να σημειωθεί ότι είναι δυνατός ο συνδυασμός των παραγράφων 1 και 2. Με άλλα λόγια, το σύστημα παρέχει τη δυνατότητα δημιουργίας αντικειμένων Ανάγνωση δεδομένων/Εγγραφή δεδομένωναπευθείας από, για παράδειγμα, ένα αντικείμενο BinaryData.
    Για την εκτέλεση διαφόρων λειτουργιών με δυαδικά δεδομένα, το σύστημα παρέχει τη δυνατότητα λήψης κάποιου μέρους της ροής ως ξεχωριστό τμήμα με τυχαία (byte-by-byte) πρόσβαση (αντικείμενο BufferBinaryData). Το μέγεθος του buffer ορίζεται όταν δημιουργείται και δεν μπορεί να αλλάξει αργότερα. Όταν εργάζεστε με ένα δυαδικό buffer δεδομένων, είναι δυνατό να εργαστείτε με αριθμούς διαφορετικών βάθους bit όπως
    ως ένα σύνολο. Σε αυτήν την περίπτωση, είναι δυνατό να καθοριστεί η σειρά των byte με λέξεις: "little endian" ή "big endian" (big endian). Είναι επίσης δυνατό να χωρίσετε ένα buffer σε πολλά και να συνδυάσετε πολλά δυαδικά buffer δεδομένων σε ένα buffer που προκύπτει.
    Είναι σημαντικό να σημειωθεί ότι η εργασία με μια προσωρινή μνήμη δυαδικών δεδομένων μπορεί να απλοποιήσει σημαντικά την υλοποίηση εάν η εργασία με δυαδικά δεδομένα υλοποιείται στην πλευρά της εφαρμογής πελάτη σε ασύγχρονη λειτουργία. Σε αυτήν την περίπτωση, η ανάγνωση δεδομένων στην προσωρινή μνήμη θα εκτελείται ως ασύγχρονη λειτουργία και η εργασία με τα δεδομένα της προσωρινής μνήμης θα είναι σύγχρονη.
    Η εργασία με δυαδικά δεδομένα είναι διαθέσιμη στην πλευρά του πελάτη (συμπεριλαμβανομένου του προγράμματος-πελάτη web) της εφαρμογής και στην πλευρά του διακομιστή, καθώς και σε σχήματα σύγχρονης και ασύγχρονης εργασίας. Περαιτέρω παραδείγματα θα χρησιμοποιούν ένα σύγχρονο σχήμα εργασίας.

    16.3.2. Ανάγνωση δυαδικών δεδομένων

    Ως παράδειγμα ανάγνωσης δυαδικών δεδομένων, θα εξετάσουμε το έργο του προσδιορισμού της σωστής μορφής αρχείου που επιλέχθηκε στο σύστημα για περαιτέρω χρήση. Ένα αρχείο .wav με δεδομένα ήχου θα χρησιμοποιηθεί ως το αρχείο που ελέγχεται. Για την αποθήκευση αρχείων .wav, χρησιμοποιείται η μορφή αρχείου ανταλλαγής πόρων (RIFF), η περιγραφή της οποίας δίνεται στον σύνδεσμο:

    https://msdn.microsoft.com/enus/library/windows/desktop/ee415713.aspx (στα Αγγλικά). Για το παράδειγμα ανάγνωσης θα χρησιμοποιηθούν οι ακόλουθες πληροφορίες μορφής:
    1. Τα πρώτα 4 byte του αρχείου περιέχουν το αναγνωριστικό μορφής: RIFF.
    2. τα επόμενα 4 byte περιέχουν το μέγεθος των πραγματικών ηχητικών δεδομένων σε σειρά λίγων byte.
    3. Τα επόμενα 4 byte περιέχουν τον τύπο κειμένου των δεδομένων που χρησιμοποιούνται: WAVE.
    Για να εκτελέσετε αυτές τις ενέργειες θα χρειαστείτε τον ακόλουθο κώδικα στην ενσωματωμένη γλώσσα:

    Διαβάστε = Νέο ReadData(FileName, ByteEndian.LittleEndian);
    Μορφή αρχείου = Read.ReadCharacters(4);
    DataSize = Read.ReadInteger32();
    FileType = Read.ReadCharacters(4);
    Αν Μορφή αρχείου<>«RIFF» Τότε
    Αναφορά ("Αυτό δεν είναι αρχείο RIFF");
    ΕΠΙΣΤΡΟΦΗ ;
    Τέλος εαν ;
    Αν FileType = "WAVE" Τότε
    Αναφορά ("Αυτό είναι ένα αρχείο WAV με δεδομένα, μέγεθος " + Μέγεθος δεδομένων + " byte")
    Σε διαφορετική περίπτωση
    Αναφορά ("Αυτό δεν είναι αρχείο WAV").
    ΕΠΙΣΤΡΟΦΗ;
    τέλος εαν;

    Ας δούμε το παράδειγμα με περισσότερες λεπτομέρειες.
    Αρχικά, ανοίγει το αρχείο του οποίου το όνομα περιέχεται στη μεταβλητή FileName, ανοίγει το αρχείο για ανάγνωση ( FileOpenMode.Open), θα διαβάσει μόνο από το αρχείο ( FileAccess.Read) και ένα buffer 16 byte θα χρησιμοποιηθεί για ανάγνωση.
    Στη συνέχεια, δημιουργείται μια ροή για την ανάγνωση δεδομένων, η οποία θα έχει τη λιγότερο σημαντική σειρά byte για δεδομένα του τύπου Αριθμός. Στη συνέχεια διαβάζονται 4 χαρακτήρες, ένας ακέραιος αριθμός 32 bit και 4 ακόμη χαρακτήρες από τη ροή που προκύπτει. Τα δεδομένα που προκύπτουν αναλύονται και με βάση τα αποτελέσματα της ανάλυσης λαμβάνεται απόφαση για το αν το επιλεγμένο αρχείο είναι αρχείο .wav ή όχι.

    16.3.3. Εγγραφή δυαδικών δεδομένων

    Η εγγραφή δυαδικών δεδομένων σε ένα αρχείο, στην απλούστερη περίπτωση, γίνεται ως εξής:

    Είσοδος = Νέο WriteData(Όνομα αρχείου);
    Για δείκτη = 0 έως 255 κύκλος
    Write.WriteByte(Ευρετήριο);
    EndCycle;
    Record.Close() ;

    Αυτό το παράδειγμα γράφει σε ένα αρχείο μια ακολουθία byte από 0 έως 255 (0xFF σε δεκαεξαδικό). Αυτή είναι η απλούστερη επιλογή εγγραφής.
    Μπορείτε επίσης να χρησιμοποιήσετε μια μέθοδο παρόμοια με τη μέθοδο ανάγνωσης που συζητήθηκε στο προηγούμενο παράδειγμα, όπου λαμβάνεται μια ροή αρχείου και εγγράφονται δεδομένα σε αυτήν τη ροή αρχείου.

    16.3.4. Εργασία με ένα δυαδικό buffer δεδομένων

    Όπως αναφέρθηκε παραπάνω, το buffer δυαδικών δεδομένων παρέχει έναν βολικό τρόπο χειρισμού θραυσμάτων δυαδικών δεδομένων.
    Δεν υποστηρίζεται μόνο η ανάγνωση δεδομένων, αλλά και η γραφή.
    Ως παράδειγμα, θα εξετάσουμε την ανάλυση της κεφαλίδας του αρχείου RIFF από το παράδειγμα ανάγνωσης δεδομένων (δείτε εδώ). Για τη δημιουργία του παραδείγματος, θα χρησιμοποιηθούν ακριβώς οι ίδιες πληροφορίες σχετικά με τη μορφή αρχείου. Επομένως, είναι απαραίτητο να διαβάσετε ένα buffer στο μέγεθος της κεφαλίδας του αρχείου από το αρχείο προέλευσης. Η κεφαλίδα αποτελείται από τρία πεδία των 4 byte. Επομένως, πρέπει να διαβαστούν 12 byte.

    Buffer = Νέο BufferBinaryData(12);
    Αρχείο = FileStreams.Open(Κατάλογος προσωρινών αρχείων() + "Windows Logon.wav", FileOpenMode.Open, FileAccess.Read);
    File.Read(Buffer, 0, 12);
    Μέγεθος = Buffer.ReadInteger32(4);
    StreamString = newStreamInMemory(Buffer);
    StreamRows.Go(0, PositionInStream.Start);

    Μορφή αρχείου = ReadLines.ReadCharacters(4, "windows-1251");
    ReadLines.Close();
    StreamRows.Go(8, PositionInStream.Start);
    RowReader = νέο DataReader(RowStream);
    Τύπος αρχείου = ReadLines.ReadCharacters( 4, "windows-1251");
    ReadLines.Close();

    Η διαδικασία μεταφοράς δεδομένων σε ένα δυαδικό buffer δεδομένων δεν είναι τίποτα ιδιαίτερο. Για περαιτέρω ενέργειες απαιτούνται ορισμένα σχόλια. Η ανάγνωση αριθμών οποιουδήποτε υποστηριζόμενου βάθους bit είναι δυνατή από οποιαδήποτε θέση στην προσωρινή μνήμη. Σε αυτό το παράδειγμα Buffer.ReadInteger32(4); σημαίνει ανάγνωση ενός ακέραιου αριθμού 32 bit που ξεκινά από το byte 4 του buffer. Επομένως, εάν χρειάζεται να διαβάσετε πολλούς αριθμούς που βρίσκονται σε διαφορετικά σημεία στην προσωρινή μνήμη, αυτό μπορεί να γίνει χωρίς άμεση τοποθέτηση σε αυτήν την προσωρινή μνήμη.
    Ωστόσο, η ανάγνωση μιας συμβολοσειράς δεν υποστηρίζεται από την προσωρινή μνήμη δυαδικών δεδομένων. Επομένως, θα πρέπει να χρησιμοποιήσετε ένα αντικείμενο που σας επιτρέπει να το κάνετε αυτό: Ανάγνωση δεδομένων. Ένα αντικείμενο DataReader δεν μπορεί να δημιουργηθεί από μια δυαδική προσωρινή μνήμη δεδομένων. Αλλά με βάση ένα δυαδικό buffer δεδομένων, μπορείτε να δημιουργήσετε μια ροή που είναι ένας καθολικός ενδιάμεσος μεταξύ της φυσικής θέσης αποθήκευσης των πληροφοριών (αρχείο, δυαδική προσωρινή μνήμη δεδομένων) και ενός αντικειμένου υψηλού επιπέδου που σας επιτρέπει να εργαστείτε με αυτά τα δεδομένα.
    Όταν δημιουργείται ένα αντικείμενο DataReader με βάση μια ροή, αρχίζει να διαβάζει δεδομένα από τη θέση που είναι εγκατεστημένη αυτήν τη στιγμή στη ροή. Επομένως, στο παράδειγμα, ορίζεται πρώτα η θέση στη ροή και, στη συνέχεια, δημιουργείται ένα αντικείμενο DataReader και διαβάζεται ο απαιτούμενος αριθμός χαρακτήρων. Για λεπτομερή περιγραφή της διαφοράς μεταξύ του αριθμού των byte και των χαρακτήρων κατά την ανάγνωση συμβολοσειρών, δείτε την επόμενη ενότητα 16.3.5

    16.3.5. Χαρακτηριστικά χρήσης

    Όταν χρησιμοποιείτε δυαδικά δεδομένα, θα πρέπει να λάβετε υπόψη τις δυνατότητες εργασίας με δεδομένα τύπου String. Η ιδιαιτερότητα είναι ότι το μήκος της συμβολοσειράς που επιστρέφει η συνάρτηση καθολικού περιβάλλοντος StrLength() μετριέται σε χαρακτήρες. Στα σύμβολα, θα πρέπει να υποδείξετε το μέγεθος των δεδομένων προς ανάγνωση/εγγραφή στις μεθόδους εγγραφής/ανάγνωσης συμβολοσειρών σε αντικείμενα για εργασία με δυαδικά δεδομένα ( ReadCharacters(),
    ReadString(), WriteCharacters(), WriteString()). Ωστόσο, δεν υπάρχει σαφής επιλογή για τη μετατροπή του μήκους μιας συμβολοσειράς σε χαρακτήρες σε παρόμοια παράμετρο σε byte. Ανάλογα με τα περιεχόμενα της συμβολοσειράς και την κωδικοποίηση, αυτή η αναλογία θα είναι διαφορετική. Επομένως, όταν εργάζεστε με οποιεσδήποτε δομές δεδομένων που περιλαμβάνουν συμβολοσειρές μεταβλητού μήκους, θα πρέπει να κατανοείτε σαφώς σε ποιες μονάδες εκφράζονται τα μήκη συμβολοσειρών.
    Εάν στα διαθέσιμα δεδομένα το μήκος συμβολοσειράς υποδεικνύεται σε byte και η συμβολοσειρά καθορίζεται σε μια κωδικοποίηση μεταβλητού μήκους πολλών byte (για παράδειγμα, UTF-8), τότε χρησιμοποιώντας δυαδικά αντικείμενα δεδομένων, διαβάζοντας μια τέτοια δομή από ένα αρχείο σε δεδομένα του τύπου String είναι γενικά αδύνατα.
    Αλλά σε αυτήν την περίπτωση, μπορείτε εύκολα να αλλάξετε τη θέση ανάγνωσης/εγγραφής στη ροή αρχείων. Εάν το μήκος μιας συμβολοσειράς καθορίζεται σε χαρακτήρες, τότε καθίσταται δυνατή η ανάγνωση μιας τέτοιας συμβολοσειράς σε δεδομένα τύπου String, αλλά καθίσταται αδύνατη η αλλαγή της θέσης ανάγνωσης/εγγραφής σε μια τέτοια ροή.
    Για να λάβετε το μήκος μιας συμβολοσειράς σε byte, μπορείτε να χρησιμοποιήσετε την ακόλουθη συνάρτηση για να μετατρέψετε τη συμβολοσειρά σε αντικείμενο BinaryData:

    Λειτουργία Λάβετε δυαδικά δεδομένα από τη συμβολοσειρά(Value StrParameter, Value Encoding = "UTF-8")
    MemoryThread = NewMemoryThread;
    Συγγραφέας = Νέος WriteData(StreamMemory);
    Writer.Write String(StrParameter, Encoding);
    Συγγραφέας.Κλείσιμο();
    Επιστροφή StreamMemory.CloseAndGetBinaryData();
    EndFunction

    Το πραγματικό μέγεθος σε byte μπορεί να ληφθεί καλώντας τη συνάρτηση Size() στο αντικείμενο BinaryData, το οποίο λαμβάνεται ως αποτέλεσμα της συνάρτησης.
    Δεν συνιστάται η ταυτόχρονη χρήση αντικειμένων Ανάγνωση δεδομένων/Εγγραφή δεδομένωνκαι ροή αντικειμένων. Εάν μεταξύ δύο διαδοχικών πράξεων ανάγνωσης από το ReadData ή δύο διαδοχικών πράξεων εγγραφής στο WriteData υπάρχει αλλαγή στη θέση στη ροή με την οποία λειτουργούν τα αντικείμενα Ch ShadowData/WriteData– δημιουργείται μια εξαίρεση. Έτσι, το ακόλουθο παράδειγμα δείχνει τη σωστή αλλαγή θέσης σε μια ροή κατά την εγγραφή δεδομένων σε μια ροή:

    Stream = newStreamInMemory();

    WriteData.WriteString("Γειά σου Κόσμε!");
    WriteData.Close();
    Stream.Go (0, PositionInStream.Start);
    DataWrite = newDataWrite(Stream);
    WriteData.WriteString("Αντίο!");
    WriteData.Close();
    Το ακόλουθο παράδειγμα γεια σε μια εξαίρεση που ρίχνεται:

    Stream = NewStreamInMemory();

    WriteData.WriteString("Γεια, κόσμο!");
    Stream.Go(0, PositionInStream.Start);
    // Η επόμενη γραμμή θα δημιουργήσει μια εξαίρεση
    WriteData.WriteString("Αντίο!");
    Ταυτόχρονα, είναι δυνατές καταστάσεις όπου η συμπεριφορά του συστήματος θα είναι εσφαλμένη, αλλά δεν θα δημιουργηθούν σφάλματα:

    Stream = GetStream();
    ReadData = νέο ReadData(Stream);
    TestString = ReadData.Read();
    InitialPosition = Stream.CurrentPosition();
    DataWrite = newDataWrite(Stream);
    WriteData.WriteString("Απροσδόκητη συμβολοσειρά");
    WriteData.Close();
    Stream.Go(InitialPosition, PositionInStream.Start);
    // Γενικά, είναι αδύνατο να προσδιοριστεί ποια τιμή θα τοποθετηθεί στη μεταβλητή TestString2
    TestLine2 = ReadData.ReadLine();

    Η συμπεριφορά που περιγράφεται σε αυτήν την ενότητα προκαλείται από o Τα αντικείμενα Data Reader/Data Writer χρησιμοποιούν τα δικά τους buffer όταν εργάζονται με μια ροή. Ως αποτέλεσμα, η πραγματική θέση του νήματος διαφέρει από τη λογική θέση, η οποία σχηματίζεται ως αποτέλεσμα των ολοκληρωμένων λειτουργιών.
    Επίσης, δεν υποστηρίζεται η ταυτόχρονη χρήση αντικειμένων Data Reader και Data Writer, τα οποία χρησιμοποιούν ένα νήμα για την εργασία τους.

    Τα δυαδικά δεδομένα στο 1C προορίζονται για την αποθήκευση αρχείων αυθαίρετης μορφής. Με τη βοήθειά τους μπορείτε:

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

    Τι μπορεί να κάνει το σύστημα

    Όταν εργάζεστε με δυαδικά δεδομένα, η πλατφόρμα 8.3 μπορεί να εκτελέσει τις ακόλουθες ενέργειες:

    1. Ανάγνωση και εγγραφή δυαδικών δεδομένων.
    2. Μετακίνηση δεδομένων από πελάτη σε διακομιστή και πίσω χρησιμοποιώντας προσωρινή αποθήκευση.
    3. Αρχικοποιήστε ένα αντικείμενο του τύπου "Εικόνα" χρησιμοποιώντας δυαδικά αρχεία.
    4. Διαβάστε τα από τον Παγκόσμιο Ιστό χρησιμοποιώντας τα αντικείμενα "Επισύναψη αλληλογραφίας", "Σύνδεση HTTP" κ.λπ.
    5. Χρησιμοποιήστε κρυπτογραφικά εργαλεία για την κρυπτογράφηση και την υπογραφή σημαντικών συνημμένων.
    6. Χρησιμοποιώντας το αντικείμενο "Data Hashing", υπολογίστε τη συνάρτηση κατακερματισμού.

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

    Για παράδειγμα, ας δημιουργήσουμε έναν κατάλογο σε μια δοκιμαστική διαμόρφωση.

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


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


    Το πεδίο μηνύματος αντιπροσωπεύει μια εγγραφή δυαδικών δεδομένων αποθήκευσης τιμών.

    Ανάγνωση δεδομένων από στηρίγματα

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


    Βασικά, αυτός είναι όλος ο κώδικας που χρειαζόμαστε. Χρησιμοποιώντας τον τελεστή Get(), διαβάζουμε τα δυαδικά δεδομένα που είναι αποθηκευμένα στο αντίστοιχο χαρακτηριστικό directory και τα μεταφέρουμε στο αντικείμενο "Εικόνα", το οποίο θα εμφανίζεται στο επάνω αριστερό κελί του εγγράφου υπολογιστικού φύλλου της φόρμας (Εικ. 9).

    Εικ.9

    Μετατροπή Δεδομένων

    Δεν είναι συνηθισμένο, αλλά συμβαίνει ότι όταν εργάζεστε με μη τυπικές ανταλλαγές με εξωτερικά συστήματα, είναι απαραίτητο να μετατρέψετε δεδομένα από δυαδική μορφή σε μορφή Base64 ή αντίστροφα.

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

    1. Base64String – μετατρέπει την καθορισμένη τιμή σε μια συμβολοσειρά της αντίστοιχης κωδικοποίησης.
    2. Base64Value – κάνει την αντίστροφη μετατροπή.

    Βελτιστοποίηση του παραπάνω κώδικα

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

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

    Μετά από κάποιο χρονικό διάστημα, οι σύγχρονες κλήσεις θα μετατραπούν αυτόματα σε ασύγχρονες και ο κωδικός θα λάβει τη μορφή (Εικ. 11)

    Εικ.11

    Υλοποιήθηκε στην έκδοση 8.3.10.2168.

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

    Νέες λειτουργίες για τη μετατροπή δυαδικών δεδομένων σε διαφορετικές μορφές

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

    Παρόμοιες μετατροπές υποστηρίζονται για τον τύπο BufferBinaryData. Επιπλέον, μπορείτε να μετατρέψετε ένα δυαδικό buffer δεδομένων σε δυαδικά δεδομένα και αντίστροφα.

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

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

    Προσθήκη της δυνατότητας εργασίας με ροές σε αντικείμενα που λειτουργούν με αρχεία

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

    Ως αποτέλεσμα, μπορείτε πλέον να ανοίγετε ροές για ανάγνωση και γραφή όταν χρησιμοποιείτε αντικείμενα όπως:

    • ReadingTextΚαι WriteText;
    • ReadingFastInfoSetΚαι EntryFastInfoSet;
    • ReadingHtmlΚαι PostHtml;
    • Διαβάζοντας JSONΚαι Καταχώρηση JSON;
    • Ανάγνωση XMLΚαι Καταχώρηση XML;
    • Ανάγνωση του αρχείου ZipΚαι Εγγραφή αρχείου Zip.

    Μπορείτε να λάβετε το σώμα ως ροή όταν εργάζεστε με HTTP:

    • HTTPRαίτησηΚαι HTTPRresponse;
    • Αίτημα HTTPSserviceΚαι HTTPServiceResponse.
    • Έγγραφο κειμένου;
    • Πίνακας Έγγραφο;
    • ΜορφοποιημένοΈγγραφο;
    • Γεωγραφικό Σχέδιο;
    • GraphicScheme;
    • Σύνδεση FTP.

    Η εγγραφή σε ροή είναι πλέον διαθέσιμη όταν εργάζεστε με τύπους ΕικόναΚαι ConvertToCanonicalXML. Και εκτός από αυτό, η εργασία με ροές υποστηρίζεται πλέον με διάφορες μεθόδους που έχουν οι τύποι Μετατροπή XSL, Υπεύθυνος Κρυπτογραφίας, ΠιστοποιητικόΚρυπτογραφίαΚαι HashingData.

    Αποτελεσματική αντιγραφή με ανάγνωση και εγγραφή δεδομένων

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

    Επομένως, ο τύπος ReadDataέχουμε εφαρμόσει μια νέα μέθοδο CopyB(). Όχι μόνο εξαλείφει αυτό το πρόβλημα, αλλά και απλοποιεί το κείμενο, καθιστώντας το πιο κατανοητό.

    Για παράδειγμα, προηγουμένως ήταν δυνατή η λήψη δυαδικών δεδομένων από μια ροή και η εγγραφή τους σε μια άλλη ροή.

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

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

    Λογικές λειτουργίες bitwise σε ένα δυαδικό buffer δεδομένων

    Μπορείτε τώρα να χρησιμοποιήσετε λογικές λειτουργίες bitwise όταν εργάζεστε με δυαδικές προσωρινές αποθήκες δεδομένων. Ως αποτέλεσμα αυτών των λειτουργιών, το αποτέλεσμα ενός συνδυασμού δυαδικών ψηφίων των byte προέλευσης και των byte στη δεδομένη προσωρινή μνήμη θα εγγραφεί στην προσωρινή μνήμη πηγής σύμφωνα με τους κανόνες της επιλεγμένης λογικής λειτουργίας. Υλοποιήσαμε τις ακόλουθες λειτουργίες:

    • WriteBitAnd();
    • WriteBitOr();
    • WriteBitExclusiveOr();
    • WriteBitIne();
    • Αντιστρέφω().

    Ένα καλό παράδειγμα χρήσης λογικών πράξεων bitwise είναι η αποκωδικοποίηση της μορφής ανταλλαγής με εξοπλισμό λιανικής. Για παράδειγμα, η μορφή ανταλλαγής με εξοπλισμό λιανικής περιγράφεται από ένα πεδίο 1 byte. Αυτό το πεδίο περιέχει ένα σύνολο χαρακτηριστικών που περιγράφουν τη σειρά προϊόντων:

    • Bits 0-2: φορολογικός συντελεστής;
    • Bit 3: 0 - τεμάχιο αγαθών, 1 - αγαθά βάρους.
    • Bit 4: 0 - να επιτρέπεται η πώληση, 1 - να απαγορεύεται η πώληση.
    • Bit 5: 0 - ενεργοποιήστε την καταμέτρηση ποσότητας, 1 - απενεργοποιήστε την καταμέτρηση ποσότητας.
    • Bit 6: 0 - η ενιαία πώληση απαγορεύεται, 1 - η μοναδική πώληση επιτρέπεται.
    • Bit 7: Με κράτηση.

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

    Λήψη αριθμού από δεκαεξαδική και δυαδική κυριολεξία

    • NumberFromHexString();
    • NumberFromBinaryString().

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

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

    Τα δεκαεξαδικά κυριολεκτικά είναι βολικά στη χρήση κατά την ανάλυση τεχνικών μορφών: μορφές εικόνας, ήχου, βίντεο.

    Αλλαγές στην τεχνολογία των εξωτερικών στοιχείων NativeAPI

    Προηγουμένως, υπήρχαν ορισμένοι περιορισμοί κατά τη μεταφορά δυαδικών δεδομένων μεταξύ 1C:Enterprise και ενός εξωτερικού στοιχείου. Για παράδειγμα, ήταν αδύνατη η μεταφορά δυαδικών δεδομένων σε ένα εξωτερικό στοιχείο και όταν εργάζεστε σε ένα πρόγραμμα-πελάτη Ιστού, η ανταλλαγή δυαδικών δεδομένων ήταν γενικά αδύνατη.

    Τώρα καταργούμε όλους αυτούς τους περιορισμούς. Μπορείτε να ανταλλάξετε δυαδικά δεδομένα και προς τις δύο κατευθύνσεις, ακόμη και στον υπολογιστή-πελάτη ιστού.

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