Pokušaj umetnuti jedinstvenu vrijednost u jedinstveni indeks. Pokušaj umetnuti jedinstvenu vrijednost u jedinstveni indeks za uklanjanje nesvjesnih indeksa u datoteci od 1C 8

Upoznali ste poruku koja sadrži linije:
Microsoft Ole DB davatelj za SQL poslužitelj: Stvoriti jedinstveni indeks prekinut jer je pronađen dvostruki ključ za indeks ID
ili
Ne mogu i_nsert duplicirati ključ u objektu
ili
Pokušaj umetnuti jedinstvenu vrijednost u jedinstveni indeks.

Opcije rješenja:

1. U SQL Server upravljanju studiju, fizički uništiti neuspjeli indeks (u mom slučaju to je bio indeks na tablici ishoda računovodstvenog registra). U 1 ° C, na zaslonu ćemo dokumente za neuspjeh. U načinu testiranja i ispravljanja stavljamo dunk reindexing tablice + ponovno izračunavanje rezultata. 1c rekonstruira indeks bez pogreške. Imamo prethodno zapanjene dokumente.

2. 1) Korištenje Upravljačkog studija 2005 generira stvoriti skriptu za stvaranje indeksa koji je bio lug i spreman u datoteku.
2) Ručno je ubio indeks jakne od tablice _Accumrgtn19455
3) Pokrenuo je zahtjev za prikaz
Kod SQL s_elect count (*), polja_index
Od accumrgtn19455.
Grupa po područjima_index.
S brojem (*)\u003e 1
Nakon što je indeks ubijen, nestao sam 15 dupliciranih zapisa, iako prije izvršenja stavka 2., nisam ništa vratio.
4) Pregledali su sve zapise i ručno očišćene duplikate. Zapravo, koristio sam i obradu "strukture izvješća" kako bih razumio o čemu se bavim. Ispostavilo se da tablica _Accumrgtn19455 pohranjuje u registar akumulacije "proizvodnja (porezno računovodstvo)". Još sam iskopao SQL zahtjeve, otkrio sam 15 poslanih dokumenata i nakon završetka svih djela koje sam provjerio u 1 ° C da se ti dokumenti normalno provode, bez pogrešaka. Samo očistite stol namaum, naravno, nije vrijedno toga: važno je razumjeti da se očisti i što se može pretvoriti u.
5) Pokrenuo je zahtjev za stvaranje indeksa koji je spremljen u datoteci.
6) Preveo je bazu podataka u jedan korisnički način i pokrenut DBCC checkdb - ovaj put nije izdana niti jedna pogreška.
7) Prenesite bazu podataka natrag u jedan korisnički način.
Sve ... problem je poražen. Pa, u 1c je lansirao "testiranje i ispravak", sve je bilo u redu, bilo je normalno, zaustavljeno psovanje na ne-jedinstveni indeks.

3. Ako neželjenost leži u datumima s nultim vrijednostimaProblem je riješen stvaranjem baze podataka s parametrom premještanja do 2000. godine.

1. Ako je problem učitavanja baze podataka, onda:
1.1. Ako napravite preuzimanje (koristite DT datoteku) na MS SQL Server bazu podataka, onda prilikom stvaranja baze prije preuzimanja, navedite offset datuma - 2000.
Ako je baza već izrađena s pomakom 0, zatim stvorite novi od 2000. godine.

1.2. Ako imate mogućnost rada s bazom podataka u datoteci, testirat ćete i popraviti, kao i konfiguraciju - konfiguracijsku provjeru - provjeravanje logičke integritet konfiguracije + potražite netočne veze.

1.3. Ako ne postoji verzija datoteke, pokušajte preuzeti s dt na klijent-poslužiteljsku verziju s DB2 (što je manje zahtjevno za jedinstvenost), a zatim izvršite testiranje i pričvršćivanje, kao i konfiguracijsku provjeru - provjeravanje integriteta logičke konfiguracije + pretraživanje za netočne veze.

1.4. Da biste lokalizirali problem, možete definirati podatke o objektu, učitavanje koje nije uspjelo. Da biste to učinili, morate omogućiti trag u uslužnom programu Profiler tijekom preuzimanja ili omogućiti snimanje u DBMSSQL i Dnevnik APCP tehnologija.

2. Ako se problem neugodnosti manifestira dok korisnici:

2.1. Pronađi s metodom iz stavka 1.4. Zahtjev problema.

2.1.2. Ponekad se pogreška pojavljuje tijekom izvršenja zahtjeva, na primjer:

Ta se pogreška pojavljuje zbog činjenice da se u registru registra modula "Radno vrijeme zaposlenika organizacija" u postupku "Registriraj" u zahtjevu ne košta službena riječ "drugačiji".
Kod 1c v 8.x tj. Mora biti:
Zahtjev \u003d novi zahtjev (
"Odaberite različite
| Glavni prenijeli,
. . . . .
U najnovijim objavljenim izdanjima ZUP-a i UPP-a, pogreška se ne događa jer Postoji "drugačiji".

2.2. Nakon pronalaženja indeksa problema iz prethodne stavke potrebno je pronaći ne-jedinstveni unos.
2.2.1. "Fish" skripta za određivanje neovisnih unosa pomoću SQL:
Cought sql s_elect count (*) brojač,<перечисление всех полей соответствующего индекса> iz.<имя таблицы>
Grupi.<перечисление всех полей соответствующего индекса>
S counter\u003e 1

2.2.2 Primjer. Indeks u pogrešci naziva se "_document140_vt1385_intKeyindng".
Popis tablica polja:
_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_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
Prije obavljanja sljedećeg postupka napravite backup Baza podataka.
Pokreni u MS SQL Server Upit analizacije:
SQL s_elect count (*), _dokument140_idref, _keyfield
od _dokumenta140_vt1385.
Grupa od _dokumenta140_idref, _keyfield
S brojem (*)\u003e 1
Uz to, saznajte vrijednosti _dokumenta140_idref, _keyfield stupca, dupliciranih unosa (ID, ključ).

Koristeći upit:
SQL s_elect * kod *
od _dokumenta140_vt1385.
ili _document140_idref \u003d ID2 i _Keyfield \u003d Key2 ili ...
Pogledajte vrijednosti drugih stupaca duplikata zapisa.
Ako oba evidencije imaju smislene vrijednosti i ove vrijednosti su različite, onda ispravite vrijednost _keyfield na jedinstvenom. Da biste to učinili, odredite maksimalnu vrijednost zauzeta vrijednost _keyfield (keymax):
SQL s_elect max (_keyfield) kod
od _dokumenta140_vt1385.
Gdje je _dokument140_idref \u003d id1
Zamijenite vrijednost _Keyfield u jednom od repetitivnih zapisa na ispravan:
Kod SQL ažuriranje _document140_vt1385
Postavite _Keyfield \u003d keymax + 1
Ovdje _lineno1386 \u003d - dodatno stanjekoji vam omogućuje da odaberete jedan od dva ponavljanja unosa.

Ako je jedan (ili oboje) iz repetitivnih zapisa je očito netočna vrijednost, Onda morate izbrisati:
SQL Brisanje iz _Document140_VT1385 kod
Gdje je _document140_idref \u003d id1 i _lineno1386 \u003d lineno1
Ako ponavljajuće zapise imaju iste vrijednosti u svim stupcima, onda morate ostaviti:
Kod SQL s_elect različit *
U # tmp1
od _dokumenta140_vt1385.
Gdje je _document140_idref \u003d ID1 i _Keyfield \u003d Key1

Obriši iz _Document140_vt1385.
Gdje je _document140_idref \u003d ID1 i _Keyfield \u003d Key1

I_nsert u _dokument140_vt1385
S_elect # tmp1

D_ROP tablica # TMP1

Opisani postupak mora se izvesti za svaki par ponavljajućih zapisa.

2.2.3. Drugi primjer:
Kod SQL s_elect count (*) kao expr2, _idref kao expr1, _deskricije
Od _referenca8_
Grupa po _IDRREF-u, _Description
Imati (broj (*)\u003e 1)

2.3.4 Primjer određivanja neovisnih unosa pomoću zahtjeva 1c: Enterprise:
Kod 1C v 8.x Odaberite priručničku vezu
Iz Priručnika. Priručnik kao imenik
Grupa na referentnoj knjizi
S količinom (*)\u003e 1

Upoznali ste poruku koja sadrži linije:
Microsoft OLE DB davatelj za SQL Server: Stvorite jedinstveni indeks prekinut jer je pronađen dvostruki ključ za indeks ID
ili
Ne mogu i_nsert duplicirati ključ u objektu
ili
Pokušaj umetnuti jedinstvenu vrijednost u jedinstveni indeks.

Opcije rješenja:

1. U SQL Server upravljanju studiju, fizički uništiti neuspjeli indeks (u mom slučaju to je bio indeks na tablici ishoda računovodstvenog registra). U 1 ° C, na zaslonu ćemo dokumente za neuspjeh. U načinu testiranja i ispravljanja stavljamo dunk reindexing tablice + ponovno izračunavanje rezultata. 1c rekonstruira indeks bez pogreške. Imamo prethodno zapanjene dokumente.

2. 1) Korištenje Upravljačkog studija 2005 generira stvoriti skriptu za stvaranje indeksa koji je bio lug i spreman u datoteku.
2) Ručno je ubio indeks jakne od tablice _Accumrgtn19455
3) Pokrenuo je zahtjev za prikaz
Kod SQL s_elect count (*), polja_index
Od accumrgtn19455.
Grupa po područjima_index.
S brojem (*)\u003e 1
Nakon što je indeks ubijen, nestao sam 15 dupliciranih zapisa, iako prije izvršenja stavka 2., nisam ništa vratio.
4) Pregledali su sve zapise i ručno očišćene duplikate. Zapravo, koristio sam i obradu "strukture izvješća" kako bih razumio o čemu se bavim. Ispostavilo se da tablica _Accumrgtn19455 pohranjuje u registar akumulacije "proizvodnja (porezno računovodstvo)". Još sam iskopao SQL zahtjeve, otkrio sam 15 poslanih dokumenata i nakon završetka svih djela koje sam provjerio u 1 ° C da se ti dokumenti normalno provode, bez pogrešaka. Samo očistite stol namaum, naravno, nije vrijedno toga: važno je razumjeti da se očisti i što se može pretvoriti u.
5) Pokrenuo je zahtjev za stvaranje indeksa koji je spremljen u datoteci.
6) Preveo je bazu podataka u jedan korisnički način i pokrenut DBCC checkdb - ovaj put nije izdana niti jedna pogreška.
7) Prenesite bazu podataka natrag u jedan korisnički način.
Sve ... problem je poražen. Pa, u 1c je lansirao "testiranje i ispravak", sve je bilo u redu, bilo je normalno, zaustavljeno psovanje na ne-jedinstveni indeks.

3. Ako neželjenost leži u datumima s nultim vrijednostimaProblem je riješen stvaranjem baze podataka s parametrom premještanja do 2000. godine.

1. Ako je problem učitavanja baze podataka, onda:
1.1. Ako napravite preuzimanje (koristite DT datoteku) na MS SQL Server bazu podataka, onda prilikom stvaranja baze prije preuzimanja, navedite offset datuma - 2000.
Ako je baza već izrađena s pomakom 0, zatim stvorite novi od 2000. godine.

1.2. Ako imate mogućnost rada s bazom podataka u datoteci, testirat ćete i popraviti, kao i konfiguraciju - konfiguracijsku provjeru - provjeravanje logičke integritet konfiguracije + potražite netočne veze.

1.3. Ako ne postoji verzija datoteke, pokušajte preuzeti s dt na klijent-poslužiteljsku verziju s DB2 (što je manje zahtjevno za jedinstvenost), a zatim izvršite testiranje i pričvršćivanje, kao i konfiguracijsku provjeru - provjeravanje integriteta logičke konfiguracije + pretraživanje za netočne veze.

1.4. Da biste lokalizirali problem, možete definirati podatke o objektu, učitavanje koje nije uspjelo. Da biste to učinili, morate omogućiti trag u uslužnom programu Profiler tijekom preuzimanja ili omogućiti snimanje u DBMSSQL i Dnevnik APCP tehnologija.

2. Ako se problem neugodnosti manifestira dok korisnici:

2.1. Pronađi s metodom iz stavka 1.4. Zahtjev problema.

2.1.2. Ponekad se pogreška pojavljuje tijekom izvršenja zahtjeva, na primjer:

Ta se pogreška pojavljuje zbog činjenice da se u registru registra modula "Radno vrijeme zaposlenika organizacija" u postupku "Registriraj" u zahtjevu ne košta službena riječ "drugačiji".
Kod 1c v 8.x tj. Mora biti:
Zahtjev \u003d novi zahtjev (
"Odaberite različite
| Glavni prenijeli,
. . . . .
U najnovijim objavljenim izdanjima ZUP-a i UPP-a, pogreška se ne događa jer Postoji "drugačiji".

2.2. Nakon pronalaženja indeksa problema iz prethodne stavke potrebno je pronaći ne-jedinstveni unos.
2.2.1. "Fish" skripta za određivanje neovisnih unosa pomoću SQL:
Cought sql s_elect count (*) brojač,<перечисление всех полей соответствующего индекса> iz.<имя таблицы>
Grupi.<перечисление всех полей соответствующего индекса>
S counter\u003e 1

2.2.2 Primjer. Indeks u pogrešci naziva se "_document140_vt1385_intKeyindng".
Popis tablica polja:
_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_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
Prije izvođenja sljedećeg postupka napravite sigurnosnu kopiju baze podataka.
Pokreni u MS SQL Server Upit analizacije:
SQL s_elect count (*), _dokument140_idref, _keyfield
od _dokumenta140_vt1385.
Grupa od _dokumenta140_idref, _keyfield
S brojem (*)\u003e 1
Uz to, saznajte vrijednosti _dokumenta140_idref, _keyfield stupca, dupliciranih unosa (ID, ključ).

Koristeći upit:
SQL s_elect * kod *
od _dokumenta140_vt1385.
ili _document140_idref \u003d ID2 i _Keyfield \u003d Key2 ili ...
Pogledajte vrijednosti drugih stupaca duplikata zapisa.
Ako oba evidencije imaju smislene vrijednosti i ove vrijednosti su različite, onda ispravite vrijednost _keyfield na jedinstvenom. Da biste to učinili, odredite maksimalnu vrijednost zauzeta vrijednost _keyfield (keymax):
SQL s_elect max (_keyfield) kod
od _dokumenta140_vt1385.
Gdje je _dokument140_idref \u003d id1
Zamijenite vrijednost _Keyfield u jednom od repetitivnih zapisa na ispravan:
Kod SQL ažuriranje _document140_vt1385
Postavite _Keyfield \u003d keymax + 1
Ovdje _lineno1386 \u003d - dodatno stanje koje vam omogućuje da odaberete jedan od dva repetitivna zapisa.

Ako jedan (ili oboje) iz repetitivnih zapisa ima očitu pogrešnu vrijednost, onda se mora ukloniti:
SQL Brisanje iz _Document140_VT1385 kod
Gdje je _document140_idref \u003d id1 i _lineno1386 \u003d lineno1
Ako ponavljajuće zapise imaju iste vrijednosti u svim stupcima, onda morate ostaviti:
Kod SQL s_elect različit *
U # tmp1
od _dokumenta140_vt1385.
Gdje je _document140_idref \u003d ID1 i _Keyfield \u003d Key1

Obriši iz _Document140_vt1385.
Gdje je _document140_idref \u003d ID1 i _Keyfield \u003d Key1

I_nsert u _dokument140_vt1385
S_elect # tmp1

D_ROP tablica # TMP1

Opisani postupak mora se izvesti za svaki par ponavljajućih zapisa.

2.2.3. Drugi primjer:
Kod SQL s_elect count (*) kao expr2, _idref kao expr1, _deskricije
Od _referenca8_
Grupa po _IDRREF-u, _Description
Imati (broj (*)\u003e 1)

2.3.4 Primjer određivanja neovisnih unosa pomoću zahtjeva 1c: Enterprise:
Kod 1C v 8.x Odaberite priručničku vezu
Iz Priručnika. Priručnik kao imenik
Grupa na referentnoj knjizi
S količinom (*)\u003e 1

Ovaj članak će opisati što učiniti ako, kada radite s 1C: poduzeće 8.1, upoznali ste poruku koja sadrži linije:

Ne mogu umetnuti duplikat ključa u objektu

Pokušaj umetnuti jedinstvenu vrijednost u jedinstveni indeks.

Koji je indeks?

Indeksi su struktura koja vam omogućuje da izvršavate ubrzani pristup redovima na temelju vrijednosti jednog ili više stupaca.
Indeks sadrži ključeve konstruirane iz jednog ili više stolnih stupaca ili pogleda i pokazivača koji su mapirani na mjesto skladištenja danih podataka.
Indeksi smanjuju količinu podataka koji se moraju smatrati da se vrate rezultirajući set.

Iako je indeks povezan s određenim stupcem (ili stupcima) tablice, još uvijek je neovisni objekt baze podataka.

Indeksi tablice u bazi podataka 1c: Tvrtka je izrađena implicitno prilikom stvaranja objekata konfiguracije, kao i ovih ili drugih objekata konfiguracije.

Fizička bit indeksa u MS SQL Server 2005.

Fizički pohranjeni podaci na stranicama od 8kb, Odmah nakon stvaranja, dok tablica ne indeksi, tablica izgleda kao gomila (hrpa) podataka. Zapisi nemaju određeni nalog za pohranu.
Kada želite pristupiti podacima, SQL Server će proizvesti tablica skeniranja (Skeniranje tablica). SQL Server skenira cijelu tablicu kako biste pronašli željene zapise.
Odavde, osnovne funkcije indeksa postaju razumljive:
- povećanje brzine pristupa podacima
- Podrška za jedinstvenost podataka.

Unatoč prednostima, indeksi također imaju niz nedostataka. Prvi su indeksi zauzeti dodatno mjesto Na disku i B. rAM memorija, Svaki put kada stvorite indeks, zadržavate ključeve u silaznom redoslijedu ili uzlazni, koji mogu imati višestruku strukturu. I više / duže ključ veća veličina indeks. Drugi nedostatak - sporo poslovanje Umetci, ažuriranja i brisanje zapisa.
U MS SQL Server 2005 provodi se nekoliko vrsta indeksa:

  • neclaster indeksi;
  • indeksi klastera (ili klasterizirani);
  • jedinstveni indeksi;
  • indeksi s uključenim stupcima
  • indeksirani pogledi
  • puni tekst

Jedinstveni indeks

Jedinstvenost vrijednosti u indeksiranom stupcu jamče jedinstvene indekse. Ako je dostupan, poslužitelj neće dopustiti da umetnete novu ili promijeni postojeću vrijednost tako da se u stupcu pojavljuju dvije identične vrijednosti kao rezultat ove operacije.
Jedinstveni indeks je vrsta nadgradnje i može se implementirati i za klastera i za neclaster indeks. Jedna tablica može postojati jedan jedinstveni klaster i mnoge jedinstvene neklastenske indekse.
Jedinstveni indeksi treba definirati samo kada je to stvarno potrebno. Kako biste osigurali integritet podataka u stupcu, možete definirati integritet jedinstvenog ili primarnog ključa, a ne pribjeći jedinstvenim indeksima. Korištenje samo kako bi se osiguralo da je integritet podataka neopravdan prostor za potrošnju u bazi podataka. Osim toga, vrijeme procesora se troši na njihovo održavanje.

1c: poduzeće 8.1 počevši od verzije 8.1 aktivno koristi jedinstvene indekse klastera. To znači da prilikom konverzije iz 8.0 ili prijelaza iz 8.1.7 možete dobiti pogrešku undelineous Index.

Ako neugodnost leži u datumima s nultim vrijednostima, problem je riješen stvaranjem baze s parametrom pomak do 2000. godine.

Što učiniti?

1. Ako je problem učitavanja baze podataka, onda:

1.1. Ako napravite preuzimanje (koristite DT datoteku) na MS SQL Server bazu podataka, onda prilikom stvaranja baze prije preuzimanja, navedite offset datuma - 2000.

Ako je baza već izrađena s pomakom 0, zatim stvorite novi od 2000. godine.

1.2. Ako imate mogućnost rada s bazom podataka u datoteci, testirat ćete i popraviti, kao i konfiguraciju - konfiguracijsku provjeru - provjeravanje logičke integritet konfiguracije + potražite netočne veze.

1.3. Ako ne postoji verzija datoteke, pokušajte preuzeti s dt na klijent-poslužiteljsku verziju s DB2 (što je manje zahtjevno za jedinstvenost), a zatim izvršite testiranje i pričvršćivanje, kao i konfiguracijsku provjeru - provjeravanje integriteta logičke konfiguracije + pretraživanje za netočne veze.

1.4. Da biste lokalizirali problem, možete definirati podatke o objektu, učitavanje koje nije uspjelo. Da biste to učinili, morate omogućiti trag u uslužnom programu Profiler tijekom preuzimanja ili uključite zapisnik DBMSSQL i Dnevnik EXPP događaja.

1.5. Ako je čvor dostupan (razmjena planova), obavite razmjenu. Također možete dovršiti razmjenu za izvršenje odredbe 2.3.5.

2. Ako se problem neugodnosti manifestira dok korisnici:

2.1. Pronađi s metodom iz stavka 1.4. Zahtjev problema.

2.1.2. Ponekad se pogreška pojavljuje tijekom izvršenja zahtjeva, na primjer:

Ova pogreška proizlazi zbog činjenice da je u registru akumulacije "radnog vremena zaposlenika organizacija" u registraciji papirnati postupak, službena riječ "drugačiji" nije vrijedno.

Oni. Mora biti:

Zahtjev \u003d novi zahtjev (
"Odaberite različite
| Glavni prenijeli,

U najnovijim objavljenim izdanjima ZUP-a i UPP-a, pogreška se ne događa jer Postoji "drugačiji".

2.2. Nakon pronalaženja indeksa problema iz prethodne stavke potrebno je pronaći ne-jedinstveni unos.

2.2.1. "Fish" skripta za određivanje neovisnih unosa pomoću SQL:
Odaberite brojač brojača (*),<перечисление всех полей соответствующего индекса> iz.<имя таблицы>
Grupi.<перечисление всех полей соответствующего индекса>
S counter\u003e 1

2.2.2 Primjer. Indeks u pogrešci naziva se "_document140_vt1385_intKeyindng".

Popis tablica polja:

Dokument140_idrref, _Keyfield, _lineno1386, _fld1387, _fld1388, _fld1389, _fld1389, _fld1390, _fld1391Rref, _fld1392ref, _fld1393_type, _fld1393_rtref, _fld1393_rref, _fld1394,

Fld1395, _fld1396, _fld1398, _fld1399Rref, _fld22260_type, _fld22260_rtref, _fld22260_rrref, _fld22261_type, _fld22261_rtref, _fld22261_rrref

Prije izvođenja sljedećeg postupka napravite sigurnosnu kopiju baze podataka.
Pokreni u MS SQL Server Upit analizacije:

odaberite Broj (*), _document140_idref, _Keyfield
od _dokumenta140_vt1385.
Grupa od _dokumenta140_idref, _keyfield
S brojem (*)\u003e 1

Uz to, saznajte vrijednosti _dokumenta140_idref, _keyfield stupca, dupliciranih unosa (ID, ključ).

Koristeći upit:

oDABERI *
od _dokumenta140_vt1385.
ili _document140_idref \u003d ID2 i _Keyfield \u003d Key2 ili ...

pogledajte vrijednosti drugih stupaca duplikata zapisa.

Ako oba evidencije imaju smislene vrijednosti i ove vrijednosti su različite, onda ispravite vrijednost _keyfield na jedinstvenom. Da biste to učinili, odredite maksimalnu vrijednost zauzeta vrijednost _keyfield (keymax):

odaberite Max (_Keyfield)
od _dokumenta140_vt1385.
Gdje je _dokument140_idref \u003d id1

Zamijenite vrijednost _Keyfield u jednom od repetitivnih zapisa na ispravan:

ažuriranje _Document140_VT1385
Postavite _Keyfield \u003d keymax + 1

Ovdje _lineno1386 \u003d - dodatno stanje koje vam omogućuje da odaberete jedan od dva repetitivna zapisa.

Ako jedan (ili oboje) iz repetitivnih zapisa ima očitu pogrešnu vrijednost, onda se mora ukloniti:


Gdje je _document140_idref \u003d id1 i _lineno1386 \u003d lineno1

Ako ponavljajuće zapise imaju iste vrijednosti u svim stupcima, onda morate ostaviti:

odaberite različite *
U # tmp1
od _dokumenta140_vt1385.
Gdje je _document140_idref \u003d ID1 i _Keyfield \u003d Key1

obriši iz _Document140_vt1385
Gdje je _document140_idref \u003d ID1 i _Keyfield \u003d Key1

umetnite u _dokument140_vt1385.
Odaberite # TMP1

drop Table # TMP1

Opisani postupak mora se izvesti za svaki par ponavljajućih zapisa.

2.2.3. Drugi primjer:

Odaberite Broj (*) kao Expr2, _Idref kao expr1, _deskricije
Od _referenca8_
Grupa po _IDRREF-u, _Description
Imati (broj (*)\u003e 1)

2.3.4 Primjer određivanja neovisnih unosa pomoću zahtjeva 1c: Enterprise:

ili za računovodstvo

Odabrati
Podquery.period,
Podviđanje .registry,
<измерения>,
Iznos (podviđanje. Nacionalnost zapisa) kao količina
OD
(Odaberite
Hod.Eteriod kao razdoblje,
HoldEest.registry kao tajnik,
<измерения>,
1 kao količina
OD
RegisterBuchelling. Izvor kao trgovina) kao pored

Grupirati
Podquery.period,
Podviđanje .registry,
<измерения>

Imati
Iznos (podqueros.

2.3.5 Napravite indeks DBMS-a nije jedinstveni. Šisp indeks pomoću programa za upravljanje.

2.3.6 Privatni slučaj Prilikom razmjene RBD-a. Pogreška pada na "pomoćne" tablice povezane s izračunom rezultata ili analitike. Na primjer:

Pogreška pri pozivanju metode konteksta (pisanje): Pokušaj umetanja jedinstvene vrijednosti u jedinstveni indeks:
Microsoft Ole DB davatelj usluga za SQL Server: ne može umetnuti duple ključ redak u objektu 'dbo._ccntreged10319' s jedinstvenim indeksom '_Accnt10319_byperid_trnrn'.
Hnjels \u003d 80040e2f, SQLSRVR: Greška stanje \u003d 1, ozbiljnost \u003d e, native \u003d 2601, linija \u003d 1

U tom slučaju, prije preuzimanja isključite korištenje ishoda, preuzmite poruku, omogućite korištenje rezultata i ponovno izračunajte.

Upoznali ste poruku koja sadrži linije:
Microsoft OLE DB davatelj za SQL Server: Stvorite jedinstveni indeks prekinut jer je pronađen dvostruki ključ za indeks ID
ili
Ne mogu i_nsert duplicirati ključ u objektu
ili
Pokušaj umetnuti jedinstvenu vrijednost u jedinstveni indeks.

Opcije rješenja:

1. U SQL Server upravljanju studiju, fizički uništiti neuspjeli indeks (u mom slučaju to je bio indeks na tablici ishoda računovodstvenog registra). U 1 ° C, na zaslonu ćemo dokumente za neuspjeh. U načinu testiranja i ispravljanja stavljamo dunk reindexing tablice + ponovno izračunavanje rezultata. 1c rekonstruira indeks bez pogreške. Imamo prethodno zapanjene dokumente.

2. 1) Korištenje Upravljačkog studija 2005 generira stvoriti skriptu za stvaranje indeksa koji je bio lug i spreman u datoteku.
2) Ručno je ubio indeks jakne od tablice _Accumrgtn19455
3) Pokrenuo je zahtjev za prikaz
Kod SQL s_elect count (*), polja_index
Fr om accumrgtn19455
Grupa po područjima_index.
S brojem (*)\u003e 1
Nakon što je indeks ubijen, nestao sam 15 dupliciranih zapisa, iako prije izvršenja stavka 2., nisam ništa vratio.
4) Pregledali su sve zapise i ručno očišćene duplikate. Zapravo, koristio sam i obradu "strukture izvješća" kako bih razumio o čemu se bavim. Ispostavilo se da tablica _Accumrgtn19455 pohranjuje u registar akumulacije "proizvodnja (porezno računovodstvo)". Još sam iskopao SQL zahtjeve, otkrio sam 15 poslanih dokumenata i nakon završetka svih djela koje sam provjerio u 1 ° C da se ti dokumenti normalno provode, bez pogrešaka. Samo očistite stol namaum, naravno, nije vrijedno toga: važno je razumjeti da se očisti i što se može pretvoriti u.
5) Pokrenuo je zahtjev za stvaranje indeksa koji je spremljen u datoteci.
6) Preveo je bazu podataka u jedan korisnički način i pokrenut DBCC checkdb - ovaj put nije izdana niti jedna pogreška.
7) Prenesite bazu podataka natrag u jedan korisnički način.
Sve ... problem je poražen. Pa, u 1c je lansirao "testiranje i ispravak", sve je bilo u redu, bilo je normalno, zaustavljeno psovanje na ne-jedinstveni indeks.

3. Ako neželjenost leži u datumima s nultim vrijednostimaProblem je riješen stvaranjem baze podataka s parametrom premještanja do 2000. godine.

1. Ako je problem učitavanja baze podataka, onda:
1.1. Ako napravite preuzimanje (koristite DT datoteku) na MS SQL Server bazu podataka, onda prilikom stvaranja baze prije preuzimanja, navedite offset datuma - 2000.
Ako je baza već izrađena s pomakom 0, zatim stvorite novi od 2000. godine.

1.2. Ako imate mogućnost rada s bazom podataka u datoteci, testirat ćete i popraviti, kao i konfiguraciju - konfiguracijsku provjeru - provjeravanje logičke integritet konfiguracije + potražite netočne veze.

1.3. Ako ne postoji verzija datoteke, pokušajte preuzeti s dt na klijent-poslužiteljsku verziju s DB2 (što je manje zahtjevno za jedinstvenost), a zatim izvršite testiranje i pričvršćivanje, kao i konfiguracijsku provjeru - provjeravanje integriteta logičke konfiguracije + pretraživanje za netočne veze.

1.4. Da biste lokalizirali problem, možete definirati podatke o objektu, učitavanje koje nije uspjelo. Da biste to učinili, morate omogućiti trag u uslužnom programu Profiler tijekom preuzimanja ili omogućiti snimanje u DBMSSQL i Dnevnik APCP tehnologija.

2. Ako se problem neugodnosti manifestira dok korisnici:

2.1. Pronađi s metodom iz stavka 1.4. Zahtjev problema.

2.1.2. Ponekad se pogreška pojavljuje tijekom izvršenja zahtjeva, na primjer:

Ta se pogreška pojavljuje zbog činjenice da se u registru registra modula "Radno vrijeme zaposlenika organizacija" u postupku "Registriraj" u zahtjevu ne košta službena riječ "drugačiji".
Kod 1c v 8.x tj. Mora biti:
Zahtjev \u003d novi zahtjev (
"Odaberite različite
| Glavni prenijeli,
. . . . .
U najnovijim objavljenim izdanjima ZUP-a i UPP-a, pogreška se ne događa jer Postoji "drugačiji".

2.2. Nakon pronalaženja indeksa problema iz prethodne stavke potrebno je pronaći ne-jedinstveni unos.
2.2.1. "Fish" skripta za određivanje neovisnih unosa pomoću SQL:
Cought sql s_elect count (*) brojač,<перечисление всех полей соответствующего индекса> Fr om.<имя таблицы>
Grupi.<перечисление всех полей соответствующего индекса>
S counter\u003e 1

2.2.2 Primjer. Indeks u pogrešci naziva se "_document140_vt1385_intKeyindng".
Popis tablica polja:
_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_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
Prije izvođenja sljedećeg postupka napravite sigurnosnu kopiju baze podataka.
Pokreni u MS SQL Server Upit analizacije:
SQL s_elect count (*), _dokument140_idref, _keyfield
Fr om _document140_vt1385
Grupa od _dokumenta140_idref, _keyfield
S brojem (*)\u003e 1
Uz to, saznajte vrijednosti _dokumenta140_idref, _keyfield stupca, dupliciranih unosa (ID, ključ).

Koristeći upit:
SQL s_elect * kod *
Fr om _document140_vt1385
Gdje _Document140_Drerref \u003d ID1 i _Keyfield \u003d Key1 ili _Document140_Idref \u003d ID2 i _Keyfield \u003d Key2 ili ...
Pogledajte vrijednosti drugih stupaca duplikata zapisa.
Ako oba evidencije imaju smislene vrijednosti i ove vrijednosti su različite, onda ispravite vrijednost _keyfield na jedinstvenom. Da biste to učinili, odredite maksimalnu vrijednost zauzeta vrijednost _keyfield (keymax):
SQL s_elect max (_keyfield) kod
Fr om _document140_vt1385
Wh ere _Document140_idref \u003d id1
Zamijenite vrijednost _Keyfield u jednom od repetitivnih zapisa na ispravan:
SQL ADD A_Document140_VT1385 kod
Postavite _Keyfield \u003d keymax + 1

Ovdje _lineno1386 \u003d - dodatno stanje koje vam omogućuje da odaberete jedan od dva repetitivna zapisa.

Ako jedan (ili oboje) iz repetitivnih zapisa ima očitu pogrešnu vrijednost, onda se mora ukloniti:
SQL Brisanje iz _Document140_VT1385 kod
Živa _document140_idref \u003d id1 i _lineno1386 \u003d lineno1
Ako ponavljajuće zapise imaju iste vrijednosti u svim stupcima, onda morate ostaviti:
Kod SQL s_elect različit *
U # tmp1
od _dokumenta140_vt1385.

Obriši iz _Document140_vt1385.
Wh ere _Document140_idref \u003d ID1 i _Keyfield \u003d Key1

I_nsert u _dokument140_vt1385
S_elect # tmp1

D_ROP tablica # TMP1

Opisani postupak mora se izvesti za svaki par ponavljajućih zapisa.

2.2.3. Drugi primjer:
Broj koda SQL s_elect (*) kao expr2, _idref kao expr1, _desfinion
Od _reference8_
Grupa po _IDRREF-u, _Description
Imati (broj (*)\u003e 1)

2.3.4 Primjer određivanja neovisnih unosa pomoću zahtjeva 1c: Enterprise:
Kod 1C v 8.x Odaberite priručničku vezu
Iz Priručnika. Priručnik kao imenik
Grupa na referentnoj knjizi
S količinom (*)\u003e 1

Informacije preuzete s web-lokacije