• Benzersiz olmayan bir dizin nasıl yapılır 1s sql. Benzersiz bir dizine benzersiz olmayan bir değer ekleme girişiminde bulunuldu. indeks nedir

    Şu satırları içeren bir mesajla karşılaştınız:
    SQL Server için Microsoft OLE DB Sağlayıcısı: CREATE UNIQUE INDEX, dizin kimliği için yinelenen bir anahtar bulunduğundan sonlandırıldı
    veya
    Nesnede yinelenen anahtar satırı I_nsert edemiyorum
    veya
    Benzersiz bir dizine benzersiz olmayan bir değer ekleme girişiminde bulunuldu.

    Çözüm seçenekleri:

    1. SQL Server yönetim stüdyosunda, başarısız dizini fiziksel olarak yok ediyoruz (benim durumumda, muhasebe kaydının toplamlar tablosundaki bir dizindi). 1C'de hatalı belgeleri dağıtacağız. Test ve düzeltme modunda, tabloları yeniden indekslemek + toplamları yeniden hesaplamak için onay kutularını işaretleyin. 1C, dizini hatasız olarak yeniden oluşturur. Daha önce başarısız olan belgeleri yürütürüz.

    2. 1) Management Studio 2005'in yardımıyla, bir dizin oluşturmak için hatalı olan bir oluşturma komut dosyası oluşturdum ve onu bir dosyaya kaydettim.
    2) Dizini _AccumRgTn19455 tablosundan manuel olarak öldürdü
    3) gibi bir istek başlattı
    SQL kodu S_elect sayısı(*), index_fields
    AccumRgTn19455'TEN
    GRUP BY index_field
    sayısı(*)>1 olan
    Dizin öldürüldükten sonra 15 yinelenen kayıt görüntüledim, ancak 2. adımdan önce sorgu hiçbir şey döndürmedi.
    4) Tüm kayıtları inceledim ve kopyaları manuel olarak temizledim. Aslında, genel olarak neyle uğraştığımı anlamak için "Rapor Yapısı" işlemeyi de kullandım. _AccumRgTn19455 tablosunun "Ürün çıktısı (vergi muhasebesi)" birikim kaydını sakladığı ortaya çıktı. Ayrıca sql sorgularıyla uğraştım, benzersiz olmayan 15 belge belirledim ve tüm eylemleri tamamladıktan sonra 1C'de bu belgelerin hatasız normal şekilde işlendiğini kontrol ettim. Tabii ki, masaları rastgele temizlemeye değmez: neyin temizlendiğini ve neye dönüşebileceğini anlamak önemlidir.
    5) Bir dosyaya kaydedilen bir dizin oluşturmak için bir sorgu başlattı.
    6) Veritabanını tek kullanıcı moduna geçirdi ve dbcc checkdb'yi çalıştırdı - bu sefer hata yoktu.
    7) Üs tek kullanıcı moduna geri aktarıldı.
    Her şey ... sorun yenildi. Pekala, 1C'de bile "Test ve Düzeltme" başlattım, orada da her şey yolunda gitti, benzersiz olmayan bir endekste küfür etmeyi bıraktı.

    3. Benzersiz olmama, sıfır değerli tarihlerde yatıyorsa, sonra sorun 2000 ofset parametresi ile bir taban oluşturarak çözülür.

    1. Sorun veritabanını yüklemekse, o zaman:
    1.1. MS SQL Server veritabanına yükleme yapıyorsanız (bir dt dosyası kullanarak), veritabanını oluştururken, yüklemeden önce tarih ofseti - 2000'i belirtin.
    Taban zaten ofset 0 ile oluşturulmuşsa, 2000 ile yeni bir tane oluşturun.

    1.2. Dosya sürümünde veritabanıyla çalışmak mümkünse, Test Etme ve Düzeltme ile Yapılandırma - Yapılandırmayı kontrol etme - Yapılandırmanın mantıksal bütünlüğünü kontrol etme + Yanlış bağlantıları arama işlemlerini gerçekleştirin.

    1.3. Dosya değişkeni yoksa, DT'den bir DB2 istemci/sunucu değişkenine (benzersiz olma konusunda daha az seçicidir) yüklemeyi deneyin ve ardından Test ve Onarım ve Yapılandırma - Yapılandırma Kontrolü - Yapılandırma Mantıksal Bütünlük Kontrolü + Kötü Referans Bulucu'yu çalıştırın.

    1.4. Sorunu yerelleştirmek için yüklemesi başarısız olan nesnenin verilerini belirleyebilirsiniz. Bunu yapmak için, Profiler yardımcı programında önyükleme sırasında izlemeyi etkinleştirmeniz veya DBMSSQL ve EXCP işlem olay günlüğüne günlüğe kaydetmeyi etkinleştirmeniz gerekir.

    2. Benzersiz olmama sorunu kullanıcıların çalışmaları sırasında kendini gösteriyorsa:

    2.1. Paragraf 1.4'teki yöntemi kullanarak sorunlu talebi bulun.

    2.1.2. Bazen isteklerin yürütülmesi sırasında bir hata oluşur, örneğin:

    Bu hata, talepte "Kayıt Yeniden Hesaplamaları" prosedüründeki "Kuruluş çalışanlarının çalışma saatleri" birikim kaydı modülünde "Farklı" hizmet kelimesi olmaması nedeniyle oluşur.
    Kod 1C v 8.x I.e. olmalı:
    İstek = Yeni İstek(
    "FARKLI SEÇ
    | Temel.Bireysel,
    . . . . .
    ZUP ve UPP'nin en son yayınlanan sürümlerinde hata oluşmuyor, çünkü. "ÇEŞİTLİ" yazıyor.

    2.2. Önceki paragraftaki sorunlu dizini bulduktan sonra, benzersiz olmayan bir giriş bulmanız gerekir.
    2.2.1. SQL kullanarak benzersiz olmayan kayıtları tanımlamak için "Balık" komut dosyası:
    SQL Kodu S_elect COUNT(*) Sayacı,<перечисление всех полей соответствующего индекса>itibaren<имя таблицы>
    GRUPLANDIRMAYA GÖRE<перечисление всех полей соответствующего индекса>
    Sayacı > 1 OLAN

    2.2.2 Örnek. Hatadaki dizin "_Document140_VT1385_IntKeyIndNG" olarak adlandırılır.
    Tablo alanlarının listesi:
    _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
    Lütfen aşağıdaki prosedürü uygulamadan önce veritabanınızın yedeğini alın.
    MS SQL Server Query Analyzer'da çalıştırın:
    SQL Kodu S_elect sayısı(*), _Document140_IDRRef, _KeyField
    _Document140_VT1385'ten
    _Document140_IDRRef, _KeyField'a göre gruplandır
    sayısı(*) > 1 olan
    _Document140_IDRRef, _KeyField sütunlarının, yinelenen kayıtların (id, key) değerlerini bulmak için kullanın.

    Bir istek ile:
    SQL Kodu S_select *
    _Document140_VT1385'ten
    veya _Document140_IDRRef = id2 ve _KeyField = key2 veya ...
    yinelenen girişlerin diğer sütunlarının değerlerine bakın.
    Her iki girişin de anlamlı değerleri varsa ve bu değerler farklıysa, _KeyField değerini benzersiz olacak şekilde düzeltin. Bunu yapmak için, _KeyField(keymax) için kullanılan maksimum değeri tanımlayın:
    SQL Kodu S_elect max(_KeyField)
    _Document140_VT1385'ten
    burada _Document140_IDRRef = id1
    Yinelenen girişlerden birindeki _KeyField değerini doğru olanla değiştirin:
    SQL kodu güncellemesi _Document140_VT1385
    _KeyField = keymax + 1 olarak ayarla
    Burada _LineNo1386 =, iki yinelenen girişten birini seçmenize izin veren ek bir koşuldur.

    Yinelenen girişlerden biri (veya her ikisi) açıkça yanlış bir değere sahipse, kaldırılmalıdır:
    _Document140_VT1385'ten SQL kodu silme
    burada _Document140_IDRRef = id1 ve _LineNo1386 = lineno1
    Yinelenen girişler tüm sütunlarda aynı değerlere sahipse, bunlardan biri bırakılmalıdır:
    SQL Kodu S_elect belirgin *
    #tmp1 içine
    _Document140_VT1385'ten
    burada _Document140_IDRRef = id1 ve _KeyField = key1

    _Document140_VT1385'ten Sil
    burada _Document140_IDRRef = id1 ve _KeyField = key1

    _Document140_VT1385 içine yerleştirin
    S_seç #tmp1

    D_rop tablosu #tmp1

    Açıklanan prosedür, her bir yinelenen giriş çifti için gerçekleştirilmelidir.

    2.2.3. İkinci örnek:
    SQL Kodu S_elect COUNT(*) AS İfade2, _IDRRef AS İfade1, _Description
    _Referans8_'DAN
    _IDRRef, _Açıklama TARAFINDAN GRUPLA
    SAHİP (SAY(*) > 1)

    2.3.4 1C:Enterprise sorgusu kullanarak benzersiz olmayan kayıtları tanımlama örneği:
    Kod 1C v 8.x TERCİH El Kitabı Bağlantı
    FROM Dizin. Dizin AS Dizini
    GRUPLANDIRMAYA GÖRE
    MİKTAR(*) > 1 OLAN

    Veritabanında bazı nesneler, nitelikler, alt içerikler NULL değerine sahipse, ancak böyle bir değere sahip olamazlarsa hata oluşur. Ve bu hata sadece SQL veritabanlarında görülür. Onlar. böyle bir veritabanı bir dosyaya boşaltılırsa, bu hata orada olmayacaktır. Çünkü dosya tabanının kendi tabloları (toplam 4) vardır ve SQL'in kendi tabloları vardır. Ve SQL veritabanı, tablolarındaki bu tür değerlere kritik tepki verir.

    Bu sorun, herhangi bir veritabanı değişkenindeki (SQL veya dosya) herhangi bir test (ne harici ne de dahili) ve hatta SQL yöneticisindeki SQL'deki tabloları yeniden yapılandırması gereken _1sp_DBReindex Prosedürü ile çözülmez.

    Accounting 3.0 PROF'den CORP'a geçiş örneğini kullanarak sorunun çözümünü inceleyelim. Geçişten sonra, 68.01 hesabı, Tax Authority'de yeni bir alt sözleşmeye sahiptir. Ve sonra, SQL'deki veritabanlarında, bu hesabı kullanan belgelerin PROF sürümündeki tüm oluşturma işlemleri yeniden yapılmaz. Yukarıda gösterilen hata çıkacaktır. Çünkü ilanlardaki eski belgeler için bu yeni alt içerik, NULL değeriyle yazılacaktır (gerçi Boş bir değer olması gerekir, peki ya da bir şekilde vergi dairesi).

    Bu hatayı çözmek için, olmaması gereken NULL değerleri kaldırmanız gerekir. Bu durumda Vergi Dairesi Tescil alt kontağının kullanıldığı belgelerde. Bunu, NULL'u bir Empty değeriyle değiştirecek bir işlem yazarak yapabilirsiniz (hazır işlem bu makaleden indirilebilir). İşlem yapın, tk. belge kayıtlarında bu alt sözleşmenin değerini manuel olarak değiştirme girişimi aynı hataya yol açar.

    Tüm alt kişilerdeki NULL'ları değiştirmek için işleniyor Vergi Dairesi'ndeki Kayıt aşağıdaki bu makaleden indirilebilir.

    ANCAK, SQL veritabanında NULL'u değiştirmek işe yaramayacaktır, işlem sırasında aynı hata üretilecektir. Bu nedenle, bunu yapmanız gerekir:

    1. Halihazırda çalışan, CORP sürümüne çevrilmiş SQL veritabanını dt'snik'e yükleyin (konfigüratörde Yönetim - Veritabanını yükle - veritabanının bir *.dt dosyası biçiminde nereye yükleneceğini seçin)

    2. dt'leri dosya tabanına yükleyin (gereksiz veya önceden hazırlanmış, temiz, dosya veritabanında, konfigüratörde Yönetim - Veritabanını yükle - daha önce boşaltılmış dt'leri seçin)

    3. Dosya tabanında işlem yapın (hata olmayacak ve tüm NULL'lar doğru şekilde değiştirilecektir) (işlemenin nasıl gerçekleştirileceği aşağıda açıklanmıştır)

    5. Şimdi ise tam tersine dt'leri dosya tabanından boşaltın ve SQL veritabanına yükleyin. Artık işlenmiş belgeleri gönderirken hata olmayacak.

    Bu makaleden işleme, belirtilen süre boyunca, NULL değerine sahip olan işlemlerde (CORP sürümünde görünen) alt ilgili kişi RegisterIn Tax Authority'nin göründüğü tüm belgeleri bulur. Ve bu değeri boş bir değerle değiştirir.

    İşlemde, belgeleri işlemeniz gereken süreyi belirtmeniz gerekir (kayıtların veritabanında tutulduğu sürenin tamamı için mümkündür) ve "Tablo bölümünü doldur" düğmesine tıklayın. Bundan sonra, hangi belgelerin işleneceği onay kutularını işaretleyebilir (tümünü seçebilirsiniz) ve "İşlemi gerçekleştir" düğmesini tıklayabilirsiniz.

    Buna göre, birisi aynı hataya sahipse, ancak CORP'a geçtikten sonra DEĞİL, ancak örneğin bir değişimden, bazı verileri yükledikten, bazı işlemleri gerçekleştirdikten vb. Ardından, NULL değerinin belirli bir belgede / dizinde nereye atandığını belirlemek ve bu NULL'u benzer bir şekilde, ancak kendi işlemesiyle, ancak yukarıda açıklanan sırayla kaldırmak gerekir. NULL'un, belge kayıtlarında olduğu gibi, dahil olabileceğini unutmayın. sadece muhasebe değil, belge / dizin şeklinde bir yerde, bazı ayrıntılarda, ancak bu durumda muhtemelen açılmayacak bile.

    Ayrıca, bir belge gönderirken bu hatayı aldıysanız, Bukh CORP dosya tabanını SQL'e aktardıktan sonra (ve veritabanı başlangıçta PROF idi), bu, PRO sürümünde oluşturulan belgelerin artık RegisterIn Tax'de olduğu anlamına gelir. Yetki, NULL değerini alt olarak verir ve SQL veritabanı bunu kabul etmez. Ve veritabanını SQL'e yüklerken böyle bir hata görünecektir. Burada aslında dosya tabanında NULL değerleri olmayacak ama SQL tam olarak bu tür değerleri tablolarına yükleyecektir. Bu nedenle, burada SQL veritabanını bu NULL'ları oluşturmaya zorlamak ve ardından bunları dosya veritabanında düzeltmek gerekir. Ancak bunu nasıl yapacağınızı size söylemeyeceğim.

    Şu satırları içeren bir mesajla karşılaştınız:
    SQL Server için Microsoft OLE DB Sağlayıcısı: CREATE UNIQUE INDEX, dizin kimliği için yinelenen bir anahtar bulunduğundan sonlandırıldı
    veya
    Nesnede yinelenen anahtar satırı I_nsert edemiyorum
    veya
    Benzersiz bir dizine benzersiz olmayan bir değer ekleme girişiminde bulunuldu.

    Çözüm seçenekleri:

    1. SQL Server yönetim stüdyosunda, başarısız dizini fiziksel olarak yok ediyoruz (benim durumumda, muhasebe kaydının toplamlar tablosundaki bir dizindi). 1C'de hatalı belgeleri dağıtacağız. Test ve düzeltme modunda, tabloları yeniden indekslemek + toplamları yeniden hesaplamak için onay kutularını işaretleyin. 1C, dizini hatasız olarak yeniden oluşturur. Daha önce başarısız olan belgeleri yürütürüz.

    2. 1) Management Studio 2005'in yardımıyla, bir dizin oluşturmak için hatalı olan bir oluşturma komut dosyası oluşturdum ve onu bir dosyaya kaydettim.
    2) Dizini _AccumRgTn19455 tablosundan manuel olarak öldürdü
    3) gibi bir istek başlattı
    SQL kodu S_elect sayısı(*), index_fields
    AccumRgTn19455'TEN
    GRUP BY index_field
    sayısı(*)>1 olan
    Dizin öldürüldükten sonra 15 yinelenen kayıt görüntüledim, ancak 2. adımdan önce sorgu hiçbir şey döndürmedi.
    4) Tüm kayıtları inceledim ve kopyaları manuel olarak temizledim. Aslında, genel olarak neyle uğraştığımı anlamak için "Rapor Yapısı" işlemeyi de kullandım. _AccumRgTn19455 tablosunun "Ürün çıktısı (vergi muhasebesi)" birikim kaydını sakladığı ortaya çıktı. Ayrıca sql sorgularıyla uğraştım, benzersiz olmayan 15 belge belirledim ve tüm eylemleri tamamladıktan sonra 1C'de bu belgelerin hatasız normal şekilde işlendiğini kontrol ettim. Tabii ki, masaları rastgele temizlemeye değmez: neyin temizlendiğini ve neye dönüşebileceğini anlamak önemlidir.
    5) Bir dosyaya kaydedilen bir dizin oluşturmak için bir sorgu başlattı.
    6) Veritabanını tek kullanıcı moduna geçirdi ve dbcc checkdb'yi çalıştırdı - bu sefer hata yoktu.
    7) Üs tek kullanıcı moduna geri aktarıldı.
    Her şey ... sorun yenildi. Pekala, 1C'de bile "Test ve Düzeltme" başlattım, orada da her şey yolunda gitti, benzersiz olmayan bir endekste küfür etmeyi bıraktı.

    3. Benzersiz olmama, sıfır değerli tarihlerde yatıyorsa, sonra sorun 2000 ofset parametresi ile bir taban oluşturarak çözülür.

    1. Sorun veritabanını yüklemekse, o zaman:
    1.1. MS SQL Server veritabanına yükleme yapıyorsanız (bir dt dosyası kullanarak), veritabanını oluştururken, yüklemeden önce tarih ofseti - 2000'i belirtin.
    Taban zaten ofset 0 ile oluşturulmuşsa, 2000 ile yeni bir tane oluşturun.

    1.2. Dosya sürümünde veritabanıyla çalışmak mümkünse, Test Etme ve Düzeltme ile Yapılandırma - Yapılandırmayı kontrol etme - Yapılandırmanın mantıksal bütünlüğünü kontrol etme + Yanlış bağlantıları arama işlemlerini gerçekleştirin.

    1.3. Dosya değişkeni yoksa, DT'den bir DB2 istemci/sunucu değişkenine (benzersiz olma konusunda daha az seçicidir) yüklemeyi deneyin ve ardından Test ve Onarım ve Yapılandırma - Yapılandırma Kontrolü - Yapılandırma Mantıksal Bütünlük Kontrolü + Kötü Referans Bulucu'yu çalıştırın.

    1.4. Sorunu yerelleştirmek için yüklemesi başarısız olan nesnenin verilerini belirleyebilirsiniz. Bunu yapmak için, Profiler yardımcı programında önyükleme sırasında izlemeyi etkinleştirmeniz veya DBMSSQL ve EXCP işlem olay günlüğüne günlüğe kaydetmeyi etkinleştirmeniz gerekir.

    2. Benzersiz olmama sorunu kullanıcıların çalışmaları sırasında kendini gösteriyorsa:

    2.1. Paragraf 1.4'teki yöntemi kullanarak sorunlu talebi bulun.

    2.1.2. Bazen isteklerin yürütülmesi sırasında bir hata oluşur, örneğin:

    Bu hata, talepte "Kayıt Yeniden Hesaplamaları" prosedüründeki "Kuruluş çalışanlarının çalışma saatleri" birikim kaydı modülünde "Farklı" hizmet kelimesi olmaması nedeniyle oluşur.
    Kod 1C v 8.x I.e. olmalı:
    İstek = Yeni İstek(
    "FARKLI SEÇ
    | Temel.Bireysel,
    . . . . .
    ZUP ve UPP'nin en son yayınlanan sürümlerinde hata oluşmuyor, çünkü. "ÇEŞİTLİ" yazıyor.

    2.2. Önceki paragraftaki sorunlu dizini bulduktan sonra, benzersiz olmayan bir giriş bulmanız gerekir.
    2.2.1. SQL kullanarak benzersiz olmayan kayıtları tanımlamak için "Balık" komut dosyası:
    SQL Kodu S_elect COUNT(*) Sayacı,<перечисление всех полей соответствующего индекса>itibaren<имя таблицы>
    GRUPLANDIRMAYA GÖRE<перечисление всех полей соответствующего индекса>
    Sayacı > 1 OLAN

    2.2.2 Örnek. Hatadaki dizin "_Document140_VT1385_IntKeyIndNG" olarak adlandırılır.
    Tablo alanlarının listesi:
    _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
    Lütfen aşağıdaki prosedürü uygulamadan önce veritabanınızın yedeğini alın.
    MS SQL Server Query Analyzer'da çalıştırın:
    SQL Kodu S_elect sayısı(*), _Document140_IDRRef, _KeyField
    _Document140_VT1385'ten
    _Document140_IDRRef, _KeyField'a göre gruplandır
    sayısı(*) > 1 olan
    _Document140_IDRRef, _KeyField sütunlarının, yinelenen kayıtların (id, key) değerlerini bulmak için kullanın.

    Bir istek ile:
    SQL Kodu S_select *
    _Document140_VT1385'ten
    veya _Document140_IDRRef = id2 ve _KeyField = key2 veya ...
    yinelenen girişlerin diğer sütunlarının değerlerine bakın.
    Her iki girişin de anlamlı değerleri varsa ve bu değerler farklıysa, _KeyField değerini benzersiz olacak şekilde düzeltin. Bunu yapmak için, _KeyField(keymax) için kullanılan maksimum değeri tanımlayın:
    SQL Kodu S_elect max(_KeyField)
    _Document140_VT1385'ten
    burada _Document140_IDRRef = id1
    Yinelenen girişlerden birindeki _KeyField değerini doğru olanla değiştirin:
    SQL kodu güncellemesi _Document140_VT1385
    _KeyField = keymax + 1 olarak ayarla
    Burada _LineNo1386 =, iki yinelenen girişten birini seçmenize izin veren ek bir koşuldur.

    Yinelenen girişlerden biri (veya her ikisi) açıkça yanlış bir değere sahipse, kaldırılmalıdır:
    _Document140_VT1385'ten SQL kodu silme
    burada _Document140_IDRRef = id1 ve _LineNo1386 = lineno1
    Yinelenen girişler tüm sütunlarda aynı değerlere sahipse, bunlardan biri bırakılmalıdır:
    SQL Kodu S_elect belirgin *
    #tmp1 içine
    _Document140_VT1385'ten
    burada _Document140_IDRRef = id1 ve _KeyField = key1

    _Document140_VT1385'ten Sil
    burada _Document140_IDRRef = id1 ve _KeyField = key1

    _Document140_VT1385 içine yerleştirin
    S_seç #tmp1

    D_rop tablosu #tmp1

    Açıklanan prosedür, her bir yinelenen giriş çifti için gerçekleştirilmelidir.

    2.2.3. İkinci örnek:
    SQL Kodu S_elect COUNT(*) AS İfade2, _IDRRef AS İfade1, _Description
    _Referans8_'DAN
    _IDRRef, _Açıklama TARAFINDAN GRUPLA
    SAHİP (SAY(*) > 1)

    2.3.4 1C:Enterprise sorgusu kullanarak benzersiz olmayan kayıtları tanımlama örneği:
    Kod 1C v 8.x TERCİH El Kitabı Bağlantı
    FROM Dizin. Dizin AS Dizini
    GRUPLANDIRMAYA GÖRE
    MİKTAR(*) > 1 OLAN

    Bu makale, 1C:Enterprise 8.1 ile çalışırken şu satırları içeren bir mesajla karşılaşırsanız ne yapmanız gerektiğini açıklamaktadır:

    Nesneye yinelenen anahtar satırı eklenemiyor

    Benzersiz bir dizine benzersiz olmayan bir değer ekleme girişiminde bulunuldu.

    indeks nedir?

    İndeksler, bir tablonun satırlarına, bir veya daha fazla sütununun değerlerine göre hızlı bir şekilde erişmenizi sağlayan bir yapıdır.
    Dizin, bir tablonun veya görünümün bir veya daha fazla sütunundan oluşturulan anahtarları ve belirtilen verilerin depolandığı yerle eşlenen işaretçileri içerir.
    Dizinler, bir sonuç kümesi döndürmek için okunması gereken veri miktarını azaltır.

    Bir dizin, bir tablonun belirli bir sütunu (veya sütunları) ile ilişkili olsa da, yine de bağımsız bir veritabanı nesnesidir.

    1C:Enterprise veritabanındaki tablo dizinleri, yapılandırma nesneleri oluşturulurken dolaylı olarak ve ayrıca yapılandırma nesnelerinin belirli ayarlarıyla oluşturulur.

    MS SQL Server 2005'teki dizinlerin fiziksel özü.

    Fiziksel veriler saklanır 8Kb sayfalarda. Oluşturulduktan hemen sonra, tablonun indeksleri yokken, tablo bir veri yığını gibi görünür. Kayıtların belirli bir saklama sırası yoktur.
    Verilere erişmek istediğinizde, SQL Server üretecek tablo taraması(tablo taraması). SQL Server, aradığı kayıtları bulmak için tüm tabloyu tarar.
    Buradan, dizinlerin temel işlevleri netleşir:
    - veri erişim hızının arttırılması,
    - veri benzersizliği için destek.

    Avantajlarına rağmen, indekslerin bir takım dezavantajları da vardır. Birincisi indekslerdir. fazladan disk alanı kaplar ve RAM'de. Her dizin oluşturduğunuzda, anahtarları artan veya azalan düzende saklarsınız ve bunlar katmanlanabilir. Anahtar ne kadar büyük/uzunsa, indeks boyutu da o kadar büyük olur. İkinci dezavantaj ise operasyonlar yavaşlıyor kayıtların eklenmesi, güncellenmesi ve silinmesi.
    MS SQL Server 2005 ortamında çeşitli dizin türleri uygulanmaktadır:

    • kümelenmemiş dizinler;
    • kümelenmiş (veya kümelenmiş) dizinler;
    • benzersiz dizinler;
    • dahil edilen sütunlara sahip dizinler
    • dizine alınmış görünümler
    • tam metin

    Benzersiz dizin

    Dizinlenmiş bir sütundaki değerlerin benzersizliği, benzersiz dizinlerle garanti edilir. Varsa, sunucu yeni bir değerin girilmesine veya mevcut bir değerin bu işlem sonucunda sütunda iki özdeş değer görünecek şekilde değiştirilmesine izin vermez.
    Benzersiz bir dizin, bir tür eklentidir ve hem kümelenmiş hem de kümelenmemiş dizinler için uygulanabilir. Bir tablo, bir benzersiz kümelenmiş ve birçok benzersiz kümelenmemiş dizine sahip olabilir.
    Benzersiz dizinler yalnızca kesinlikle gerekli olduğunda tanımlanmalıdır. Bir sütunda veri bütünlüğünü sağlamak için benzersiz dizinlere başvurmak yerine BENZERSİZ veya BİRİNCİL ANAHTAR bütünlük kısıtlaması tanımlayabilirsiniz. Bunları yalnızca veri bütünlüğünü sağlamak için kullanmak, veritabanında yer israfıdır. Ek olarak, CPU zamanı da bakımlarına harcanır.

    1C:Enterprise 8.1, 8.1 sürümünden başlayarak, kümelenmiş benzersiz dizinleri aktif olarak kullanır. Bu, 8.0'dan dönüştürürken veya 8.1.7'den geçiş yaparken benzersiz olmayan bir dizin hatası alabileceğiniz anlamına gelir.

    Benzersiz olmama, sıfır değerli tarihlerde yatıyorsa, ofset parametresi 2000'e eşit olan bir taban oluşturularak sorun çözülür.

    Ne yapalım?

    1. Sorun veritabanını yüklemekse, o zaman:

    1.1. MS SQL Server veritabanına yükleme yapıyorsanız (bir dt dosyası kullanarak), veritabanını oluştururken, yüklemeden önce tarih ofseti - 2000'i belirtin.

    Taban zaten ofset 0 ile oluşturulmuşsa, 2000 ile yeni bir tane oluşturun.

    1.2. Dosya sürümünde veritabanıyla çalışmak mümkünse, Test Etme ve Düzeltme ile Yapılandırma - Yapılandırmayı kontrol etme - Yapılandırmanın mantıksal bütünlüğünü kontrol etme + Yanlış bağlantıları arama işlemlerini gerçekleştirin.

    1.3. Dosya değişkeni yoksa, DT'den bir DB2 istemci/sunucu değişkenine (benzersiz olma konusunda daha az seçicidir) yüklemeyi deneyin ve ardından Test ve Onarım ve Yapılandırma - Yapılandırmayı Kontrol Et - Yapılandırma Mantıksal Bütünlüğünü Kontrol Et + Kötü Referansları Ara komutunu çalıştırın.

    1.4. Sorunu yerelleştirmek için yüklemesi başarısız olan nesnenin verilerini belirleyebilirsiniz. Bunu yapmak için, Profiler yardımcı programında önyükleme sırasında izlemeyi etkinleştirmeniz veya DBMSSQL ve EXCP işlem olay günlüğüne günlüğe kaydetmeyi etkinleştirmeniz gerekir.

    1.5. Bir düğüm varsa (değişim planları), ardından değişimi gerçekleştirin. Değişimden önce ek olarak 2.3.5 paragrafını da uygulayabilirsiniz.

    2. Benzersiz olmama sorunu kullanıcıların çalışmaları sırasında kendini gösteriyorsa:

    2.1. Paragraf 1.4'teki yöntemi kullanarak sorunlu talebi bulun.

    2.1.2. Bazen isteklerin yürütülmesi sırasında bir hata oluşur, örneğin:

    Bu hata, talepteki "Kayıt Yeniden Hesaplamaları" prosedüründeki "Kuruluş çalışanlarının çalışma saatleri" birikim kaydı modülünde "Farklı" hizmet kelimesinin yer almamasından kaynaklanmaktadır.

    Onlar. olmalı:

    İstek = Yeni İstek(
    "FARKLI SEÇ
    | Temel.Bireysel,

    ZUP ve UPP'nin en son yayınlanan sürümlerinde hata oluşmuyor, çünkü. FARKLI diyor.

    2.2. Önceki paragraftaki sorunlu dizini bulduktan sonra, benzersiz olmayan bir giriş bulmanız gerekir.

    2.2.1. SQL kullanarak benzersiz olmayan kayıtları tanımlamak için "Balık" komut dosyası:
    COUNT(*) Sayacını SEÇ,<перечисление всех полей соответствующего индекса>itibaren<имя таблицы>
    GRUPLANDIRMAYA GÖRE<перечисление всех полей соответствующего индекса>
    Sayacı > 1 OLAN

    2.2.2 Örnek. Hatadaki dizin "_Document140_VT1385_IntKeyIndNG" olarak adlandırılır.

    Tablo alanlarının listesi:

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

    Fld1395 _Fld1396RRef _Fld1397 _Fld1398 _Fld1399RRef _Fld22260_TYPE _Fld22260_RTRef

    Lütfen aşağıdaki prosedürü uygulamadan önce veritabanınızın yedeğini alın.
    MS SQL Server Query Analyzer'da çalıştırın:

    sayı seçin(*), _Document140_IDRRef, _KeyField
    _Document140_VT1385'ten
    _Document140_IDRRef, _KeyField'a göre gruplandır
    sayısı(*) > 1 olan

    _Document140_IDRRef, _KeyField sütunlarının, yinelenen kayıtların (id, key) değerlerini bulmak için kullanın.

    Bir istek ile:

    seçme *
    _Document140_VT1385'ten
    veya _Document140_IDRRef = id2 ve _KeyField = key2 veya …

    yinelenen girişlerin diğer sütunlarının değerlerine bakın.

    Her iki girişin de anlamlı değerleri varsa ve bu değerler farklıysa, _KeyField değerini benzersiz olacak şekilde düzeltin. Bunu yapmak için, _KeyField(keymax) için kullanılan maksimum değeri tanımlayın:

    maks(_KeyField) seçin
    _Document140_VT1385'ten
    burada _Document140_IDRRef = id1

    Yinelenen girişlerden birindeki _KeyField değerini doğru olanla değiştirin:

    update_Document140_VT1385
    _KeyField = keymax + 1 olarak ayarla

    Burada _LineNo1386 =, iki yinelenen girişten birini seçmenize izin veren ek bir koşuldur.

    Yinelenen girişlerden biri (veya her ikisi) açıkça yanlış bir değere sahipse, kaldırılmalıdır:


    burada _Document140_IDRRef = id1 ve _LineNo1386 = lineno1

    Yinelenen girişler tüm sütunlarda aynı değerlere sahipse, bunlardan biri bırakılmalıdır:

    farklı seç *
    #tmp1 içine
    _Document140_VT1385'ten
    burada _Document140_IDRRef = id1 ve _KeyField = key1

    _Document140_VT1385'ten sil
    burada _Document140_IDRRef = id1 ve _KeyField = key1

    _Document140_VT1385'e ekleyin
    #tmp1'i seçin

    #tmp1 tablosunu bırak

    Açıklanan prosedür, her bir yinelenen giriş çifti için gerçekleştirilmelidir.

    2.2.3. İkinci örnek:

    COUNT(*) OLARAK İfade2, _IDRRef OLARAK İfade1, _Açıklama SEÇİN
    _Referans8_'DAN
    _IDRRef, _Açıklama TARAFINDAN GRUPLA
    SAHİP (SAY(*) > 1)

    2.3.4 1C:Enterprise sorgusu kullanarak benzersiz olmayan kayıtları tanımlama örneği:

    veya muhasebe için

    SEÇMEK
    Alt sorgu.Dönem,
    Alt Sorgu.Kaydedici,
    <измерения>,
    TOPLA(Alt Sorgu.Kayıt Sayısı) AS Kayıt Sayısı
    İTİBAREN
    (SEÇMEK
    Kendinden destekli.Dönem AS Dönemi,
    Kayıt Şirketi AS Kayıt Şirketi,
    <измерения>,
    1 AS Kayıt Sayısı
    İTİBAREN
    Muhasebe Kaydı Kendi Kendini Destekleyen AS Kendi Kendini Destekleyen AS Alt Sorgusu

    GRUPLANDIRMAYA GÖRE
    Alt sorgu.Dönem,
    Alt Sorgu.Kaydedici,
    <измерения>

    SAHİP OLMAK
    TOPLA(Alt Sorgu.Kayıt Sayısı) > 1

    2.3.5 Alt dizini benzersiz yapma. Management Studio'yu kullanarak dizini kodlayın.

    2.3.6 RDB'deki borsada özel bir durum. Hata, toplamların veya analizlerin hesaplanmasıyla ilişkili "yardımcı" tablolara düşer. Örneğin:

    Bağlam yöntemi çağrılırken hata oluştu (Yaz): Benzersiz dizine benzersiz olmayan bir değer ekleme girişimi:
    SQL Server için Microsoft OLE DB Sağlayıcısı: '_Accnt10319_ByPeriod_TRNRN' benzersiz dizinine sahip 'dbo._AccntRegED10319' nesnesine yinelenen anahtar satırı eklenemiyor.
    HRESULT=80040E2F, SQLSrvr: Hata durumu=1, Önem Derecesi=E, yerel=2601, satır=1

    Bu durumda, yüklemeden önce toplamların kullanımını kapatın, mesajı indirin, toplamların kullanımını açın ve yeniden hesaplayın.