Μία από τις επιλογές για την ανταλλαγή δεδομένων μεταξύ βάσεων δεδομένων 1C είναι η ανταλλαγή μέσω σύνδεσης COM.
Χρησιμοποιώντας μια σύνδεση COM, μπορείτε να συνδεθείτε από μια βάση δεδομένων 1C σε μια άλλη και να διαβάσετε ή να γράψετε δεδομένα. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί τόσο σε εκδόσεις πελάτη-διακομιστή βάσεων δεδομένων όσο και σε βάσεις δεδομένων αρχείων. Σε αυτό το άρθρο θα δούμε παραδείγματα αυτού του τύπου σύνδεσης. Τα παραδείγματα χρησιμοποιούν την πλατφόρμα 8.2.
Μπορείτε να δημιουργήσετε δύο τύπους αντικειμένων COM για την εφαρμογή 1C. Αυτό V82.ΕφαρμογήΚαι V82.COMΣύνδεση. Στην περίπτωση του V82.ΕφαρμογήΚυκλοφορεί ένα σχεδόν πλήρες αντίγραφο της εφαρμογής 1C. σε περίπτωση χρήσης V82.COMΣύνδεσηΈνα μικρό τμήμα διακομιστή εκκινείται.
Η ταχύτητα λειτουργίας σε αυτήν την περίπτωση είναι υψηλότερη, αλλά ορισμένες λειτουργίες ενδέχεται να μην είναι διαθέσιμες. Ειδικότερα, η εργασία με φόρμες και κοινές μονάδες για τις οποίες δεν έχει οριστεί η ιδιότητα εργασίας με εξωτερικές συνδέσεις. Κυρίως πρέπει να χρησιμοποιήσετε V82.COMΣύνδεσηκαι μόνο σε περίπτωση έλλειψης λειτουργικότητας V82.Εφαρμογή. Η διαφορά στην ταχύτητα λειτουργίας μπορεί να είναι ιδιαίτερα αισθητή σε βάσεις δεδομένων μεγάλου όγκου.
Ας ξεκινήσουμε λοιπόν
Μήνυμα. Αναφορά() ; V82.Εφαρμογή EndAttempt ; V82.COMΣύνδεσηΑποσύνδεση από τη βάση δεδομένων
Σύνδεση = Απροσδιόριστη ;
Για αντικείμενο
Είναι απαραίτητο να τερματίσετε τη σύνδεση, διαφορετικά θα παραμείνει μια ημιτελής συνεδρία, η οποία στη συνέχεια θα πρέπει να διαγραφεί χειροκίνητα. Στην περίπτωση του η σύνδεση διακόπτεται αυτόματα όταν ολοκληρωθεί η διαδικασία στην οποία έγινε η σύνδεση Και υπάρχει ακόμη ένα μικρό σημείο.Για τον χρήστη με τον οποίο πραγματοποιείται η σύνδεση, το πλαίσιο ελέγχου «Αίτημα επιβεβαίωσης κατά το κλείσιμο του προγράμματος» πρέπει να είναι απενεργοποιημένο στις ρυθμίσεις του. Τώρα ας βάλουμε όλο τον κώδικα μαζίΠροσπάθεια σύνδεσης = Σύνδεση. Connect(ConnectionString) ; Exception Message = New MessageToUser;Μήνυμα. Κείμενο =
"Δεν ήταν δυνατή η σύνδεση στη βάση δεδομένων" V82.Εφαρμογή+ DescriptionError() ; V82.COMΣύνδεσηΜήνυμα. Αναφορά() ; EndAttempt ;Σύνδεση = Απροσδιόριστη ;
Για τον τύπο σύνδεσης η μέθοδος χρησιμοποιείται για το αντικείμενο COM που δημιουργήθηκε αρχικά και για V82.COMΣύνδεση μέθοδος εφαρμόζεται στη σύνδεση. περαιτέρω εργασίες με το αίτημα η μέθοδος χρησιμοποιείται για το αντικείμενο COM που δημιουργήθηκε αρχικά και για V82.Εφαρμογή τυπικά μέσα 1C. στον κώδικα μοιάζει με αυτό: Αίτημα = Σύνδεση. NewObject("Αίτηση") ;// Για Αίτημα = Σύνδεση. NewObject("Αίτηση") ;Αίτηση. Κείμενο = "ΕΠΙΛΟΓΗ
| Κώδικας θέσεων οργανισμών, | Θέσεις Οργανισμών Επωνυμία|ΑΠΟ | Κατάλογος Θέσεις Οργανισμών AS Θέσεις Οργανισμών».
;
Αποτέλεσμα = Αίτημα. Τρέξιμο(); Δείγμα = Αποτέλεσμα. Choose() ; Επιλογή αντίο. Next() Loop EndLoop ;
"V83.COMConnector" ή "V83.Application" Εκτύπωση (Ctrl+P) . Στην περίπτωση του ήΜία από τις επιλογές για την ανταλλαγή δεδομένων μεταξύ βάσεων δεδομένων 1C είναι η ανταλλαγή μέσω σύνδεσης COM. Χρησιμοποιώντας μια σύνδεση COM, μπορείτε να συνδεθείτε από μια βάση δεδομένων 1C σε μια άλλη και να διαβάσετε ή να γράψετε δεδομένα. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί τόσο σε εκδόσεις πελάτη-διακομιστή βάσεων δεδομένων όσο και σε βάσεις δεδομένων αρχείων. Αυτό το άρθρο εξετάζει αυτούς τους τύπους συνδέσεων στην πλατφόρμα 8.3 Εκτύπωση (Ctrl+P) com σύνδεση Εκτύπωση (Ctrl+P)και μόνο σε περίπτωση έλλειψης λειτουργικότητας ήΜπορείτε να δημιουργήσετε δύο τύπους αντικειμένων COM για την εφαρμογή 1C. Αυτό είναι ole συνδέσεις V83.Εφαρμογή
V83.COMΣύνδεση
Ένα μικρό τμήμα διακομιστή εκκινείται. Η ταχύτητα λειτουργίας σε αυτήν την περίπτωση είναι υψηλότερη, αλλά ορισμένες λειτουργίες ενδέχεται να μην είναι διαθέσιμες. Ειδικότερα, η εργασία με φόρμες και κοινές μονάδες για τις οποίες δεν έχει οριστεί η ιδιότητα εργασίας με εξωτερικές συνδέσεις. Κυρίως πρέπει να χρησιμοποιήσετε
V82.Application ή V82.COMConnector
Δημιουργήστε μια σύνδεση OLEΣύνδεση = Νέο COMObject("V83.Application") ;
/Δημιουργήστε μια σύνδεση COM
Δημιουργήστε μια σύνδεση OLEΣύνδεση = Νέο αντικείμενο COMO ("V83.COMConnector" ); Συμβολοσειρά σύνδεσης;
//Για την επιλογή πελάτη-διακομιστή
Συμβολοσειρά σύνδεσης = "Srvr = ""Όνομα διακομιστή" ";Αναφορά = " "Όνομα βάσης" ;Επιλογή /Για λειτουργία αρχείου:
= "Αρχείο = ""PathKBase"
Message = New MessageToUser;
Μήνυμα . Κείμενο =
"Αποτυχία σύνδεσης στη βάση δεδομένων" +
DescriptionErrors(); Μήνυμα;
. Εκθεση()
Αποσύνδεση
Σύνδεση = Απροσδιόριστη ; ή EndAttempt ; Εκτύπωση (Ctrl+P)Για αντικείμενο
Μέθοδος NewObject().
Για να δημιουργήσετε ένα νέο αντικείμενο, μπορείτε να χρησιμοποιήσετε τη μέθοδο NewObject(), για παράδειγμα: RequestCOM = Σύνδεση. Νέοαντικείμενο()
;
"Αίτημα" RequestCOM TableCOM)
;
“Πίνακας αξιών”
ArrayCOM = Σύνδεση. NewObject("Array") ;
Για RequestOLE = Σύνδεση. NewObject(")
;
αίτημα "(TableCOM)
;
TableOLE = Σύνδεση. NewObject ArrayOLE = Connection.NewObject
("Παράταξη"); ViewCOM =Connection.NewObject
("UniqueIdentifier", StringUID); RequestCOM. Κείμενο =
1C. στον κώδικα μοιάζει με αυτό:
Αίτημα = Σύνδεση. NewObject("Αίτηση") ;
"ΕΠΙΛΕΓΩ |ΑΠΟ
| Κατάλογος.Θέσεις Οργανισμών;
ΠΩΣ ΣΕ ΘΕΣΕΙΣ ΟΡΓΑΝΙΣΜΩΝ” Αποτέλεσμα = RequestCOM.
Τρέξιμο(); Δείγμα = Αποτέλεσμα.
Επιλέξτε () ;Επιλογή αντίο. Επόμενος()
Κύκλος
EndCycle ;
Μπορείτε επίσης να χρησιμοποιήσετε διαχειριστές αντικειμένων διαμόρφωσης:
DirectoryCOM = Σύνδεση. καταλόγους. DirectoryName; DocumentCOM
= Σύνδεση. Εγγραφα. Όνομα εγγράφου; RegisterCOM = Σύνδεση.Μητρώα Πληροφοριών
Λήψη και σύγκριση απαρίθμησης μέσω σύνδεσης COM Για να συγκρίνετε τις τιμές των στοιχείων απαρίθμησης που ορίζονται στη διαμόρφωση, είναι απαραίτητο να μετατρέψετε αυτά τα στοιχεία σε έναν από τους αρχέγονους τύπους, η σύγκριση των οποίων είναι εύκολη. Τέτοιοι τύποι μπορεί να είναι είτε αριθμητικός τύπος είτε τύπος συμβολοσειράς. Μετατροπή της τιμής του στοιχείου enum σεαριθμητικός τύπος
μπορείτε να το κάνετε αυτό Αριθμός Στοιχείου =
Connection.Directories.Directory1.FindByCode(1).Props1;
PossibleValues = Enum Element.Metadata().Enum Values;
EnumerationElementNumber = PossibleValues.Index(PossibleValues.Find(Connection.XMLString(EnumerationElement))); Αν EnumerationItemNumber = 0 Τότε Αναφορά();
"Αριθμητική τιμή 1" ElseIfEnumerationItemNumber = 1Τότε
Αναφορά ("EnumerationValue2");
Ανάκτηση αντικειμένου μέσω COM με αναγνωριστικό
Μέσω των διαχειριστών αντικειμένων διαμόρφωσης παίρνουμε ένα αντικείμενο com, για παράδειγμα: DocumentCOM
= Σύνδεση. Εγγραφα. Όνομα εγγράφου;
Στη συνέχεια, παίρνουμε μια συμβολοσειρά μοναδικού αναγνωριστικού: DocumentCOM.UniqueIdentifier())
Αναγνωριστικό = Νέο U μοναδικό Αναγνωριστικό (StringUID);
ΜΕ linkByIdentifier = Documents[DocumentName].GetLink(Identifier);
Εάν πρέπει να βρείτε ένα αντικείμενο com ανά έγγραφο ανά αναγνωριστικό, τότε πρέπει να γράψετε ως εξής:
WidCOM = Connection.NewObject("UniqueIdentifier", StringUID);
LinkByIdentifier = Connection.Documents[DocumentName].GetLink(TypeCOM);
Ερώτηση: Ανάλυση τοποθεσίας χρησιμοποιώντας COM IE 11
AmGroup = Λάθος; RuGroup = Λάθος;
FindButton = IE.Document.GetElementById("ID");
Προσπαθώντας να SetExpect(IE);
//Κυκλώστε τα ληφθέντα δεδομένα ExceptionListNotFound.Add(Person); Συνεχίζω; EndAttempt; EndCycle;Αναφορά εξαίρεσης ("Σφάλμα:" + Symbols.PS + ErrorDescription()); Αμβλώνω; EndAttempt; EndCycle; //επιστρέφει απλώς ΟΚ EndCycle; //Επειδή Ο μεταδιδόμενος κώδικας μπορεί να περιέχει σφάλματα, τότε θα τυλίξουμε την εκτέλεσή του σε μια προσπάθεια.Προσπαθήστε να εκτελέσετε (CodeExecute); // Εκτελέστε τον κώδικα ως συμβολοσειρά σε άλλον υπολογιστή μέσω σύνδεσης COM (Μονάδα εξωτερικής σύνδεσης βάσης Libra)Εξαίρεση   //αν υπάρχει σφάλμα, τότε επιστρέψτε το κείμενό του Response = ErrorDetailView(ErrorInfo()); EndAttempt ;Επιστροφή Απάντηση? EndFunction Function TestConnection(InParameter, OutParameter) ExportSecurityCheck();
// Προστασία από προσπάθειες εκτέλεσης κακόβουλου κώδικα κατά τη σύνδεση εξωτερικά για λογαριασμό άλλου χρήστη.
OutParameter = "Υπάρχει σύνδεση με τη βάση της κλίμακας μέσω σύνδεσης COM!";
Return True ; EndFunction
Από το BP 3.0 εκτελώ το ακόλουθο τμήμα:
Απόπειρα
Com = Νέο COMObject("V83.COMConnector");
Connection = Com.Connect ("File=""C:\1 c\Base_1C\Libra""; Usr=""ComExchange""; Pwd=""1"";");
Το πρόβλημα είναι ότι στον διακομιστή 2 η διεύθυνση IP άλλαξε, η επεξεργασία φυσικά σταμάτησε να λειτουργεί και όταν εισήγαγα μια νέα IP στη γραμμή σύνδεσης, η επεξεργασία δημιουργεί ένα σφάλμα, η περιγραφή του οποίου εξακολουθεί να είναι η παλιά IP (!) και το κείμενο "Μια προσπάθεια δημιουργίας σύνδεσης ήταν ανεπιτυχής, επειδή η απαιτούμενη απάντηση δεν ελήφθη από άλλον υπολογιστή εντός του απαιτούμενου χρόνου ή είχε ήδη διακοπεί εδραιωμένη σύνδεσηλόγω λανθασμένης απόκρισης από έναν ήδη συνδεδεμένο υπολογιστή."
Έκαναν επανεκκίνηση σε όλα, καθάρισαν κρυφές μνήμες κλπ, οι διαχειριστές ορκίζονται ότι όλα είναι εντάξει από την πλευρά τους, μπορείτε να συνδεθείτε από τον έναν διακομιστή στον άλλο μέσω RDP κ.λπ.
Τι μπορεί να φταίει, πώς μπορώ να το λύσω; Έψαξα σε όλο το διαδίκτυο και δεν βρήκα τέτοια κατάσταση!
AmGroup = Λάθος; RuGroup = Λάθος;() 100% σίγουρο! Τη δεύτερη μέρα που προσπαθώ, όπως έγραψα, το κοιτάζω με έναν εντοπισμό σφαλμάτων, δημιούργησα ακόμη και μια ηλίθια επεξεργασία ενός κυττάρου για δοκιμή σύνδεσης, αυτό το σφάλμα εμφανίζεται και αυτό είναι όλο
Ερώτηση: Σύνδεση COM σε διαφορετικές εκδόσεις
Έφτιαξα μια σύνδεση, μια άλλη πέφτει...
Ξέρω ότι με κάποιο τρόπο, μέσω της υπηρεσίας συστατικών, μπορείτε να δημιουργήσετε «τις δικές σας κλάσεις (υποδοχείς)» για κάθε έκδοση και στη συνέχεια να δημιουργήσετε ένα Νέο αντικείμενο COM που αντιστοιχεί στην έκδοση πλατφόρμας της κλάσης... ίσως κάνω λάθος.
Βοηθήστε με να ξεπεράσω αυτό το πρόβλημα...
AmGroup = Λάθος; RuGroup = Λάθος;Αυτό είναι... Θα αφαιρέσω την ερώτηση..
Ερώτηση: Σφάλμα Com κατά την επεξεργασία της πλήρωσης
Δοκιμάζω το ίδιο πράγμα στην ίδια τη βάση δεδομένων 8.1, αλλά δεν υπάρχει κανένα σφάλμα και επίσης δεν εισάγω Επεξεργασία πλήρωσης.
Τι μπορεί να φταίει;
AmGroup = Λάθος; RuGroup = Λάθος; turboq, μια στραβά γραμμένη ενότητα εγγράφων!
Προστέθηκε μετά από 5 λεπτά
Δεν τη λένε! Προσπαθεί να μεταγλωττίσει! Επειδή όμως κατά τη σύνδεση μέσω ComConnector, το πρόβλημα με τη λειτουργία διαλόγου ΔΕΝ ΥΠΑΡΧΕΙ, η μονάδα εγγράφου δεν μπορεί να μεταγλωττιστεί.
Για τέτοιες περιπτώσεις, όταν είναι απαραίτητο να πραγματοποιηθεί εργασία με ένα παράθυρο διαλόγου σε μια ενότητα αντικειμένου, χρησιμοποιήστε οδηγίες στον προεπεξεργαστή
Αυτό δεν είναι λάθος σας, αλλά σφάλμα στη μονάδα εγγράφων στη βάση δεδομένων στην οποία συνδέεστε.
Στη βάση δεδομένων, ο κώδικας εκτελείται στον υπολογιστή-πελάτη και υπάρχει μια λειτουργία διαλόγου, οπότε όλα γίνονται χωρίς σφάλματα
Μην χρησιμοποιείτε ComConnector, V8.Application για σύνδεση, τότε τα στοιχεία της διεπαφής θα είναι διαθέσιμα σε εσάς
Προστέθηκε μετά από 5 λεπτά
=======================================================================================================================
από την περιγραφή της εξωτερικής σύνδεσης (SP) Τόνισα με έντονη γραφή τι πρέπει να διαβάσετε για το ComConnections
Περιγραφή:
Γενικά, η εργασία με το 1C:Enterprise 8 μέσω εξωτερικής σύνδεσης είναι παρόμοια με την εργασία με το 1C:Enterprise σε λειτουργία Αυτοματισμού διακομιστή. Οι κύριες διαφορές είναι οι εξής:
Διαθεσιμότητα:
Ολοκλήρωση.
Ερώτηση: Σύνδεση COM, σχέδιο τύπου χαρακτηριστικών
Γράφω έτσι:
TypeDescriptionTech = New TypeDescription("DirectoryLink. Counterparties"); PurposeProperties = Σύνδεση. Σχέδια τύπων χαρακτηριστικών. Σκοποί Ιδιοτήτων Κατηγοριών Αντικειμένων. FindByName
("Κατάλογος "Άτομα"");
NewElement = Σύνδεση. Σχέδια τύπων χαρακτηριστικών. Ιδιότητες αντικειμένου. CreateItem();
NewElement. Όνομα = PropertyName;
AmGroup = Λάθος; RuGroup = Λάθος;
NewElement. PropertyAssignment = PropertyAssignment;
NewElement. ValueType = DescriptionTypesTech;
AmGroup = Λάθος; RuGroup = Λάθος;
Διαφορετικά TK = New ValueTable;
AmGroup = Λάθος; RuGroup = Λάθος;