Έγινε προσπάθεια εισαγωγής μιας μη μοναδικής τιμής σε ένα μοναδικό ευρετήριο. Σφάλμα: Προσπάθεια εισαγωγής μιας μη μοναδικής τιμής σε ένα μοναδικό ευρετήριο: διακομιστής microsoft sql. κατά τη μετάβαση από επαγγελματία λογιστή σε εταιρική και όχι μόνο Κατάργηση μη μοναδικών ευρετηρίων σε αρχείο 1c 8

Έχετε λάβει ένα μήνυμα που περιέχει τις γραμμές:
Microsoft OLE DB Provider για SQL Server: CREATE UNIQUE INDEX τερματίστηκε επειδή βρέθηκε διπλό κλειδί για το αναγνωριστικό ευρετηρίου
ή
Δεν είναι δυνατή η εισαγωγή διπλότυπης γραμμής κλειδιού στο αντικείμενο
ή
Έγινε προσπάθεια εισαγωγής μιας μη μοναδικής τιμής σε ένα μοναδικό ευρετήριο.

Λύσεις:

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

2. 1) Χρησιμοποιώντας το Management Studio 2005, δημιούργησα ένα σενάριο δημιουργίας για να δημιουργήσω ένα ευρετήριο, το οποίο ήταν buggy, και το αποθήκευσα σε ένα αρχείο.
2) Καταργήθηκε με μη αυτόματο τρόπο το jamb index από τον πίνακα _AccumRgTn19455
3) Ξεκίνησε ένα αίτημα like
Κωδικός SQL S_elect count(*), index_fields
ΑΠΟ AccumRgTn19455
GROUP BY index_field
ΕΧΟΝΤΑΣ μέτρηση(*)>1
Αφού σκοτώθηκε το ευρετήριο, εμφανίστηκαν 15 διπλές εγγραφές, αν και πριν από το βήμα 2 το ερώτημα δεν επέστρεψε τίποτα.
4) Πέρασα όλες τις καταχωρήσεις και καθάρισα με μη αυτόματο τρόπο τα διπλότυπα. Στην πραγματικότητα, χρησιμοποίησα επίσης την επεξεργασία "Δομή Αναφοράς" για να καταλάβω με τι είχα να κάνω. Αποδείχθηκε ότι ο πίνακας _AccumRgTn19455 αποθηκεύει το μητρώο συσσώρευσης «Εξαγωγή προϊόντος (φορολογική λογιστική)». Επίσης, ασχολήθηκα με τα ερωτήματα sql, εντόπισα 15 μη μοναδικά έγγραφα και αφού ολοκληρώθηκαν όλες οι ενέργειες, έλεγξα στο 1C ότι αυτά τα έγγραφα επεξεργάζονταν κανονικά, χωρίς σφάλματα. Φυσικά, δεν πρέπει να καθαρίζετε απλά τραπέζια τυχαία: είναι σημαντικό να κατανοήσετε τι καθαρίζεται και πώς μπορεί να βγει.
5) Ξεκίνησε ένα αίτημα για τη δημιουργία ευρετηρίου, το οποίο αποθηκεύτηκε σε ένα αρχείο.
6) Άλλαξε τη βάση δεδομένων σε λειτουργία ενός χρήστη και ξεκίνησε το dbcc checkdb - αυτή τη φορά δεν δημιουργήθηκαν σφάλματα.
7) Επιστροφή της βάσης στη λειτουργία ενός χρήστη.
Αυτό είναι όλο... το πρόβλημα ξεπερνιέται. Λοιπόν, πίσω στο 1C ξεκίνησα το "Testing and Correction", όλα πήγαν καλά και εκεί, σταμάτησα να παραπονιέμαι για το μη μοναδικό ευρετήριο.

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

1. Εάν το πρόβλημα είναι η φόρτωση της βάσης δεδομένων, τότε:
1.1. Εάν φορτώνετε (χρησιμοποιώντας ένα αρχείο dt) σε μια βάση δεδομένων MS SQL Server, τότε κατά τη δημιουργία της βάσης δεδομένων, πριν τη φόρτωση, καθορίστε τη μετατόπιση ημερομηνίας - 2000.
Εάν η βάση δεδομένων έχει ήδη δημιουργηθεί με μετατόπιση 0, τότε δημιουργήστε μια νέα με 2000.

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

1.3. Εάν δεν υπάρχει έκδοση αρχείου, δοκιμάστε να φορτώσετε από το DT σε μια έκδοση πελάτη-διακομιστή με DB2 (η οποία είναι λιγότερο απαιτητική για τη μοναδικότητα) και, στη συνέχεια, εκτελέστε Test and Correction, καθώς και Configuration - Verify Configuration - Check the Logical Integrity of Configuration + Αναζήτηση για μη έγκυρες αναφορές.

1.4. Για να εντοπίσετε το πρόβλημα, μπορείτε να προσδιορίσετε τα δεδομένα του αντικειμένου του οποίου η φόρτωση απέτυχε. Για να το κάνετε αυτό, πρέπει να ενεργοποιήσετε την ανίχνευση στο βοηθητικό πρόγραμμα Profiler κατά την εκκίνηση ή να ενεργοποιήσετε την εγγραφή στο αρχείο καταγραφής συμβάντων της διαδικασίας DBMSSQL και EXCP.

2. Εάν το πρόβλημα της μη μοναδικότητας παρουσιαστεί ενώ οι χρήστες εργάζονται:

2.1. Βρείτε το προβληματικό αίτημα χρησιμοποιώντας τη μέθοδο της παραγράφου 1.4.

2.1.2. Μερικές φορές παρουσιάζεται ένα σφάλμα κατά την εκτέλεση ερωτημάτων, για παράδειγμα:

Αυτό το σφάλμα προκύπτει λόγω του γεγονότος ότι στη μονάδα μητρώου συσσώρευσης «Χρόνος εργασίας υπαλλήλων οργανισμών» στη διαδικασία «Επανυπολογισμοί εγγραφής», η λέξη υπηρεσίας «ΔΙΑΦΟΡΕΤΙΚΟ» δεν περιλαμβάνεται στο αίτημα.
Κωδικός 1C v 8.x Δηλ. θα πρέπει να είναι:
Αίτημα = Νέο αίτημα(
«ΕΠΙΛΕΞΤΕ ΔΙΑΦΟΡΑ
| Βασικό.Ατομικό,
. . . . .
Στις τελευταίες εκδόσεις των ZUP και UPP, το σφάλμα δεν παρουσιάζεται, γιατί λέει "ΔΙΑΦΟΡΕΤΙΚΟ".

2.2. Αφού βρείτε το προβληματικό ευρετήριο από την προηγούμενη παράγραφο, πρέπει να βρείτε μια μη μοναδική εγγραφή.
2.2.1. Σενάριο "Fish" για αναγνώριση μη μοναδικών εγγραφών χρησιμοποιώντας SQL:
Κωδικός SQL S_elect COUNT(*) Μετρητής,<перечисление всех полей соответствующего индекса>από<имя таблицы>
ΟΜΑΔΑ ΑΠΟ<перечисление всех полей соответствующего индекса>
ΕΧΟΝΤΑΣ Μετρητής > 1

2.2.2 Παράδειγμα. Το ευρετήριο στο σφάλμα ονομάζεται "_Document140_VT1385_IntKeyIndNG".
Λίστα πεδίων πίνακα:
_Document140_IDRRef, _KeyField, _LineNo1386, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393Ref, _Fld139,Fld _Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE2Ref, _Fld22261_TYPE2Ref, _6Fld22261_TYPE2Ref, _6Fld
Πριν εκτελέσετε την παρακάτω διαδικασία, δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων σας.
Εκτέλεση στο MS SQL Server Query Analyzer:
Κωδικός SQL S_elect count(*), _Document140_IDRRef, _KeyField
from_Document140_VT1385
ομάδα από _Document140_IDRRef, _KeyField
έχοντας μέτρηση(*) > 1
Χρησιμοποιήστε το για να μάθετε τις τιμές των στηλών _Document140_IDRRef, _KeyField, διπλών εγγραφών (αναγνωριστικό, κλειδί).

Χρησιμοποιώντας το αίτημα:
Κωδικός SQL S_elect *
from_Document140_VT1385
ή _Document140_IDRRef = id2 και _KeyField = key2 ή ...
κοιτάξτε τις τιμές των άλλων στηλών των διπλών εγγραφών.
Εάν και οι δύο καταχωρήσεις έχουν σημαντικές τιμές και οι τιμές είναι διαφορετικές, τότε αλλάξτε την τιμή _KeyField ώστε να είναι μοναδική. Για να το κάνετε αυτό, καθορίστε τη μέγιστη κατειλημμένη τιμή του _KeyField (keymax):
Κωδικός SQL S_elect max(_KeyField)
from_Document140_VT1385
όπου _Document140_IDRRef = id1
Αντικαταστήστε την τιμή _KeyField σε μία από τις διπλότυπες εγγραφές με τη σωστή:
Ενημέρωση κώδικα SQL _Document140_VT1385
ορίστε _KeyField = keymax + 1
Εδώ _LineNo1386 = είναι μια πρόσθετη συνθήκη που σας επιτρέπει να επιλέξετε μία από τις δύο επαναλαμβανόμενες εγγραφές.

Εάν μία (ή και οι δύο) από τις διπλότυπες καταχωρήσεις έχει προφανώς εσφαλμένο νόημα, τότε θα πρέπει να αφαιρεθεί:
Διαγραφή κώδικα SQL από _Document140_VT1385
όπου _Document140_IDRRef = id1 και _LineNo1386 = lineno1
Εάν οι διπλές καταχωρήσεις έχουν τις ίδιες τιμές σε όλες τις στήλες, τότε πρέπει να αφήσετε μία από αυτές:
Κωδικός SQL S_elect distinct *
στο #tmp1
from_Document140_VT1385
όπου _Document140_IDRRef = id1 και _KeyField = κλειδί1

Διαγραφή από _Document140_VT1385
όπου _Document140_IDRRef = id1 και _KeyField = κλειδί1

I_insert στο _Document140_VT1385
S_elect #tmp1

Πίνακας D_rop #tmp1

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

2.2.3. Δεύτερο παράδειγμα:
Κωδικός SQL S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
ΑΠΟ _Αναφορά8_
GROUP BY _IDRRef, _Description
ΕΧΟΝΤΑΣ (COUNT(*) > 1)

2.3.4 Ένα παράδειγμα προσδιορισμού μη μοναδικών εγγραφών χρησιμοποιώντας ένα ερώτημα 1C:Enterprise:
Κωδικός 1C v 8.x SELECT Directory.Link
FROM Directory.Directory AS Directory
ΟΜΑΔΑ ΑΝΑ Κατάλογο.Σύνδεσμος
ΠΟΥ ΕΧΕΙ ΠΟΣΟΤΗΤΑ(*) > 1

Αυτό το άρθρο θα περιγράψει τι πρέπει να κάνετε εάν, όταν εργάζεστε με το 1C:Enterprise 8.1, συναντήσετε ένα μήνυμα που περιέχει τις γραμμές:

Δεν είναι δυνατή η εισαγωγή διπλότυπης γραμμής κλειδιού στο αντικείμενο

Έγινε προσπάθεια εισαγωγής μιας μη μοναδικής τιμής σε ένα μοναδικό ευρετήριο.

Τι είναι ένας δείκτης;

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

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

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

Η φυσική ουσία των ευρετηρίων στον MS SQL Server 2005.

Φυσικά τα δεδομένα αποθηκεύονται σε σελίδες 8Kb. Αμέσως μετά τη δημιουργία, ενώ ο πίνακας δεν έχει ευρετήρια, ο πίνακας μοιάζει με ένα σωρό δεδομένων. Τα αρχεία δεν έχουν συγκεκριμένη σειρά αποθήκευσης.
Όταν θέλετε να αποκτήσετε πρόσβαση σε δεδομένα, ο SQL Server θα παράγει σάρωση πίνακα(σάρωση πίνακα). Ο SQL Server σαρώνει ολόκληρο τον πίνακα για να βρει τις εγγραφές που αναζητά.
Από εδώ γίνονται σαφείς οι βασικές λειτουργίες των ευρετηρίων:
— αύξηση της ταχύτητας πρόσβασης στα δεδομένα,
— υποστήριξη για μοναδικότητα δεδομένων.

Παρά τα πλεονεκτήματά τους, οι δείκτες έχουν επίσης μια σειρά από μειονεκτήματα. Το πρώτο είναι τα ευρετήρια καταλαμβάνουν επιπλέον χώρο στο δίσκοκαι σε RAM. Κάθε φορά που δημιουργείτε ένα ευρετήριο, αποθηκεύετε τα κλειδιά σε φθίνουσα ή αύξουσα σειρά, η οποία μπορεί να έχει δομή πολλών επιπέδων. Και όσο μεγαλύτερο/μακρύτερο είναι το κλειδί, τόσο μεγαλύτερο είναι το μέγεθος του ευρετηρίου. Το δεύτερο μειονέκτημα είναι οι λειτουργίες επιβραδύνονταιεισαγωγή, ενημέρωση και διαγραφή εγγραφών.
Στο περιβάλλον MS SQL Server 2005, υλοποιούνται διάφοροι τύποι ευρετηρίων:

  • μη ομαδοποιημένα ευρετήρια.
  • ομαδοποιημένα (ή ομαδοποιημένα) ευρετήρια.
  • μοναδικά ευρετήρια.
  • ευρετήρια με συμπεριλαμβανόμενες στήλες
  • ευρετηριασμένες προβολές
  • πλήρες κείμενο

Μοναδικό ευρετήριο

Η μοναδικότητα των τιμών στη στήλη με ευρετήριο διασφαλίζεται από μοναδικά ευρετήρια. Εάν υπάρχουν, ο διακομιστής δεν θα σας επιτρέψει να εισαγάγετε μια νέα τιμή ή να αλλάξετε μια υπάρχουσα τιμή με τέτοιο τρόπο ώστε ως αποτέλεσμα αυτής της λειτουργίας να εμφανίζονται δύο ίδιες τιμές στη στήλη.
Ένα μοναδικό ευρετήριο είναι ένα είδος πρόσθετου και μπορεί να εφαρμοστεί τόσο για συμπλέγματα όσο και για μη συμπλεγματοποιημένα ευρετήρια. Ένας πίνακας μπορεί να έχει έναν μοναδικό συμπλεγματοποιημένο ευρετήριο και πολλούς μοναδικούς μη ομαδοποιημένους ευρετήρια.
Τα μοναδικά ευρετήρια θα πρέπει να ορίζονται μόνο όταν είναι πραγματικά απαραίτητο. Για να διασφαλίσετε την ακεραιότητα των δεδομένων σε μια στήλη, μπορείτε να ορίσετε έναν περιορισμό ακεραιότητας ΜΟΝΑΔΙΚΟ ή ΚΥΡΙΑΚΟ ΚΛΕΙΔΙ αντί να καταφύγετε σε μοναδικά ευρετήρια. Η χρήση τους αποκλειστικά για τη διασφάλιση της ακεραιότητας των δεδομένων είναι σπατάλη χώρου βάσης δεδομένων. Επιπλέον, ο χρόνος της CPU δαπανάται επίσης για τη συντήρησή τους.

1C: Το Enterprise 8.1, ξεκινώντας από την έκδοση 8.1, χρησιμοποιεί ενεργά συγκεντρωμένα μοναδικά ευρετήρια. Αυτό σημαίνει ότι κατά τη μετατροπή από το 8.0 ή τη μετεγκατάσταση από το 8.1.7 ενδέχεται να λάβετε ένα μη μοναδικό σφάλμα ευρετηρίου.

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

Τι να κάνω?

1. Εάν το πρόβλημα είναι η φόρτωση της βάσης δεδομένων, τότε:

1.1. Εάν φορτώνετε (χρησιμοποιώντας ένα αρχείο dt) σε μια βάση δεδομένων MS SQL Server, τότε κατά τη δημιουργία της βάσης δεδομένων, πριν τη φόρτωση, καθορίστε τη μετατόπιση ημερομηνίας - 2000.

Εάν η βάση δεδομένων έχει ήδη δημιουργηθεί με μετατόπιση 0, τότε δημιουργήστε μια νέα με 2000.

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

1.3. Εάν δεν υπάρχει έκδοση αρχείου, δοκιμάστε να φορτώσετε από το DT σε μια έκδοση πελάτη-διακομιστή με DB2 (η οποία είναι λιγότερο απαιτητική για τη μοναδικότητα) και, στη συνέχεια, εκτελέστε Test and Correction, καθώς και Configuration - Verify Configuration - Check the Logical Integrity of Configuration + Αναζήτηση για μη έγκυρες αναφορές.

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

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

2. Εάν το πρόβλημα της μη μοναδικότητας παρουσιαστεί ενώ οι χρήστες εργάζονται:

2.1. Βρείτε το προβληματικό αίτημα χρησιμοποιώντας τη μέθοδο της παραγράφου 1.4.

2.1.2. Μερικές φορές παρουσιάζεται ένα σφάλμα κατά την εκτέλεση ερωτημάτων, για παράδειγμα:

Αυτό το σφάλμα προκύπτει λόγω του γεγονότος ότι στη μονάδα μητρώου συσσώρευσης «Χρόνος εργασίας υπαλλήλων οργανισμών» στη διαδικασία «Επανυπολογισμοί εγγραφής», η λέξη υπηρεσίας «ΔΙΑΦΟΡΕΤΙΚΟ» δεν περιλαμβάνεται στο αίτημα.

Εκείνοι. θα πρέπει να είναι:

Αίτημα = Νέο αίτημα(
«ΕΠΙΛΕΞΤΕ ΔΙΑΦΟΡΑ
| Βασικό.Ατομικό,

Στις τελευταίες εκδόσεις των ZUP και UPP, το σφάλμα δεν παρουσιάζεται, γιατί λέει "ΔΙΑΦΟΡΕΤΙΚΟ".

2.2. Αφού βρείτε το προβληματικό ευρετήριο από την προηγούμενη παράγραφο, πρέπει να βρείτε μια μη μοναδική εγγραφή.

2.2.1. Σενάριο "Fish" για αναγνώριση μη μοναδικών εγγραφών χρησιμοποιώντας SQL:
SELECT COUNT(*) Μετρητής,<перечисление всех полей соответствующего индекса>από<имя таблицы>
ΟΜΑΔΑ ΑΠΟ<перечисление всех полей соответствующего индекса>
ΕΧΟΝΤΑΣ Μετρητής > 1

2.2.2 Παράδειγμα. Το ευρετήριο στο σφάλμα ονομάζεται "_Document140_VT1385_IntKeyIndNG".

Λίστα πεδίων πίνακα:

Document140_IDRRef, _KeyField, _LineNo1386, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393_RTRef, _Fld1393_RRRef , _Fld1394,

Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE26, _1RFld2

Πριν εκτελέσετε την παρακάτω διαδικασία, δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων σας.
Εκτέλεση στο MS SQL Server Query Analyzer:

επιλέξτε count(*), _Document140_IDRRef, _KeyField
from_Document140_VT1385
ομάδα από _Document140_IDRRef, _KeyField
έχοντας μέτρηση(*) > 1

Χρησιμοποιήστε το για να μάθετε τις τιμές των στηλών _Document140_IDRRef, _KeyField, διπλών εγγραφών (αναγνωριστικό, κλειδί).

Χρησιμοποιώντας το αίτημα:

επιλέξτε *
from_Document140_VT1385
ή _Document140_IDRRef = id2 και _KeyField = key2 ή…

κοιτάξτε τις τιμές των άλλων στηλών των διπλών εγγραφών.

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

επιλέξτε μέγ.(_KeyField)
from_Document140_VT1385
όπου _Document140_IDRRef = id1

Αντικαταστήστε την τιμή _KeyField σε μία από τις διπλότυπες εγγραφές με τη σωστή:

update_Document140_VT1385
ορίστε _KeyField = keymax + 1

Εδώ _LineNo1386 = είναι μια πρόσθετη συνθήκη που σας επιτρέπει να επιλέξετε μία από τις δύο επαναλαμβανόμενες εγγραφές.

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


όπου _Document140_IDRRef = id1 και _LineNo1386 = lineno1

Εάν οι διπλές καταχωρήσεις έχουν τις ίδιες τιμές σε όλες τις στήλες, τότε πρέπει να αφήσετε μία από αυτές:

επιλέξτε διακριτό *
στο #tmp1
from_Document140_VT1385
όπου _Document140_IDRRef = id1 και _KeyField = κλειδί1

διαγραφή από _Document140_VT1385
όπου _Document140_IDRRef = id1 και _KeyField = κλειδί1

εισάγετε στο _Document140_VT1385
επιλέξτε #tmp1

απόθεση πίνακα #tmp1

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

2.2.3. Δεύτερο παράδειγμα:

SELECT COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
ΑΠΟ _Αναφορά8_
GROUP BY _IDRRef, _Description
ΕΧΟΝΤΑΣ (COUNT(*) > 1)

2.3.4 Ένα παράδειγμα προσδιορισμού μη μοναδικών εγγραφών χρησιμοποιώντας ένα ερώτημα 1C:Enterprise:

ή για λογιστική

ΕΠΙΛΕΓΩ
Υποερώτημα.Περίοδος,
Subquery.Registrator,
<измерения>,
SUM(Subquery.Number of Records) AS Αριθμός Εγγραφών
ΑΠΟ
(ΕΠΙΛΕΓΩ
Αυτοστήριξη. Περίοδος AS Περίοδος,
Self-supporting.Registrar AS Registrar,
<измерения>,
1 AS Αριθμός εγγραφών
ΑΠΟ
Μητρώο Λογιστικού

ΟΜΑΔΑ ΑΠΟ
Υποερώτημα.Περίοδος,
Subquery.Registrator,
<измерения>

ΕΧΟΝΤΑΣ
SUM(Subquery. Number of Records) > 1

2.3.5 Κάντε το ευρετήριο υποδ μη μοναδικό. Δημιουργήστε δέσμη ενεργειών στο ευρετήριο χρησιμοποιώντας το Management Studio.

2.3.6 Ειδική περίπτωση κατά την ανταλλαγή στο RDB. Το σφάλμα παρουσιάζεται σε «βοηθητικούς» πίνακες που σχετίζονται με τον υπολογισμό των συνόλων ή των αναλυτικών στοιχείων. Για παράδειγμα:

Σφάλμα κατά την κλήση της μεθόδου περιβάλλοντος (Εγγραφή): Προσπάθεια εισαγωγής μιας μη μοναδικής τιμής σε ένα μοναδικό ευρετήριο:
Microsoft OLE DB Provider για SQL Server: Δεν είναι δυνατή η εισαγωγή διπλότυπης γραμμής κλειδιού στο αντικείμενο "dbo._AccntRegED10319" με μοναδικό ευρετήριο "_Accnt10319_ByPeriod_TRNRN".
HRESULT=80040E2F, SQLSrvr: Κατάσταση σφάλματος=1, Σοβαρότητα=E, εγγενής=2601, γραμμή=1

Σε αυτήν την περίπτωση, πριν τη φόρτωση, απενεργοποιήστε τη χρήση των συνόλων, φορτώστε το μήνυμα, ενεργοποιήστε τη χρήση των συνόλων και υπολογίστε ξανά.

Έχετε λάβει ένα μήνυμα που περιέχει τις γραμμές:
Microsoft OLE DB Provider για SQL Server: CREATE UNIQUE INDEX τερματίστηκε επειδή βρέθηκε διπλό κλειδί για το αναγνωριστικό ευρετηρίου
ή
Δεν είναι δυνατή η εισαγωγή διπλότυπης γραμμής κλειδιού στο αντικείμενο
ή
Έγινε προσπάθεια εισαγωγής μιας μη μοναδικής τιμής σε ένα μοναδικό ευρετήριο.

Λύσεις:

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

2. 1) Χρησιμοποιώντας το Management Studio 2005, δημιούργησα ένα σενάριο δημιουργίας για να δημιουργήσω ένα ευρετήριο, το οποίο ήταν buggy, και το αποθήκευσα σε ένα αρχείο.
2) Καταργήθηκε με μη αυτόματο τρόπο το jamb index από τον πίνακα _AccumRgTn19455
3) Ξεκίνησε ένα αίτημα like
Κωδικός SQL S_elect count(*), index_fields
FR OM AccumRgTn19455
GROUP BY index_field
ΕΧΟΝΤΑΣ μέτρηση(*)>1
Αφού σκοτώθηκε το ευρετήριο, εμφανίστηκαν 15 διπλές εγγραφές, αν και πριν από το βήμα 2 το ερώτημα δεν επέστρεψε τίποτα.
4) Πέρασα όλες τις καταχωρήσεις και καθάρισα με μη αυτόματο τρόπο τα διπλότυπα. Στην πραγματικότητα, χρησιμοποίησα επίσης την επεξεργασία "Δομή Αναφοράς" για να καταλάβω με τι είχα να κάνω. Αποδείχθηκε ότι ο πίνακας _AccumRgTn19455 αποθηκεύει το μητρώο συσσώρευσης «Εξαγωγή προϊόντος (φορολογική λογιστική)». Επίσης, ασχολήθηκα με ερωτήματα sql, εντόπισα 15 μη μοναδικά έγγραφα και αφού ολοκληρώθηκαν όλες οι ενέργειες, έλεγξα στο 1C ότι αυτά τα έγγραφα επεξεργάζονταν κανονικά, χωρίς σφάλματα. Φυσικά, δεν πρέπει να καθαρίζετε απλά τραπέζια τυχαία: είναι σημαντικό να κατανοήσετε τι καθαρίζεται και πώς μπορεί να βγει.
5) Ξεκίνησε ένα αίτημα για τη δημιουργία ευρετηρίου, το οποίο αποθηκεύτηκε σε ένα αρχείο.
6) Άλλαξε τη βάση δεδομένων σε λειτουργία ενός χρήστη και ξεκίνησε το dbcc checkdb - αυτή τη φορά δεν δημιουργήθηκαν σφάλματα.
7) Επανήλθε η βάση στη λειτουργία ενός χρήστη.
Αυτό είναι όλο... το πρόβλημα ξεπερνιέται. Λοιπόν, πίσω στο 1C ξεκίνησα το "Testing and Correction", όλα πήγαν καλά και εκεί, σταμάτησα να παραπονιέμαι για το μη μοναδικό ευρετήριο.

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

1. Εάν το πρόβλημα είναι η φόρτωση της βάσης δεδομένων, τότε:
1.1. Εάν φορτώνετε (χρησιμοποιώντας ένα αρχείο dt) σε μια βάση δεδομένων MS SQL Server, τότε κατά τη δημιουργία της βάσης δεδομένων, πριν τη φόρτωση, καθορίστε τη μετατόπιση ημερομηνίας - 2000.
Εάν η βάση δεδομένων έχει ήδη δημιουργηθεί με μετατόπιση 0, τότε δημιουργήστε μια νέα με 2000.

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

1.3. Εάν δεν υπάρχει έκδοση αρχείου, δοκιμάστε να φορτώσετε από το DT σε μια έκδοση πελάτη-διακομιστή με DB2 (η οποία είναι λιγότερο απαιτητική για τη μοναδικότητα) και, στη συνέχεια, εκτελέστε Test and Correction, καθώς και Configuration - Verify Configuration - Check the Logical Integrity of Configuration + Αναζήτηση για μη έγκυρες αναφορές.

1.4. Για να εντοπίσετε το πρόβλημα, μπορείτε να προσδιορίσετε τα δεδομένα του αντικειμένου του οποίου η φόρτωση απέτυχε. Για να το κάνετε αυτό, πρέπει να ενεργοποιήσετε την ανίχνευση στο βοηθητικό πρόγραμμα Profiler κατά την εκκίνηση ή να ενεργοποιήσετε την εγγραφή στο αρχείο καταγραφής συμβάντων της διαδικασίας DBMSSQL και EXCP.

2. Εάν το πρόβλημα της μη μοναδικότητας παρουσιαστεί ενώ οι χρήστες εργάζονται:

2.1. Βρείτε το προβληματικό αίτημα χρησιμοποιώντας τη μέθοδο της παραγράφου 1.4.

2.1.2. Μερικές φορές παρουσιάζεται ένα σφάλμα κατά την εκτέλεση ερωτημάτων, για παράδειγμα:

Αυτό το σφάλμα προκύπτει λόγω του γεγονότος ότι στη μονάδα μητρώου συσσώρευσης «Χρόνος εργασίας υπαλλήλων οργανισμών» στη διαδικασία «Επανυπολογισμοί εγγραφής», η λέξη υπηρεσίας «ΔΙΑΦΟΡΕΤΙΚΟ» δεν περιλαμβάνεται στο αίτημα.
Κωδικός 1C v 8.x Δηλ. θα πρέπει να είναι:
Αίτημα = Νέο αίτημα(
«ΕΠΙΛΕΞΤΕ ΔΙΑΦΟΡΑ
| Βασικό.Ατομικό,
. . . . .
Στις τελευταίες εκδόσεις των ZUP και UPP, το σφάλμα δεν παρουσιάζεται, γιατί λέει "ΔΙΑΦΟΡΕΤΙΚΟ".

2.2. Αφού βρείτε το προβληματικό ευρετήριο από την προηγούμενη παράγραφο, πρέπει να βρείτε μια μη μοναδική εγγραφή.
2.2.1. Σενάριο "Fish" για αναγνώριση μη μοναδικών εγγραφών χρησιμοποιώντας SQL:
Κωδικός SQL S_elect COUNT(*) Μετρητής,<перечисление всех полей соответствующего индекса>από<имя таблицы>
ΟΜΑΔΑ ΑΠΟ<перечисление всех полей соответствующего индекса>
ΕΧΟΝΤΑΣ Μετρητής > 1

2.2.2 Παράδειγμα. Το ευρετήριο στο σφάλμα ονομάζεται "_Document140_VT1385_IntKeyIndNG".
Λίστα πεδίων πίνακα:
_Document140_IDRRef, _KeyField, _LineNo1386, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393Ref, _Fld139,Fld _Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE2Ref, _Fld22261_TYPE2Ref, _6Fld22261_TYPE2Ref, _6Fld
Πριν εκτελέσετε την παρακάτω διαδικασία, δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων σας.
Εκτέλεση στο MS SQL Server Query Analyzer:
Κωδικός SQL S_elect count(*), _Document140_IDRRef, _KeyField
από το _Document140_VT1385
ομάδα από _Document140_IDRRef, _KeyField
έχοντας μέτρηση(*) > 1
Χρησιμοποιήστε το για να μάθετε τις τιμές των στηλών _Document140_IDRRef, _KeyField, διπλών εγγραφών (αναγνωριστικό, κλειδί).

Χρησιμοποιώντας το αίτημα:
Κωδικός SQL S_elect *
από το _Document140_VT1385
όπου _Document140_IDRRef = id1 και _KeyField = κλειδί1 ή _Document140_IDRRef = id2 και _KeyField = κλειδί2 ή ...
κοιτάξτε τις τιμές των άλλων στηλών των διπλών εγγραφών.
Εάν και οι δύο καταχωρήσεις έχουν σημαντικές τιμές και οι τιμές είναι διαφορετικές, τότε αλλάξτε την τιμή _KeyField ώστε να είναι μοναδική. Για να το κάνετε αυτό, καθορίστε τη μέγιστη κατειλημμένη τιμή του _KeyField (keymax):
Κωδικός SQL S_elect max(_KeyField)
από το _Document140_VT1385
wh ere _Document140_IDRRef = id1
Αντικαταστήστε την τιμή _KeyField σε μία από τις διπλότυπες εγγραφές με τη σωστή:
Ο κώδικας SQL ενημερώθηκε _Document140_VT1385
ορίστε _KeyField = keymax + 1

Εδώ _LineNo1386 = είναι μια πρόσθετη συνθήκη που σας επιτρέπει να επιλέξετε μία από τις δύο επαναλαμβανόμενες εγγραφές.

Εάν μία (ή και οι δύο) από τις διπλότυπες καταχωρήσεις έχει προφανώς εσφαλμένο νόημα, τότε θα πρέπει να αφαιρεθεί:
Διαγραφή κώδικα SQL από _Document140_VT1385
wh ere _Document140_IDRRef = id1 και _LineNo1386 = lineno1
Εάν οι διπλές καταχωρήσεις έχουν τις ίδιες τιμές σε όλες τις στήλες, τότε πρέπει να αφήσετε μία από αυτές:
Κωδικός SQL S_elect distinct *
στο #tmp1
from_Document140_VT1385

Διαγραφή από _Document140_VT1385
wh ere _Document140_IDRRef = id1 και _KeyField = key1

I_insert στο _Document140_VT1385
S_elect #tmp1

Πίνακας D_rop #tmp1

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

2.2.3. Δεύτερο παράδειγμα:
Κωδικός SQL S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
ΑΠΟ _Αναφορά8_
GROUP BY _IDRRef, _Description
ΕΧΟΝΤΑΣ (COUNT(*) > 1)

2.3.4 Ένα παράδειγμα προσδιορισμού μη μοναδικών εγγραφών χρησιμοποιώντας ένα ερώτημα 1C:Enterprise:
Κωδικός 1C v 8.x SELECT Directory.Link
FROM Directory.Directory AS Directory
ΟΜΑΔΑ ΑΝΑ Κατάλογο.Σύνδεσμος
ΠΟΥ ΕΧΕΙ ΠΟΣΟΤΗΤΑ(*) > 1

Πληροφορίες που λαμβάνονται από τον ιστότοπο

Έχετε λάβει ένα μήνυμα που περιέχει τις γραμμές:
Microsoft OLE DB Provider για SQL Server: CREATE UNIQUE INDEX τερματίστηκε επειδή βρέθηκε διπλό κλειδί για το αναγνωριστικό ευρετηρίου
ή
Δεν είναι δυνατή η εισαγωγή διπλότυπης γραμμής κλειδιού στο αντικείμενο
ή
Έγινε προσπάθεια εισαγωγής μιας μη μοναδικής τιμής σε ένα μοναδικό ευρετήριο.

Λύσεις:

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

2. 1) Χρησιμοποιώντας το Management Studio 2005, δημιούργησα ένα σενάριο δημιουργίας για να δημιουργήσω ένα ευρετήριο, το οποίο ήταν buggy, και το αποθήκευσα σε ένα αρχείο.
2) Καταργήθηκε με μη αυτόματο τρόπο το jamb index από τον πίνακα _AccumRgTn19455
3) Ξεκίνησε ένα αίτημα like
Κωδικός SQL S_elect count(*), index_fields
ΑΠΟ AccumRgTn19455
GROUP BY index_field
ΕΧΟΝΤΑΣ μέτρηση(*)>1
Αφού σκοτώθηκε το ευρετήριο, εμφανίστηκαν 15 διπλές εγγραφές, αν και πριν από το βήμα 2 το ερώτημα δεν επέστρεψε τίποτα.
4) Πέρασα όλες τις καταχωρήσεις και καθάρισα με μη αυτόματο τρόπο τα διπλότυπα. Στην πραγματικότητα, χρησιμοποίησα επίσης την επεξεργασία "Δομή Αναφοράς" για να καταλάβω με τι είχα να κάνω. Αποδείχθηκε ότι ο πίνακας _AccumRgTn19455 αποθηκεύει το μητρώο συσσώρευσης «Εξαγωγή προϊόντος (φορολογική λογιστική)». Επίσης, ασχολήθηκα με τα ερωτήματα sql, εντόπισα 15 μη μοναδικά έγγραφα και αφού ολοκληρώθηκαν όλες οι ενέργειες, έλεγξα στο 1C ότι αυτά τα έγγραφα επεξεργάζονταν κανονικά, χωρίς σφάλματα. Φυσικά, δεν πρέπει να καθαρίζετε απλά τραπέζια τυχαία: είναι σημαντικό να κατανοήσετε τι καθαρίζεται και πώς μπορεί να βγει.
5) Ξεκίνησε ένα αίτημα για τη δημιουργία ευρετηρίου, το οποίο αποθηκεύτηκε σε ένα αρχείο.
6) Άλλαξε τη βάση δεδομένων σε λειτουργία ενός χρήστη και ξεκίνησε το dbcc checkdb - αυτή τη φορά δεν δημιουργήθηκαν σφάλματα.
7) Επιστροφή της βάσης στη λειτουργία ενός χρήστη.
Αυτό είναι όλο... το πρόβλημα ξεπερνιέται. Λοιπόν, πίσω στο 1C ξεκίνησα το "Testing and Correction", όλα πήγαν καλά και εκεί, σταμάτησα να παραπονιέμαι για το μη μοναδικό ευρετήριο.

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

1. Εάν το πρόβλημα είναι η φόρτωση της βάσης δεδομένων, τότε:
1.1. Εάν φορτώνετε (χρησιμοποιώντας ένα αρχείο dt) σε μια βάση δεδομένων MS SQL Server, τότε κατά τη δημιουργία της βάσης δεδομένων, πριν τη φόρτωση, καθορίστε τη μετατόπιση ημερομηνίας - 2000.
Εάν η βάση δεδομένων έχει ήδη δημιουργηθεί με μετατόπιση 0, τότε δημιουργήστε μια νέα με 2000.

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

1.3. Εάν δεν υπάρχει έκδοση αρχείου, δοκιμάστε να φορτώσετε από το DT σε μια έκδοση πελάτη-διακομιστή με DB2 (η οποία είναι λιγότερο απαιτητική για τη μοναδικότητα) και, στη συνέχεια, εκτελέστε Test and Correction, καθώς και Configuration - Verify Configuration - Check the Logical Integrity of Configuration + Αναζήτηση για μη έγκυρες αναφορές.

1.4. Για να εντοπίσετε το πρόβλημα, μπορείτε να προσδιορίσετε τα δεδομένα του αντικειμένου του οποίου η φόρτωση απέτυχε. Για να το κάνετε αυτό, πρέπει να ενεργοποιήσετε την ανίχνευση στο βοηθητικό πρόγραμμα Profiler κατά την εκκίνηση ή να ενεργοποιήσετε την εγγραφή στο αρχείο καταγραφής συμβάντων της διαδικασίας DBMSSQL και EXCP.

2. Εάν το πρόβλημα της μη μοναδικότητας παρουσιαστεί ενώ οι χρήστες εργάζονται:

2.1. Βρείτε το προβληματικό αίτημα χρησιμοποιώντας τη μέθοδο της παραγράφου 1.4.

2.1.2. Μερικές φορές παρουσιάζεται ένα σφάλμα κατά την εκτέλεση ερωτημάτων, για παράδειγμα:

Αυτό το σφάλμα προκύπτει λόγω του γεγονότος ότι στη μονάδα μητρώου συσσώρευσης «Χρόνος εργασίας υπαλλήλων οργανισμών» στη διαδικασία «Επανυπολογισμοί εγγραφής», η λέξη υπηρεσίας «ΔΙΑΦΟΡΕΤΙΚΟ» δεν περιλαμβάνεται στο αίτημα.
Κωδικός 1C v 8.x Δηλ. θα πρέπει να είναι:
Αίτημα = Νέο αίτημα(
«ΕΠΙΛΕΞΤΕ ΔΙΑΦΟΡΑ
| Βασικό.Ατομικό,
. . . . .
Στις τελευταίες εκδόσεις των ZUP και UPP, το σφάλμα δεν παρουσιάζεται, γιατί λέει "ΔΙΑΦΟΡΕΤΙΚΟ".

2.2. Αφού βρείτε το προβληματικό ευρετήριο από την προηγούμενη παράγραφο, πρέπει να βρείτε μια μη μοναδική εγγραφή.
2.2.1. Σενάριο "Fish" για αναγνώριση μη μοναδικών εγγραφών χρησιμοποιώντας SQL:
Κωδικός SQL S_elect COUNT(*) Μετρητής,<перечисление всех полей соответствующего индекса>από<имя таблицы>
ΟΜΑΔΑ ΑΠΟ<перечисление всех полей соответствующего индекса>
ΕΧΟΝΤΑΣ Μετρητής > 1

2.2.2 Παράδειγμα. Το ευρετήριο στο σφάλμα ονομάζεται "_Document140_VT1385_IntKeyIndNG".
Λίστα πεδίων πίνακα:
_Document140_IDRRef, _KeyField, _LineNo1386, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393Ref, _Fld139,Fld _Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE2Ref, _Fld22261_TYPE2Ref, _6Fld22261_TYPE2Ref, _6Fld
Πριν εκτελέσετε την παρακάτω διαδικασία, δημιουργήστε αντίγραφα ασφαλείας της βάσης δεδομένων σας.
Εκτέλεση στο MS SQL Server Query Analyzer:
Κωδικός SQL S_elect count(*), _Document140_IDRRef, _KeyField
from_Document140_VT1385
ομάδα από _Document140_IDRRef, _KeyField
έχοντας μέτρηση(*) > 1
Χρησιμοποιήστε το για να μάθετε τις τιμές των στηλών _Document140_IDRRef, _KeyField, διπλών εγγραφών (αναγνωριστικό, κλειδί).

Χρησιμοποιώντας το αίτημα:
Κωδικός SQL S_elect *
from_Document140_VT1385
ή _Document140_IDRRef = id2 και _KeyField = key2 ή ...
κοιτάξτε τις τιμές των άλλων στηλών των διπλών εγγραφών.
Εάν και οι δύο καταχωρήσεις έχουν σημαντικές τιμές και οι τιμές είναι διαφορετικές, τότε αλλάξτε την τιμή _KeyField ώστε να είναι μοναδική. Για να το κάνετε αυτό, καθορίστε τη μέγιστη κατειλημμένη τιμή του _KeyField (keymax):
Κωδικός SQL S_elect max(_KeyField)
from_Document140_VT1385
όπου _Document140_IDRRef = id1
Αντικαταστήστε την τιμή _KeyField σε μία από τις διπλότυπες εγγραφές με τη σωστή:
Ενημέρωση κώδικα SQL _Document140_VT1385
ορίστε _KeyField = keymax + 1
Εδώ _LineNo1386 = είναι μια πρόσθετη συνθήκη που σας επιτρέπει να επιλέξετε μία από τις δύο επαναλαμβανόμενες εγγραφές.

Εάν μία (ή και οι δύο) από τις διπλότυπες καταχωρήσεις έχει προφανώς εσφαλμένο νόημα, τότε θα πρέπει να αφαιρεθεί:
Διαγραφή κώδικα SQL από _Document140_VT1385
όπου _Document140_IDRRef = id1 και _LineNo1386 = lineno1
Εάν οι διπλές καταχωρήσεις έχουν τις ίδιες τιμές σε όλες τις στήλες, τότε πρέπει να αφήσετε μία από αυτές:
Κωδικός SQL S_elect distinct *
στο #tmp1
from_Document140_VT1385
όπου _Document140_IDRRef = id1 και _KeyField = κλειδί1

Διαγραφή από _Document140_VT1385
όπου _Document140_IDRRef = id1 και _KeyField = κλειδί1

I_insert στο _Document140_VT1385
S_elect #tmp1

Πίνακας D_rop #tmp1

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

2.2.3. Δεύτερο παράδειγμα:
Κωδικός SQL S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
ΑΠΟ _Αναφορά8_
GROUP BY _IDRRef, _Description
ΕΧΟΝΤΑΣ (COUNT(*) > 1)

2.3.4 Ένα παράδειγμα προσδιορισμού μη μοναδικών εγγραφών χρησιμοποιώντας ένα ερώτημα 1C:Enterprise:
Κωδικός 1C v 8.x SELECT Directory.Link
FROM Directory.Directory AS Directory
ΟΜΑΔΑ ΑΝΑ Κατάλογο.Σύνδεσμος
ΠΟΥ ΕΧΕΙ ΠΟΣΟΤΗΤΑ(*) > 1




Μπλουζα