تلاش برای درج یک مقدار غیر منحصر به فرد در یک شاخص منحصر به فرد انجام شد. خطا: تلاش برای درج یک مقدار غیر منحصر به فرد در یک شاخص منحصر به فرد: سرور sql مایکروسافت. هنگام تغییر از حسابداری حرفه ای به شرکتی و نه تنها حذف فهرست های غیر منحصر به فرد در فایل 1c 8

شما یک پیام حاوی خطوط دریافت کرده اید:
ارائه دهنده Microsoft OLE DB برای SQL Server: CREATE UNIQUE INDEX خاتمه یافت زیرا یک کلید تکراری برای شناسه فهرست پیدا شد
یا
نمی توان ردیف کلید تکراری را در شی وارد کرد
یا
تلاش برای درج یک مقدار غیر منحصر به فرد در یک شاخص منحصر به فرد انجام شد.

راه حل ها:

1. در استودیوی مدیریت SQL Server، ما به طور فیزیکی ایندکس معیوب را از بین می بریم (در مورد من این یک شاخص در جدول مجموع ثبت حسابداری بود). در 1C اسناد معیوب را توزیع خواهیم کرد. در حالت تست و تصحیح، کادرهای فهرست بندی مجدد جدول + محاسبه مجدد مجموع ها را علامت بزنید. 1C ایندکس را بدون خطا دوباره ایجاد می کند. ما اسناد قبلی شکست خورده را انجام می دهیم.

2. 1) استفاده از استودیو مدیریت 2005 یک اسکریپت ایجاد برای ایجاد یک فهرست ایجاد کرد که باگ بود و آن را در یک فایل ذخیره کرد.
2) به صورت دستی شاخص jamb را از جدول _AccumRgTn19455 حذف کرد
3) درخواستی مانند راه اندازی شد
کد 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 من "تست و تصحیح" را راه اندازی کردم، همه چیز در آنجا هم خوب پیش رفت، من از شکایت از شاخص غیر منحصر به فرد خودداری کردم.

3. اگر غیر منحصر به فرد بودن در تاریخ هایی با مقادیر صفر باشد، سپس با ایجاد یک پایگاه داده با پارامتر افست برابر با 2000 مشکل حل می شود.

1. اگر مشکل در بارگذاری پایگاه داده است، پس:
1.1. اگر در حال بارگیری (با استفاده از یک فایل dt) در پایگاه داده MS SQL Server هستید، هنگام ایجاد پایگاه داده، قبل از بارگیری، تاریخ افست - 2000 را مشخص کنید.
اگر پایگاه داده قبلا با افست 0 ایجاد شده است، یک پایگاه داده جدید با 2000 ایجاد کنید.

1.2. اگر امکان کار با پایگاه داده در نسخه فایل وجود دارد، سپس Testing and Correction و همچنین Configuration - Check configuration - Check یکپارچگی منطقی پیکربندی + جستجوی لینک های نادرست را انجام دهید.

1.3. اگر نسخه فایلی وجود ندارد، سعی کنید از DT در یک نسخه سرویس گیرنده-سرور با DB2 بارگیری کنید (که نیاز به منحصر به فرد بودن کمتری دارد)، و سپس تست و تصحیح و همچنین پیکربندی - تأیید پیکربندی - بررسی یکپارچگی منطقی پیکربندی را انجام دهید. + جستجو برای مراجع نامعتبر.

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, _Fld1393_TYPE, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393_TYPE_Fld1393_TYPE _Fld1393_TYPE, _Fld139Fld ld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE, _Fld22261_TYPE, _1RFld2 Ref, _1RFld2, _Fld22261_TYPE, _11_2Ref
قبل از انجام روش زیر، انجام دهید نسخه پشتیبانپایگاه داده.
اجرا در MS SQL Server Query Analyzer:
کد SQL S_elect count(*)، _Document140_IDRRef، _KeyField
from_Document140_VT1385
گروه توسط _Document140_IDRRef، _KeyField
داشتن count(*) > 1
از آن برای یافتن مقادیر ستون های _Document140_IDRRef، _KeyField، رکوردهای تکراری (id، کلید) استفاده کنید.

با استفاده از درخواست:
کد 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 = key1

حذف از _Document140_VT1385
که در آن _Document140_IDRRef = id1 و _KeyField = key1

در _Document140_VT1385_ وارد می کنم
S_انتخاب #tmp1

جدول D_rop #tmp1

روش توصیف شده باید برای هر جفت رکورد تکراری انجام شود.

2.2.3. مثال دوم:
کد SQL S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
FROM _Reference8_
GROUP BY _IDRRef, _Description
داشتن (COUNT(*) > 1)

2.3.4 مثالی از تعیین رکوردهای غیر منحصر به فرد با استفاده از پرس و جوی 1C:Enterprise:
کد 1C v 8.x SELECT Directory.Link
FROM Directory.Directory AS Directory
GROUP BY Directory.Link
دارای مقدار (*) > 1

این مقاله توضیح می دهد که اگر هنگام کار با 1C:Enterprise 8.1 با پیامی حاوی خطوط روبرو شدید چه کاری انجام دهید:

نمی توان ردیف کلید تکراری را در شی وارد کرد

تلاش برای درج یک مقدار غیر منحصر به فرد در یک شاخص منحصر به فرد انجام شد.

شاخص چیست؟

ایندکس ها ساختاری هستند که امکان دسترسی سریع به ردیف های جدول را بر اساس مقادیر یک یا چند ستون آن فراهم می کند.
ایندکس حاوی کلیدهایی است که از یک یا چند ستون جدول یا نما ساخته شده اند و نشانگرهایی که به محل ذخیره داده های مشخص شده نگاشت می شوند.
ایندکس ها مقدار داده هایی را که باید برای بازگرداندن مجموعه نتایج خوانده شوند، کاهش می دهند.

اگرچه یک شاخص با یک ستون (یا ستون) خاص از یک جدول مرتبط است، اما همچنان یک شی پایگاه داده جداگانه است.

نمایه‌های جداول در پایگاه داده 1C: Enterprise به طور ضمنی هنگام ایجاد اشیاء پیکربندی و همچنین در طی تنظیمات خاصی از اشیاء پیکربندی ایجاد می‌شوند.

ماهیت فیزیکی ایندکس ها در MS SQL Server 2005.

از نظر فیزیکی داده ها ذخیره می شوند در صفحات 8 کیلوبایتی. بلافاصله پس از ایجاد، در حالی که جدول دارای شاخص نیست، جدول مانند یک پشته از داده ها به نظر می رسد. رکوردها ترتیب ذخیره سازی خاصی ندارند.
هنگامی که می خواهید به داده ها دسترسی داشته باشید، SQL Server تولید می کند اسکن جدول(اسکن جدول). SQL Server کل جدول را اسکن می کند تا رکوردهای مورد نظر خود را پیدا کند.
از اینجا توابع اساسی شاخص ها مشخص می شود:
- افزایش سرعت دسترسی به داده ها،
- پشتیبانی از منحصر به فرد بودن داده ها.

با وجود مزایایی که دارند، ایندکس ها دارای معایبی نیز هستند. اولین مورد شاخص ها هستند فضای دیسک اضافی را اشغال کندو در حافظه دسترسی تصادفی. هر بار که یک شاخص ایجاد می کنید، کلیدها را به ترتیب نزولی یا صعودی ذخیره می کنید که می تواند ساختار چند سطحی داشته باشد. و هر چه کلید بزرگتر/طولانتر باشد، اندازه شاخص بزرگتر است. دومین عیب این است عملیات کند می شوددرج، به روز رسانی و حذف سوابق.
در محیط MS SQL Server 2005، چندین نوع ایندکس پیاده سازی می شود:

  • شاخص های غیر خوشه ای؛
  • شاخص های خوشه ای (یا خوشه ای)؛
  • شاخص های منحصر به فرد؛
  • ایندکس ها با ستون های گنجانده شده
  • نماهای نمایه شده
  • متن کامل

شاخص منحصر به فرد

منحصر به فرد بودن مقادیر در ستون نمایه شده توسط شاخص های منحصر به فرد تضمین می شود. در صورت وجود، سرور به شما اجازه نمی دهد مقدار جدیدی را وارد کنید یا مقدار موجود را به گونه ای تغییر دهید که در نتیجه این عملیات دو مقدار یکسان در ستون ظاهر شود.
ایندکس یکتا نوعی افزونه است و هم برای ایندکس های خوشه ای و هم برای شاخص های غیر خوشه ای قابل پیاده سازی است. یک جدول می تواند یک شاخص خوشه ای منحصر به فرد و بسیاری از شاخص های غیر خوشه ای منحصر به فرد داشته باشد.
شاخص های منحصر به فرد باید فقط در صورت لزوم تعریف شوند. برای اطمینان از یکپارچگی داده ها در یک ستون، می توانید به جای استفاده از شاخص های منحصر به فرد، یک محدودیت یکپارچگی UNIQUE یا PRIMARY KEY تعریف کنید. استفاده از آنها صرفاً برای اطمینان از یکپارچگی داده ها هدر دادن فضای پایگاه داده است. علاوه بر این، زمان 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. اگر امکان کار با پایگاه داده در نسخه فایل وجود دارد، سپس Testing and Correction و همچنین Configuration - Check configuration - Check یکپارچگی منطقی پیکربندی + جستجوی لینک های نادرست را انجام دهید.

1.3. اگر نسخه فایلی وجود ندارد، سعی کنید از DT در یک نسخه سرویس گیرنده-سرور با DB2 بارگیری کنید (که نیاز به منحصر به فرد بودن کمتری دارد)، و سپس تست و تصحیح و همچنین پیکربندی - تأیید پیکربندی - بررسی یکپارچگی منطقی پیکربندی را انجام دهید. + جستجو برای مراجع نامعتبر.

1.4. برای بومی سازی مشکل، می توانید داده های شیئی را که بارگذاری آن ناموفق است، تعیین کنید. برای انجام این کار، باید ردیابی را در ابزار Profiler در هنگام راه‌اندازی فعال کنید یا ضبط را در گزارش رویداد فناوری DBMSSQL و EXCP فعال کنید.

1.5. اگر گره (طرح های مبادله) در دسترس است، مبادله را انجام دهید. همچنین می توانید بند 2.3.5 را قبل از مبادله تکمیل کنید

2. اگر مشکل عدم منحصربفرد بودن هنگام کار کردن کاربران رخ دهد:

2.1. درخواست مشکل ساز را با استفاده از روش پاراگراف 1.4 پیدا کنید.

2.1.2. گاهی اوقات هنگام اجرای کوئری ها خطایی رخ می دهد، به عنوان مثال:

این خطا به این دلیل رخ می دهد که در ماژول ثبت انباشت "زمان کار کارکنان سازمان ها" در روش "ثبت نام مجدد محاسبات" ، کلمه سرویس "DIFFERENT" در درخواست گنجانده نشده است.

آن ها باید باشد:

درخواست = درخواست جدید(
"مختلف را انتخاب کنید
| پایه، فردی،

در آخرین نسخه های 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_TYPE, _Fld1393_TYPE, _Fld1393_TYPE, _Fld1393_TYPE, _Fld1393, _Fld139Fld

Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE2, _1RFLD2Ref, _Fld22261_TYPE2, _1RFld2Ref, _Fld22261_TYPE2, _1RFld2Ref, _1RFLD2Ref, _1RFLD2Ref

قبل از انجام مراحل زیر، لطفاً از پایگاه داده خود نسخه پشتیبان تهیه کنید.
اجرا در MS SQL Server Query Analyzer:

count(*)، _Document140_IDRRef، _KeyField را انتخاب کنید
from_Document140_VT1385
گروه توسط _Document140_IDRRef، _KeyField
داشتن count(*) > 1

از آن برای یافتن مقادیر ستون های _Document140_IDRRef، _KeyField، رکوردهای تکراری (id، کلید) استفاده کنید.

با استفاده از درخواست:

انتخاب کنید *
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 = key1

حذف از _Document140_VT1385
که در آن _Document140_IDRRef = id1 و _KeyField = key1

در _Document140_VT1385 قرار دهید
#tmp1 را انتخاب کنید

رها کردن جدول #tmp1

روش توصیف شده باید برای هر جفت رکورد تکراری انجام شود.

2.2.3. مثال دوم:

COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description را انتخاب کنید
FROM _Reference8_
GROUP BY _IDRRef, _Description
داشتن (COUNT(*) > 1)

2.3.4 مثالی از تعیین رکوردهای غیر منحصر به فرد با استفاده از پرس و جوی 1C:Enterprise:

یا برای حسابداری

انتخاب کنید
دوره فرعی،
Subquery.Registrator,
<измерения>,
SUM(Subquery.Number of Records) AS تعداد رکوردها
از جانب
(انتخاب کنید
خود حمایتی. دوره به عنوان دوره،
خود حمایتی. ثبت نام کننده AS ثبت،
<измерения>,
1 AS تعداد رکورد
از جانب
ثبت حسابداری AS خود حمایتی) AS فرعی

دسته بندی بر اساس
دوره فرعی،
Subquery.Registrator,
<измерения>

داشتن
SUM (Subquery. Number of Records) > 1

2.3.5 نمایه subd را غیر منحصر به فرد کنید. ایندکس را با استفاده از مدیریت استودیو اسکریپت کنید.

2.3.6 یک مورد خاص هنگام مبادله در RDB. این خطا در جداول "کمکی" مرتبط با محاسبه مجموع یا تجزیه و تحلیل رخ می دهد. مثلا:

خطا هنگام فراخوانی متد زمینه (Write): تلاش برای درج یک مقدار غیر منحصر به فرد در یک شاخص منحصر به فرد:
ارائه دهنده Microsoft OLE DB برای SQL Server: نمی توان ردیف کلید تکراری را در شی "dbo._AccntRegED10319" با نمایه منحصر به فرد "_Accnt10319_ByPeriod_TRNRN" درج کرد.
HRESULT=80040E2F، SQLSrvr: حالت خطا=1، شدت=E، native=2601، خط=1

در این صورت، قبل از بارگذاری، استفاده از مجموع را خاموش کنید، پیام را بارگذاری کنید، استفاده از مجموع را فعال کنید و دوباره محاسبه کنید.

شما یک پیام حاوی خطوط دریافت کرده اید:
ارائه دهنده Microsoft OLE DB برای SQL Server: CREATE UNIQUE INDEX خاتمه یافت زیرا یک کلید تکراری برای شناسه فهرست پیدا شد
یا
نمی توان ردیف کلید تکراری را در شی وارد کرد
یا
تلاش برای درج یک مقدار غیر منحصر به فرد در یک شاخص منحصر به فرد انجام شد.

راه حل ها:

1. در استودیوی مدیریت SQL Server، ما به طور فیزیکی ایندکس معیوب را از بین می بریم (در مورد من این یک شاخص در جدول مجموع ثبت حسابداری بود). در 1C اسناد معیوب را توزیع خواهیم کرد. در حالت تست و تصحیح، کادرهای فهرست بندی مجدد جدول + محاسبه مجدد مجموع ها را علامت بزنید. 1C ایندکس را بدون خطا دوباره ایجاد می کند. ما اسناد قبلی شکست خورده را انجام می دهیم.

2. 1) با استفاده از Management Studio 2005، من یک اسکریپت ایجاد برای ایجاد یک فهرست ایجاد کردم که باگ بود و آن را در یک فایل ذخیره کردم.
2) به صورت دستی شاخص jamb را از جدول _AccumRgTn19455 حذف کرد
3) درخواستی مانند راه اندازی شد
کد 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 من "تست و تصحیح" را راه اندازی کردم، همه چیز در آنجا هم خوب پیش رفت، من از شکایت از شاخص غیر منحصر به فرد خودداری کردم.

3. اگر غیر منحصر به فرد بودن در تاریخ هایی با مقادیر صفر باشد، سپس با ایجاد یک پایگاه داده با پارامتر افست برابر با 2000 مشکل حل می شود.

1. اگر مشکل در بارگذاری پایگاه داده است، پس:
1.1. اگر در حال بارگیری (با استفاده از یک فایل dt) در پایگاه داده MS SQL Server هستید، هنگام ایجاد پایگاه داده، قبل از بارگیری، تاریخ افست - 2000 را مشخص کنید.
اگر پایگاه داده قبلا با افست 0 ایجاد شده است، یک پایگاه داده جدید با 2000 ایجاد کنید.

1.2. اگر امکان کار با دیتابیس در نسخه فایل وجود دارد، سپس Testing and Correction و همچنین Configuration - Check configuration - بررسی یکپارچگی منطقی پیکربندی + جستجوی لینک های نادرست را انجام دهید.

1.3. اگر نسخه فایلی وجود ندارد، سعی کنید از DT در یک نسخه سرویس گیرنده-سرور با DB2 بارگیری کنید (که نیاز به منحصر به فرد بودن کمتری دارد)، و سپس تست و تصحیح و همچنین پیکربندی - تأیید پیکربندی - بررسی یکپارچگی منطقی پیکربندی را انجام دهید. + جستجو برای مراجع نامعتبر.

1.4. برای بومی سازی مشکل، می توانید داده های شیئی را که بارگذاری آن ناموفق است، تعیین کنید. برای انجام این کار، باید ردیابی را در ابزار Profiler در هنگام بوت فعال کنید یا ضبط را در گزارش رویداد پردازش DBMSSQL و EXCP فعال کنید.

2. اگر مشکل عدم منحصربفرد بودن هنگام کار کردن کاربران رخ دهد:

2.1. درخواست مشکل ساز را با استفاده از روش پاراگراف 1.4 پیدا کنید.

2.1.2. گاهی اوقات هنگام اجرای کوئری ها خطایی رخ می دهد، به عنوان مثال:

این خطا به این دلیل رخ می دهد که در ماژول ثبت انباشت "زمان کار کارکنان سازمان ها" در روش "ثبت نام مجدد محاسبات" ، کلمه سرویس "DIFFERENT" در درخواست گنجانده نشده است.
کد 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, _Fld1393_TYPE, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393_TYPE_Fld1393_TYPE _Fld1393_TYPE, _Fld139Fld ld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE, _Fld22261_TYPE, _1RFld2 Ref, _1RFld2, _Fld22261_TYPE, _11_2Ref
قبل از انجام مراحل زیر، لطفاً از پایگاه داده خود نسخه پشتیبان تهیه کنید.
اجرا در MS SQL Server Query Analyzer:
کد SQL S_elect count(*)، _Document140_IDRRef، _KeyField
fr om _Document140_VT1385
گروه توسط _Document140_IDRRef، _KeyField
داشتن count(*) > 1
از آن برای یافتن مقادیر ستون های _Document140_IDRRef، _KeyField، رکوردهای تکراری (id، کلید) استفاده کنید.

با استفاده از درخواست:
کد SQL S_elect *
fr om _Document140_VT1385
جایی که _Document140_IDRRef = id1 و _KeyField = key1 یا _Document140_IDRRef = id2 و _KeyField = key2 یا ...
به مقادیر سایر ستون های ورودی های تکراری نگاه کنید.
اگر هر دو ورودی مقادیر معنی‌داری دارند و مقادیر متفاوت هستند، مقدار _KeyField را به منحصر به فرد تغییر دهید. برای انجام این کار، حداکثر مقدار اشغال شده _KeyField (keymax) را تعیین کنید:
کد SQL S_elect max(_KeyField)
fr om _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

در _Document140_VT1385_ وارد می کنم
S_انتخاب #tmp1

جدول D_rop #tmp1

روش توصیف شده باید برای هر جفت رکورد تکراری انجام شود.

2.2.3. مثال دوم:
کد SQL S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
FROM _Reference8_
GROUP BY _IDRRef, _Description
داشتن (COUNT(*) > 1)

2.3.4 مثالی از تعیین رکوردهای غیر منحصر به فرد با استفاده از پرس و جوی 1C:Enterprise:
کد 1C v 8.x SELECT Directory.Link
FROM Directory.Directory AS Directory
GROUP BY Directory.Link
دارای مقدار (*) > 1

اطلاعات برگرفته از سایت

شما یک پیام حاوی خطوط دریافت کرده اید:
ارائه دهنده Microsoft OLE DB برای SQL Server: CREATE UNIQUE INDEX خاتمه یافت زیرا یک کلید تکراری برای شناسه فهرست پیدا شد
یا
نمی توان ردیف کلید تکراری را در شی وارد کرد
یا
تلاش برای درج یک مقدار غیر منحصر به فرد در یک شاخص منحصر به فرد انجام شد.

راه حل ها:

1. در استودیوی مدیریت SQL Server، ما به طور فیزیکی ایندکس معیوب را از بین می بریم (در مورد من این یک شاخص در جدول مجموع ثبت حسابداری بود). در 1C اسناد معیوب را توزیع خواهیم کرد. در حالت تست و تصحیح، کادرهای فهرست بندی مجدد جدول + محاسبه مجدد مجموع ها را علامت بزنید. 1C ایندکس را بدون خطا دوباره ایجاد می کند. ما اسناد قبلی شکست خورده را انجام می دهیم.

2. 1) با استفاده از Management Studio 2005، من یک اسکریپت ایجاد برای ایجاد یک فهرست ایجاد کردم که باگ بود و آن را در یک فایل ذخیره کردم.
2) به صورت دستی شاخص jamb را از جدول _AccumRgTn19455 حذف کرد
3) درخواستی مانند راه اندازی شد
کد 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 من "تست و تصحیح" را راه اندازی کردم، همه چیز در آنجا هم خوب پیش رفت، من از شکایت از شاخص غیر منحصر به فرد خودداری کردم.

3. اگر غیر منحصر به فرد بودن در تاریخ هایی با مقادیر صفر باشد، سپس با ایجاد یک پایگاه داده با پارامتر افست برابر با 2000 مشکل حل می شود.

1. اگر مشکل در بارگذاری پایگاه داده است، پس:
1.1. اگر در حال بارگیری (با استفاده از یک فایل dt) در پایگاه داده MS SQL Server هستید، هنگام ایجاد پایگاه داده، قبل از بارگیری، تاریخ افست - 2000 را مشخص کنید.
اگر پایگاه داده قبلا با افست 0 ایجاد شده است، یک پایگاه داده جدید با 2000 ایجاد کنید.

1.2. اگر امکان کار با پایگاه داده در نسخه فایل وجود دارد، سپس Testing and Correction و همچنین Configuration - Check configuration - Check یکپارچگی منطقی پیکربندی + جستجوی لینک های نادرست را انجام دهید.

1.3. اگر نسخه فایلی وجود ندارد، سعی کنید از DT در یک نسخه سرویس گیرنده-سرور با DB2 بارگیری کنید (که نیاز به منحصر به فرد بودن کمتری دارد)، و سپس تست و تصحیح و همچنین پیکربندی - تأیید پیکربندی - بررسی یکپارچگی منطقی پیکربندی را انجام دهید. + جستجو برای مراجع نامعتبر.

1.4. برای بومی سازی مشکل، می توانید داده های شیئی را که بارگذاری آن ناموفق است، تعیین کنید. برای انجام این کار، باید ردیابی را در ابزار Profiler در هنگام بوت فعال کنید یا ضبط را در گزارش رویداد پردازش DBMSSQL و EXCP فعال کنید.

2. اگر مشکل عدم منحصربفرد بودن هنگام کار کردن کاربران رخ دهد:

2.1. درخواست مشکل ساز را با استفاده از روش پاراگراف 1.4 پیدا کنید.

2.1.2. گاهی اوقات هنگام اجرای کوئری ها خطایی رخ می دهد، به عنوان مثال:

این خطا به این دلیل رخ می دهد که در ماژول ثبت انباشت "زمان کار کارکنان سازمان ها" در روش "ثبت نام مجدد محاسبات" ، کلمه سرویس "DIFFERENT" در درخواست گنجانده نشده است.
کد 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, _Fld1393_TYPE, _Fld1387, _Fld1388, _Fld1389, _Fld1390, _Fld1391RRef, _Fld1392RRef, _Fld1393_TYPE, _Fld1393_TYPE_Fld1393_TYPE _Fld1393_TYPE, _Fld139Fld ld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRref, _Fld22261_TYPE, _Fld22261_TYPE, _1RFld2 Ref, _1RFld2, _Fld22261_TYPE, _11_2Ref
قبل از انجام مراحل زیر، لطفاً از پایگاه داده خود نسخه پشتیبان تهیه کنید.
اجرا در MS SQL Server Query Analyzer:
کد SQL S_elect count(*)، _Document140_IDRRef، _KeyField
from_Document140_VT1385
گروه توسط _Document140_IDRRef، _KeyField
داشتن count(*) > 1
از آن برای یافتن مقادیر ستون های _Document140_IDRRef، _KeyField، رکوردهای تکراری (id، کلید) استفاده کنید.

با استفاده از درخواست:
کد 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 = key1

حذف از _Document140_VT1385
که در آن _Document140_IDRRef = id1 و _KeyField = key1

در _Document140_VT1385_ وارد می کنم
S_انتخاب #tmp1

جدول D_rop #tmp1

روش توصیف شده باید برای هر جفت رکورد تکراری انجام شود.

2.2.3. مثال دوم:
کد SQL S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Description
FROM _Reference8_
GROUP BY _IDRRef, _Description
داشتن (COUNT(*) > 1)

2.3.4 مثالی از تعیین رکوردهای غیر منحصر به فرد با استفاده از پرس و جوی 1C:Enterprise:
کد 1C v 8.x SELECT Directory.Link
FROM Directory.Directory AS Directory
GROUP BY Directory.Link
دارای مقدار (*) > 1




بالا