Σύντομη ενημέρωσησχετικά με τη χρήση του OLE στο 1C-Enterprise.

Για να ξεκινήσετε το σύστημα 1C-Enterprise ως διακομιστής OLE Automation από μια εξωτερική εφαρμογή, εκτελείται η ακόλουθη σειρά ενεργειών:

  1. Ένα αντικείμενο δημιουργείται με ένα αναγνωριστικό OLE (η κεφαλαία χαρακτήρων δεν είναι κρίσιμη):
  • V1CEnterprise.Application - έκδοση ανεξάρτητου κλειδιού.
  • V77.Application - κλειδί που εξαρτάται από την έκδοση.
  • V77S.Application - κλειδί που εξαρτάται από την έκδοση, έκδοση SQL.
  • V77L.Application - κλειδί που εξαρτάται από την έκδοση, τοπική έκδοση.
  • V77M.Application - κλειδί που εξαρτάται από την έκδοση, έκδοση δικτύου.
  • Το σύστημα 1C-Enterprise αρχικοποιείται χρησιμοποιώντας τη μέθοδο Initialize().
  • Τα χαρακτηριστικά και οι μέθοδοι του συστήματος 1C-Enterprise ονομάζονται διακομιστής OLE Automation.
  • Το 1C-Enterprise ως διακομιστής OLE Automation έχει 4 μεθόδους:

    • Initialize() - αρχικοποίηση του συστήματος 1C-Enterprise.
    • CreateObject() - Δημιουργεί ένα αντικείμενο του τύπου συγκεντρωτικών δεδομένων 1C-Enterprise και επιστρέφει μια αναφορά σε αυτό.
    • EvalExpr() - Υπολογίστε την έκφραση του συστήματος 1C-Enterprise.
    • ExecuteBatch() - Εκτελέστε μια ακολουθία χειριστών συστήματος 1C-Enterprise.

    Μέθοδοι:

    1. Initialize() - ανοίξτε τη βάση δεδομένων.

    Η σύνταξη της μεθόδου είναι:

    αρχικοποίηση(<Имя объекта>.RMTrade,<Командная строка>, <Пустая строка>)

    <Имя объекта>.RMTrade - Όνομα μεταβλητής και λέξη-κλειδί RMTrade.
    <Командная строка> - γραμμή εντολών, στο οποίο μπορείτε να καθορίσετε τη διαδρομή προς τη βάση δεδομένων, το όνομα χρήστη και τον κωδικό πρόσβασης.
    <Пустая строка>) - είτε μια κενή συμβολοσειρά, είτε "NO_SPLASH_SHOW" - για να μην εμφανίζεται η οθόνη εκκίνησης κατά την εκκίνηση.

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

    OtherBase=CreateObject("V77.Application"); Opened=OtherBase.Initialize(OtherBase.RMTrade,); Αν Open=0 Τότε // True=-1, False=0. Για όλες τις εντολές OLE. Εμφάνιση ("Η βάση δεδομένων δεν άνοιξε."); ΕΠΙΣΤΡΟΦΗ; Τέλος εαν;

    2. CreateObject() - δημιουργήστε ένα αντικείμενο συγκεντρωτικού τύπου.

    Αυτή η μέθοδος δημιουργεί ένα αντικείμενο του τύπου συγκεντρωτικών δεδομένων του συστήματος 1C-Enterprise και επιστρέφει μια αναφορά σε αυτό.

    Η σύνταξη της μεθόδου είναι:

    CreateObject(<ИмяАгрегатногоТипа>)

    <ИмяАгрегатногоТипа>- μια παράσταση συμβολοσειράς της οποίας η τιμή περιέχει το όνομα του συγκεντρωτικού τύπου δεδομένων που καθορίζεται στον διαμορφωτή. Για παράδειγμα: "Κατάλογος. Ονοματολογία", "Έγγραφο. Τιμολόγιο".

    3. EvalExpr() - αξιολογήστε την έκφραση.

    Η σύνταξη της μεθόδου είναι:

    EvalExpr(<СтрокаВыражения>)

    <СтрокаВыражения>- μια έκφραση συμβολοσειράς γραμμένη στην ενσωματωμένη γλώσσα του 1C-Enterprise.

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

    4. ExecuteBatch() - εκτελέστε μια ακολουθία εντολών.

    Η σύνταξη της μεθόδου είναι:

    ExecuteBatch(<СтрокаОператоров>)

    <СтрокаОператоров>- έκφραση συμβολοσειράς, κείμενο προγράμματος στην ενσωματωμένη γλώσσα του 1C-enterprise.

    Επιστρέφει μια Boolean τιμή: TRUE εάν η ακολουθία δηλώσεων ήταν επιτυχής, FALSE εάν όχι. Στο OLE Automation, το TRUE και το FALSE έχουν τις τιμές -1 (μείον ένα) και 0, αντίστοιχα.

    Παράδειγμα: δημιουργία εγγράφου σε άλλη βάση δεδομένων που ανοίγει μέσω OLE.

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

    OtherBase=CreateObject("v77.application"); Opened=OtherBase.Initialize(OtherBase.RMTrade,); Αν Open=0 Τότε Αναφορά ("Η βάση δεδομένων δεν έχει ανοίξει."); ΕΠΙΣΤΡΟΦΗ; Τέλος εαν; dDoc=OtherBase.CreateObject("Document.Invoice"); dItem=OtherBase.CreateObject("Catalog.Nomenclature"); dDoc.New(); dDoc.DateDoc=SelectDocument.DateDoc; dDoc.Firm=OtherBase.evalexpr("Constant.MainFirm"); dDoc.Warehouse=OtherBase.evalexpr("Constant.MainWarehouse"); dDoc.PriceCategory=OtherBase.evalexpr("Constant.IncomingPriceCategory"); dDoc.Tax Calculation Variant=OtherBase.evalexpr("Constant.Main Tax Calculation Variant"); dDoc.Currency=OtherBase.evalexpr("Constant.BaseCurrency");//rubles dDoc.Date_rate=dDoc.DateDoc; doc.AccountingType=1; dDoc.Author=OtherBase.evalexpr("gUser"); dDoc.Invoice χαρακτηριστικό=OtherBase.evalexpr("Transfer.RecognitionInc.Inc.Purchase"); dDoc.Rate=1;//rubles dDoc.Comment=SelectDocument.Comment; SelectDocument.SelectRows(); Ενώ SelectDocument.GetString()=1 Βρόχος dDoc.NewString(); ItemCode=ShortLP(SelectDocument.Item.Code); Αν dItem.FindByCode(ItemCode)=0 Στη συνέχεια Report("Το προϊόν με κωδικό "+Κωδικός στοιχείου δεν βρέθηκε); ΕΠΙΣΤΡΟΦΗ; Τέλος εαν; dItem.UseDate(dDoc.DateDoc); dDoc.Item=dItem.CurrentItem(); dDoc.Quantity=SelectDocument.Quantity; dDoc.Unit=dProduct.UnitDefault; dDocument.Price=SelectDocument.Price; dDoc.Coefficient=1; dDoc.Total=SelectDocument.Amount; dDoc.Amount=SelDocument.Amount-SelekDocument.NW; dDoc.VAT Rate=dProduct.VAT Rate; dDocument.VAT=SelectDocument.VAT; dDoc.NR Rate=dProduct.NR Rate; ddDocument.NrAmount=SelectDocument.Nr; EndCycle; dDoc.SetNewNumber(OtherBase.evalexpr("Constant.Prefix of Accounting Document Numbers")); Notify(""+dDoc.DocNumber); dDoc.Write();

    Αυτό το παράδειγμα λειτουργεί 100%. Το χρησιμοποιώ για να ανεβάζω έγγραφα από τη μια διαμόρφωση στην άλλη.

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

    Για να συγκρίνετε τις τιμές των συγκεντρωτικών τύπων δεδομένων στη βάση δεδομένων που ανοίγει μέσω του Ole, χρησιμοποιήστε τον τυπικό αλγόριθμο χρησιμοποιώντας σημάδια ίσου και άνισου (=,<>) δεν δουλεύει. Η έξοδος είναι απλή. Είναι απαραίτητο να προχωρήσουμε από τη σύγκριση συγκεντρωτικών τύπων δεδομένων σε απλούς τύπους δεδομένων - ημερομηνία, συμβολοσειρά και αριθμό.

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

    //Σύγκριση του χαρακτηριστικού στοιχείου με το BaseCurrency Constant If dItem.AccountingCurrency.Code<>Other.Constant.BaseCurrency.Code Στη συνέχεια dItem.AccountingCurrency=Other.Constant.BaseCurrency; Τέλος εαν; //Σύγκριση χαρακτηριστικού στοιχείου με απαρίθμηση Εάν dItem.ItemType.Identifier()<>Other.Enumeration.ProductTypes.Single.Identifier() Στη συνέχεια dProduct.ProductType=Other.Enumeration.ProductTypes.Single; Τέλος εαν;

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

    Χρήση παραμέτρων συνεδρίας σε 1C

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

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

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

    Στο δέντρο μεταδεδομένων, δημιουργήστε νέα παράμετροςπερίοδος λειτουργίας - CurrentUser, εκχωρήστε έναν τύπο σε αυτό - DirectoryLink.Individuals:

    Λάβετε δωρεάν μαθήματα βίντεο 267 1C:

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

    Κωδικός διαδικασίας:

    Διαδικασία SettingSessionParameters(RequiredParameters) //Ψάχνουμε για φυσική. πρόσωπο με όνομα χρήστη CurrentUser = Κατάλογοι. Τα άτομα. FindByName(UserName() ) ; // αν δεν βρεθεί, δημιουργήστε ένα νέοΕάν ο Τρέχων Χρήστης. Empty() Στη συνέχεια NewUser = Κατάλογοι. Τα άτομα. CreateElement() ; Νέος χρήστης. Όνομα = Όνομα χρήστη() ; Νέος χρήστης. Write() ; CurrentUser = Νέος Χρήστης. Σύνδεσμος; Τέλος εαν ; //εκχωρήστε στην παράμετρο συνεδρίας CurrentUser έναν σύνδεσμο προς τον κατάλογο ατόμων SessionParameters. CurrentUser = CurrentUser; Διαδικασία λήξης

    1. Δήλωση του προβλήματος

    Σε αυτό το άρθρο, θα περπατήσουμε στη διαδικασία σύνταξης ενός απλού εξωτερική επεξεργασίασυμπληρώνοντας το τμήμα του πίνακα μέσα 1C 8για διαμορφώσεις που χρησιμοποιούν μια κανονική εφαρμογή. Για παράδειγμα, ας πάρουμε την ακόλουθη εργασία: «Στη διαμόρφωση 1C: Λογιστική 2.0δημιουργήστε μια εξωτερική επεξεργασία πλήρωσης της ενότητας πίνακα Προϊόνταέγγραφο, τα προς συμπλήρωση δεδομένα λαμβάνονται από την ενότητα του πίνακα Προϊόνταέγγραφο Παραλαβή αγαθών και υπηρεσιών". Έτσι, πρέπει να συμπληρώσουμε τα προϊόντα πώλησης με βάση τα προϊόντα παραλαβής, μια τέτοια εργασία είναι αρκετά συνηθισμένη στην πραγματική πρακτική ενός προγραμματιστή 1C.

    2. Δημιουργία εξωτερικής επεξεργασίας

    Ας πάμε στο 1C 8σε λειτουργία Διαμορφωτής. Χρησιμοποιώντας το μενού Αρχείο -> Νέοή εικονογράμματα νέο έγγραφοδημιούργησε ένα νέο εξωτερική επεξεργασία.

    Στο χωράφι Ονομαδιευκρινίζουμε: «Η απλούστερη συμπλήρωση στο τμήμα πίνακα» και αποθηκεύουμε την εξωτερική επεξεργασία HDDχρησιμοποιώντας το μενού Αρχείο -> Αποθήκευσηή εικονίδιο Αποθηκεύσετεή συντόμευση πληκτρολογίου ctrl+s.

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

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

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

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

    3. Προγραμματισμός

    Ας ξεκινήσουμε τον προγραμματισμό της επεξεργασίας της πλήρωσης του πίνακα. Ας πάμε στο Μονάδα αντικειμένουεξωτερική επεξεργασία (στο κάτω πίνακα επεξεργασίας, το κουμπί Ενέργειες -> Άνοιγμα ενότητας αντικειμένου).

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

    Διαδικασία Αρχικοποίηση ΕξαγωγήΔιαδικασία λήξης

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

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

    TablePart = Αντικείμενο[TablePartName];

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

    Χρειαζόμαστε τον χρήστη να επιλέξει ένα έγγραφο Παραλαβή αγαθών και υπηρεσιών, ας γράψουμε λοιπόν τον κωδικό για το άνοιγμα της φόρμας επιλογής εγγράφου. Αρχικά, μεταφέρουμε αυτήν τη φόρμα σε μια μεταβλητή χρησιμοποιώντας τη μέθοδο εξωτερικής επεξεργασίας GetForm(<Форма>, <Владелец>, <КлючУникальности>) . Αρκεί να συμπληρώσουμε μόνο την πρώτη παράμετρο αυτής της μεθόδου, περνώντας εκεί μια συμβολοσειρά με το όνομα της φόρμας μας.

    IncomingSelectionForm = GetForm("Form" );

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

    AdmissionSelectionForm.OpenModally();

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

    Εάν ΔΕΝ έχει συμπληρωθεί η τιμή (ReceiptDocument) Στη συνέχεια, Report(); ΕΠΙΣΤΡΟΦΗ ; Τέλος εαν ;

    Για να ελέγξετε την πληρότητα του χαρακτηριστικού, χρησιμοποιείται εδώ η συνάρτηση καθολικού περιβάλλοντος ValueFilled(<Значение>) , ελέγχει εάν η τιμή που μεταβιβάζεται στην παράμετρο είναι διαφορετική από την προεπιλεγμένη τιμή του ίδιου τύπου. Διαδικασία Να αναφέρουνεμφανίζει το καθορισμένο κείμενο στο πλαίσιο μηνύματος 1C 8. Λέξη-κλειδί ΕΠΙΣΤΡΟΦΗδιακόπτει την εκτέλεση της διαδικασίας.

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

    Request = Νέο αίτημα;

    Request.SetParameter( "Έγγραφο παραλαβής",Έγγραφο Παραλαβής);

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

    Request.Text = "" ;

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

    Τώρα θα επεκτείνουμε τον πίνακα που επιλέξαμε με "+" ( Εισερχόμενα αγαθά Υπηρεσίες Αγαθά) και σύρουμε τα απαραίτητα πεδία για τη συμπλήρωση του τμήματος καρτέλας στο τρίτο μέρος της οθόνης του κατασκευαστή, το οποίο ονομάζεται - χωράφια. Δεν θα επιλέξουμε όλα τα διαθέσιμα πεδία, θα περιοριστούμε στο ακόλουθο σύνολο: Ονοματολογία, Ποσότητα, Τιμή, Ποσό, Συντελεστής ΦΠΑ, Ποσό ΦΠΑ.

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

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

    Query.Text = "ΕΠΙΛΟΓΗ |FROM |WHERE ;

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

    Αποτέλεσμα = Request.Execute().Upload();

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

    TablePart.Clear();

    Με κύκλο Για όλουςας πάμε γύρω από τον πίνακα τιμών με τα αποτελέσματα του ερωτήματος.

    Για κάθε στοιχείο αποτελέσματος του βρόχου αποτελέσματος Τέλος βρόχου ;

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

    NewStringPT = TabularPart.Add();

    Συμπληρώστε την καρτέλα γραμμής που δημιουργήθηκε. μέρη των δεδομένων από τη συμβολοσειρά αποτελεσμάτων ερωτήματος χρησιμοποιώντας τη διαδικασία παγκόσμιο πλαίσιοFillPropertyValues(<Приемник>, <Источник>) .

    FillPropertyValues(NewStringPT,ResultElement);

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

    διαδικασία Συμπληρώστε InvoicesAccountingInRowTabPartsαπό τη μονάδα αντικειμένου εγγράφου Πώληση αγαθών και υπηρεσιών. Ας το ονομάσουμε με την παράμετρο Ενα αντικείμενο(πρέπει να σημειωθεί

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

    Object.FillAccountsAccountingInTabPartRow(NewPTRow, TabularPartName, True);

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

    Διαδικασία Αρχικοποίηση (Object, TabularPartName = Undefined, Object TableField = Undefined) Εξαγωγή TablePart = Αντικείμενο[TablePartName]; IncomingSelectionForm = GetForm("Form" ); AdmissionSelectionForm.OpenModally(); Εάν ΟΧΙ ValueFilled (Εισερχόμενο έγγραφο) Στη συνέχεια αναφέρετε ( "Δεν επιλέχθηκε έγγραφο απόδειξης") ΕΠΙΣΤΡΟΦΗ ; Τέλος εαν ; Request = Νέο αίτημα; Request.SetParameter( "Έγγραφο παραλαβής",Έγγραφο Παραλαβής); Query.Text = "ΕΠΙΛΟΓΗ | Παραλαβή Αγαθών, Υπηρεσιών, Αγαθών Ονοματολογία, | Παραλαβή Αγαθών, Υπηρεσιών, Αγαθών Ποσότητα, | Παραλαβή Αγαθών, Υπηρεσιών, Αγαθών Ποσοστό ΦΠΑ, | Παραλαβή Αγαθών, Υπηρεσιών, Αγαθών Ποσό, | Παραλαβή Αγαθών, Υπηρεσιών, Αγαθών Ποσό ΦΠΑ, | Παραλαβή Αγαθών, Υπηρεσιών, Αγαθών Τιμή| ΑΠΟ | Document.Receipt of GoodsServices.Goods AS Παραλαβή ΑγαθώνΥπηρεσίεςGoods|ΠΟΥ | GoodsReceiptServicesGoods.Reference = &ReceiptDocument"; Αποτέλεσμα = Request.Execute().Upload(); TablePart.Clear(); Για κάθε στοιχείο αποτελέσματος από βρόχο αποτελεσμάτων NewRowPT = TabularPart.Add(); FillPropertyValues(NewStringPT,ResultElement); Object.FillAccountsAccountingInTabPartRow(NewPTRow, TabularPartName, True); EndCycle ; Διαδικασία λήξης

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

    4. Εντοπισμός σφαλμάτων

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

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

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

    Διαδικασία ButtonExecuteClick(Button) Initialize(ReferenceToObject.GetObject(), "Goods" ); Διαδικασία λήξης

    Τώρα πρέπει να κάνετε τη δημιουργημένη φόρμα την κύρια φόρμα επεξεργασίας. Για να το κάνετε αυτό, επιλέξτε το στο πεδίο "Φόρμα Επεξεργασίας".

    Τώρα μπορείτε να ορίσετε ένα σημείο διακοπής στο σωστό μέροςδιαδικασίες Αρχικοποίησηή διαδικασίες ButtonExecutePushingφόρμες εντοπισμού σφαλμάτων και ξεκινήστε την επεξεργασία της συμπλήρωσης της ενότητας πίνακα σε λειτουργία εντοπισμού σφαλμάτων 1C: Επιχείρηση.

    5. Σύνδεση σε έγγραφο

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

    Συμπληρώστε τη συσχέτιση επεξεργασίας χρησιμοποιώντας το κουμπί Επιλογήεπιλέξτε ένα έγγραφο Πώληση αγαθών και υπηρεσιών

    Και υποδεικνύουμε ότι η γέμιση προορίζεται για το πίνακα Προϊόντα.

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

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

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

    Τα αγαθά είναι διαφορετικά. Για παράδειγμα, προϊόντα και χημεία. Τι να κάνετε εάν ο διευθυντής ζητήσει να κάνει μια αναφορά - πόσα χρήματα κερδίσαμε από προϊόντα και πόσα από τη χημεία;

    Εύκολα! θα απαντήσουμε. Πρέπει να προσθέσετε έναν κατάλογο Τύποι αγαθών και στον κατάλογο Ονοματολογία προσθέστε ένα τέτοιο χαρακτηριστικό. Τώρα που μπαίνουμε καινουργιο ΠΡΟΪΟΝ- θα πρέπει να επιλέξετε τον τύπο του προϊόντος.

    Ωστόσο, τα κορίτσια δεν είναι ευχαριστημένα με αυτή την καινοτομία - γιατί τώρα πρέπει να συμπληρώσουν ένα ολόκληρο επιπλέον πεδίο, και έχουν ήδη πολλή δουλειά και δεν έχουν χρόνο να κάνουν τίποτα. Και γενικά! - λένε - έχουμε 900 είδη προϊόντων και μόνο 50 είδη χημείας! Ακόμη και ένας ανόητος είναι σαφές ότι πρέπει να ορίσετε τον προεπιλεγμένο τύπο προϊόντος στα προϊόντα.

    Εξοχος! - σημειώνουμε. Και… τι να κάνουμε;

    Σταθερές 1C

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

    Υπάρχουν δύο τρόποι για να προσθέσετε μια σταθερή φόρμα:

    • Κάντε δεξί κλικ στον κλάδο 1C Constants και επιλέξτε το στοιχείο μενού Φόρμα Δημιουργία σταθερών
    • Προσθέστε μια φόρμα στον κλάδο General/General Forms και επιλέξτε τον τύπο φόρμας στον οδηγό - Constant Form.

    Μπορείτε να δείτε (και να επιλέξετε) τη μορφή σταθερών ως εξής:

    • Εισαγάγετε τις ιδιότητες διαμόρφωσης (κάντε δεξί κλικ στον επάνω ριζικό κλάδο της διαμόρφωσης, τον οποίο οι προγραμματιστές συνήθως αποκαλούν "Κεφάλι") και χρησιμοποιήστε την ιδιότητα Constants Basic Form.

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

    Παρεμπιπτόντως, το χαρακτηριστικό φόρμας γίνεται "κύριο" εάν προσδιορίζεται στην ιδιότητα Δεδομένα στις ιδιότητες φόρμας.

    Σε ένα πρόγραμμα 1C, οποιαδήποτε σταθερά είναι προσβάσιμη εύκολα και απλά:

    Τιμή = Constants.DesiredConstant.Get(); //ανάγνωση
    Constants.DesiredConstant.Set(Vn); //γράφω

    Παράμετροι συνεδρίας 1C

    Έτσι το πρόβλημα λύνεται απλά και με κομψότητα - δημιουργούμε μια σταθερά στην οποία θα αποθηκεύουμε τον προεπιλεγμένο τύπο προϊόντος.

    Κατά τη δημιουργία ενός νέου προϊόντος, το πρόγραμμα στη γλώσσα 1C θα ορίσει την τιμή του πεδίου Τύπος προϊόντος στο OnOpeningForm() σε αυτήν που έχει εκχωρηθεί στη σταθερά. Voila!

    Τώρα το πρόγραμμα λειτουργεί, αλλά δεν θα σταματήσουμε εκεί! Ακόμα - είμαστε κουλ προγραμματιστές, θέλουμε το πρόγραμμα όχι μόνο να λειτουργεί, αλλά και να λειτουργεί γρήγορα!

    Πού αποθηκεύονται οι σταθερές 1C; Στη βάση δεδομένων, σε ειδικό πίνακα. Κάθε φορά που ο χειριστής δημιουργεί ένα νέο προϊόν, θα εισχωρεί στον διακομιστή και θα διαβάζει την τιμή της σταθεράς 1C. Τι γίνεται αν υπάρχουν 200 χειριστές; Είναι βέλτιστο;

    Τι να κάνεις τότε;

    Και εδώ υπενθυμίζουμε τις παραμέτρους της συνόδου 1C. Αυτές είναι τιμές ​​όπως σταθερές που συμπληρώνονται τη στιγμή της εκκίνησης 1C σε λειτουργία Enterprise και είναι διαθέσιμες αμέσως στον πελάτη. Με άλλα λόγια, είναι ένα είδος κρυφής μνήμης στην πλευρά του πελάτη.

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

    Οι παράμετροι συνεδρίας 1C βρίσκονται επίσης στο παράθυρο διαμόρφωσης που βρίσκεται στον κλάδο General / Parameters session 1C.

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

    Η συμπλήρωση (ρύθμιση) των παραμέτρων της συνεδρίας 1C θα πρέπει να γίνει στην αρχή του 1C στη λειτουργία Enterprise. Κάντε δεξί κλικ στον επάνω κλάδο της διαμόρφωσης (οι προγραμματιστές το ονομάζουν "Κεφάλι") και επιλέξτε το στοιχείο μενού Άνοιγμα ενότητας περιόδου λειτουργίας.

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

    SessionParameters.RequiredParameter = Τιμή; //record, μια φορά στην αρχή
    Τιμή = SessionParameters.RequiredParameter; //ανάγνωση, αυστηρά μετά τη γραφή.