Πώς να συμπληρώσετε και να ανοίξετε μέσω προγραμματισμού μια νέα φόρμα εγγράφου; Πώς να ανοίξετε μια φόρμα ενός υπάρχοντος αντικειμένου; Ανοίξτε μέσω προγραμματισμού τη φόρμα ενός νέου εγγράφου 1s 8.3

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

GetForm() . Ανοιξε()

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

Φόρμα = GetForm( "Έγγραφο. Παραλαβή Αγαθών και Υπηρεσιών. Έντυπο παραστατικού") ;
//Εδώ εκτελούμε ενέργειες με τη φόρμα
Μορφή. Ανοιξε();

Θα πρέπει να ληφθεί υπόψη ότι όταν ληφθεί η φόρμα, θα εκτελεστεί άλλη διαδικασία συμβάντος WhenCreatedOnServer.

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

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

Σε αυτή την περίπτωση, όλα είναι εξαιρετικά απλά.

RefLink = Κατάλογοι. Ονοματολογία. FindByCode("000000001" );
OpenValue(RefLink) ;

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

Υπάρχει μια λειτουργία για αυτό EnterValue().Η συνάρτηση έχει 3 παραμέτρους:

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

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

Μεταβλητή τιμή;
Array= νέος πίνακας;
Πίνακας. Προσθήκη(Τύπος( "DirectoryLink.Nomenclature") ) ;
Πίνακας. Προσθήκη(Τύπος( "DirectoryLink. Αντισυμβαλλόμενοι") ) ;

TypeDescription= new TypeDescription(Array) ;

Res = EnterValue(Value, "Hint" , TypeDescription) ;

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

Αυτή η συνάρτηση έχει αρκετές παραμέτρους. Ας δούμε μερικά από αυτά:

  • Όνομα φόρμας— εδώ μπορείτε να επιλέξετε ένα από τα τυπικά σχήματα αντικειμένων, για παράδειγμα, Φόρμα Επιλογήςή Φόρμα λίστας. Ή μια συγκεκριμένη φόρμα που δημιουργήθηκε από τους προγραμματιστές.
  • Επιλογές— σας επιτρέπει να το μεταφέρετε στη φόρμα της φόρμας δομέςορισμένες παραμέτρους πριν το ανοίξετε, προσδιορίζοντας έτσι τα δεδομένα εξόδου. Παράμετροι μπορεί να είναι οποιαδήποτε δεδομένα που μπορούν να περάσουν από τον πελάτη στον διακομιστή. Οι παράμετροι που μεταβιβάστηκαν κατά το άνοιγμα της φόρμας μπορούν να υποβληθούν σε επεξεργασία στη διαδικασία WhenCreatingOnServer()στη φόρμα που ανοίγει.
  • Λειτουργία ανοίγματος φόρμας— έχει 3 επιλογές: ανεξάρτητη, αποκλεισμός ολόκληρης της διεπαφής, αποκλεισμός της φόρμας κατόχου.

Ας δούμε πώς χρησιμοποιείται η συνάρτηση OpenForm()σε διάφορες καταστάσεις.

3. Πώς να ανοίξετε τη φόρμα ενός υπάρχοντος αντικειμένου

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

&OnClient
Διαδικασία Εντολή 1 (Εντολή)
Παράμετρος= νέα δομή;
Παράμετρος. Insert("Key" , FindC() );
OpenForm(, Παράμετρος) ;
Τέλος Διαδικασίας

&Στον διακομιστή
Συνάρτηση FindC();
Κατάλογοι επιστροφής. αντισυμβαλλόμενοι. FindByRequisites ("TIN", "745107734623")
EndFunction

4. Πώς να ανοίξετε μια νέα φόρμα αντικειμένου

Μια απλή λειτουργία θα κάνει εδώ OpenForm()χωρίς καμία παράμετρο.

&OnClient
Διαδικασία Εντολή 1 (Εντολή)
OpenForm( "Κατάλογος. Αντισυμβαλλόμενοι. Φόρμα αντικειμένου") ;
Τέλος Διαδικασίας

5. Πώς να ανοίξετε μια νέα φόρμα αντικειμένου και να τη συμπληρώσετε με βάση κάτι

Πρέπει να περάσετε μια παράμετρο Βάση, η τιμή του οποίου θα είναι μια αναφορά στο αντικείμενο βάσης πλήρωσης. Αυτό θα ξεκινήσει τη διαδικασία ProcessFill().

&OnClient
Διαδικασία Εντολή 1 (Εντολή)
Παράμετρος= νέα δομή;
Παράμετρος. Insert("Base", LinkToBuyerAccount) ;
OpenForm( "Έγγραφο. Πωλήσεις αγαθών και υπηρεσιών. Έντυπο αντικειμένου", Παράμετρος) ;
Τέλος Διαδικασίας

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

6. Πώς να ανοίξετε μια φόρμα και να ορίσετε μια επιλογή σε αυτήν

Η επιλογή σε φόρμες 1C μπορεί να είναι απλή ή σύνθετη. Η απλή επιλογή περιλαμβάνει εκφράσεις όπως Οργανισμός = Horns and Hooves LLC.Η σύνθετη επιλογή περιλαμβάνει άλλους τύπους σύγκρισης, π.χ. Στη λίστα. Σε αυτό το άρθρο θα εξετάσουμε την οργάνωση της απλής επιλογής και ένα ξεχωριστό άρθρο θα αφιερωθεί στη σύνθετη επιλογή.

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

Για παράδειγμα, ας ανοίξουμε τη φόρμα λίστας καταλόγου Αριθμοί GTDκαι κάντε μια επιλογή εκεί ανά στοιχείο ιδιοκτήτη - καταλόγου Ονοματολογία.

&OnClient
Διαδικασία Εντολή 1 (Εντολή)
Παράμετρος= νέα δομή;

Επιλογή= νέα δομή.
Επιλογή. Insert("Owner", LinkToNomenclature) ;

Παράμετρος. Εισαγωγή ("Επιλογή", Επιλογή) ;

OpenForm( "Directory.GTD numbers.List form", Παράμετρος) ;
Τέλος Διαδικασίας

7. Πώς να ανοίξετε τη φόρμα εγγραφής στο μητρώο πληροφοριών

Για να το κάνετε αυτό, θα χρειαστείτε το κλειδί καταχώρισης του μητρώου πληροφοριών.

Κλειδί εγγραφής— αυτές είναι οι τιμές όλων των μετρήσεων και η περίοδος (εάν το μητρώο είναι περιοδικό). Δηλαδή, ένα κλειδί εγγραφής είναι οι παράμετροι με τις οποίες μπορεί να αναγνωριστεί μοναδικά μια εγγραφή.

Ο αλγόριθμος ανοίγματος είναι ο εξής:

  1. Εισάγουμε τα δεδομένα κλειδιού εγγραφής με τις απαραίτητες τιμές στη δομή.
  2. Τοποθετούμε τη δομή που προκύπτει σε έναν πίνακα.
  3. Δημιουργούμε ένα κλειδί εγγραφής από τον πίνακα.
  4. Περνάμε μια παράμετρο στη φόρμα που ανοίγει Κλειδίμε το κλειδί εγγραφής από το βήμα 3 ως τιμή.

&OnClient
Διαδικασία Εντολή 1 (Εντολή)
Παράμετρος= νέα δομή;

KeyParameters= νέα δομή.
Βασικές παράμετροι. Insert("Ονοματολογία", LinkToNomenclature) ;
Βασικές παράμετροι. Insert("PriceType", LinkToPriceType) ;
Βασικές παράμετροι. Εισαγωγή ("Περίοδος", Ημερομηνία) ;

KeyArray = Νέος πίνακας;
KeyArray. Add(KeyParameters) ;

EntryKey = Νέο( "Information RegisterRecord Key.PricesNomenclature", KeyArray) ;

Παράμετρος. Insert("Key", RecordKey) ;

OpenForm( "Μητρώο Πληροφοριών. Τιμές Ονοματολογίας. Έντυπο αρχείου", Παράμετρος) ;
Τέλος Διαδικασίας

Σπίτι Για αρχάριους προγραμματιστές Μάθετε να προγραμματίζετε

Πώς να ανοίξετε μια φόρμα ενός υπάρχοντος αντικειμένου;

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

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

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

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

Για παράδειγμα:

ReferenceToDirectoryElement = Elements.List.CurrentRow; FormParameters = Νέα δομή ("Key", ReferenceToDirectoryElement); OpenForm("Directory.Organizations.Form.UniversalObjectForm",FormParameters);

Θα πρέπει να σημειωθεί ότι στην περίπτωση που, εκτός από έναν σύνδεσμο προς ένα αντικείμενο, δεν χρειάζεται να περάσουν παράμετροι στη φόρμα που ανοίγει και είναι η κύρια μορφή του υπάρχοντος αντικειμένου που χρειάζεται, μπορείτε να χρησιμοποιήσετε μια απλούστερη μέθοδο - ανοίξτε τη φόρμα χρησιμοποιώντας τη διαδικασία OpenValue():

OpenValue(Items.List.CurrentRow);

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

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

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

Καλημέρα σε όλους!
Νομίζω ότι οι πληροφορίες σε αυτό το θέμα θα είναι πολύ χρήσιμες σε πολλούς επισκέπτες αυτού του φόρουμ.
Για μεγάλο χρονικό διάστημα δεν μπορούσα να λύσω το πρόβλημα - πώς να ανοίξω τη φόρμα ενός νέου εγγράφου έτσι ώστε να μην ανοίγει κενό, αλλά να έχει ήδη συμπληρωθεί εν μέρει μέσω προγραμματισμού, ενώ το ίδιο το έγγραφο δεν έχει ακόμη καταγραφεί στη βάση δεδομένων; Πέρασα πολύ χρόνο ψάχνοντας για μια λύση σε αυτό το πρόβλημα στο Διαδίκτυο, επισκέφτηκα πολλά φόρουμ όπου τέθηκε αυτό το ζήτημα, αλλά μόνο μερικά από αυτά βρήκαν λύσεις. Το πιο απλό από αυτά είναι να δημιουργήσετε πρώτα μέσω προγραμματισμού ένα νέο έγγραφο, να συμπληρώσετε μέσω προγραμματισμού τις απαραίτητες λεπτομέρειες, να γράψετε το έγγραφο στη βάση δεδομένων και στη συνέχεια να το ανοίξετε στον χρήστη. Τι γίνεται αν ο χρήστης δεν θέλει να το αποθηκεύσει; Κι αν αλλάξει γνώμη και κλείσει την ανοιχτή φόρμα; Σε αυτήν την περίπτωση, το ήδη καταγεγραμμένο έγγραφο θα παραμείνει στη βάση δεδομένων. Και ποιος χρειάζεται επιπλέον έγγραφα στη βάση δεδομένων;
Και αν δεν αποθηκεύσετε το έγγραφο, τότε η πιο δημοφιλής επιλογή είναι να χρησιμοποιήσετε τη μέθοδο GetForm ("Documents. Required Document Type. Document Form"). Αλλά σε αυτήν την περίπτωση, μπορείτε να λάβετε μια κενή φόρμα εγγράφου και απλά να την εμφανίσετε χρησιμοποιώντας τη μέθοδο Open(). Επίσης δεν είναι επιλογή...
Μετά από κάποιο χρονικό διάστημα, το πρόβλημα επιλύθηκε χρησιμοποιώντας τη συνάρτηση καθολικού περιβάλλοντος "Συμπλήρωση τιμών ιδιοκτησίας".

Παγκόσμιο πλαίσιο
FillPropertyValues
Σύνταξη:
Συμπληρώστε τις τιμές ιδιοτήτων(<Приемник>, <Источник>, <Список свойств>, <Исключая свойства>)
Περιγραφή:
Αντιγράφει τις αξίες των ακινήτων<Источника>σε ακίνητα<Приемника>. Η αντιστοίχιση γίνεται με ονόματα ακινήτων.

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

&Στη διαδικασία πελάτη EnterRecord()RecordForm = GetForm("Document.Provision of Medical Services.ObjectForm"); ΣυμπληρώστεPropertyValues(RecordForm.Object,Object,"Date,Specialist,Specialization,Nurse, Execution Status",); // Συμπληρώστε τις τιμές των στοιχείων των οποίων τα ονόματα είναι ίδια και στα δύο έγγραφα TextStr = Elements.Reception.CurrentData; //Δεδομένα της τρέχουσας γραμμής του εγγράφου προέλευσηςΔομήΙδιότητας = Νέα δομή; // Η δομή περιέχει τις τιμές εκείνων των λεπτομερειών που πρέπει να συμπληρωθούν στη φόρμα του νέου εγγράφου, αλλά δεν υπάρχουν στο έγγραφο προέλευσης StructureProperties.Insert("Work Order", Object.Link); PropertyStructure.Insert("ReceptionTime",TexStr.ReceptionTime); ΣυμπληρώστεPropertyValues(RecordForm.Object,PropertyStructure,"RecordOrder,AppointmentTime",); EntryForm.Open(); Τέλος Διαδικασίας

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