Имя: Пароль:
1C
1С v8
Попытка вставки неуникального значения в уникальный индекс
0 kryptonite
 
29.06.13
13:57
Выгружаю файловую базу в dt, пытаюсь загрузить этот dt в пустую клиент-серверную - вываливается Попытка вставки неуникального значения в уникальный индекс.
- для объекта с именем dbo.v8users
ТИИ не помогает, читал гугл про такие ошибки - там описание решения подобных проблем для серверных баз. Как быть ?
Платформа 8.2.17.153
1 МихаилМ
 
29.06.13
14:15
значит в файловой базе изменяли пароли
2 МихаилМ
 
29.06.13
14:27
+(1)
оказывается, такая проблема бывает при переходе с древних релизов (<13) на (>=15)
3 МихаилМ
 
29.06.13
14:34
4 kryptonite
 
29.06.13
17:19
жесть какая-то..
Пробовал воспользоваться ДТ манагером - распоквал он что-то, что потом не загружается - ошибка формата потока
5 kryptonite
 
29.06.13
17:29
другой вариант - тригеры, тригеры куигеры..
нет времени на них сейчас

хотел базу перезалить и на тебе
вот это эффект!
6 kryptonite
 
29.06.13
17:50
МихаилМ, не подскажешь, что, может быть дело в паролях ?
7 Torquader
 
29.06.13
17:55
А если всех пользователей выгрузить в отдельный файл - потом потереть в файловой базе и уже выгрузить dt - он, наверное, загрузится без этой ошибки (если там ещё ошибок нет).
А пользователи прекрасно потом создаются обработкой, причём даже пароли сохраняются.
8 МихаилМ
 
29.06.13
18:05
(6)
не подскажу. т.к. Вы поленились полностью привести текст ошибки
9 МихаилМ
 
29.06.13
18:08
+(8)
в v8: Ошибка в базе. Ошибка в таблице Config.

в 22 посте awa15
описывает алгоритм исправления задвоения ПК непосредственно в файле 1Cv8.1CD
10 kryptonite
 
29.06.13
18:11
(8) МихаилМ, посмотрите, пожалуйста, скрин ошибки http://s017.radikal.ru/i410/1306/f7/0beace5685fd.png
11 braslavets
 
29.06.13
18:33
(0) Дело в следующем:
- данные в базу загружены все
- спотыкается на создании индексов
- открой таблицу v8users в management studio
- найди записи с одинаковым ID:
SELECT * from [v8users] Where exists (
SELECT ID,
count(*)    
 FROM [v8users]
 GROUP BY ID
 HAVING count(*) > 1)
- убей эти записи:
DELETE from [v8users] WHERE ID = сюда подставь кривой ID
- сделай выгрузку / загрузку информационной базы - создадутся индексы
- создай убитого пользователя заново
12 МихаилМ
 
29.06.13
18:51
(11)
сомневаюсь, что v8users - последняя загружаемая таблица.
т.е. данные мб загружены не все.
13 МихаилМ
 
29.06.13
18:55
(11)
тогда уж сразу скопировать свернутые дубли в Временную таблицу. удалить дубли. вставить из временной
и не надо пересоздавать.
14 braslavets
 
29.06.13
19:32
(12) Сперва грузятся данные ВСЕХ таблиц, а уже потом создаются ВСЕ индексы. Проверено на себе.
(13) Да не вопрос, но не факт, что они свернутся по всем полям.
15 МихаилМ
 
30.06.13
01:20
(14)
подскажите на какой версии платформы 1с8 " Сперва грузятся данные ВСЕХ таблиц, а уже потом создаются ВСЕ индексы. Проверено на себе." ?

я давно подглядваю за 1с8 с помощью ms sql profiler
и не припомню такого поведения

во всяком случай для 1с82  (8.2.18.61)
это не так.

Касательлно таблицы .v8users

ms sql profiler логирует


create table [dbo].[v8users] (
ID binary(16) not null primary key,
Name nvarchar(64) not null,
Descr nvarchar(128) not null,
OSName nvarchar(128),
Changed datetime not null,
RolesID numeric(10,0) not null,
Show binary(1) not null,
Data image not null,
EAuth binary(1),
AdmRole binary(1),
UsSprH numeric(10,0)
)

go
create unique index [ByName] on [v8users] (Name)
go
create index [ByDescr] on [v8users] (Descr)
go
create index [ByOSName] on [v8users] (OSName)
go
create index [ByRolesID] on [v8users] (RolesID)
go
create index [ByShow] on [v8users] (Show)
go
create index [ByEAuth] on [v8users] (AdmRole, EAuth)
go
exec sp_executesql N'select distinct
 a.name indname,
 case when (a.status & 2) > 0 then 1 else 0 end indUniq,
 case when a.indid = 1 then 1 else 0 end indClust,
 b.keyno fldnumb,
 c.name fldname
from
 sysindexes a
 inner join sysindexkeys b
 on a.id = b.id and a.indid = b.indid
 inner join syscolumns c
 on a.id = c.id and b.colid = c.colid
 inner join sysobjects d
 on a.id = d.id
 left outer join sysobjects e
 on a.name = e.name and e.xtype = ''PK''
 inner join sysindexkeys g
 on e.name is null and a.id = g.id and a.indid = g.indid
 inner join syscolumns h
 on g.id = h.id and g.colid = h.colid
where
 d.name = P1
order by
 indname,
 fldnumb', N'P1 nvarchar(128)', N'v8users'
exec sp_executesql N'select distinct f.name con, h.name col
from sysobjects a
inner join syscolumns b on a.name = P1 and a.id = b.id and a.xtype = ''U''
left outer join sysindexkeys d on a.id = d.id and b.colid = d.colid
left outer join sysindexes e on d.id = e.id and d.indid = e.indid
left outer join sysobjects f on e.name = f.name and f.xtype = ''PK''
inner join sysindexkeys g on f.name is not null and e.id = g.id and e.indid = g.indid
inner join syscolumns h on g.id = h.id and g.colid = h.colid
order by con, col', N'P1 nvarchar(128)', N'v8users'

go
drop index [v8users].[ByDescr]
drop index [v8users].[ByEAuth]
drop index [v8users].[ByName]
drop index [v8users].[ByOSName]
drop index [v8users].[ByRolesID]
drop index [v8users].[ByShow]
alter table [v8users] drop [PK__v8users__3214EC27D08525EE]

go
exec [sys].sp_describe_first_result_set N'select * from v8users'
go
exec [sys].sp_describe_first_result_set N'select * from v8users'
go
insert bulk v8users([ID] binary(16),[Name] nvarchar(64) collate Cyrillic_General_CI_AS,[Descr] nvarchar(128) collate Cyrillic_General_CI_AS,[OSName] nvarchar(128) collate Cyrillic_General_CI_AS,[Changed] datetime,[RolesID] numeric(10,0),[Show] binary(1),[EAuth] binary(1),[AdmRole] binary(1),[UsSprH] numeric(10,0),[Data] image)
go
alter table [v8users] add primary key ([ID])
create index [ByDescr] on [v8users] ([Descr])
create index [ByEAuth] on [v8users] ([AdmRole],[EAuth])
create unique index [ByName] on [v8users] ([Name])
create index [ByOSName] on [v8users] ([OSName])
create index [ByRolesID] on [v8users] ([RolesID])
create index [ByShow] on [v8users] ([Show])

go
exec sp_executesql N'select count(*) from sysobjects where name = P1', N'P1 nvarchar(128)', N'v8users'
go
SELECT TOP 1 ID, Name, Descr, OSName, Changed, RolesID, Show, Data, EAuth, AdmRole, UsSprH
FROM v8users WITH(NOLOCK)
WHERE EAuth IS NULL OR AdmRole IS NULL OR UsSprH IS NULL
go
exec sp_executesql N'SELECT TOP 2147483647 ID, Name, Descr, OSName, Changed, RolesID, 0x01 AS Show, Data, 0x01 AS EAuth, 0x01 AS AdmRole, 0 AS UsSprH
FROM v8users WITH(READCOMMITTED)
WHERE Name >= P1 AND ID <> @P2
ORDER BY Name',N'P1 nvarchar(4000),@P2 varbinary(16)',N'',0x952A5019EAE6A1F74023E7966E3EE1DE
go
exec sp_executesql N'SELECT TOP 1 ID, Name, Descr, OSName, Changed, RolesID, 0x01 AS Show, Data, 0x01 AS EAuth, 0x01 AS AdmRole, 0 AS UsSprH
FROM v8users WITH(READCOMMITTED)
WHERE ID >= P1
ORDER BY ID',N'P1 varbinary(16)',0x952A5019EAE6A1F74023E7966E3EE1DE
go
drop table [v8users]
go
exec sp_executesql N'select count(*) from sysobjects where name = P1', N'P1 nvarchar(128)', N'v8users'
go
create table [dbo].[v8users] (
ID binary(16) not null primary key,
Name nvarchar(64) not null,
Descr nvarchar(128) not null,
OSName nvarchar(128),
Changed datetime not null,
RolesID numeric(10,0) not null,
Show binary(1) not null,
Data image not null,
EAuth binary(1),
AdmRole binary(1),
UsSprH numeric(10,0)
)

go
create unique index [ByName] on [v8users] (Name)
go
create index [ByDescr] on [v8users] (Descr)
go
create index [ByOSName] on [v8users] (OSName)
go
create index [ByRolesID] on [v8users] (RolesID)
go
create index [ByShow] on [v8users] (Show)
go
create index [ByEAuth] on [v8users] (AdmRole, EAuth)
go
exec sp_executesql N'SELECT TOP 1 1
FROM v8users WITH(READCOMMITTED)
WHERE ID = P1',N'P1 varbinary(16)',0xA011BA342EDD32224B1A5B32740406F6
go
select @@max_precision
go
exec sp_executesql N'INSERT INTO v8users WITH(READCOMMITTED) (ID,Name,Descr,OSName,Changed,RolesID,Show,Data,EAuth,AdmRole,UsSprH) VALUES(P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11)',N'P1 varbinary(16),@P2 nvarchar(max),@P3 nvarchar(max),@P4 nvarchar(max),@P5 datetime2(3),@P6 numeric(10),@P7 varbinary(1),@P8 varbinary(max),@P9 varbinary(1),P10 varbinary(1),P11 numeric(10)',0xA011BA342EDD32224B1A5B32740406F6,N'Администратор',N'Администратор',NULL,'5999-03-18 13:40:34',1,0x01,0x186615BC22BB302A044773A204AB23B23FE668607BE247000C89AE03598C041A307745C4328616D00CD4455419D3262D6D56248D0FD95119307516C6609811800DCA4AB0EB32F3D0B0B6AD6C9F6B88FB8596F173847B9363BD36D6B1FBC06B222E4A376CB26B84FAB897CB72B97B9B63BE37EAB1FB32F7D18EB6AB6DA2991C133526419660CA149F06D75D0656D62630384B778E1A881D1E337243943DCD178159D1504C76E83C3120002689118F541F626A43C460C90E8659D6504D43D221372152218E128E55483C25449737D60F8659805E054D80742D6A05748A0F8F004F606A4A9633C90E850DD7580518D322646E0074901397010628775F92288911D8528C5F0C4E9014773C1F43DE0DCD5C7D451E18E92BF261C554DB4A4C59D02D6D6651798950E8471A7D11118D72C774F3668D234F22A0306B3144398E0E8A1C1E34764292379A1B830CD258534FCE772C3C1B,0x01,0x01,0
go
exec sp_executesql N'SELECT TOP 1 1
FROM v8users WITH(READCOMMITTED)
WHERE ID = P1',N'P1 varbinary(16)',0xABD5CE4AAD44B7BD43BF49E6FB70C024
go
exec sp_executesql N'INSERT INTO v8users WITH(READCOMMITTED) (ID,Name,Descr,OSName,Changed,RolesID,Show,Data,EAuth,AdmRole,UsSprH) VALUES(P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11)',N'P1 varbinary(16),@P2 nvarchar(max),@P3 nvarchar(max),@P4 nvarchar(max),@P5 datetime2(3),@P6 numeric(10),@P7 varbinary(1),@P8 varbinary(max),@P9 varbinary(1),P10 varbinary(1),P11 numeric(10)',0xABD5CE4AAD44B7BD43BF49E6FB70C024,N'Бухгалтер',N'Бухгалтер',NULL,'5999-03-18 14:12:41',6,0x01,0x10D657CC2A9B00C819622A60207152CC1D39EC7351FD62FF29011A52145C66F578E07AF819F966E578004E550D1237F87CB733F81EF937AA7D4E08B0B1A0D11D9806E41C9A4BBB199BB29FB1A0537EEE3FFA751CBB4A83199CB299B090A1E91D9F06E21DAAB92CF92F534956151730E179E16FFC07AF65F8294F485911477FF47BB533AA1BAF38A97851494C2D7B29F831B363FF1FAF35FE7A4F1B0414467FF824E060E148A233FC34011F06161260FB7FB767FB1AB736AC2A531C0245497FFB2DE136E11EAA36F9345B1A06145C31F479E331FA1BA265F12A570653434333FE2EE663E113AC35FA34564B06125C6BAE79E17AA912A364AE28041259414236E025E26EFD1EF866AA345A4B58425C66FC7BE67AF413A938E52F571852191736AF2BE032F457B734AE7F544F5642427FAA7EB761E11EAB65AC345B1E57425C65FE2CE632AF1BFE64AA7F0306510C407EE02DFA67E008A96AA573554655522225FC648035E35CF757894009614F793325A720F47BEE18F16DA22E0E1F12730662B54BB478BA46CC419172290539620639F13FFA65E01CB734F828531A53114963F82CE463FD06AB2CF864,0x01,0x01,0
go
exec sp_executesql N'SELECT TOP 1 1
FROM v8users WITH(READCOMMITTED)
WHERE ID = P1',N'P1 varbinary(16)',0xAC1D3482F5C35A4445AEAF30CCAA392B
go
exec sp_executesql N'INSERT INTO v8users WITH(READCOMMITTED) (ID,Name,Descr,OSName,Changed,RolesID,Show,Data,EAuth,AdmRole,UsSprH) VALUES(P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11)',N'P1 varbinary(16),@P2 nvarchar(max),@P3 nvarchar(max),@P4 nvarchar(max),@P5 datetime2(3),@P6 numeric(10),@P7 varbinary(1),@P8 varbinary(max),@P9 varbinary(1),P10 varbinary(1),P11 numeric(10)',0xAC1D3482F5C35A4445AEAF30CCAA392B,N'Главный бухгалтер',N'Главный бухгалтер',NULL,'5999-03-18 14:13:01',5,0x01,0x18B1211C083845C04EC07963434162443F95340444444ACB515E9AA3735B26A12FF34051216C03220CA5193071252FE630D21078250B71F87CA64C00707403700BB916D4D794F11BE16193CCB5E9CE10F7E0A9D292C2B3C1EF26E4B494FF9B498104F09C2A1467E262E2A9F093FAB2F4EF27E4B995CF9A72716190CD8BE9C010FD10C9B3F890E0948A44B42668757CFA3287147A6A1521F776F05457267152695DAC0532697C2CA835D71028305924F32DEC746938784E210BA60130717229E660D5152B250C7CF679ED1B5A70754F270AF30267767328AA618611303C0172F577F61D526E7804275BB80030722167F362D71831305971A62FF21D537773017413A50335712278A8699C477E3F0E68F42DA14C4E22795B2712A4063325212EF96386447E391473A47DF14F0126794F730FA2552970757CFA7C88117A3C1526F82AF51F557278077D0CA01835257D7AFD34871931380E24A663F41C5A736C007409A01935227D7AA83484452C3A5D7CEC76F84B067778042612F6523772697EFA35850C7E3C0B20ED76A31B5B7A23517409F70061687729F93083122C3C157CF77BF254572227506906F75033692172F335D7107A300124F32AEC41577A70562759F7193C257C28E66581472C25007CF276ED4F5671735B225BF60232217C66FD64D4197A6B5B74ED77A64B076E75072109B80C67217467FC3089102D3F0072F67CA6491E6F75042209F0026677692CA830870C28385D21ED77F44E016E7650750FF05735212028AD309D1030391469F062F05541712B0F2E08F9017617337AB207D30E6A646F0499258B563A013609791DB916362E2920FC3D84534F7F083C962CEF0F0F14003B2F74BA6D46332F77E97D830D29240C75F17FF04A527B7056750CA5052874687AB6,0x01,0x01,0
go
exec sp_executesql N'SELECT TOP 1 1
FROM v8users WITH(READCOMMITTED)
WHERE ID = P1',N'P1 varbinary(16)',0x9F3D09E971ECD48449F099C11C2E4E79
go
exec sp_executesql N'INSERT INTO v8users WITH(READCOMMITTED) (ID,Name,Descr,OSName,Changed,RolesID,Show,Data,EAuth,AdmRole,UsSprH) VALUES(P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11)',N'P1 varbinary(16),@P2 nvarchar(max),@P3 nvarchar(max),@P4 nvarchar(max),@P5 datetime2(3),@P6 numeric(10),@P7 varbinary(1),@P8 varbinary(max),@P9 varbinary(1),P10 varbinary(1),P11 numeric(10)',0x9F3D09E971ECD48449F099C11C2E4E79,N'Кассир',N'Кассир',NULL,'5999-03-18 14:12:27',7,0x01,0x1CB107B8054128F611582B623CA80FD968A771C731BA5A1779D012E7655EBC077E704BC4746C4E55058536E00B965CF308DC6A3A40B6218348813EDD3C761993723C1F5A08842D09F277C116B06BDBC7C10192C5499325942791B226A189AAB3BD78B708E8855DF6078B39214CB670CA01863F8828754DC62175495B0D9E22E10EC415A1008E627618E371CB68BB7C8A29241CC5246C1E545F853EBD5C905CF3088C6D3A1BE921D348D232DE33221AC173391B550C843DED5F9542A3578B772740B477CA5185618E28234E9377754A065A9936BD519F41F1558B273B4DB674D10087658B28274B9727751F5259CC22E05C9013EA06886B271CB3238201D361D9297004C73D741B4E0C842DEB02CA1BF05D8F28440EE06BB1079E71D45200719D5A7772204BC332FB448543AD5CD06D7B4CA2419055C851DA2A3744A15001402913F14DAE039A53EB03966D3B4DE023D655823680347519C4236F0752109872,0x01,0x01,0
go
exec sp_executesql N'SELECT TOP 1 1
FROM v8users WITH(READCOMMITTED)
WHERE ID = P1',N'P1 varbinary(16)',0x952A5019EAE6A1F74023E7966E3EE1DE
go
exec sp_executesql N'INSERT INTO v8users WITH(READCOMMITTED) (ID,Name,Descr,OSName,Changed,RolesID,Show,Data,EAuth,AdmRole,UsSprH) VALUES(P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11)',N'P1 varbinary(16),@P2 nvarchar(max),@P3 nvarchar(max),@P4 nvarchar(max),@P5 datetime2(3),@P6 numeric(10),@P7 varbinary(1),@P8 varbinary(max),@P9 varbinary(1),P10 varbinary(1),P11 numeric(10)',0x952A5019EAE6A1F74023E7966E3EE1DE,N'',N'',NULL,'5999-03-18 14:12:27',7,0x01,0x10B85C8939282E022E7F585751915A900D57E736421E4B314B1A693334BC3FA7348E71BD091A1D2F174A6A367CA46AA134DD3DEC0F491F6419537A757DB378BC2F9A70B909181E321E4F687A61A16AA020886CB909051E321E4F756761A16AA03D886CB909181E2E237523672CBD6AA03D886CB9091803321E4F687A61A16AA020886CB909051E321E4F686761A16AA03D8870B81519022E1E53687B73B376B22F946EA50E041A321F4E686460A96BA43C8A6EBE1518023253,0x01,0x01,0
go


те сначала создаются индексы и только после этого таблица наполняется даными.
16 МихаилМ
 
30.06.13
01:27
+(15)
все тот же лог
ms sql profiler
подсказывает, что таблица v8users - не последняя загружаемая 1с82.
17 МихаилМ
 
30.06.13
01:55
(0)
вот скрипт по аналогии из (3)
для вашей таблицы

USE <ВАША_БАЗА>;
GO
IF EXISTS (SELECT * FROM sys.triggers
   WHERE parent_class = 0 AND name = 'v8users_no_PK')
DROP TRIGGER v8users_no_PK
ON DATABASE ;
GO
CREATE TRIGGER Config_no_PK
ON DATABASE
FOR CREATE_TABLE
AS
DECLARE @tablename nvarchar(100)  
DECLARE @EventData XML
SET @EventData = EventData()
 
  --PRINT 'CREATE TABLE Issued.'
  SET  @tablename =  @EventData.value('data(/EVENT_INSTANCE/ObjectName) [1] ','VARCHAR(50)'  )
  PRINT  @tablename;
 
  IF @tablename = 'v8users'
 
  BEGIN
 
  ROLLBACK
-- создание таблицы без первичного ключа
      CREATE TABLE [dbo].[v8users](
       [ID] [binary](16) NOT NULL,
       [Name] [nvarchar](64) NOT NULL,
       [Descr] [nvarchar](128) NOT NULL,
       [OSName] [nvarchar](128) NULL,
       [Changed] [datetime] NOT NULL,
       [RolesID] [numeric](10, 0) NOT NULL,
       [Show] [binary](1) NOT NULL,
       [Data] [image] NOT NULL,
       [EAuth] [binary](1) NULL,
       [AdmRole] [binary](1) NULL,
       [UsSprH] [numeric](10, 0) NULL,

   END





-- удаление триггера

/*

DROP TRIGGER v8users_no_PK
ON DATABASE ;
*/

-- !!!  задвоения удалите ручками сами


/* востановление первичного ключа
ALTER TABLE [dbo].[v8users] ADD PRIMARY KEY CLUSTERED
(
   [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

*/
18 Мимохожий Однако
 
30.06.13
07:12
Залей в файловую версию с платформой 8.2.17.153. Повтори выгрузку для серверной.
19 braslavets
 
30.06.13
11:46
(15) Прошу прощения, недосмотрел. В вашем случае речь о первичном ключе - он действительно создается после загрузки данных в каждую таблицу.
А я говорил про индексы - они действительно создаются после загрузки всех данных.
20 braslavets
 
30.06.13
11:50
(15) Посмотрите на инфостарте http://infostart.ru/public/183180/
21 МихаилМ
 
30.06.13
12:25
(19)
дестсвительно 1с82   (8.2.18.61)

для таблиц данных создаёт индексы после загрузки таблиц

служебная таблица v8users оказалась не показательной.
как и files

те для них сначала создаются индексы и лиш потом наполняются данными.
22 braslavets
 
30.06.13
13:18
(21) А база-то большая? Может через выгрузку/загрузку XML прогнать проще?
23 kryptonite
 
30.06.13
13:57
(22) как вариант, сейчас пробую тригеры от МихаилаМ