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

) Εντάξει

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


Μιλώ για αυτό και θα έλεγα ότι θα ήταν ωραίο χωρίς να διαβάσετε το άρθρο σχετικά με την αξιολόγηση για να καταλάβετε πόσο το χρειάζεστε ή να το αξιολογήσετε δεν είναι τόσο πρωτόγονο +/-. Όσον αφορά την ψυχή, θα προσαρμόσω αυτό: σημείωσε τόσο πολύ λόγω του γεγονότος ότι τα αστέρια έχουν αναπτυχθεί και πολλοί άνθρωποι συγκεντρώθηκαν στον ιστότοπο και τους άρεσε πολλοί, καταλαβαίνετε αυτή την περίπτωση, Μόλις το αντικείμενο φύγει με Κύρια σελίδα Μπορεί ήδη να βρεθεί μόνο κατόπιν αιτήματος και λοιπόν να ψηφίζουμε τα πάντα. Και διατηρήστε το κύριο πράγμα, όσο καταλαβαίνω, επιτρέψτε μόνιμα σχόλια \u003d προώθηση του άρθρου.
Είναι γι 'αυτό υπάρχουν καταστήματα στους περαστικούς δρόμους - τελικά, είναι συχνά σημαντική όχι η ποιότητα και η συνάφεια των αγαθών, αλλά η ικανότητα του τόπου, οι άνθρωποι που περπατούν συχνά αγοράζουν ό, τι θα πετάξουν την επόμενη μέρα, απλά για χάρη της διαδικασίας. Έχει καιρό μια πολύ γνωστή ασθένεια - μια έκρηξη. Ή απλά αυξήστε το ρεύμα αυξάνει την πιθανότητα του επιθυμητού αγοραστή.

Και τα πλεονεκτήματα και τα μειονεκτήματα ... είναι μόνο κάποιο είδος "ευχαριστώ" για το χρόνο που ξοδεύετε και εργάζεστε


Εκείνοι. Το MINUS θεωρείται επίσης για "ευχαριστίες"; Ήθελα να μάθω τη στάση σας για το αν είναι απαραίτητο να το βάλετε σε τέτοιες περιπτώσεις και πόσο ενδιαφέρον είναι άλλοι; Τοποθετείται όταν το άρθρο είναι επιβλαβές / κακό ή όταν είναι απλώς άχρηστο για εσάς / άδειο.
Κατά τη γνώμη μου, το άρθρο μοιάζει να θέτει απλώς την αξιολόγηση, διότι:
1. Το πρόβλημα με τους τύπους με τους τύπους αγνοείται γενικά από τον συγγραφέα, αν και δεν ήταν τεμπέλης για να γράψει μια δέσμη σχημάτων.
2. Στο άρθρο, προφανής ανακρίβεια: Λέγεται ότι μπορείτε μόνο

V82 \u003d Νέα Comback ("V82.comConnector"). Code \u003d countparty.code;


Αλλά ήμουν ήρεμα με τη βοήθεια της επεξεργασίας όπως αυτό:

Έκθεση (Base.pravnikhniki.treagens.nightyponia ("LLC"). Κωδικός);


Και όλα είναι καλά! Και επιλέγω τη σύνδεση v82.comconnector
Είναι παράξενο να σβήσει κατ 'κατά τρόπο που ο συγγραφέας απολύτως φτύσει για το γεγονός ότι το άρθρο του περιέχει τέτοια προβλήματα στα οποία ανέφεραν και δεν αντιδρά με κανέναν τρόπο.
3. Αλλά εξακολουθεί να υπάρχει πρόβλημα όταν εμφανίζεται ένα σφάλμα "Η κλάση δεν υπάρχει"
4. Και υπάρχει ένα πρόβλημα κατά την εγκατάσταση 8.2, και στη συνέχεια εγκαταστήστε 8.1 - δοκιμάστε να ανταλλάξετε στο OLE / COM Τυπική ανταλλαγή UT-BP!
5. Θα μπορούσατε να καθορίσετε την κύρια επεξεργασία στον ιστότοπο που σας επιτρέπουν να συνδεθείτε παγκοσμίως μέσω OLE / COM για να ξεκινήσετε τους νεοφερμένους, γράφετε για αυτούς! Με την ευκαιρία, από το δρόμο, για κάποιο λόγο, χτυπάει μαζί σας, γιατί; Και ως αποτέλεσμα, 2 λέξεις είναι ουσιαστικά 6 για τις σκηνές.

Γενικά, δεν λάσπη νερό, αλλά δείχνουν συγκεκριμένα κενά, αλλά μηδενικές αντιδράσεις. Αν αυτή είναι η εμπειρία που μοιράζεστε, είναι κάποιο εσφαλμένο και ελλιπές.
Θέλω να πω το γεγονός ότι ο συγγραφέας θα είχε την επιθυμία να συλλέξει όλες τις δυσλειτουργίες, τότε θα μπορούσε τουλάχιστον να ακούσει την εμπειρία κάποιου άλλου και να μην γκρινιάζει για σχόλια. Υπάρχει επίσης μια κατάσταση που την διαβάζει ξέρει περισσότερο από τον συγγραφέα, το λένε (μερικές φορές εσφαλμένα) και αγωνίζεται επίσης. Ως αποτέλεσμα, όλες οι πληροφορίες δεν είναι στο άρθρο, αλλά σε σχόλια! Αστείος! Έτσι συμβαίνει συχνά, αλλά δεν χρειάζεται να ξεφύγετε από αυτό που θέλατε όσο καλύτερα - δείχνουν πόσο καλύτερα, και άλλοι εμφανίζονται! Συμπεριλάβετε το στο άρθρο και θα αξίζει τον κόπο, δεν είναι όλα τα ίδια ενδιαφέροντα για να διαβάσετε αυτό το σκάφος.

Γεια Habravelov!

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

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


Ως γλώσσα που θα ενσωματωθεί με 1C, επέλεξα το Python. Είναι πολύ κατάλληλη για την αυτοματοποίηση των διαδικασιών. Αυτό διευκολύνεται από την μινιμαλιστική σύνταξη (ο κωδικός είναι ορατός πολύ γρήγορα), πλούσια τυποποιημένη βιβλιοθήκη (λιγότερη ανάγκη για Μονάδες τρίτου μέρους), Cross-Platform - Με μεγάλη πιθανότητα, ένας κώδικας που γράφτηκε στο Linix, κερδίζει με επιτυχία παράθυρα.

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

Μόλις ο οργανισμός, στάθηκε ένα πρόγραμμα γραμμένο στους Δελφούς και χρησιμοποιώντας το MSSQL / Firebird ως βάση δεδομένων. Σε αυτούς τους ένδοξες ώρες, ήταν δυνατό να συνδεθεί στη βάση δεδομένων χρησιμοποιώντας οποιαδήποτε γλώσσα και να κάνετε πολλές ενέργειες - να επιλέξετε συνδρομητές οφειλέτη, διαδίδουν την ληφθείσα πληρωμή, καθορίστε τις αναγνώσεις των οργάνων. Δεν προκαλεί έκπληξη το γεγονός ότι η συλλογή των σεναρίων που αυτοματοποιεί τη ρουτίνα αυξήθηκε συνεχώς. Οι προγραμματιστές θα μπορούσαν να εκτελέσουν οποιεσδήποτε ενέργειες χωρίς να ανοίξουν το ίδιο το πρόγραμμα.

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

Τα κύρια καθήκοντα που στάθηκαν μπροστά μου είναι η δυνατότητα γρήγορης παραλαβής δεδομένων σε ένα συγκεκριμένο Λογαριασμός προσώπου - Πλήρες όνομα, διεύθυνση, συσκευές μέτρησης, αναγνώσεις οργάνων, πληρωμές, δεδουλευμένοι δεδουλευμένοι. Επιπλέον, ο σχηματισμός εγγράφων αποτελεί πράξη συμφιλίωσης, απόδειξη πληρωμής. Έτσι, λείπει η δυνατότητα άμεσης σύνδεσης από τη βάση δεδομένων - όλοι όσοι κοίταξαν τη βάση δεδομένων 1C στον SQL Server, είδαν ότι στη μάζα του πίνακα του τύπου ΑΑΑ1, το AAA2 είναι δύσκολο να κατανοηθεί. Και η κατασκευή αιτημάτων με τέτοια ονόματα των πινάκων και τα πεδία είναι απλά εξωπραγματικά. Επιπλέον, πολλοί πίνακες 1γ (ειδικά οι πιο σημαντικές, όπως οι κομμένες φέτες των τελευταίων, υπολειμμάτων και επαναστάσεων) είναι εικονικά και διασκορπισμένα από διαφορετικούς φυσικούς πίνακες, συγκεντρώνοντας πολλαπλές ενώσεις. Αυτή η μέθοδος δεν είναι κατάλληλη.

Η πλατφόρμα 1C παρέχει τη δυνατότητα σύνδεσης σε αυτήν μέσω της σύνδεσης COM. Όπως πολλά προγράμματα των Windows, κατά τη διάρκεια της εγκατάστασης 1C, τα δύο αντικείμενα COM καταγράφονται στον διακομιστή συστήματος - Automation και Com Connector. Μπορείτε να εργαστείτε με τα δύο αντικείμενα χρησιμοποιώντας τη γλώσσα στην οποία παρέχεται η τεχνολογία COM.

Το αντικείμενο του διακομιστή αυτοματισμού είναι μια εφαρμογή 1C, σχεδόν δεν διαφέρει από τη συνήθη εφαρμογή πελάτη. Η διαφορά είναι ότι επιπλέον η δυνατότητα προγραμματισμού της εμφάνισης εφαρμογής της εφαρμογής εμφανίζεται. Όταν εργάζεστε με το αντικείμενο COM, ξεκινά μια ελαφριά έκδοση της εφαρμογής 1C, στην οποία τα έντυπα δεν είναι διαθέσιμα, καθώς και λειτουργίες και μέθοδοι που σχετίζονται με τη διεπαφή και τα οπτικά εφέ. Η ίδια η εφαρμογή ξεκινάει από τη λειτουργία "Εξωτερική Ένωση". Η αρχικοποίηση των παγκόσμιων μεταβλητών (για παράδειγμα, ο ορισμός του τρέχοντος χρήστη και των ρυθμίσεών του) πρέπει να πραγματοποιείται στη μονάδα εξωτερικής σύνδεσης 1C. Εάν στη λειτουργία εξωτερικής σύνδεσης στον κώδικα θα ονομαστεί μια λειτουργία που δεν είναι διαθέσιμη σε αυτή τη λειτουργία, η εξαίρεση θα προκληθεί (η οποία θα μεταφερθεί στο σενάριο Python). Οι κλήσεις μη ασφαλών λειτουργιών θα πρέπει να πλαισιωθούν από τα σχέδια της φόρμας

# Αν όχι εξωτερική σύνδεση τότε μια προειδοποίηση ("Γεια!"); # Endox

Δεδομένου ότι συνεργάζεται με τα αντικείμενα COM - τεχνολογία αποκλειστικά μόνο τα Windows - δεν προκαλεί έκπληξη το γεγονός ότι στην τυπική προμήθεια Python λείπει. Θα χρειαστεί να ορίσετε την επέκταση - ένα σύνολο μονάδων που παρέχουν όλη την απαραίτητη λειτουργικότητα για τον προγραμματισμό κάτω από τα Windows στην Python. Μπορεί να μεταφορτωθεί ως εγκατάσταση exe που έχει ήδη συλλεχθεί. Η ίδια η επέκταση παρέχει πρόσβαση στο μητρώο, υπηρεσίες, ODBC, COM αντικείμενα κλπ. Εναλλακτικά, μπορείτε να εγκαταστήσετε αμέσως την κατανομή Python Activestate, στην οποία η επέκταση Win32 προέρχεται από το κουτί.

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

Η σύνδεση COM είναι αργή. Χαμηλή παραγωγικότητα - Διάσημη τεχνολογία μείον COM.
- Η διαδικασία εγκατάστασης μιας σύνδεσης με το 1C, ανάλογα με τη διαμόρφωση, μπορεί να διαρκέσει από 1 έως 8 δευτερόλεπτα (στην περίπτωσή μου - 6 δευτερόλεπτα). Αξίζει να σημειωθεί ότι η σύνδεση της σύνδεσης σε κάθε αίτηση θα οδηγήσει σε αυτό, κάθε σελίδα θα φορτωθεί για 8 δευτερόλεπτα.
- Δεδομένου ότι οι εφαρμογές ιστού στο έργο Python ως ανεξάρτητο διακομιστή, το προηγούμενο στοιχείο μπορεί να αντισταθμιστεί με την αποθήκευση της σύνδεσης σε κάποια παγκόσμια μεταβλητή και σε περίπτωση σφάλματος για την επαναφορά της. Πώς να διατηρήσετε μια σύνδεση με το PHP, εγώ, ειλικρινά, δεν σκέφτηκα ακόμα.
Η διασταυρούμενη πλατφόρμα εφαρμογής ιστού χάνεται.

Με βάση τα παραπάνω στοιχεία, αποφασίστηκε η αλλαγή της αρχής της αλληλεπίδρασης, διαχωρισμού της σε 2 μέρη - τα πρώτα εξαρτώμενα από πλατφόρμα (Windows), τα δεδομένα εκφόρτωσης 1C σε οποιαδήποτε βολική μορφή και το δεύτερο, μη εξαρτώμενο από την πλατφόρμα, η οποία είναι σε θέση να συνεργαστεί με τα δεδομένα, δεν γνωρίζει κατ 'αρχήν περίπου 1C.

Η στρατηγική δράσης έχει ως εξής: Το σενάριο Python συνδέεται από το 1C, εκτελεί τα επιθυμητά ερωτήματα και εκφορτώνει τα δεδομένα στη βάση Sqlite. Αυτή η βάση δεδομένων μπορεί να συνδεθεί από την Python, PHP, Java. Τα περισσότερα από τα έργα μας εργάζονται στην Python, και αφού δεν θα βγούμε από τη γραφή ακατέργαστων ερωτημάτων SQL με τα χέρια σας, τότε όλη η δουλειά με τη βάση Sqlite εκτελείται μέσω του Orm Sqlalchema. Απαιτείται μόνο να περιγράψει τη δομή δεδομένων του δηλωτικού στυλ βάσης δεδομένων:

Από το sqlalchemy.ext.declarive εισαγωγές δηλώνεται από τη στήλη εισαγωγών Sqlalchemy, ακέραιου, αριθμητική, dateime, Unicode, Boolean, γυμναστική, βάση ξένων στοιχείων \u003d δηλωτική_Base () Class Agonent (βάση): __tablename__ \u003d "Agonents" ID \u003d στήλη (ακέραιος αριθμός TRUE) Λογαριασμός \u003d στήλη (Unicode (32), Ευρετήριο \u003d True) Κωδικός \u003d Στήλη (Unicode (32)) Διεύθυνση \u003d στήλη (Unicode (512)) FIO \u003d στήλη (Unicode (256)) Πηγή \u003d στήλη (Unicode (16) ) PSU \u003d στήλη (Unicode (256)) TSO \u003d στήλη (Unicode (256)) NP \u003d στήλη (Unicode (256)) Street \u003d στήλη (Unicode (256)) Σπίτι \u003d στήλη (ακέραιος) επίπεδος \u003d στήλη (ακέραιος) MRO \u003d Στήλη (Unicode (256)) Κατηγορία πληρωμής: __tablename__ \u003d "Πληρωμές" # και ούτω καθεξής ...

Τώρα αρκεί να εισαγάγετε αυτήν την ενότητα σε οποιοδήποτε έργο Python και μπορείτε να εργαστείτε με τα δεδομένα.

Προβλέπω την ερώτησή σας - "Γιατί sqlite"; Ο κύριος λόγος - η βάση είναι απαραίτητη μόνο για την ανάγνωση, οπότε δεν πρέπει να υπάρχουν προβλήματα με τη γραφή στο Sqlite. Δεύτερον, η μορφή αυτού του DBMS είναι βολική - είναι πιο βολικό να το δείτε (υπάρχουν πολλά δωρεάν βοηθητικά προγράμματα, συμπεριλαμβανομένης μιας εξαιρετικής επέκτασης για τον Firefox). Τρίτον, σε ορισμένες περιπτώσεις ήταν απαραίτητο να αποκτήσετε πρόσβαση στους συνδρομητές από αυτά τα μηχανήματα στα οποία δεν υπάρχει σύνδεση με το διακομιστή MySQL. Σε αυτή την περίπτωση, αρκεί να αντιγράψετε το αρχείο SQLITE-DATABASE και αυτό το μηχάνημα θα έχει πρόσβαση σε όλες τις πληροφορίες.

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

Η εργασία με τα αντικείμενα COM στο Python είναι λίγο ασυνήθιστο. Πρώτον, η "pitonicity" του κώδικα χάνεται - οι κανόνες της ονομασίας μεταβλητών και λειτουργιών στο 1C, για να το θέσουν ήπια, μην αντιστοιχεί στο Zen Python. Δεύτερον, όλοι γνωρίζουν ότι τα αντικείμενα 1C συχνά αναφέρονται ως κυριλλικά σύμβολα, τα οποία θα προκαλέσουν προβλήματα κατά την ανάπτυξη στην Python ... αλλά επιλύονται. Προτείνω να εξοικειωθείτε με τον κώδικα:

Εισαγωγή pythoncom εισαγωγές win32com.client v82_conn_string \u003d "srvr \u003d v8_server; ref \u003d v8_db; usr \u003d όνομα χρήστη, pwd \u003d megapass;" Pythoncom.coinitializiiziize () v82 \u003d win32com.client.dispatch ("v82.comconnector"). Σύνδεση (v82_conn_string)

Όπως μπορεί να δει από τον κώδικα, ο πελάτης αρχικοποιείται για να λειτουργεί με 1C. Ο ορισμός του αντικειμένου COM εμφανίζεται με το όνομα "v82.comconnector". Παρακαλείστε να σημειώσετε ότι αυτό το όνομα ισχύει για την πλατφόρμα V8.2, αν έχετε έκδοση 8.1, τότε το όνομα θα είναι "v81.comconnector".

Στον αρχικό πελάτη, καλούμε τη μέθοδο σύνδεσης (), περνώντας την μια συμβολοσειρά σύνδεσης. Η συμβολοσειρά αποτελείται από το όνομα του διακομιστή, τη βάση δεδομένων, τον χρήστη και τον κωδικό πρόσβασης. Το προκύπτον αντικείμενο V82 διατηρεί τη σύνδεση με την εφαρμογή 1C. Δεν έχει καμία αποσύνδεση () μέθοδος ή κάτι τέτοιο. Για να αποσυνδέσετε τη βάση, αρκεί να διαγράψετε ένα αντικείμενο από τη λειτουργία μνήμης del () ή να αντιστοιχίσετε μια μεταβλητή καμία.

Έχοντας ένα αντικείμενο, μπορείτε να ανατρέξετε σε οποιαδήποτε πεδία και μεθόδους του παγκόσμιου περιβάλλοντος 1C, λειτουργήστε με καθολικούς όγκους του τύπου του εγγράφου κειμένου, πίνακας και TD. Είναι σημαντικό να θεωρηθεί ότι όταν εργάζεστε μέσω της σύνδεσης COM 1C λειτουργεί στη λειτουργία "εξωτερικής ένωσης". Δεν είναι διαθέσιμη οποιαδήποτε λειτουργίες για διαδραστική εργασία, όπως οι αναδυόμενοι διάλογοι, οι ειδοποιήσεις και, το σημαντικότερο, μορφές. Είμαι βέβαιος ότι αλλάζετε τους προγραμματιστές διαμόρφωσης, οι οποίες καθιστούν τη σημαντικότερη λειτουργικότητα στη διαδικασία 1 () στη μονάδα εντύπου εγγράφων.

Ας μιλήσουμε για μια τέτοια ματαιοδοξία ως kirilic χαρακτηριστικά. Παρά το γεγονός ότι το 1C είναι ένα δίγλωσσο μέσο και για κάθε ρωσική μέθοδο υπάρχει ένα αγγλόφωνο αναλογικό, νωρίτερα ή γρήγορα θα χρειαστεί να επικοινωνήσετε με το kirilic χαρακτηριστικό. Εάν σε γλώσσες PHP ή VBScript δεν προκαλεί προβλήματα,

Ρύθμιση CON \u003d CreateObject ("V81.comConnector") Ρύθμιση V8 \u003d Con.Connect ("Intronclining") Ορίστε τον λογιστικό τρόπο \u003d v8.documents. Πρόγραμμα ... ορίστε λογαριασμούςCape \u003d Μπαταρία.

Ο κώδικας στην Python απλά συντρίβει με σφάλμα σφάλματος σύνταξης. Τι να κάνω? Επεξεργασία διαμόρφωσης; Όχι, αρκεί να χρησιμοποιήσετε τις μεθόδους getattr και setattr. Η μετάδοση του αντικειμένου COM και το κυριλλικό όνομα του χαρακτηριστικού σε αυτές τις λειτουργίες, μπορούν να ληφθούν ανάλογα και να καθοριστούν τιμές:

# Κωδικοποίηση \u003d cp1251 κατάλογος \u003d getattr (v82.catalogs, "προσώπου")

Τα παρακάτω είναι σημαντικά: τα ονόματα των λεπτομερειών, καθώς και οι παράμετροι των λειτουργιών και των μεθόδων πρέπει να μεταδίδονται στην κωδικοποίηση CP1251. Επομένως, προκειμένου να αποφευχθεί το putnice με κωδικοποιήσεις εκ των προτέρων, έχει νόημα να το δηλώσετε στην αρχή του αρχείου: # κωδικοποίηση \u003d cp1251. Μετά από αυτό, μπορείτε να μεταφέρετε γραμμές χωρίς να ανησυχείτε για την κωδικοποίηση τους. Αλλά! Όλες οι χορδές που λαμβάνονται από το 1C (τα αποτελέσματα της λειτουργίας των λειτουργιών, των αιτημάτων) θα είναι στην κωδικοποίηση UTF-8.

Ένα παράδειγμα ενός κώδικα που εκτελεί στο ερώτημα 1C, αποδεικνύεται το αποτέλεσμα και αποθηκεύει τη βάση στο Sqlite:

# Κωδικοποίηση \u003d cp1251 Q \u003d "" Επιλέξτε ένα παραμύθι. Κωδικός όπως ο κώδικας, του προσώπου προσώπου. Εξοπλισμός. Naselipart. Όνομα + "," + προσώπου. SmartyAddress ως διεύθυνση, προσώπου psu.division Όπως το PSU, το Express (χαρακτηριστικά desiccreet-διαρκής. Σχέση ως οδηγός. Συλλεία υποκατάστατη οργάνωση). Όνομα ως TSO, προσώπου., Litsevyescheta.divizion.roditel.naimenovanie Mro ως spravochnik.litseyescheta litseveyescheta αριστερά ενταχθούν retailsvedeniy.harakteristikilitseyescheta.srezposlednih ( , Vidharakteristiki \u003d αξία (spravochnik.vidyharakteristik.terrigticnosetevayaorganizatsiya)) πώς να harakterisbitsevyescheta.ssylkazposlednih.obekt \u003d "" "query \u003d v82.newobject ( "Ερώτημα", q) επιλογή \u003d query.execute (). Επιλέξτε () conn \u003d db.connect () conn.query (models.abonent) .delete () κατά την επιλογή.next () abonent.account \u003d επιλογή.Code.strip () Abonent.Code \u003d επιλογή.Code abonent.fio \u003d επιλογή.foude abonent.address \u003d επιλογή.Δωρεάν abonent.psu \u003d επιλογή.psu abonent.tso \u003d επιλογή U "asrn" abonent.np \u003d επιλογή.np abonent.street \u003d επιλογή.Treet adonent.House \u003d επιλογή.house abonent.flat \u003d επιλογή.flat.mro \u003d επιλογή.mro conn.add (adonent)

Εδώ η Conn είναι μια συνεδρία σύνδεσης SQLite-Base. Ένα αντικείμενο αιτήματος ερωτήματος δημιουργείται, το κείμενο του γεμίζει. Όπως σημειώθηκε παραπάνω, το κείμενο ερωτήματος πρέπει να είναι στο CP1251, για το οποίο δηλώνεται για πρώτη φορά η κωδικοποίηση. Μετά την εκτέλεση του αιτήματος, όλοι οι συνδρομητές διαγράφονται στη βάση δεδομένων, ώστε να μην προσθέτουν ένα Ducky, στη συνέχεια προστεθεί στον κύκλο και ακολουθεί το τελικό εμπόδιο.

Κατά την εργασία με αιτήματα, αποκάλυψα τους ακόλουθους κανόνες.

Επιλέγοντας τα πεδία, ορίστε τους τα ονόματα των λατινικών, θα είναι πολύ πιο βολικά για να αποκτήσετε πρόσβαση τους μέσω του επιλογέα (σημείο), αντί του getatr ().
- Επιλέξτε μόνο τους τύπους δεδομένων primit: σειρές, αριθμούς, ημερομηνία και boolean. Ποτέ μην επιλέγετε συνδέσμους σε ένα αντικείμενο (έγγραφο, κατάλογος)! Σε αυτό το πλαίσιο, οι αναφορές δεν είναι απολύτως απαραίτητες και ακόμη και επιβλαβείς για εσάς, επειδή οποιαδήποτε αναφορά στις λεπτομέρειες ή τη μέθοδο του συνδέσμου θα οδηγήσει σε αίτηση μέσω σύνδεσης COM. Εάν επικοινωνήσετε με τα χαρακτηριστικά του συνδέσμου στον κύκλο, θα είναι εξαιρετικά αργή.
- Εάν επιλέξετε ένα πεδίο τύπου πεδίου, τότε επιστρέφεται ως αντικείμενο pytime. Αυτός είναι ένας ειδικός τύπος δεδομένων για τη μεταφορά ημερομηνίας στη σύνδεση COM. Δεν είναι τόσο βολικό να συνεργαστείτε μαζί του, όπως και με το συνηθισμένο DateTime. Εάν στέλνετε αυτό το αντικείμενο στις επιστροφές INT (), Timestamp, από τις οποίες μπορείτε, στη συνέχεια, να πάρετε μια μέθοδο DateTime fromtimestamp ().

Τώρα εξετάστε πώς σχηματίζονται έγγραφα εκτύπωσης. Το γεγονός είναι ότι ο καταναλωτής πρέπει να παράσχει τη δυνατότητα λήψης προκαθορισμένων εγγράφων, όπως η απόδειξη πληρωμής ή ο νόμος περί συμφιλίωσης. Αυτά τα έγγραφα διαμορφώνονται σε 1C σύμφωνα με τις καθορισμένες απαιτήσεις, η εφαρμογή τους στην Python θα διαρκέσει πολύ. Ως εκ τούτου, είναι καλύτερο να δημιουργήσετε έγγραφα σε 1c και να τα αποθηκεύσετε σε μορφή Excel.

Έτσι, ο νόμος συμφιλίωσης δημιουργείται από ένα ειδικό εξωτερική επεξεργασία. Για όσους δεν είναι εξοικειωμένοι με την ορολογία 1C: η επεξεργασία είναι ένα αυτόνομο πρόγραμμα που έχει μια μονάδα, μορφές, πρότυπα, σχεδιασμένα για να ξεκινά το μέσο 1C. Είναι απαραίτητο να αρχικοποιηθεί η επεξεργασία, να γεμίσει τα στοιχεία του και να προκαλέσει μια λειτουργία που θα επιστρέψει σε εμάς Πίνακας εγγράφωνσχεδιασμένο για να προβάλετε 1c. Αυτό το έγγραφο πρέπει να αποθηκεύεται στη μορφή Excel και να αντιγράψει στο διακομιστή ή να γράψει στη βάση δεδομένων.

LINK \u003d GETATTR (V82.Catalogs, "Αναπτύξεις). FindByDescription (" act records elean ") nav_url \u003d v82.geturl (σύνδεσμος," Έκθεση ") όνομα \u003d v82.externalreports.connect (nav_url) outsotionreport \u003d v82.externalreport.Create (Όνομα) Setattr (OutterneReport, "Προσώπου", Αναφορά) Πίνακας_DOC \u003d Εξωτερική χαράδρα.GetDOC () PATH \u003d V82.GETTEMPFILENEMENAME ("XLS") Πίνακας_DOC.WRITE (διαδρομή, V82 .SPreadsheetDoumentFiletype.xls) .Acount \u003d code.code.strip () report.type \u003d u "action" report.document \u003d open (διαδρομή, "RB"). Διαβάστε () conn.add (αναφορά)

Ακολουθεί το ακόλουθο θραύσμα. Συνδέει την επεξεργασία που σχηματίζει ένα έγγραφο. Η επεξεργασία μπορεί να ενσωματωθεί στη διαμόρφωση, να αποθηκεύεται σε δίσκο ή στη βάση δεδομένων 1C (σε κάποιο οδηγό). Δεδομένου ότι η επεξεργασία συχνά αλλάζει, έτσι ώστε κάθε φορά που δεν μπορείτε να ενημερώσετε τη διαμόρφωση, η πιο συχνά μεταβαλλόμενη επεξεργασία αποθηκεύεται στον οδηγό αναφοράς, σε λεπτομέρειες της αναφοράς "Αξία αποθήκευσης". Η επεξεργασία μπορεί να αρχικοποιηθεί με την εκφόρτωση από τη βάση δεδομένων στο δίσκο και τη φόρτωση ή με τη μέθοδο Geturl (), στην οποία η αναφορά στο στοιχείο αναφοράς και το όνομα των στηρίξεων. Αναθέτουμε την αξία των στηρίξεων που λαμβάνονται από το αντικείμενο επεξεργασίας, καλέστε τη λειτουργία GetDoc (), λαμβάνουμε ένα πινακώδες έγγραφο που αποθηκεύεται σε ένα προσωρινό αρχείο Excel. Τα περιεχόμενα αυτού του αρχείου καταγράφονται στη βάση δεδομένων Sqlite.

Το τελευταίο πράγμα που πρέπει να ληφθεί υπόψη - αυτό είναι ένα λογισμικό που ενισχύει το 1C. Ας υποθέσουμε ότι θέλετε να κάνετε μαρτυρία από τους συνδρομητές. Για να γίνει αυτό, αρκεί να δημιουργηθεί και να διεξαχθεί ένα έγγραφο "Πράξη κατάργησης ενδείξεων":

# Κωδικοποίηση \u003d cp1251 πράξεις \u003d getattr (v82. "aktsnotchy") Act \u003d Acts.CreatEdCument () Setattr (Act, "Ένδειξη", 1024.23) Setattr (ACT, "Συνδρομητής", "Ivanov") # Συμπληρώνει άλλες λεπτομέρειες. .. act.write ()
Τώρα το περίβλημα δεδομένων αυτοματοποιημένο.

Έτσι, περιγράφω τη μέθοδο που βασίζεται σε εκφόρτωση λογισμικού και φόρτωσης δεδομένων χρησιμοποιώντας τη σύνδεση COM. Αυτή η μέθοδος λειτουργεί με επιτυχία στην οργάνωσή μου για σχεδόν ένα χρόνο. Η βάση που σχηματίζεται από 1C εξυπηρετεί 3 συστήματα πληρωμών, αποκτώντας στο Internet (πληρωμή από κάρτες μέσω του Internet), καθώς και έναν προσωπικό λογαριασμό. Επιπλέον, διάφορα σενάρια συνδέονται με τη βάση δεδομένων για την αυτοματοποίηση της ρουτίνας.

Παρά τα μειονεκτήματα της μεθόδου (η αργή ταχύτητα της ένωσης COM), γενικά λειτουργεί σταθερή. Έχουμε δεδομένα σε μορφή με βάση την πλατφόρμα (Sqlite) με την οποία μπορείτε να εργαστείτε από οποιαδήποτε γλώσσα. Και το κύριο μέρος του κώδικα γράφεται στην Python και επομένως υπάρχουν πολλά μέσα και τεχνικές, οι οποίες δεν μπορούν να ονειρευτούν ούτε το 1C.

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

Εύχομαι σε όλους καλή τύχη, και να θυμάστε ότι δεν είναι τόσο τρομερό για το 1C, όπως το μικρό του!

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

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

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

Έτσι, προχωρήστε

  1. Δημιουργήστε ένα αντικείμενο COM
    • Για V82.Application Σύνδεση \u003d νέο αντικείμενο COM ("V82.Application").
    • Για V82.comconnector Σύνδεση \u003d νέο αντικείμενο COM ("v82.comconnector");
  2. Δημιουργούμε μια πληθυντική σύνδεση
    • Για την παραλλαγή του διακομιστή της σύνδεσης συμβολοσειρά \u003d "SRVR \u003d" "imasorver" "ref \u003d" "" όνομα ";
    • Για την έκδοση αρχείου της σύνδεσης συμβολοσειράς \u003d "αρχείο \u003d" "pullbazbaz" "USR \u003d όνομα χρήστη, pwd \u003d κωδικός πρόσβασης";
  3. Εκτελέστε μια σύνδεση στη βάση δεδομένων Προσπάθεια σύνδεσης \u003d σύνδεση. Σύνδεση (ένωση συμβολοσειράς); Μήνυμα εξαίρεσης \u003d νέο μήνυμα χρήστη. Μήνυμα. Κείμενο \u003d + Περιγραφή (); Μήνυμα. Να αναφέρουν() ; Εορταστικές εκδηλώσεις;
  4. Σπάστε τη σύνδεση με τη βάση Ένωση \u003d undefined.

    Για αντικείμενο V82.Application Είναι απαραίτητο να εκπληρώσουμε τη σύνδεση με τη σύνδεση, διαφορετικά η ελλιπής σύνοδος θα κρεμάσει, η οποία τότε θα πρέπει να διαγραφεί με το χέρι. Σε περίπτωση που V82.comconnector Η σύνδεση είναι σκισμένη αυτόματα όταν ολοκληρωθεί η διαδικασία στην οποία πραγματοποιήθηκε η σύνδεση. Και υπάρχει μια άλλη μικρή στιγμή.

    Για τον χρήστη στο οποίο εκτελείται η σύνδεση, το πλαίσιο ελέγχου "αίτημα κλεισίματος" πρέπει να απενεργοποιηθεί στις ρυθμίσεις του.

Τώρα θα συλλέξουμε όλο τον κώδικα σε μια δέσμη

Σύνδεση \u003d νέο αντικείμενο COM ("V82.Application"). // σύνδεση \u003d νέο αντικείμενο COM ("v82.comconnector"); Δείκτης κωπηλασίας \u003d "SRVR \u003d" "Server1c" ", Ref \u003d" MyBase "", USR \u003d PETYA, PWD \u003d 123 ". // reliting indion \u003d "αρχείο \u003d" "c: \\ mybase" "; usr \u003d peter; pwd \u003d 123"; Προσπάθεια σύνδεσης \u003d σύνδεση. Σύνδεση (ένωση συμβολοσειράς); Μήνυμα εξαίρεσης \u003d νέο μήνυμα χρήστη; Μήνυμα. Κείμενο \u003d. "Αποτυχία σύνδεσης με τη βάση δεδομένων" + Περιγραφή (); Μήνυμα. Να αναφέρουν() ; Εορταστικές εκδηλώσεις; Ένωση \u003d undefined.

Για τον τύπο σύνδεσης V82.Application Η μέθοδος εφαρμόζεται στο αντικείμενο COM, το οποίο δημιουργήθηκε αρχικά και για V82.comconnector Η μέθοδος ισχύει για τη σύνδεση. Στη συνέχεια, η εργασία με το αίτημα πηγαίνει Τυποποιημένα μέσα 1γ. Στον κώδικα που μοιάζει με αυτό:

Αίτηση \u003d Σύνδεση. NEWOBJECT ("ερώτημα"). // Για V82.comconnector Query \u003d Σύνδεση. NEWOBJECT ("ερώτημα"). // Για V82.Application Ερευνα. Text \u003d "Επιλέξτε | Μεταγεννώσεις. Κωδικός, | Οργανισμοί Propulator.Name | Είναι | Κατάλογος. Αλεργράλια ως γραφείο "; Αποτέλεσμα \u003d Αίτημα. Εκτελέστε (); Επιλογή \u003d αποτέλεσμα. Επιλέξτε (); Ενώ δείγμα. Ο επόμενος () κύκλος του endackel ·

Για την έκδοση 1C: Enterprise 8.3 Όλα παραμένουν αμετάβλητα, εκτός από το ότι όταν δημιουργείτε ένα comobecs πρέπει να χρησιμοποιηθεί "V83.comconnector" ή "V83.aplication".