1c στις παραμέτρους επιλογής, ορίστε το όνομα της ομάδας. Ορίστε παραμέτρους επιλογής και συσχετίσεις παραμέτρων επιλογής για αντικείμενα μεταδεδομένων. DescriptionofTypesInventory = NewDescriptionofTypes(Array)

Ωστε να ανοίξτε τη φόρμα επιλογής με επιλογή σε 1s 8.2(κανονικές φόρμες), πρέπει να εκτελέσουμε κάποιες ενέργειες. Θα το πάρουμε πρώτοι. Μετά από αυτό, θα ορίσουμε την επιλογή και θα την ανοίξουμε μέσω προγραμματισμού, εδώ είναι ένα παράδειγμα κώδικα:

Επιλογή στη φόρμα στο πεδίο εισαγωγής 1C 8.2 με πολλές τιμές

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

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

Ρύθμιση επιλογής στο πεδίο εισαγωγής στη φόρμα στο 1C 8.3, συμβάν Έναρξη επιλογής

Τώρα ας αναλογιστούμε επιλογή στο πεδίο εισαγωγής σε διαχειρίσιμη μορφήστο 1C 8.3. Ας βρούμε στη φόρμα το στοιχείο που μας ενδιαφέρει, στο οποίο θα ορίσουμε την επιλογή, στην περίπτωσή μας αυτό είναι το πεδίο "Οργάνωση". Βρίσκουμε την εκδήλωση «Έναρξη επιλογής», κάνουμε κλικ στον μεγεθυντικό φακό και βρισκόμαστε στη διαδικασία. Βλέπουμε την παράμετρο Selection Data, αυτή η παράμετρος είναι τύπου ValueList. Για να περιορίσουμε την επιλογή στα απαραίτητα στοιχεία, πρέπει να συμπληρώσουμε τη Λίστα τιμών. Μπορούμε να επιλέξουμε στοιχεία μόνο στον διακομιστή, επομένως δημιουργούμε μια διαδικασία με την οδηγία μεταγλώττισης &OnServer. Σε αυτή τη διαδικασία, συμπληρώστε τα Δεδομένα Επιλογής.

/
Προγραμματιστές /
Συμβάσεις κωδικοποίησης

Ρύθμιση επιλογών επιλογής και συσχετίσεων επιλογών επιλογής για αντικείμενα μεταδεδομένων

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

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

Για παράδειγμα, η διαμόρφωση περιέχει

  • Ευρετήριο Υπαλλήλους, το οποίο περιέχει λεπτομέρειες ΟργάνωσηΚαι Τύπος Υπαλλήλου(απαρίθμηση με τιμές Βασικός/Μερικής απασχόλησης);
  • έγγραφο Εντολή παραλαβής, το οποίο περιέχει στηρίγματα ΟργάνωσηΚαι Υπάλληλος; ενώ για τα στηρίγματα Υπάλληλοςέγγραφο Εντολή παραλαβήςπροσδιορίζεται η σύνδεση παραμέτρων επιλογής Επιλογή.Οργάνωσημε στηρίγματα Οργάνωση.

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

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

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

Στη συνέχεια, ρυθμίστε τη σύνδεση για την παράμετρο Επιλογή.Οργάνωσησε ιδιότητες στηρίγματος Υπάλληλοςέγγραφο Εντολή παραλαβήςκαι συνδέσεις για την παράμετρο Επιλογή.Είδος Υπαλλήλουστο πεδίο φόρμας εγγράφου Εντολή παραλαβήςθα οδηγήσει στο γεγονός ότι στη λειτουργία 1C: ΕπιχειρήσειςΚαι οι δύο σύνδεσμοι παραμέτρων επιλογής θα λειτουργήσουν. Έτσι, κατά την επιλογή ενός υπαλλήλου στη φόρμα παραγγελίας πρόσληψης, η επιλογή στη λίστα εργαζομένων θα καθορίζεται τόσο από τον οργανισμό που συμπληρώνεται στο έγγραφο όσο και από τον τύπο του υπαλλήλου, ο οποίος θα καθοριστεί με βάση τη λειτουργική επιλογή.

Καλό απόγευμα.

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

Παλαιότερα στο " τακτική εφαρμογή«Γράψαμε ως εξής:

form = Directory.nomenclature.GetSelectionForm();

resultSelection = form.openModalNO();

Μεταξύ αυτών των τελεστών θα μπορούσαμε να αλλάξουμε τις ιδιότητες της φόρμας, για παράδειγμα, να ορίσουμε την επιλογή. Θα μπορούσαμε να καθορίσουμε μια συγκεκριμένη φόρμα ονομαστικά. Θα μπορούσε να το αλλάξει εμφάνιση, πρόσβαση στις ιδιότητες του στοιχείου φόρμας με το όνομά τους μέσω μιας τελείας (form.Button1.Visibility = False;)

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

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

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

Δεδομένου ότι οι φόρμες μπορούν να ανοίξουν μόνο στον πελάτη, αυτό θα είναι ένα κομμάτι κώδικα από την πλευρά του πελάτη. Θα χρησιμοποιήσουμε τη συνάρτηση EnterValue(<Значение>, <Подсказка>, <Тип>) . Στην πραγματικότητα, όλα είναι ξεκάθαρα από την περιγραφή της. Επιστρέφει τη σημαία για το εάν ο χρήστης έκανε μια επιλογή· στην πρώτη παράμετρο περνάμε το κοντέινερ στο οποίο θα επιστραφεί η τιμή επιλογής, στο δεύτερο κείμενο που θα εμφανίζεται στον τίτλο του παραθύρου επιλογής, στον τρίτο πίνακα του τύπους.

Εδώ είναι ένα παράδειγμα χρήσης:

Μεταβλητή SelectTMC;

ArrayTypes = Νέος πίνακας;

DescriptionofTypesTMC = NewDescriptionofTypes(Array);

Εάν EnterValue (Επιλογή αποθέματος, "Επιλογή στοιχείου", Περιγραφή τύπων αποθέματος) Τότε

//Επεξεργασία της επιλεγμένης τιμής

τέλος εαν;

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

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

Υπάρχουν δύο τρόποι για το άνοιγμα των φορμών: OpenFormΚαι OpenFormModal. Στην πρώτη μέθοδο, θα ανοίξουμε τη φόρμα και το κομμάτι κώδικα από το οποίο ανοίξαμε τη φόρμα θα συνεχίσει να εκτελείται χωρίς να λάβουμε το αποτέλεσμα της επιλογής. Το αποτέλεσμα της επιλογής, ανάλογα με τη μέθοδο κλήσης, θα τοποθετηθεί είτε στο πεδίο εισαγωγής είτε θα ληφθεί στην προκαθορισμένη διαδικασία «Επεξεργασία επιλογής».

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

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

Ας δούμε λοιπόν την περιγραφή της διαδικασίας, έχει 4 παραμέτρους. Στο πρώτο, υποδεικνύουμε μια γραμμή με την πλήρη διαδρομή προς τη φόρμα "Κατάλογος. Συμβάσεις Εργολάβων. Φόρμα Επιλογής". Στο δεύτερο, υποδεικνύουμε τις παραμέτρους επιλογής, περισσότερα για αυτές παρακάτω. Στο τρίτο - ο ιδιοκτήτης, αυτή είναι μια φόρμα ή ένα πεδίο επιλογής που θα λάβει το αποτέλεσμα της επιλογής, δεν το συμπληρώνουμε. Η τέταρτη παράμετρος επίσης δεν χρησιμοποιείται στην περίπτωσή μας.

Έτσι, για μια απλή επιλογή, η ακόλουθη γραμμή θα κάνει:

&OnClient

Διαδικασία Εντολή 1(Εντολή)

res = OpenFormModal("Κατάλογος. Συμβάσεις εργολάβων. SelectionForm");

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

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

Για να ορίσουμε την επιλογή, θα μας βοηθήσει η δεύτερη παράμετρος.

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

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

&OnClient

Διαδικασία Εντολή 1(Εντολή)

Επιλογές = Νέα δομή ("Ιδιοκτήτης", Αντισυμβαλλόμενος);

SelectionParameters = Νέα δομή ("Selection", Selection);

res = OpenFormModal("Κατάλογος. Συμβόλαια εργολάβων. Φόρμα Επιλογής", Παράμετροι Επιλογής);

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

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

Αυτό είναι όλο για σήμερα, σας ευχαριστώ για την προσοχή σας.




Μπλουζα