Аппараттық және бағдарламалық қамтамасыз етуді орнату

Бірегей емес мәнді бірегей индекске кірістіру әрекеті жасалды. Қате: бірегей емес мәнді бірегей индекске енгізу әрекеті: microsoft sql сервері

Сіз жолдарды қамтитын хабарламаны кездестірдіңіз:
SQL серверіне арналған Microsoft OLE DB провайдері: CREATE UNIQUE INDEX тоқтатылды, себебі индекс идентификаторы үшін қайталанатын кілт табылды
немесе
Нысанда қайталанатын кілт жолын енгізу мүмкін емес
немесе
Бірегей емес мәнді бірегей индекске кірістіру әрекеті жасалды.

Шешім нұсқалары:

1. SQL Server басқару студиясында біз сәтсіз индексті физикалық түрде жоямыз (менің жағдайда бұл есеп регистрінің қорытындылар кестесіндегі индекс болды). 1С-те біз ақаулы құжаттарды таратамыз. Тестілеу және түзету режимінде кестелерді қайта индекстеу + қорытындыларды қайта есептеу үшін құсбелгілерді қойыңыз. 1С индексті қатесіз қайта жасайды. Біз бұрын сәтсіз құжаттарды орындаймыз.

2. 1) Management Studio 2005 көмегімен индексті құруға арналған құру сценарийін жасадым, ол қате болды және оны файлға сақтадым.
2) _AccumRgTn19455 кестесіндегі индексті қолмен өлтірді
3) сияқты сұранысты іске қосты
SQL коды S_elect count(*), index_fields
FR OM AccumRgTn19455
GROUP BY индекс_өрісі
САН (*)>1
Индекс жойылғаннан кейін мен 15 қайталанатын жазбаны көрсеттім, бірақ 2-қадамға дейін сұрау ештеңе қайтармады.
4) Мен барлық жазбаларды қарап шықтым және көшірмелерді қолмен тазаладым. Негізінде, мен жалпы немен айналысып жатқанымды түсіну үшін «Есептер құрылымын» өңдеуді де қолдандым. _AccumRgTn19455 кестесінде «Өнім шығару (салық есебі)» жинақтау регистрі сақталатыны анықталды. Мен сондай-ақ sql сұрауларымен айналыстым, 15 бірегей емес құжатты анықтадым және барлық әрекеттерді орындағаннан кейін 1С-те бұл құжаттардың қалыпты, қатесіз өңделуін тексердім. Әрине, кестелерді кездейсоқ тазалаудың қажеті жоқ: не тазартылып жатқанын және оның неге айналуы мүмкін екенін түсіну маңызды.
5) Файлда сақталған индексті құру сұранысын іске қосты.
6) Деректер базасын бір пайдаланушы режиміне ауыстырды және dbcc checkdb іске қосты - бұл жолы қателер болмады.
7) Негізді бір пайдаланушы режиміне қайта көшірді.
Барлығы ... мәселе жеңілді. Тіпті 1С-те мен «Тестілеу және түзетуді» іске қостым, онда да бәрі жақсы болды, ол бірегей емес индекске ант беруді тоқтатты.

3. Егер бірегейлік нөлдік мәндері бар күндерде болса, онда ығысу параметрі 2000 болатын база құру арқылы мәселе шешіледі.

1. Мәселе дерекқорды жүктеуде болса, онда:
1.1. Егер сіз MS SQL Server дерекқорына жүктеп жатсаңыз (dt-файлын пайдаланып), онда дерекқорды құру кезінде жүктеу алдында күннің ауытқуын көрсетіңіз - 2000.
Егер негіз 0 офсетімен жасалған болса, 2000-мен жаңасын жасаңыз.

1.2. Егер дерекқормен файлдық нұсқада жұмыс істеу мүмкін болса, онда Тестілеу және Бекіту, сонымен қатар Конфигурация - Конфигурацияны тексеру - Конфигурацияның логикалық тұтастығын тексеру + Қате сілтемелерді іздеу орындаңыз.

1.3. Егер файл нұсқасы болмаса, DT-ден DB2 клиент/сервер нұсқасына жүктеп көріңіз (бірегейлігі азырақ таңдалады), содан кейін Тексеру және түзету, содан кейін Конфигурация - Конфигурацияны тексеру - Конфигурация логикалық тұтастығын тексеру + Нашар сілтеме іздеу құралы.

1.4. Мәселені локализациялау үшін жүктелуі орындалмаған нысанның деректерін анықтауға болады. Бұл әрекетті орындау үшін Profiler утилитасында жүктеу уақытында бақылауды қосу керек немесе DBMSSQL және EXCP процесс оқиғалары журналына тіркеуді қосу керек.

2. Бірегейсіздік мәселесі пайдаланушылардың жұмысы кезінде көрінсе:

2.1. 1.4-тармақтың әдісі арқылы проблемалық сұранысты табыңыз.

2.1.2. Кейде сұрауларды орындау кезінде қате пайда болады, мысалы:

Бұл қате жинақтау регистрінің модулінде « Жұмыс уақытыұйымдардың қызметкерлері» деген сұраныстағы «Қайта есептеулер тізілімі» тәртібінде «ТҮРЛІ» қызметтік сөзі жоқ.
Код 1C v 8.x I.e. болуы керек:
Сұраныс = Жаңа сұраныс(
«басқасын ТАҢДАҢЫЗ
| Негізгі. Жеке,
. . . . .
ZUP және UPP соңғы шығарылымдарында қате пайда болмайды, себебі. онда «ӘРтүрлі» деп жазылған.

2.2. Алдыңғы абзацтан проблемалық көрсеткішті тапқаннан кейін бірегей емес жазбаны табу керек.
2.2.1. 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_RTRef, _Fld1393_RRRef, _Fld1394,_Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRRef, _Fld22261_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
Төмендегі процедураны орындамас бұрын, орындаңыз сақтық көшірмеДерекқор.
MS SQL Server Query Analyzer бағдарламасында іске қосыңыз:
SQL коды S_elect count(*), _Document140_IDRRef, _KeyField
_Document140_VT1385 ішінен
_Document140_IDRRef, _KeyField бойынша топтау
саны бар (*) > 1
Оны _Document140_IDRRef, _KeyField, қайталанатын жазбалар (id, кілт) бағандарының мәндерін білу үшін пайдаланыңыз.

Өтінішпен:
SQL коды S_elect *
_Document140_VT1385 ішінен
мұндағы _Document140_IDRRef = id1 және _KeyField = key1 немесе _Document140_IDRRef = id2 және _KeyField = key2 немесе ...
қайталанатын жазбалардың басқа бағандарының мәндерін қараңыз.
Егер екі жазбаның да мәнді мәндері болса және бұл мәндер әртүрлі болса, _KeyField мәнін бірегей етіп бекітіңіз. Бұл әрекетті орындау үшін _KeyField(keymax) максималды мәнін анықтаңыз:
SQL коды S_elect max(_KeyField)
_Document140_VT1385 ішінен
ere_Document140_IDRRef=id1
Қайталанатын жазбалардың біріндегі _KeyField мәнін дұрысымен ауыстырыңыз:
SQL кодын жаңарту _Document140_VT1385
_KeyField = keymax + 1 орнатыңыз

Мұндағы _LineNo1386 = екі қайталанатын жазбаның біреуін таңдауға мүмкіндік беретін қосымша шарт.

Қайталанатын жазбалардың біреуі (немесе екеуі де) анық қате мәнге ие болса, оны алып тастау керек:
SQL кодын _Document140_VT1385 ішінен жою
мұнда _Document140_IDRRef = id1 және _LineNo1386 = lineno1
Қайталанатын жазбалар барлық бағандарда бірдей мәндерге ие болса, олардың біреуін қалдыру керек:
SQL коды S_elect бөлек *
#tmp1 ішіне
_Document140_VT1385 ішінен

_Document140_VT1385 ішінен жою
_Document140_IDRRef = id1 және _KeyField = кілт1

_Document140_VT1385 ішіне енгіземін
#tmp1_таңдаңыз

D_rop кестесі #tmp1

Сипатталған процедура қайталанатын жазбалардың әрбір жұбы үшін орындалуы керек.

2.2.3. Екінші мысал:
SQL коды S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Сипаттамасы
_Анықтама 8_
_IDRRef, _Сипаттамасы бойынша ТОПТАУ
БАР (COUNT(*) > 1)

2.3.4 1C: Enterprise сұранысы арқылы бірегей емес жазбаларды анықтау мысалы:
Код 1C v 8.x Нұсқаулықты ТАҢДАУ Сілтеме
Каталогтан.Каталог AS Каталог
ТОПТАУ
САНЫ БАР (*) > 1

Ақпарат сайттан алынды

Сіз жолдарды қамтитын хабарламаны кездестірдіңіз:
SQL серверіне арналған Microsoft OLE DB провайдері: CREATE UNIQUE INDEX тоқтатылды, себебі индекс идентификаторы үшін қайталанатын кілт табылды
немесе
Нысанда қайталанатын кілт жолын енгізу мүмкін емес
немесе
Бірегей емес мәнді бірегей индекске кірістіру әрекеті жасалды.

Шешім нұсқалары:

1. SQL Server басқару студиясында біз сәтсіз индексті физикалық түрде жоямыз (менің жағдайда бұл есеп регистрінің қорытындылар кестесіндегі индекс болды). 1С-те біз ақаулы құжаттарды таратамыз. Тестілеу және түзету режимінде кестелерді қайта индекстеу + қорытындыларды қайта есептеу үшін құсбелгілерді қойыңыз. 1С индексті қатесіз қайта жасайды. Біз бұрын сәтсіз құжаттарды орындаймыз.

2. 1) Management Studio 2005 көмегімен индексті құруға арналған құру сценарийін жасадым, ол қате болды және оны файлға сақтадым.
2) _AccumRgTn19455 кестесіндегі индексті қолмен өлтірді
3) сияқты сұранысты іске қосты
SQL коды S_elect count(*), index_fields
AccumRgTn19455-тен
GROUP BY индекс_өрісі
САН (*)>1
Индекс жойылғаннан кейін мен 15 қайталанатын жазбаны көрсеттім, бірақ 2-қадамға дейін сұрау ештеңе қайтармады.
4) Мен барлық жазбаларды қарап шықтым және көшірмелерді қолмен тазаладым. Негізінде, мен жалпы немен айналысып жатқанымды түсіну үшін «Есептер құрылымын» өңдеуді де қолдандым. _AccumRgTn19455 кестесінде «Өнім шығару (салық есебі)» жинақтау регистрі сақталатыны анықталды. Мен сондай-ақ sql сұрауларымен айналыстым, 15 бірегей емес құжатты анықтадым және барлық әрекеттерді орындағаннан кейін 1С-те бұл құжаттардың қалыпты, қатесіз өңделуін тексердім. Әрине, кестелерді кездейсоқ тазалаудың қажеті жоқ: не тазартылып жатқанын және оның неге айналуы мүмкін екенін түсіну маңызды.
5) Файлда сақталған индексті құру сұранысын іске қосты.
6) Деректер базасын бір пайдаланушы режиміне ауыстырды және dbcc checkdb іске қосты - бұл жолы қателер болмады.
7) Негізді бір пайдаланушы режиміне қайта көшірді.
Барлығы ... мәселе жеңілді. Тіпті 1С-те мен «Тестілеу және түзетуді» іске қостым, онда да бәрі жақсы болды, ол бірегей емес индекске ант беруді тоқтатты.

3. Егер бірегейлік нөлдік мәндері бар күндерде болса, онда ығысу параметрі 2000 болатын база құру арқылы мәселе шешіледі.

1. Мәселе дерекқорды жүктеуде болса, онда:
1.1. Егер сіз MS SQL Server дерекқорына жүктеп жатсаңыз (dt-файлын пайдаланып), онда дерекқорды құру кезінде жүктеу алдында күннің ауытқуын көрсетіңіз - 2000.
Егер негіз 0 офсетімен жасалған болса, 2000-мен жаңасын жасаңыз.

1.2. Егер дерекқормен файлдық нұсқада жұмыс істеу мүмкін болса, онда Тестілеу және Бекіту, сонымен қатар Конфигурация - Конфигурацияны тексеру - Конфигурацияның логикалық тұтастығын тексеру + Қате сілтемелерді іздеу орындаңыз.

1.3. Егер файл нұсқасы болмаса, DT-ден DB2 клиент/сервер нұсқасына жүктеп көріңіз (бірегейлігі азырақ таңдалады), содан кейін Тексеру және түзету, содан кейін Конфигурация - Конфигурацияны тексеру - Конфигурация логикалық тұтастығын тексеру + Нашар сілтеме іздеу құралы.

1.4. Мәселені локализациялау үшін жүктелуі орындалмаған нысанның деректерін анықтауға болады. Бұл әрекетті орындау үшін Profiler утилитасында жүктеу уақытында бақылауды қосу керек немесе DBMSSQL және EXCP процесс оқиғалары журналына кіруді қосу керек.

2. Бірегейсіздік мәселесі пайдаланушылардың жұмысы кезінде көрінсе:

2.1. 1.4-тармақтың әдісі арқылы проблемалық сұранысты табыңыз.

2.1.2. Кейде сұрауларды орындау кезінде қате пайда болады, мысалы:

Бұл қате «Ұйымдар қызметкерлерінің жұмыс уақыты» жинақтау тізілімінің модулінде «Қайта есептеулер тізілімі» тәртібінде сұраныста «ӘРТҚЕ» қызметтік сөзінің болмауына байланысты туындайды.
Код 1C v 8.x I.e. болуы керек:
Сұраныс = Жаңа сұраныс(
«басқасын ТАҢДАҢЫЗ
| Негізгі. Жеке,
. . . . .
ZUP және UPP соңғы шығарылымдарында қате пайда болмайды, себебі. онда «ӘРтүрлі» деп жазылған.

2.2. Алдыңғы абзацтан проблемалық көрсеткішті тапқаннан кейін бірегей емес жазбаны табу керек.
2.2.1. 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_RTRef, _Fld1393_RRRef, _Fld1394,_Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRRef, _Fld22261_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
Төмендегі процедураны орындамас бұрын дерекқордың сақтық көшірмесін жасаңыз.
MS SQL Server Query Analyzer бағдарламасында іске қосыңыз:
SQL коды S_elect count(*), _Document140_IDRRef, _KeyField
_Document140_VT1385 ішінен
_Document140_IDRRef, _KeyField бойынша топтау
саны бар (*) > 1
Оны _Document140_IDRRef, _KeyField, қайталанатын жазбалар (id, кілт) бағандарының мәндерін білу үшін пайдаланыңыз.

Өтінішпен:
SQL коды S_elect *
_Document140_VT1385 ішінен
немесе _Document140_IDRRef = id2 және _KeyField = key2 немесе ...
қайталанатын жазбалардың басқа бағандарының мәндерін қараңыз.
Егер екі жазбаның да мәнді мәндері болса және бұл мәндер әртүрлі болса, _KeyField мәнін бірегей етіп бекітіңіз. Бұл әрекетті орындау үшін _KeyField(keymax) максималды мәнін анықтаңыз:
SQL коды S_elect max(_KeyField)
_Document140_VT1385 ішінен
мұндағы _Document140_IDRRef = id1
Қайталанатын жазбалардың біріндегі _KeyField мәнін дұрысымен ауыстырыңыз:
SQL кодын жаңарту _Document140_VT1385
_KeyField = keymax + 1 орнатыңыз
Мұндағы _LineNo1386 = екі қайталанатын жазбаның біреуін таңдауға мүмкіндік беретін қосымша шарт.

Қайталанатын жазбалардың біреуі (немесе екеуі де) анық қате мәнге ие болса, оны алып тастау керек:
SQL кодын _Document140_VT1385 ішінен жою
мұндағы _Document140_IDRRef = id1 және _LineNo1386 = lineno1
Қайталанатын жазбалар барлық бағандарда бірдей мәндерге ие болса, олардың біреуін қалдыру керек:
SQL коды S_elect бөлек *
#tmp1 ішіне
_Document140_VT1385 ішінен
мұндағы _Document140_IDRRef = id1 және _KeyField = кілт1

_Document140_VT1385 ішінен жою
мұндағы _Document140_IDRRef = id1 және _KeyField = кілт1

_Document140_VT1385 ішіне енгіземін
#tmp1_таңдаңыз

D_rop кестесі #tmp1

Сипатталған процедура қайталанатын жазбалардың әрбір жұбы үшін орындалуы керек.

2.2.3. Екінші мысал:
SQL коды S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Сипаттамасы
_Анықтама 8_
_IDRRef, _Сипаттамасы бойынша ТОПТАУ
БАР (COUNT(*) > 1)

2.3.4 1C: Enterprise сұранысы арқылы бірегей емес жазбаларды анықтау мысалы:
Код 1C v 8.x Нұсқаулықты ТАҢДАУ Сілтеме
Каталогтан.Каталог AS Каталог
ТОПТАУ
САНЫ БАР (*) > 1

Сіз жолдарды қамтитын хабарламаны кездестірдіңіз:
SQL серверіне арналған Microsoft OLE DB провайдері: CREATE UNIQUE INDEX тоқтатылды, себебі индекс идентификаторы үшін қайталанатын кілт табылды
немесе
Нысанда қайталанатын кілт жолын енгізу мүмкін емес
немесе
Бірегей емес мәнді бірегей индекске кірістіру әрекеті жасалды.

Шешім нұсқалары:

1. SQL Server басқару студиясында біз сәтсіз индексті физикалық түрде жоямыз (менің жағдайда бұл есеп регистрінің қорытындылар кестесіндегі индекс болды). 1С-те біз ақаулы құжаттарды таратамыз. Тестілеу және түзету режимінде кестелерді қайта индекстеу + қорытындыларды қайта есептеу үшін құсбелгілерді қойыңыз. 1С индексті қатесіз қайта жасайды. Біз бұрын сәтсіз құжаттарды орындаймыз.

2. 1) Management Studio 2005 көмегімен индексті құруға арналған құру сценарийін жасадым, ол қате болды және оны файлға сақтадым.
2) _AccumRgTn19455 кестесіндегі индексті қолмен өлтірді
3) сияқты сұранысты іске қосты
SQL коды S_elect count(*), index_fields
AccumRgTn19455-тен
GROUP BY индекс_өрісі
САН (*)>1
Индекс жойылғаннан кейін мен 15 қайталанатын жазбаны көрсеттім, бірақ 2-қадамға дейін сұрау ештеңе қайтармады.
4) Мен барлық жазбаларды қарап шықтым және көшірмелерді қолмен тазаладым. Негізінде, мен жалпы немен айналысып жатқанымды түсіну үшін «Есептер құрылымын» өңдеуді де қолдандым. _AccumRgTn19455 кестесінде «Өнім шығару (салық есебі)» жинақтау регистрі сақталатыны анықталды. Мен сондай-ақ sql сұрауларымен айналыстым, 15 бірегей емес құжатты анықтадым және барлық әрекеттерді орындағаннан кейін 1С-те бұл құжаттардың қалыпты, қатесіз өңделуін тексердім. Әрине, кестелерді кездейсоқ тазалаудың қажеті жоқ: не тазартылып жатқанын және оның неге айналуы мүмкін екенін түсіну маңызды.
5) Файлда сақталған индексті құру сұранысын іске қосты.
6) Деректер базасын бір пайдаланушы режиміне ауыстырды және dbcc checkdb іске қосты - бұл жолы қателер болмады.
7) Негізді бір пайдаланушы режиміне қайта көшірді.
Барлығы ... мәселе жеңілді. Тіпті 1С-те мен «Тестілеу және түзетуді» іске қостым, онда да бәрі жақсы болды, ол бірегей емес индекске ант беруді тоқтатты.

3. Егер бірегейлік нөлдік мәндері бар күндерде болса, онда ығысу параметрі 2000 болатын база құру арқылы мәселе шешіледі.

1. Мәселе дерекқорды жүктеуде болса, онда:
1.1. Егер сіз MS SQL Server дерекқорына жүктеп жатсаңыз (dt-файлын пайдаланып), онда дерекқорды құру кезінде жүктеу алдында күннің ауытқуын көрсетіңіз - 2000.
Егер негіз 0 офсетімен жасалған болса, 2000-мен жаңасын жасаңыз.

1.2. Егер дерекқормен файлдық нұсқада жұмыс істеу мүмкін болса, онда Тестілеу және Бекіту, сонымен қатар Конфигурация - Конфигурацияны тексеру - Конфигурацияның логикалық тұтастығын тексеру + Қате сілтемелерді іздеу орындаңыз.

1.3. Егер файл нұсқасы болмаса, DT-ден DB2 клиент/сервер нұсқасына жүктеп көріңіз (бірегейлігі азырақ таңдалады), содан кейін Тексеру және түзету, содан кейін Конфигурация - Конфигурацияны тексеру - Конфигурация логикалық тұтастығын тексеру + Нашар сілтеме іздеу құралы.

1.4. Мәселені локализациялау үшін жүктелуі орындалмаған нысанның деректерін анықтауға болады. Бұл әрекетті орындау үшін Profiler утилитасында жүктеу уақытында бақылауды қосу керек немесе DBMSSQL және EXCP процесс оқиғалары журналына кіруді қосу керек.

2. Бірегейсіздік мәселесі пайдаланушылардың жұмысы кезінде көрінсе:

2.1. 1.4-тармақтың әдісі арқылы проблемалық сұранысты табыңыз.

2.1.2. Кейде сұрауларды орындау кезінде қате пайда болады, мысалы:

Бұл қате «Ұйымдар қызметкерлерінің жұмыс уақыты» жинақтау тізілімінің модулінде «Қайта есептеулер тізілімі» тәртібінде сұраныста «ӘРТҚЕ» қызметтік сөзінің болмауына байланысты туындайды.
Код 1C v 8.x I.e. болуы керек:
Сұраныс = Жаңа сұраныс(
«басқасын ТАҢДАҢЫЗ
| Негізгі. Жеке,
. . . . .
ZUP және UPP соңғы шығарылымдарында қате пайда болмайды, себебі. онда «ӘРтүрлі» деп жазылған.

2.2. Алдыңғы абзацтан проблемалық көрсеткішті тапқаннан кейін бірегей емес жазбаны табу керек.
2.2.1. 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_RTRef, _Fld1393_RRRef, _Fld1394,_Fld1395, _Fld1396RRef, _Fld1397, _Fld1398, _Fld1399RRef, _Fld22260_TYPE, _Fld22260_RTRef, _Fld22260_RRRef, _Fld22261_TYPE, _Fld22261_RTRef, _Fld22261_RRRef
Төмендегі процедураны орындамас бұрын дерекқордың сақтық көшірмесін жасаңыз.
MS SQL Server Query Analyzer бағдарламасында іске қосыңыз:
SQL коды S_elect count(*), _Document140_IDRRef, _KeyField
_Document140_VT1385 ішінен
_Document140_IDRRef, _KeyField бойынша топтау
саны бар (*) > 1
Оны _Document140_IDRRef, _KeyField, қайталанатын жазбалар (id, кілт) бағандарының мәндерін білу үшін пайдаланыңыз.

Өтінішпен:
SQL коды S_elect *
_Document140_VT1385 ішінен
немесе _Document140_IDRRef = id2 және _KeyField = key2 немесе ...
қайталанатын жазбалардың басқа бағандарының мәндерін қараңыз.
Егер екі жазбаның да мәнді мәндері болса және бұл мәндер әртүрлі болса, _KeyField мәнін бірегей етіп бекітіңіз. Бұл әрекетті орындау үшін _KeyField(keymax) максималды мәнін анықтаңыз:
SQL коды S_elect max(_KeyField)
_Document140_VT1385 ішінен
мұндағы _Document140_IDRRef = id1
Қайталанатын жазбалардың біріндегі _KeyField мәнін дұрысымен ауыстырыңыз:
SQL кодын жаңарту _Document140_VT1385
_KeyField = keymax + 1 орнатыңыз
Мұндағы _LineNo1386 = екі қайталанатын жазбаның біреуін таңдауға мүмкіндік беретін қосымша шарт.

Қайталанатын жазбалардың біреуі (немесе екеуі де) анық қате мәнге ие болса, оны алып тастау керек:
SQL кодын _Document140_VT1385 ішінен жою
мұндағы _Document140_IDRRef = id1 және _LineNo1386 = lineno1
Қайталанатын жазбалар барлық бағандарда бірдей мәндерге ие болса, олардың біреуін қалдыру керек:
SQL коды S_elect бөлек *
#tmp1 ішіне
_Document140_VT1385 ішінен
мұндағы _Document140_IDRRef = id1 және _KeyField = кілт1

_Document140_VT1385 ішінен жою
мұндағы _Document140_IDRRef = id1 және _KeyField = кілт1

_Document140_VT1385 ішіне енгіземін
#tmp1_таңдаңыз

D_rop кестесі #tmp1

Сипатталған процедура қайталанатын жазбалардың әрбір жұбы үшін орындалуы керек.

2.2.3. Екінші мысал:
SQL коды S_elect COUNT(*) AS Expr2, _IDRRef AS Expr1, _Сипаттамасы
_Анықтама 8_
_IDRRef, _Сипаттамасы бойынша ТОПТАУ
БАР (COUNT(*) > 1)

2.3.4 1C: Enterprise сұранысы арқылы бірегей емес жазбаларды анықтау мысалы:
Код 1C v 8.x Нұсқаулықты ТАҢДАУ Сілтеме
Каталогтан.Каталог AS Каталог
ТОПТАУ
САНЫ БАР (*) > 1

Кейбір нысандарда, атрибуттарда, ішкі контода дерекқорда NULL мәні болса, бірақ оларда мұндай мән бола алмаса, қате орын алады. Және бұл қате тек SQL дерекқорларында пайда болады. Анау. егер мұндай дерекқор файлға түсірілсе, онда бұл қате болмайды. Өйткені файлдық базаның өз кестелері бар (барлығы 4), ал SQL-де өз кестелері бар. Ал SQL дерекқоры өз кестелеріндегі осындай мәндерге сыни түрде жауап береді.

Бұл мәселе деректер қорының кез келген нұсқаларында (SQL немесе файл) ешбір сынақтармен (сыртқы да, ішкі де емес) және тіпті SQL-де кестелерді қайта құрылымдауға арналған SQL менеджеріндегі _1sp_DBReindex процедурасы арқылы шешілмейді.

Есеп 3.0 PROF-тен CORP-қа көшу мысалын қолданып, мәселенің шешімін талдап көрейік. Өткізуден кейін 68.01 шотында Салық органында тіркеудің жаңа субконтосы бар. Содан кейін, SQL дерекқорларында осы тіркелгіні пайдаланатын құжаттардың PROF нұсқасындағы барлық жасаулар қайта қосылмайды. Жоғарыда көрсетілген қате шығады. Өйткені бұл ескі құжаттарға арналған жаңа қосалқы шарт, хабарлардағы, NULL мәнімен жазылады (бірақ ол бос мән, жақсы немесе қандай да бір жолмен салық органы).

Бұл қатені шешу үшін NULL мәндерін олар болмауы керек жерде жою керек. Бұл жағдайда Салық органында тіркелу субконтосы қолданылатын құжаттарда. Мұны NULL мәнін бос мәнмен алмастыратын өңдеуді жазу арқылы жасауға болады (дайын өңдеуді осы мақаладан жүктеп алуға болады). Өңдеу жасаңыз, tk. құжатты жариялаудағы осы ішкі контексттің мәнін қолмен өзгерту әрекеті бірдей қатеге әкеледі.

Барлық қосалқы контактілердегі NULL таңбаларын ауыстыруды өңдеу Салық органында тіркеуді төменде осы мақаладан жүктеп алуға болады.

БІРАҚ SQL дерекқорындағы NULL мәнін ауыстыру жұмыс істемейді, өңдеу кезінде бірдей қате пайда болады. Сондықтан мұны істеу керек:

1. Қазірдің өзінде жұмыс істеп тұрған, CORP нұсқасына аударылған, SQL дерекқорын dt'snik ішіне жүктеңіз (конфигураторда Әкімшілік - Дерекқорды жүктеп салу - дерекқорды *.dt файлы түрінде жүктеп салу орнын таңдаңыз)

2. dt файлдарын файл базасына жүктеңіз (қажетсіз немесе алдын ала дайындалған, таза, файлдық дерекқорда, конфигураторда Administration - Load database - бұрын жүктелмеген dt файлдарын таңдаңыз)

3. Файл базасында өңдеуді орындаңыз (қате болмайды және барлық NULL дұрыс ауыстырылады) (өңдеуді орындау жолы төменде сипатталған)

5. Енді, керісінше, dt-ді файл базасынан түсіріп, оны SQL дерекқорына жүктеңіз. Енді өңделген құжаттарды орналастыру кезінде қателер болмайды.

Осы мақаланың өңдеуі көрсетілген кезеңдегі барлық құжаттарды табады, онда хабарлар NULL мәні бар RegisterIn Sax Authority қосалқы контактісі бар (ол CORP нұсқасында көрсетіледі). Және бұл мәнді бос мәнмен ауыстырады.

Өңдеу кезінде құжаттарды өңдеу қажет кезеңді көрсету керек (бұл дерекқорда жазбалар сақталатын бүкіл кезең үшін мүмкін) және «Кестелік бөлікті толтыру» түймесін басыңыз. Осыдан кейін сіз қандай құжаттарды өңдеуге болатын құсбелгілерді қоюға болады (барлығын таңдауға болады) және «Өңдеуді орындау» түймесін басыңыз.

Тиісінше, егер біреуде бірдей қате болса, бірақ CORP-ке ауысқаннан кейін ЕМЕС, бірақ мысалы, алмасудан кейін, кейбір деректерді жүктегеннен, кейбір өңдеулерді орындағаннан кейін және т.б. Содан кейін белгілі бір құжатта/каталогта NULL мәні қай жерде тағайындалғанын анықтау керек және осы NULL мәнін ұқсас жолмен, бірақ өз өңдеуімен, бірақ жоғарыда сипатталған тәртіпте жою керек. NULL болуы мүмкін екенін есте сақтаңыз, құжатты жариялаудағы сияқты, соның ішінде. бухгалтерлік есеп ғана емес, құжаттың/анықтамалықтың бір жерінде, кейбір мәліметтерде, бірақ бұл жағдайда ол тіпті ашылмауы мүмкін.

Сондай-ақ, құжатты жариялау кезінде сізде бұл қате болса, Bukh CORP файлдық базасын SQL-ге тасымалдағаннан кейін (және дерекқор бір кездері PROF болған), бұл PRO нұсқасында жасалған құжаттар енді RegistrationIn ішінде де бар дегенді білдіреді. Салық органы NULL мәнін субконтенттейді және SQL дерекқоры мұны қабылдамайды. Ал SQL-де мәліметтер базасын жүктегенде мұндай қате пайда болады. Мұнда іс жүзінде файл базасында NULL мәндері болмайды, бірақ SQL өз кестелеріне дәл осындай мәндерді жүктейді. Сондықтан бұл жерде мәжбүрлеу керек SQL деректер қорыосы NULL мәндерін жасаңыз, содан кейін оларды файл базасында түзетіңіз.Бірақ мен мұны қалай істеу керектігін айтпаймын.

Мақала ұнады ма? Достарыңызбен бөлісіңіз!
Бұл мақала пайдалы болды ма?
Иә
Жоқ
Пікіріңізге рахмет!
Бірдеңе дұрыс болмады және сіздің дауысыңыз есептелмеді.
Рақмет сізге. Сіздің хабарламаңыз жіберілді
Мәтіннен қате таптыңыз ба?
Оны таңдаңыз, басыңыз Ctrl+Enterжәне біз оны түзетеміз!