V8: Σύνδεση COM. Τρεις πυλώνες εργασίας με αντικείμενα COM

01.01.2024

Μία από τις επιλογές για την ανταλλαγή δεδομένων μεταξύ βάσεων δεδομένων 1C είναι η ανταλλαγή μέσω σύνδεσης COM.

Χρησιμοποιώντας μια σύνδεση COM, μπορείτε να συνδεθείτε από μια βάση δεδομένων 1C σε μια άλλη και να διαβάσετε ή να γράψετε δεδομένα. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί τόσο σε εκδόσεις πελάτη-διακομιστή βάσεων δεδομένων όσο και σε βάσεις δεδομένων αρχείων. Σε αυτό το άρθρο θα δούμε παραδείγματα αυτού του τύπου σύνδεσης. Τα παραδείγματα χρησιμοποιούν την πλατφόρμα 8.2.

Μπορείτε να δημιουργήσετε δύο τύπους αντικειμένων COM για την εφαρμογή 1C. Αυτό V82.ΕφαρμογήΚαι V82.COMΣύνδεση. Στην περίπτωση του V82.ΕφαρμογήΚυκλοφορεί ένα σχεδόν πλήρες αντίγραφο της εφαρμογής 1C. σε περίπτωση χρήσης V82.COMΣύνδεσηΈνα μικρό τμήμα διακομιστή εκκινείται.
Η ταχύτητα λειτουργίας σε αυτήν την περίπτωση είναι υψηλότερη, αλλά ορισμένες λειτουργίες ενδέχεται να μην είναι διαθέσιμες. Ειδικότερα, η εργασία με φόρμες και κοινές μονάδες για τις οποίες δεν έχει οριστεί η ιδιότητα εργασίας με εξωτερικές συνδέσεις. Κυρίως πρέπει να χρησιμοποιήσετε V82.COMΣύνδεσηκαι μόνο σε περίπτωση έλλειψης λειτουργικότητας V82.Εφαρμογή. Η διαφορά στην ταχύτητα λειτουργίας μπορεί να είναι ιδιαίτερα αισθητή σε βάσεις δεδομένων μεγάλου όγκου.

Ας ξεκινήσουμε λοιπόν

  1. Ας δημιουργήσουμε ένα αντικείμενο COM
    • Για V82.ΕφαρμογήΣύνδεση = Νέο COMObject("V82.Application" );
    • Για V82.COMΣύνδεσηΣύνδεση = Νέο COMObject("V82.COMConnector" );
  2. Ας δημιουργήσουμε μια συμβολοσειρά σύνδεσης
    • για την έκδοση διακομιστή της βάσης δεδομένων ConnectionString = "Srvr = " "ServerName" ";Ref = " "BaseName" ;
    • Για έκδοση αρχείου databaseConnectionString = "Αρχείο = " "PathKBase" "; Usr = Όνομα χρήστη; Pwd = Κωδικός πρόσβασης";
  3. Σύνδεση στη βάση δεδομένωνΠροσπάθεια σύνδεσης = Σύνδεση. Connect(ConnectionString) ;
  4. Exception Message = New MessageToUser;Μήνυμα. Κείμενο = + ErrorDescription() ;

    Μήνυμα. Αναφορά() ; 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 ;

Για την έκδοση 1C:Enterprise 8.3 όλα παραμένουν αμετάβλητα εκτός από το ότι κατά τη δημιουργία αντικειμένων COM πρέπει να χρησιμοποιείτε

"V83.COMConnector" ή "V83.Application" Εκτύπωση (Ctrl+P) . Στην περίπτωση του ήΜία από τις επιλογές για την ανταλλαγή δεδομένων μεταξύ βάσεων δεδομένων 1C είναι η ανταλλαγή μέσω σύνδεσης COM. Χρησιμοποιώντας μια σύνδεση COM, μπορείτε να συνδεθείτε από μια βάση δεδομένων 1C σε μια άλλη και να διαβάσετε ή να γράψετε δεδομένα. Αυτή η μέθοδος μπορεί να χρησιμοποιηθεί τόσο σε εκδόσεις πελάτη-διακομιστή βάσεων δεδομένων όσο και σε βάσεις δεδομένων αρχείων. Αυτό το άρθρο εξετάζει αυτούς τους τύπους συνδέσεων στην πλατφόρμα 8.3 Εκτύπωση (Ctrl+P) com σύνδεση Εκτύπωση (Ctrl+P)και μόνο σε περίπτωση έλλειψης λειτουργικότητας ήΜπορείτε να δημιουργήσετε δύο τύπους αντικειμένων COM για την εφαρμογή 1C. Αυτό είναι ole συνδέσεις V83.Εφαρμογή

και συνδέσεις com

V83.COMΣύνδεση

Κυκλοφορεί ένα σχεδόν πλήρες αντίγραφο της εφαρμογής 1C. Σε περίπτωση χρήσης

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

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

V82.Application ή V82.COMConnector
Δημιουργήστε μια σύνδεση OLEΣύνδεση = Νέο COMObject("V83.Application") ;
/Δημιουργήστε μια σύνδεση COM
Δημιουργήστε μια σύνδεση OLEΣύνδεση = Νέο αντικείμενο COMO ("V83.COMConnector" ); Συμβολοσειρά σύνδεσης;
//Για την επιλογή πελάτη-διακομιστή
Συμβολοσειρά σύνδεσης = "Srvr = ""Όνομα διακομιστή" ";Αναφορά = " "Όνομα βάσης" ;Επιλογή /Για λειτουργία αρχείου:
= "Αρχείο = ""PathKBase"
Message = New MessageToUser;
Μήνυμα . Κείμενο = "Αποτυχία σύνδεσης στη βάση δεδομένων" + DescriptionErrors(); Μήνυμα;
. Εκθεση()

EndAttempt ;

Αποσύνδεση
Σύνδεση = Απροσδιόριστη ; ή EndAttempt ; Εκτύπωση (Ctrl+P)Για αντικείμενο

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

Μέθοδος NewObject().

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

Για να δημιουργήσετε ένα νέο αντικείμενο, μπορείτε να χρησιμοποιήσετε τη μέθοδο NewObject(), για παράδειγμα: RequestCOM = Σύνδεση. Νέοαντικείμενο() ;
"Αίτημα" RequestCOM TableCOM) ;
“Πίνακας αξιών”

ArrayCOM = Σύνδεση. NewObject("Array") ;

ViewCOM =Connection.NewObject ή

Για RequestOLE = Σύνδεση. NewObject(") ;
αίτημα "(TableCOM) ;
TableOLE = Σύνδεση. NewObject ArrayOLE = Connection.NewObject
("Παράταξη"); ViewCOM =Connection.NewObject

("UniqueIdentifier", StringUID); RequestCOM. Κείμενο =
1C. στον κώδικα μοιάζει με αυτό:
Αίτημα = Σύνδεση. NewObject("Αίτηση") ;
"ΕΠΙΛΕΓΩ |ΑΠΟ
| Κατάλογος.Θέσεις Οργανισμών;

ΠΩΣ ΣΕ ΘΕΣΕΙΣ ΟΡΓΑΝΙΣΜΩΝ” Αποτέλεσμα = RequestCOM.
Τρέξιμο(); Δείγμα = Αποτέλεσμα.
Επιλέξτε () ;Επιλογή αντίο. Επόμενος()
Κύκλος
EndCycle ;
Μπορείτε επίσης να χρησιμοποιήσετε διαχειριστές αντικειμένων διαμόρφωσης:
DirectoryCOM = Σύνδεση. καταλόγους. DirectoryName; DocumentCOM
= Σύνδεση. Εγγραφα. Όνομα εγγράφου; RegisterCOM = Σύνδεση.Μητρώα Πληροφοριών

. RegisterName ;

Λήψη και σύγκριση απαρίθμησης μέσω σύνδεσης 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");

endIf;

Ανάκτηση αντικειμένου μέσω 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


Καλημέρα!
Η ερώτηση είναι επώδυνα γνωστή, πρέπει να πάρετε τις πληροφορίες από τον ιστότοπο. Υπάρχουν όμως αποχρώσεις:
1. Δεν είναι δυνατή η απευθείας μετάβαση στη σελίδα εξουσιοδότησης (πρώτα μεταβείτε στο αρχική σελίδα, κάντε κλικ στο σύνδεσμο LogIn, λάβετε μια φόρμα εξουσιοδότησης και μόνο μετά συνδεθείτε).
2. Στον ιστότοπο πρέπει να αναζητήσετε δεδομένα μέσω της γραμμής αναζήτησης, στη συνέχεια να τα διαβάσετε και να αναζητήσετε ξανά (τα δεδομένα μπορεί να είναι στα ρωσικά και στα αγγλικά, δηλαδή εάν τα δεδομένα αναζήτησης είναι στα ρωσικά, τότε πρέπει να κάνετε αναζήτηση στο "Ρωσικά έκδοση» του ιστότοπου, και αυτό είναι επίσης ένα κλικ σε έναν σύνδεσμο προς μια άλλη σελίδα. Είναι το ίδιο πρόβλημα με τα Αγγλικά).

Ως αποτέλεσμα:
- μεταβείτε στην αρχική σελίδα - συνδεθείτε - αναζητήστε δεδομένα - (μεταβείτε σε άλλη έκδοση του ιστότοπου, εάν χρειάζεται) - πάρτε το.

Πρόβλημα:
Τα δεδομένα δεν διαβάζονται στην ιδιότητα "έγγραφο" όταν ακολουθείτε έναν σύνδεσμο.
Εμφανίζεται σε δύο σημεία:
- όταν ακολουθούμε τον σύνδεσμο για να συνδεθείτε (αυτό δεν είναι κουμπί, αλλά απλώς ένας σύνδεσμος).
- όταν αλλάζουμε τη γλώσσα στον ιστότοπο (επίσης σύνδεσμος).

Σημείωμα
Εάν, πριν ακολουθήσετε έναν σύνδεσμο στο στάδιο εξουσιοδότησης, λάβετε έναν σύνδεσμο, κλείστε το com και ανοίξτε το ξανά με τη μετάβαση μέσω της μεθόδου IE.navigate("link"), τότε τα δεδομένα στην ιδιότητα "document" πηγαίνουν κανονικά. Αλλά δεν θα μπορείτε να κάνετε το ίδιο όταν αλλάζετε τη γλώσσα στον ιστότοπο, επειδή... Πρέπει να συνδεθώ ξανά και επιπλέον δεν θα ήθελα να λύσω αυτό το πρόβλημα ακριβώς έτσι.

Εδώ είναι ο κωδικός:

&Στη διαδικασία πελάτη SetWaitingIE(IE, SecondCall=False) Εάν ΟΧΙ IE.Busy Τότε D = CurrentDate() + 3;< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>"πλήρης" Κύκλος EndCycle.<>IE.LocationURL Στη συνέχεια RootClasses = IE.Document.GetElementsByClassName("ClassName");<>Αν RootClasses.Length = 1 Τότε για κάθε RootClass From RootClasses Loop Classes = RootClass.Children; Αμβλώνω; EndCycle;

AmGroup = Λάθος; RuGroup = Λάθος;

Για κάθε κλάση από τάξεις βρόχος Εάν HPreg(Class.ClassName) = "dropdown-header" Τότε AmGroup = Find(Class.InnerText, "Americans") > 0;
RuGroup = Find(Class.InnerText, "Europe") > 0; ElseIf HPreg(Class.ClassName) "επιλεγμένο" Τότε Αν AmGroup And Find(Class.All(0).InnerText, "English") > 0 Ή RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 Τότε IE.Navigate(Class .Όλα(1).Href); SetWaitingIE(IE); Αμβλώνω; endIf; ---

endIf; EndCycle; endIf;

endIf; "επιλεγμένο" Τότε Αν AmGroup And Find(Class.All(0).InnerText, "English") > 0 Ή RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 Τότε IE.Navigate(Class .Όλα(1).Href); SetWaitingIE(IE); Αμβλώνω; endIf; ---

IE.Document.GetElementById("ID").Value = PersonName;

FindButton = IE.Document.GetElementById("ID");


FindButton.Focus(); FindButton.Click();

Προσπαθώντας να 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"";");


TellUser("Το τεστ πέρασε! Υπάρχει σύνδεση με τη βάση δεδομένων της κλίμακας");

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

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

Τι μπορεί να φταίει, πώς μπορώ να το λύσω; Έψαξα σε όλο το διαδίκτυο και δεν βρήκα τέτοια κατάσταση!

AmGroup = Λάθος; RuGroup = Λάθος;() 100% σίγουρο! Τη δεύτερη μέρα που προσπαθώ, όπως έγραψα, το κοιτάζω με έναν εντοπισμό σφαλμάτων, δημιούργησα ακόμη και μια ηλίθια επεξεργασία ενός κυττάρου για δοκιμή σύνδεσης, αυτό το σφάλμα εμφανίζεται και αυτό είναι όλο

Ερώτηση: Σύνδεση COM σε διαφορετικές εκδόσεις


Γεια σε όλους.
Έχω μια βάση δεδομένων ala "Consolidation", η οποία συλλέγει διαφορετικά δεδομένα από διαφορετικές βάσεις δεδομένων και φέρνει τα πάντα σε ένα σωρό. Το πρόβλημα είναι ότι πρέπει να συνδεθείτε σε αυτές τις βάσεις δεδομένων μέσω com, αλλά αυτές διαφορετικές εκδόσεις, κατά συνέπεια, καταλήγω να πιάνω ένα σφάλμα όπως
Σφάλμα σύνδεσης!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Σφάλμα κατά την κλήση της μεθόδου περιβάλλοντος (Σύνδεση) : Παρουσιάστηκε εξαίρεση (V83.COMConnector.1 ) : Αναντιστοιχία μεταξύ των εκδόσεων πελάτη και διακομιστή 1 C:Enterprise Client οι εκδόσεις διαφέρουν και ο διακομιστής (8.3. 8.1964 - 8.3. 6.2332), εφαρμογή πελάτη: σύνδεση COM

Έφτιαξα μια σύνδεση, μια άλλη πέφτει...

Ξέρω ότι με κάποιο τρόπο, μέσω της υπηρεσίας συστατικών, μπορείτε να δημιουργήσετε «τις δικές σας κλάσεις (υποδοχείς)» για κάθε έκδοση και στη συνέχεια να δημιουργήσετε ένα Νέο αντικείμενο COM που αντιστοιχεί στην έκδοση πλατφόρμας της κλάσης... ίσως κάνω λάθος.

Βοηθήστε με να ξεπεράσω αυτό το πρόβλημα...

AmGroup = Λάθος; RuGroup = Λάθος;Αυτό είναι... Θα αφαιρέσω την ερώτηση..

Ερώτηση: Σφάλμα Com κατά την επεξεργασία της πλήρωσης


Γειά σου.
8.2 Λιανικό εμπόριο 1.
Συνδέομαι στο 8.1 Δεν είναι τυπικό conf.
Συνδέομαι μέσω com στη βάση δεδομένων και προσπαθώ να δημιουργήσω ένα έγγραφο, αλλά όταν καλώ το "CreateDocument()" ή το "GetObject()" εμφανίζεται ένα σφάλμα στη διαδικασία Επεξεργασία Γέμισμα. βλέπε εικ.

Δοκιμάζω το ίδιο πράγμα στην ίδια τη βάση δεδομένων 8.1, αλλά δεν υπάρχει κανένα σφάλμα και επίσης δεν εισάγω Επεξεργασία πλήρωσης.
Τι μπορεί να φταίει;

AmGroup = Λάθος; RuGroup = Λάθος; turboq, μια στραβά γραμμένη ενότητα εγγράφων!

Προστέθηκε μετά από 5 λεπτά
Δεν τη λένε! Προσπαθεί να μεταγλωττίσει! Επειδή όμως κατά τη σύνδεση μέσω ComConnector, το πρόβλημα με τη λειτουργία διαλόγου ΔΕΝ ΥΠΑΡΧΕΙ, η μονάδα εγγράφου δεν μπορεί να μεταγλωττιστεί.
Για τέτοιες περιπτώσεις, όταν είναι απαραίτητο να πραγματοποιηθεί εργασία με ένα παράθυρο διαλόγου σε μια ενότητα αντικειμένου, χρησιμοποιήστε οδηγίες στον προεπεξεργαστή

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

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

Μην χρησιμοποιείτε ComConnector, V8.Application για σύνδεση, τότε τα στοιχεία της διεπαφής θα είναι διαθέσιμα σε εσάς

Προστέθηκε μετά από 5 λεπτά
=======================================================================================================================
από την περιγραφή της εξωτερικής σύνδεσης (SP) Τόνισα με έντονη γραφή τι πρέπει να διαβάσετε για το ComConnections

Περιγραφή:

Γενικά, η εργασία με το 1C:Enterprise 8 μέσω εξωτερικής σύνδεσης είναι παρόμοια με την εργασία με το 1C:Enterprise σε λειτουργία Αυτοματισμού διακομιστή. Οι κύριες διαφορές είναι οι εξής:

  • Στην περίπτωση ενός διακομιστή Αυτοματισμού, εκκινείται μια πλήρης εφαρμογή 1C:Enterprise 8 και στην περίπτωση εξωτερικής σύνδεσης, εκκινείται ένας σχετικά μικρός διακομιστής COM σε διαδικασία.
  • Δεν διατίθεται όταν εργάζεστε μέσω εξωτερικής σύνδεσης λειτουργικότητα, με τον ένα ή τον άλλο τρόπο που σχετίζεται με την οργάνωση της διεπαφής χρήστη 1C:Enterprise 8.
  • Όταν εκτελείται εξωτερική σύνδεση, η μονάδα δεν χρησιμοποιείται διαχειριζόμενη εφαρμογή(ενότητα κανονικής εφαρμογής) διαμόρφωση 1C:Enterprise 8. Ο ρόλος του όταν εργάζεστε με εξωτερική σύνδεση διαδραματίζεται από τη μονάδα εξωτερικής σύνδεσης.
Όταν χρησιμοποιείτε εξωτερική σύνδεση, υπάρχουν τα ακόλουθα πλεονεκτήματα σε σύγκριση με τη χρήση διακομιστή Αυτοματισμού:
  • Ταχύτερη πρόσβαση στις ιδιότητες και τις μεθόδους των αντικειμένων 1C:Enterprise, καθώς η οργάνωση μιας πρόσβασης δεν απαιτεί επικοινωνία μεταξύ διεργασιών.
  • Λιγότερη κατανάλωση πόρων του λειτουργικού συστήματος.
Για να οργανώσετε την πρόσβαση στα δεδομένα 1C:Enterprise 8 μέσω εξωτερικής σύνδεσης, εκτελείται η ακόλουθη σειρά ενεργειών:
  • δημιουργείται ένας διαχειριστής σύνδεσης COM, με τη βοήθεια του οποίου δημιουργείται η σύνδεση.
  • πραγματοποιείται μια κλήση στη μέθοδο Connect του διαχειριστή σύνδεσης COM. Η μέθοδος Connect επιστρέφει μια εξωτερική σύνδεση στη βάση πληροφοριών 1C:Enterprise 8.
  • μέσω μιας εξωτερικής σύνδεσης, γίνεται πρόσβαση σε έγκυρες μεθόδους, ιδιότητες και αντικείμενα βάση πληροφοριώνμε την οποία έχει δημιουργηθεί η σύνδεση.
Σπουδαίος! Λόγω της έλλειψης διεπαφής χρήστη, δεν μπορούν να χρησιμοποιηθούν όλα τα αντικείμενα, οι ιδιότητες και οι μέθοδοι σε μια εξωτερική σύνδεση.
Μια εξωτερική σύνδεση παρέχει πλήρη πρόσβαση στο παγκόσμιο πλαίσιο της. Επομένως, μια εξωτερική σύνδεση όπως οι μέθοδοι της μπορεί να έχει: σταθερές συστήματος, τιμές αντικειμένων που καθορίζονται στον διαμορφωτή, η πρόσβαση στα οποία πραγματοποιείται με χρήση διαχειριστών (για παράδειγμα, σταθερές, απαριθμήσεις, καταλόγους, έγγραφα, αρχεία καταγραφής εγγράφων, αναφορές , επεξεργασία, σχέδια τύπων χαρακτηριστικών, λογιστικά σχέδια, σχέδια τύπου υπολογισμού, μητρώα), καθώς και μεταβλητές που δηλώνονται στη μονάδα εξωτερικής σύνδεσης με λέξη-κλειδίΕξαγωγή.

Διαθεσιμότητα:

Ολοκλήρωση.

Ερώτηση: Σύνδεση COM, σχέδιο τύπου χαρακτηριστικών


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

Γράφω έτσι:

TypeDescriptionTech = New TypeDescription("DirectoryLink. Counterparties"); PurposeProperties = Σύνδεση. Σχέδια τύπων χαρακτηριστικών. Σκοποί Ιδιοτήτων Κατηγοριών Αντικειμένων. FindByName

("Κατάλογος "Άτομα"");

NewElement = Σύνδεση. Σχέδια τύπων χαρακτηριστικών. Ιδιότητες αντικειμένου. CreateItem();

NewElement. Όνομα = PropertyName;

AmGroup = Λάθος; RuGroup = Λάθος;

NewElement. PropertyAssignment = PropertyAssignment;

NewElement. ValueType = DescriptionTypesTech;


Η τελευταία γραμμή δεν λειτουργεί. Και αυτό είναι κατανοητό, βρίσκει έναν τέτοιο τύπο για τη βάση δεδομένων όπου εκτελείται το 1C, αλλά χρειάζομαι έναν τύπο για τη συνημμένη βάση δεδομένων. Πώς να το αποκτήσετε;
Στην έκδοσή μου, δημιουργείται απλώς ένα στοιχείο με τον τύπο τιμής "Προσαρμοσμένη λίστα". Λειτουργεί κατ 'αρχήν, αλλά είναι κατά κάποιο τρόπο άσχημο.

Μορφή πλατφόρμας 8.3. Η σύνδεση COM είναι απαραίτητη προϋπόθεση. Λύσεις χωρίς τη χρήση του δεν έχουν ενδιαφέρον.<>0 Τότε Request = COM.NewObject("Request");

Request.Text = "SELECT |PricesItemsSliceLast.Commodities AS Ονοματολογία, |PricesItemsSliceLast.SalePrice AS Price, |PricesItemsSliceLast.VAT Rate, |PricesItemsSliceLast.RateNP |FROM.DataeL | = &Τύπος Τιμής |Και απόθεμα Β ( &Πίνακας of Nomenclature) |And Inventory and Materials.ThisGroup = FALSE |And Registrar LINK Document.Setting SalesPrices) AS NomenclaturePricesSliceLast";
Request.SetParameter("Item Array", Item Array); Request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); Request.SetParameter("PriceType", COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier", ParameterStructure.PriceType.Identifier)));
TZ = COM.NewObject("Πίνακας τιμών");

AmGroup = Λάθος; RuGroup = Λάθος;

TK = Request.Execute().Upload();

Διαφορετικά TK = New ValueTable;


TK.Columns.Add("Ονοματολογία"); TK.Columns.Add("Τιμή"); TK.Columns.Add("Ποσοστό");

TK.Columns.Add("συντελεστής ΦΠΑ");


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

AmGroup = Λάθος; RuGroup = Λάθος;

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

Τι μπορεί να φταίει;

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

Νομίζω ότι πρέπει να καταχωρήσω τη βιβλιοθήκη, έκδοση 8.2.18.61, και το κάνω μέσω ενός αρχείου bat

regsvr32 /n /i:user "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
παύση

msk-test1c:1641 -- αυτός είναι ο διακομιστής 8.3.5.1098
V82 = Νέο αντικείμενο COMO ("V82. COMConnector"); Αναφορά ("Σύνδεση με τη Λογιστική 3.0...");Προσπάθεια σύνδεσης = V82. Connect("srvr = ""msk- test1c:1641""; ref = ""db_test""; usr = ""Διαχειριστής""; pwd = ""123"""); Ειδοποίηση ("Hurray σύνδεση εδραιώθηκε!");Έκθεση εξαίρεσης ("Δεν υπάρχει σύνδεση με τη βάση δεδομένων!"); Αναφορά(ErrorDescription());// Πληροφορίες = ΠληροφορίεςΣφάλμα()

// Αναφορά("Περιγραφή=
"" + Πληροφορίες.Περιγραφή + ""

AmGroup = Λάθος; RuGroup = Λάθος;"); // Αναφορά ("ModuleName=

"" + Info.ModuleName + ""

"); // Αναφορά ("LineNumber=" + Info.LineNumber); // Αναφορά ("SourceLine=


"" + Info.SourceString + ""

"); Return; EndAttempt;

Πού να καταχωρήσω τη βιβλιοθήκη, στον πελάτη, στον διακομιστή 8.2, στον διακομιστή 8.3; Εικόνα παρακάτω.
(για την έκδοση πελάτη-διακομιστή και για την έκδοση αρχείου της βάσης δεδομένων 1C)
Υπήρχε μια εργασία επικοινωνίας με ένα τερματικό μέσω μιας υπηρεσίας web. Η βάση είναι, καλά, ας πούμε ελαφρύ. Επίσης 0,5 ή πιο γρήγορα;
Είναι δύσκολο να πω - δεν έχω αρκετά δεδομένα. Ήμασταν ευχαριστημένοι με 0,5 δευτερόλεπτα, μείον τον περιττό πελάτη 1C σε μηχάνημα τρίτου κατασκευαστή, μείον τον συγχρονισμό των εκδόσεων της βιβλιοθήκης μετά την ενημέρωση του κινητήρα 1C, μείον το καταραμένο comsafearray, τα κανονικά ονόματα και τους τύπους πεδίων... Μας σκέφτηκε από η άλλη πλευρά (ένα σύστημα που ενσωματώνεται με το 1C) "δεν θα καταλάβουν" όταν αποδεικνύεται ότι πρέπει να ξαναγράψουν τις κλήσεις τους 1C σε ένα νέο "μοντέλο επικοινωνίας συστήματος". Αλλά έχοντας δοκιμάσει μία λειτουργία μία φορά στη δοκιμαστική βάση δεδομένων, τώρα μας πειράζουν με το "ας μεταβούμε στην υπηρεσία το συντομότερο δυνατό".

Ερώτηση: Πώς να χρησιμοποιήσετε το TypeContains για αντικείμενα Com;

AmGroup = Λάθος; RuGroup = Λάθος;

Αν Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Τότε υπάρχει Nomenclature = True;
endIf;

Συνάρτηση CheckAttributeType(Attribute, Type) Export Return Attribute.Type.ContainsType(Type(Type)); EndFunction

Στη βάση δεδομένων από την οποία συνδέομαι, καλώ τη διαδικασία μέσω Com:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(Χαρακτηριστικό, "DirectoryLink.Nomenclature")