Восстановление по УИД #658251


#0 by УПП
Коллеги, добрый день. Я тут разбираюсь с проблемой задвоиности индексов, нашел таблицу проблемную, по сути в ней задовоиности нет, просто платформы пытается вставить не уникальное значение в индекс. Ну не в этом  дело, смотрю значения этой таблицы: Я так полагаю, что (поле kref) 0xA075001EC9EBA4BC11DFFD4159868477 это УИД?, как его можно восстановить что бы понять, что этой за значение? Хотя длина УИД 32 символа, здесь 34.
#1 by cw014
Сам то понял, что спросил?
#2 by thezos
нет
#3 by hhhh
0x - это не символы.
#4 by H A D G E H O G s
И A075001EC9EBA4BC11DFFD4159868477 - тоже не символы.
#5 by МихаилМ
проверил - 32 естественно без 0x.
#6 by H A D G E H O G s
а что значит восстановить?
#7 by УПП
Да, точно: УИД A075001EC9EBA4BC11DFFD4159868477
#8 by УПП
Соответственно Уид: A075001E-C9EB-A4BC-11DF-FD4159868477
#9 by УПП
А что же это по вашему ?
#10 by H A D G E H O G s
Набор чисел.
#11 by cw014
И букав
#12 by hhhh
ну в базе сделать Справочники.ВашСправочник.ПолучитьСсылку(Новый УникальныйИдентификатор("A075001EC9EBA4BC11DFFD4159868477")); или ваша задача теперь выяснить конкретно: какой справочник это или документ.
#13 by cw014
Ошибаешься
#14 by H A D G E H O G s
Там надо переставить значения предварительно.
#15 by УПП
если я напишу так: Соответственно Уид: Вам легче спать будет?
#16 by cw014
Ты ошибся при преобразовании записи в таблице в уникальный идентификатор... Если в таблице поле = 0xA075001EC9EBA4BC11DFFD4159868477, тогда УИД объекта будет 59868477-FD41-11DF-A075-001EC9EBA4BC
#17 by УПП
почему такое преобразование идет? Какой алгоритм преобразования? Это точно ?
#18 by cw014
Точнее не бывает
#19 by cw014
Пока ты не поймешь, от какой таблицы твой УИД - ты не найдешь запись по нему
#20 by Maxus43
в скл нет типа УИД 1совского
#21 by H A D G E H O G s
Есть
#22 by H A D G E H O G s
uniqueidentifier так то. Правда хранится это в binary, наверное для того, чтобы sql сам новые значения не хреначил.
#23 by cw014
А какие поля у твоей таблицы вообще есть?
#24 by Maxus43
я всмысле ты уверен что тип значения uniqueidentifier идентичен 1совскому типу УникальныйИдетификатор?
#25 by УПП
Вот запрос: SELECT [_Period]
#26 by Defender aka LINN
Я уверен, ибо проверял и юзал.
#27 by H A D G E H O G s
Отключи Итоги по Регистру Бухгалтерии, обновись, включи итоги по регистру Бухгалтерии.
#28 by cw014
Я так понимаю, что вот эти поля, которые ты хочешь узнать: [_RecorderTRef] [_RecorderRRef]
#29 by УПП
У полей REF тип binary
#30 by УПП
Ну да
#31 by H A D G E H O G s
Нет, нет, нет. Я ошибся, перепутал _AccRgED с AccRgAT. Итогами это не вылечишь.
#32 by УПП
По ним завдоение индекса идет
#33 by cw014
RecorderTRef - номер документа. Преобразуй его в int (например, если у тебя там 0000018B, тогда значение будет = 395)... Потом ищи таблицу _Document[твой получившийся номер] и в ней делай запрос SELECT * FROM _Document[твой получившийся номер] WHERE _RRef = 0xA075001EC9EBA4BC11DFFD4159868477
#34 by H A D G E H O G s
Текст ошибки скажи.
#35 by УПП
При добавлении субконто на счет: 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, , @P2, @P3, @P4, @P5 FROM _AccRg21728 T1 WHERE T1._AccountDtRRef = @P6',N' numeric,@P2 varbinary,@P3 varbinary,@P4 varbinary,@P5 varbinary,@P6 varbinary',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 by УПП
Делал запрос: 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 by УПП
А что это за поля? ,[_Value_TYPE] ,[_Value_RTRef] ,[_Value_RRRef]
#38 by H A D G E H O G s
Значение субконто.
#39 by H A D G E H O G s
Посмотри, че за док Oct  2 4009 11:25AM сделал запись в РБ
#40 by H A D G E H O G s
Странно, что нет секунд
#41 by УПП
У меня такое ощущение, что в таблице остались записи от старого субконто "Статьи ДДС", сейчас его добавляю опять и потому идет задвоение. Не знаю уже что думать...
#42 by H A D G E H O G s
02.10.2009 в 11:25
#43 by УПП
Таких полно, почти на каждый регистартор ругается
#44 by H A D G E H O G s
А что тут думать - резервную копию - и delete from _AccRgED21756  where AccRgED21756 _KindRRef=0xB44B334DE4C5D19D4D7785E8F75E7ABE
#45 by H A D G E H O G s
delete from _AccRgED21756  where AccRgED21756. _KindRRef=0xB44B334DE4C5D19D4D7785E8F75E7ABE
#46 by УПП
Это что вы удаляете ?
#47 by H A D G E H O G s
Значения субконто для документов для ВидаСубконто "СтатьяДДС". Только убедитесь, что 0xB44B334DE4C5D19D4D7785E8F75E7ABE  - это точно СтатьяДДС. Отловите запрос ВЫБРАТЬ    1 КАК Поле1 ИЗ    ПланВидовХарактеристик.ВидыСубконтоХозрасчетные КАК ВидыСубконтоХозрасчетные в профайлере и убедитесь, что там _idref ваш.
#48 by УПП
Да, все верно: exec sp_executesql N'SELECT FROM _Chrc994 T1 WITH(NOLOCK) WHERE (T1._IDRRef = @P2)',N' numeric,@P2 varbinary',1,0xB44B334DE4C5D19D4D7785E8F75E7ABE Да вот только удаляться то все, у меня проблема с 57.1, нужно какой то условие добавлять на счет к этой таблице?
#49 by H A D G E H O G s
А причем тут счета?
#50 by H A D G E H O G s
Это тупо табличка значений субконт в разрезе документа.
#51 by УПП
Понял, сейчас на тесте попробую.
#52 by Serginio1
#53 by УПП
Вся аналитика слетела по Статье ДДС. Видимо все же нужен дополнительный отбор?
#54 by H A D G E H O G s
мммм, так.
#55 by УПП
Может по всем этим полям делать отбор, ну кроме периода конечно: (Oct  2 4009 11:25AM, 0x000001d6, 0x8f5d001ec9eba4bc11deaf18dc2e7afa, 1, 0xb44b334de4c5d19d4d7785e8f75e7abe, 0) ?
#56 by H A D G E H O G s
Вертаем пока табличку взад.
#57 by H A D G E H O G s
И отловим в профайлере такой запрос: ИЗ    РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконто
#58 by H A D G E H O G s
Получим нечто подобное: exec sp_executesql N'SELECT 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' numeric(1,0),@P2 varbinary,@P3 varbinary', 1, 0xA36F5219F3882D59474C2B8DF0E06657, 0xA2D9EF0AD9924E764E73FB1C43E874EE
#59 by H A D G E H O G s
И заменим Select на Delete
#60 by УПП
exec sp_executesql N'DELETE 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' numeric(1,0),@P2 varbinary,@P3 varbinary', 1, 0x805D33BC049644DC4E1DE44B2F91458C, 0xB44B334DE4C5D19D4D7785E8F75E7ABE Так?
#61 by УПП
Такую вот ошибку выдает: Msg 1087, Level 16, State 1, Line 2 Must declare the table variable "@P1".
#62 by H A D G E H O G s
Ну что же ты. 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,@P3 varbinary', 0xA36F5219F3882D59474C2B8DF0E06655, 0xA2D9EF0AD9924E764E73FB1C43E874EE
#63 by МихаилМ
некорректно. могут быть удалены  не те данные
#64 by H A D G E H O G s
Например?
#65 by H A D G E H O G s
Ты это 1С-ке скажи.
#66 by H A D G E H O G s
Михаил, что там с не теми данными?
#67 by МихаилМ
пример
#68 by H A D G E H O G s
Передай это в 1С. Я серьезно.
#69 by МихаилМ
не припомню ,что бы мы на "ты" переходили
#70 by H A D G E H O G s
Здесь, на форуме - можно.
#71 by hhhh
лицензионным соглашением запрещено влезать не средствами платформы. Если передаст в 1с, его в черный список занесут.
#72 by H A D G E H O G s
Даже профайлер запрещен?
#73 by Maxus43
Планы запроса разрешено смотреть, даже в тех журнале можно, норм всё
#74 by УПП
Ничего подобного, я обращался в 1С по поводу задоиности индексов, вот их ответ: Протестируйте вашу базу до попытки вставки субконто. Попробуйте выгрузить базу в dt (если возможно) и загрузить ее в файловую версию, протестировать ее там и добавить субконто. Другой способ - внести изменения в таблицу MS SQL Server Определить имя проблемной таблицы можно с помощью SQL Trace или технологического журнала, если включить в него запись событий EXCP со всеми свойствами. Включите дополнительно запись событий DBMSSQL. Для этого нужно добавить: </event> Конфигурационный файл нужно положить на компьютер, где установлен сервер 1С:Предприятия 8. Смотреть результаты в подкаталоге rphost_ХХХ. Например, </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 by УПП
Сейчас попробую этот запрос, отпишусь
#76 by УПП
Да, удаление помогло, единственное что, у корр счета тоже аналитика слетает в части статей ДДС: Ну да ладно, заполнить не проблема. Единственное НО, я не знаю как поведет себя база в дальнейшем, это же внесение изменений в физические таблицы базы уже. Если честно как то не очень хочется влазить в рабочую уже базу. Написал запрос в 1С, что они скажут, посмотрю. Но что самое странное, вообще запрещено действительно влазить в БД не средствами платформы, хотя они же сами и рекомендуют это сделать.
#77 by Maxus43
для испарвление ошибок - рекомендуют, а работа повседневная - это нарушение
#78 by Serginio1
Есть Convert(binary,NEWID)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С