|
Восстановление по УИД | ☑ | ||
---|---|---|---|---|
0
УПП
27.03.13
✎
10:54
|
Коллеги, добрый день. Я тут разбираюсь с проблемой задвоиности индексов, нашел таблицу проблемную, по сути в ней задовоиности нет, просто платформы пытается вставить не уникальное значение в индекс. Ну не в этом дело, смотрю значения этой таблицы:
Я так полагаю, что (поле kref) 0xA075001EC9EBA4BC11DFFD4159868477 это УИД?, как его можно восстановить что бы понять, что этой за значение? Хотя длина УИД 32 символа, здесь 34. |
|||
1
cw014
27.03.13
✎
10:55
|
(0) Сам то понял, что спросил?
|
|||
2
thezos
27.03.13
✎
10:56
|
(0) нет
|
|||
3
hhhh
27.03.13
✎
11:00
|
(0) 0x - это не символы.
|
|||
4
H A D G E H O G s
27.03.13
✎
11:01
|
И A075001EC9EBA4BC11DFFD4159868477 - тоже не символы.
|
|||
5
МихаилМ
27.03.13
✎
11:01
|
проверил - 32 естественно без 0x.
|
|||
6
H A D G E H O G s
27.03.13
✎
11:02
|
(0) а что значит восстановить?
|
|||
7
УПП
27.03.13
✎
11:04
|
Да, точно:
УИД A075001EC9EBA4BC11DFFD4159868477 Без 0x |
|||
8
УПП
27.03.13
✎
11:04
|
(7)
Соответственно Уид: A075001E-C9EB-A4BC-11DF-FD4159868477 |
|||
9
УПП
27.03.13
✎
11:05
|
(4) А что же это по вашему ?
|
|||
10
H A D G E H O G s
27.03.13
✎
11:08
|
(9) Набор чисел.
|
|||
11
cw014
27.03.13
✎
11:09
|
(10) И букав
|
|||
12
hhhh
27.03.13
✎
11:09
|
(8) ну в базе сделать Справочники.ВашСправочник.ПолучитьСсылку(Новый УникальныйИдентификатор("A075001EC9EBA4BC11DFFD4159868477"));
или Документы.ВашДОкумент.ПолучитьСсылку(Новый УникальныйИдентификатор("A075001EC9EBA4BC11DFFD4159868477")); ваша задача теперь выяснить конкретно: какой справочник это или документ. |
|||
13
cw014
27.03.13
✎
11:09
|
(8) Ошибаешься
|
|||
14
H A D G E H O G s
27.03.13
✎
11:12
|
(12) Там надо переставить значения предварительно.
|
|||
15
УПП
27.03.13
✎
11:12
|
(13) если я напишу так:
Соответственно Уид: Новый УникальныйИдентификатор("A075001EC9EBA4BC11DFFD4159868477") Вам легче спать будет? |
|||
16
cw014
27.03.13
✎
11:14
|
(15) Ты ошибся при преобразовании записи в таблице в уникальный идентификатор... Если в таблице поле = 0xA075001EC9EBA4BC11DFFD4159868477, тогда УИД объекта будет
59868477-FD41-11DF-A075-001EC9EBA4BC |
|||
17
УПП
27.03.13
✎
11:16
|
(16) почему такое преобразование идет? Какой алгоритм преобразования? Это точно ?
|
|||
18
cw014
27.03.13
✎
11:16
|
(17) Точнее не бывает
|
|||
19
cw014
27.03.13
✎
11:17
|
(17) Пока ты не поймешь, от какой таблицы твой УИД - ты не найдешь запись по нему
|
|||
20
Maxus43
27.03.13
✎
11:17
|
(17) в скл нет типа УИД 1совского
|
|||
21
H A D G E H O G s
27.03.13
✎
11:19
|
(20) Есть
|
|||
22
H A D G E H O G s
27.03.13
✎
11:20
|
uniqueidentifier так то.
Правда хранится это в binary(16), наверное для того, чтобы sql сам новые значения не хреначил. |
|||
23
cw014
27.03.13
✎
11:21
|
(17) А какие поля у твоей таблицы вообще есть?
|
|||
24
Maxus43
27.03.13
✎
11:22
|
(22) я всмысле ты уверен что тип значения uniqueidentifier идентичен 1совскому типу УникальныйИдетификатор?
|
|||
25
УПП
27.03.13
✎
11:25
|
(23) Вот запрос:
SELECT [_Period] ,[_RecorderTRef] ,[_RecorderRRef] ,[_LineNo] ,[_Correspond] ,[_KindRRef] ,[_Value_TYPE] ,[_Value_RTRef] ,[_Value_RRRef] FROM [_AccRgED21756] |
|||
26
Defender aka LINN
27.03.13
✎
11:25
|
(24) Я уверен, ибо проверял и юзал.
|
|||
27
H A D G E H O G s
27.03.13
✎
11:26
|
(25) Отключи Итоги по Регистру Бухгалтерии, обновись, включи итоги по регистру Бухгалтерии.
|
|||
28
cw014
27.03.13
✎
11:26
|
Я так понимаю, что вот эти поля, которые ты хочешь узнать:
[_RecorderTRef] [_RecorderRRef] |
|||
29
УПП
27.03.13
✎
11:27
|
У полей REF тип binary
|
|||
30
УПП
27.03.13
✎
11:27
|
(28) Ну да
|
|||
31
H A D G E H O G s
27.03.13
✎
11:28
|
(27) Нет, нет, нет.
Я ошибся, перепутал _AccRgED с AccRgAT. Итогами это не вылечишь. |
|||
32
УПП
27.03.13
✎
11:28
|
(30) По ним завдоение индекса идет
|
|||
33
cw014
27.03.13
✎
11:28
|
RecorderTRef - номер документа. Преобразуй его в int (например, если у тебя там 0000018B, тогда значение будет = 395)...
Потом ищи таблицу _Document[твой получившийся номер] и в ней делай запрос SELECT * FROM _Document[твой получившийся номер] WHERE _RRef = 0xA075001EC9EBA4BC11DFFD4159868477 |
|||
34
H A D G E H O G s
27.03.13
✎
11:29
|
(32) Текст ошибки скажи.
|
|||
35
УПП
27.03.13
✎
11:29
|
При добавлении субконто на счет:
exec sp_executesql N'INSERT INTO _AccRgED21756 (_Period, _RecorderTRef, _RecorderRRef, _LineNo, _Correspond, _KindRRef, _Value_TYPE, _Value_RTRef, _Value_RRRef) SELECT T1._Period, T1._RecorderTRef, T1._RecorderRRef, T1._LineNo, P1, @P2, @P3, @P4, @P5 FROM _AccRg21728 T1 WHERE T1._AccountDtRRef = @P6',N'P1 numeric(1),@P2 varbinary(16),@P3 varbinary(1),@P4 varbinary(4),@P5 varbinary(16),@P6 varbinary(16)',0,0xB44B334DE4C5D19D4D7785E8F75E7ABE,0x08,0x000000C5,0x00000000000000000000000000000000,0x805D33BC049644DC4E1DE44B2F91458C Вылетает: Msg 2601, Level 14, State 1, Line 1 Cannot insert duplicate key row in object 'dbo._AccRgED21756' with unique index '_AccRg21756_ByPeriod_TRNRN'. The duplicate key value is (Oct 2 4009 11:25AM, 0x000001d6, 0x8f5d001ec9eba4bc11deaf18dc2e7afa, 1, 0xb44b334de4c5d19d4d7785e8f75e7abe, 0). The statement has been terminated. |
|||
36
УПП
27.03.13
✎
11:30
|
Делал запрос:
SELECT _Period, _RecorderTRef, _RecorderRRef, _LineNo, _Correspond, _KindRRef, _Value_TYPE, _Value_RTRef, _Value_RRRef, Count(*) FROM _AccRgED21756 GROUP BY _Period, _RecorderTRef, _RecorderRRef, _LineNo, _Correspond, _KindRRef, _Value_TYPE, _Value_RTRef, _Value_RRRef HAVING Count(*) > 1 Завдоенности в самой таблице нет, просто идет попытка вставки значения, которое задваивает индекс |
|||
37
УПП
27.03.13
✎
11:31
|
А что это за поля?
,[_Value_TYPE] ,[_Value_RTRef] ,[_Value_RRRef] |
|||
38
H A D G E H O G s
27.03.13
✎
11:32
|
(37) Значение субконто.
|
|||
39
H A D G E H O G s
27.03.13
✎
11:34
|
Посмотри, че за док Oct 2 4009 11:25AM сделал запись в РБ
|
|||
40
H A D G E H O G s
27.03.13
✎
11:34
|
Странно, что нет секунд
|
|||
41
УПП
27.03.13
✎
11:34
|
У меня такое ощущение, что в таблице остались записи от старого субконто "Статьи ДДС", сейчас его добавляю опять и потому идет задвоение. Не знаю уже что думать...
|
|||
42
H A D G E H O G s
27.03.13
✎
11:34
|
02.10.2009 в 11:25
|
|||
43
УПП
27.03.13
✎
11:34
|
(39) Таких полно, почти на каждый регистартор ругается
|
|||
44
H A D G E H O G s
27.03.13
✎
11:41
|
(41) А что тут думать - резервную копию - и
delete from _AccRgED21756 where AccRgED21756 _KindRRef=0xB44B334DE4C5D19D4D7785E8F75E7ABE |
|||
45
H A D G E H O G s
27.03.13
✎
11:43
|
delete from _AccRgED21756 where AccRgED21756. _KindRRef=0xB44B334DE4C5D19D4D7785E8F75E7ABE
|
|||
46
УПП
27.03.13
✎
11:46
|
(45) Это что вы удаляете ?
|
|||
47
H A D G E H O G s
27.03.13
✎
11:52
|
(46) Значения субконто для документов для ВидаСубконто "СтатьяДДС".
Только убедитесь, что 0xB44B334DE4C5D19D4D7785E8F75E7ABE - это точно СтатьяДДС. Отловите запрос ВЫБРАТЬ 1 КАК Поле1 ИЗ ПланВидовХарактеристик.ВидыСубконтоХозрасчетные КАК ВидыСубконтоХозрасчетные ГДЕ ВидыСубконтоХозрасчетные.Ссылка = Значение(ПланВидовХарактеристик.ВидыСубконтоХозрасчетные.СтатьиДвиженияДенежныхСредств) в профайлере и убедитесь, что там _idref ваш. |
|||
48
УПП
27.03.13
✎
12:02
|
(47) Да, все верно:
exec sp_executesql N'SELECT P1 FROM _Chrc994 T1 WITH(NOLOCK) WHERE (T1._IDRRef = @P2)',N'P1 numeric(1),@P2 varbinary(16)',1,0xB44B334DE4C5D19D4D7785E8F75E7ABE Значения остались. Да вот только удаляться то все, у меня проблема с 57.1, нужно какой то условие добавлять на счет к этой таблице? |
|||
49
H A D G E H O G s
27.03.13
✎
12:08
|
(48) А причем тут счета?
|
|||
50
H A D G E H O G s
27.03.13
✎
12:09
|
Это тупо табличка значений субконт в разрезе документа.
|
|||
51
УПП
27.03.13
✎
12:10
|
(50) Понял, сейчас на тесте попробую.
|
|||
52
Serginio1
27.03.13
✎
12:14
|
||||
53
УПП
27.03.13
✎
12:30
|
(50) Вся аналитика слетела по Статье ДДС. Видимо все же нужен дополнительный отбор?
|
|||
54
H A D G E H O G s
27.03.13
✎
12:33
|
(53) мммм, так.
|
|||
55
УПП
27.03.13
✎
12:36
|
(54)
Может по всем этим полям делать отбор, ну кроме периода конечно: (Oct 2 4009 11:25AM, 0x000001d6, 0x8f5d001ec9eba4bc11deaf18dc2e7afa, 1, 0xb44b334de4c5d19d4d7785e8f75e7abe, 0) ? |
|||
56
H A D G E H O G s
27.03.13
✎
12:39
|
(53) Вертаем пока табличку взад.
|
|||
57
H A D G E H O G s
27.03.13
✎
12:41
|
И отловим в профайлере такой запрос:
ВЫБРАТЬ 1 КАК Поле1 ИЗ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто ГДЕ ХозрасчетныйСубконто.Регистратор В (ВЫБРАТЬ РАЗЛИЧНЫЕ Хозрасчетный.Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный ГДЕ (Хозрасчетный.СчетДт = &Счет57_1 ИЛИ Хозрасчетный.СчетКт = &Счет57_1)) И ХозрасчетныйСубконто.Вид = &ВидСубконтоДДС |
|||
58
H A D G E H O G s
27.03.13
✎
12:42
|
Получим нечто подобное:
exec sp_executesql N'SELECT P1 FROM _AccRgED20737 T1 WITH(NOLOCK) WHERE T1._RecorderTRef + T1._RecorderRRef IN (SELECT T2._RecorderTRef + T2._RecorderRRef AS Q_001_F_000CRef FROM _AccRg20709 T2 WITH(NOLOCK) WHERE ((T2._AccountDtRRef = @P2) OR (T2._AccountCtRRef = @P2))) AND (T1._KindRRef = @P3)', N'P1 numeric(1,0),@P2 varbinary(16),@P3 varbinary(16)', 1, 0xA36F5219F3882D59474C2B8DF0E06657, 0xA2D9EF0AD9924E764E73FB1C43E874EE |
|||
59
H A D G E H O G s
27.03.13
✎
12:42
|
И заменим Select на Delete
|
|||
60
УПП
27.03.13
✎
12:50
|
exec sp_executesql N'DELETE
P1 FROM _AccRgED21756 T1 WITH(NOLOCK) WHERE T1._RecorderTRef + T1._RecorderRRef IN (SELECT T2._RecorderTRef + T2._RecorderRRef AS Q_001_F_000CRef FROM _AccRg21728 T2 WITH(NOLOCK) WHERE ((T2._AccountDtRRef = @P2) OR (T2._AccountCtRRef = @P2))) AND (T1._KindRRef = @P3)', N'P1 numeric(1,0),@P2 varbinary(16),@P3 varbinary(16)', 1, 0x805D33BC049644DC4E1DE44B2F91458C, 0xB44B334DE4C5D19D4D7785E8F75E7ABE Так? |
|||
61
УПП
27.03.13
✎
12:54
|
(60) Такую вот ошибку выдает:
Msg 1087, Level 16, State 1, Line 2 Must declare the table variable "@P1". |
|||
62
H A D G E H O G s
27.03.13
✎
12:58
|
(60) Ну что же ты.
exec sp_executesql N' delete FROM _AccRgED20737 WHERE _AccRgED20737._RecorderTRef + _AccRgED20737._RecorderRRef IN (SELECT T2._RecorderTRef + T2._RecorderRRef AS Q_001_F_000CRef FROM _AccRg20709 T2 WITH(NOLOCK) WHERE ((T2._AccountDtRRef = @P2) OR (T2._AccountCtRRef = @P2))) AND (_AccRgED20737._KindRRef = @P3)', N'@P2 varbinary(16),@P3 varbinary(16)', 0xA36F5219F3882D59474C2B8DF0E06655, 0xA2D9EF0AD9924E764E73FB1C43E874EE |
|||
63
МихаилМ
27.03.13
✎
13:05
|
._RecorderTRef + _RecorderRRef
некорректно. могут быть удалены не те данные |
|||
64
H A D G E H O G s
27.03.13
✎
13:06
|
(63) Например?
|
|||
65
H A D G E H O G s
27.03.13
✎
13:06
|
(63) Ты это 1С-ке скажи.
|
|||
66
H A D G E H O G s
27.03.13
✎
13:11
|
(63) Михаил, что там с не теми данными?
|
|||
67
МихаилМ
27.03.13
✎
13:12
|
(64)
пример 430 + 4567890900434345 429 + 4567890900434346 |
|||
68
H A D G E H O G s
27.03.13
✎
13:16
|
(67) Передай это в 1С. Я серьезно.
|
|||
69
МихаилМ
27.03.13
✎
13:17
|
(68)
не припомню ,что бы мы на "ты" переходили |
|||
70
H A D G E H O G s
27.03.13
✎
13:25
|
(69) Здесь, на форуме - можно.
|
|||
71
hhhh
27.03.13
✎
13:39
|
(68) лицензионным соглашением запрещено влезать не средствами платформы. Если передаст в 1с, его в черный список занесут.
|
|||
72
H A D G E H O G s
27.03.13
✎
13:41
|
(71) Даже профайлер запрещен?
|
|||
73
Maxus43
27.03.13
✎
13:42
|
Планы запроса разрешено смотреть, даже в тех журнале можно, норм всё
|
|||
74
УПП
27.03.13
✎
13:49
|
(71) Ничего подобного, я обращался в 1С по поводу задоиности индексов, вот их ответ:
Протестируйте вашу базу до попытки вставки субконто. Попробуйте выгрузить базу в dt (если возможно) и загрузить ее в файловую версию, протестировать ее там и добавить субконто. Другой способ - внести изменения в таблицу MS SQL Server Определить имя проблемной таблицы можно с помощью SQL Trace или технологического журнала, если включить в него запись событий EXCP со всеми свойствами. Включите дополнительно запись событий DBMSSQL. Для этого нужно добавить: <event> <eq property="name" value="DBMSSQL"/> </event> Конфигурационный файл нужно положить на компьютер, где установлен сервер 1С:Предприятия 8. Смотреть результаты в подкаталоге rphost_ХХХ. Например, <config xmlns=" v8.1c.ru/v8/tech-log »»"> <log location="c:\logs" history="1"> <event> <eq property="Name" value="EXCP"/> </event> <event> <eq property="Name" value="DBMSSQL"/> </event> <property name="All"> </property> </log> <dump location="c:\dumps" create="1" type="1023"/> </config> В журнале должна присутствовать запись события DBMSSQL с текстом CREATE UNIQUE INDEX .... По ней можно определить таблицу, в которой есть дублированный ключ. Нужно найти продублированные записи и удалить лишние. Например, Ошибка произошла пм создании этого индекса : create unique clustered index [_InfoR18755_ByPeriod_TRS] on [_InfoReg18755] (_Period, _Fld18756RRef, _Fld18757) Запрос SELECT _Period, _Fld18756RRef, _Fld18757, Count(*) FROM _InfoReg18755 GROUP BY _Period, _Fld18756RRef, _Fld18757 HAVING Count(*) > 1 выдаст список записей, которых в базе больше одной по этому ключу. ----------------- Это говорит о том, что они официально разрешают влазить в БД |
|||
75
УПП
27.03.13
✎
13:50
|
(62) Сейчас попробую этот запрос, отпишусь
|
|||
76
УПП
27.03.13
✎
14:16
|
Да, удаление помогло, единственное что, у корр счета тоже аналитика слетает в части статей ДДС:
Д57 К50 (инкассация) Ну да ладно, заполнить не проблема. Единственное НО, я не знаю как поведет себя база в дальнейшем, это же внесение изменений в физические таблицы базы уже. Если честно как то не очень хочется влазить в рабочую уже базу. Написал запрос в 1С, что они скажут, посмотрю. Но что самое странное, вообще запрещено действительно влазить в БД не средствами платформы, хотя они же сами и рекомендуют это сделать. |
|||
77
Maxus43
27.03.13
✎
14:21
|
(76) для испарвление ошибок - рекомендуют, а работа повседневная - это нарушение
|
|||
78
Serginio1
27.03.13
✎
14:54
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |