Имя: Пароль:
1C
1C 7.7
v7: The duplicate key value в 1С7.7 SQL
0 vcv
 
19.11.14
10:49
При загрузке данных УРБД выдаётся такая ошибка.

SQL State: 23000
Native: 2627
Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Violation of PRIMARY KEY constraint 'PK_DT2196'. Cannot insert duplicate key in object 'dbo.DT2196'. The duplicate key value is (         , 1).

Главная непонятка - откуда значение ключа (         , 1).
То есть с пустым IDDOC
Файл обмена выглядит нормально, все идентификаторы на месте.
MSSQL 2012, 1C7.7 секретный релиз.

Может кто сталкивался с такой проблемой?
1 varelchik
 
19.11.14
11:06
(0)База битая.
С dbf такое оч часто случается.
Смотри в dbf DT2196 похоже у тебя она битая.
сперва сдалай на dbf версии ТИИ а птом повторную выгрузку.
2 varelchik
 
19.11.14
11:07
распределнка вся на SQL?
или переферийки на dbf?
3 vcv
 
19.11.14
11:19
(1) Вся на SQL. И периферийки и центральная.
DBCC CHECKDB говорит, что всё нормально.
DBCC CHECKTABLE (DT2196) тоже ошибок не выдаёт
Индекс PK_DT2196 перестаивал средствами SQL.
Непонятно откуда берётся пустой IDDOC. Если бы проблема была в файле обмена, тогда бы, наверное, ругнулся сначала на DН2196 (шапку документа).
4 vcv
 
19.11.14
11:21
Самое туманное - откуда берётся пустой IDDOC. Если бы выдал какой-то IDDOC, тогда понятно - висячие строки в таблице. Почистил и заработало. А так, непонятно даже куда копать.
До обмена пустого IDDOC в таблице нет, он откуда-то берётся в процессе обмена.
5 vcv
 
19.11.14
11:25
Сейчас еще с одной периферийкой ошибка возникла.
Все ошибки возникают на табличных частях документов ПКО и СтрокаВыпискиРасход.
Табличная часть у них выглядит так:
#===============================================================================
#==TABLE no 258    : Документ (Мн.ч.) СтрокаВыпискиРасход
# Name    |Descr                         |SQLTableNam|RecordLock
T=DT3274  |Документ (Мн.ч.) СтрокаВыписки|DT3274     |
#-----Fields-------
# Name                  |Descr               |Type|Length|Precision
F=IDDOC                 |ID Document's       |C   |9     |0
F=LINENO_               |LineNo              |S   |0     |0
F=SP53529               |(P)Документ         |C   |13    |0
F=SP160496              |(P)СуммаПоДокументу |N   |14    |2
#----Indexes------
# Name                           |Descr         |Unique|Indexed fields
I=PK_DT3274                      |of IDDOC+LineN|1     |IDDOC,LINENO_
6 vcv
 
19.11.14
11:35
Удаление и создание индекса PK_DT2196 не помогает.
7 Ёпрст
 
19.11.14
11:41
количество строк какое хоть ?
8 vcv
 
19.11.14
11:51
(7) Одна строка. Вот трасса профайлера (на сколько понимаю) загрузки проблемного вида документов:
exec sp_executesql N'Insert into _1SJOURN values( P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,@P20,@P21,@P22,@P23,@P24,@P25,@P26,@P27,@P28,@P29,@P30,@P31,@P32,@P33,@P34,@P35,@P36,@P37,@P38,@P39,@P40,@P41,@P42,@P43,@P44,@P45,@P46,@P47,@P48,@P49,@P50,@P51,@P52,@P53,@P54,@P55,@P56,@P57,@P58,@P59,@P60)',N'P1 int,@P2 varchar(9),@P3 int,@P4 smallint,@P5 varchar(23),@P6 varchar(18),@P7 varchar(10),@P8 tinyint,@P9 bit,P10 int,P11 int,P12 bit,P13 bit,P14 bit,P15 bit,P16 bit,P17 bit,P18 bit,P19 bit,@P20 bit,@P21 bit,@P22 bit,@P23 bit,@P24 bit,@P25 bit,@P26 bit,@P27 bit,@P28 bit,@P29 bit,@P30 bit,@P31 bit,@P32 bit,@P33 bit,@P34 bit,@P35 bit,@P36 bit,@P37 bit,@P38 bit,@P39 bit,@P40 varchar(9),@P41 varchar(9),@P42 varchar(9),@P43 varchar(9),@P44 varchar(9),@P45 varchar(9),@P46 numeric(1,0),@P47 numeric(1,0),@P48 varchar(80),@P49 datetime,@P50 varchar(9),@P51 varchar(9),@P52 varchar(9),@P53 datetime,@P54 datetime,@P55 varchar(40),@P56 varchar(13),@P57 varchar(13),@P58 tinyint,@P59 tinyint,@P60 tinyint',1896,'  E0R9ПЕР',2196,53,'201411186BW380  E0R9ПЕР','      33762014    ','МП00000985',5,0,9,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,'    GRПЕР','     0   ','    1RЦБ ','    1WЦБ ','     CЦБ ','     0   ',0,0,'                                                                                ','1753-01-01 00:00:00','     0   ','     0   ','     0   ','1753-01-01 00:00:00','1753-01-01 00:00:00','                                        ',' 1P0  E0R8ПЕР','   0     0   ',1,0,0
go
declare @p1 int
set @p1=NULL
exec _1sp__1SJOURN_MaxRowID @p1 output
select @p1
go
exec sp_executesql N'Insert into DH2196 values(
P1,@P2,@P3,@P4,@P5,@P6,@P7,@P8,@P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,P19,@P20,@P21,@P22,@P23,@P24,@P25,@P26,@P27,@P28,@P29,@P30,@P31,@P32,@P33,@P34,@P35,@P36,@P37,@P38,@P39,@P40,@P41,@P42,@P43,@P44,@P45,@P46,@P47,@P48,@P49,@P50,@P51,@P52,@P53,@P54,@P55)',N'P1
varchar(9),@P2 varchar(13),@P3 varchar(9),@P4 varchar(9),@P5 varchar(9),@P6 varchar(9),@P7 varchar(9),@P8 varchar(9),@P9 numeric(9,4),P10 numeric(7,0),P11 numeric(14,2),P12 varchar(9),P13 numeric(1,0),P14 varchar(9),P15 numeric(14,2),P16 varchar(80),P17 varchar(64),P18 varchar(150),P19 varchar(23),@P20 varchar(3),@P21 varchar(23),@P22 varchar(3),@P23 varchar(23),@P24 varchar(3),@P25 varchar(23),@P26 varchar(3),@P27 varchar(23),@P28 varchar(3),@P29 varchar(23),@P30 varchar(3),@P31 varchar(23),@P32 varchar(3),@P33 varchar(23),@P34 varchar(3),@P35 varchar(9),@P36 numeric(1,0),@P37 numeric(6,0),@P38 varchar(9),@P39 varchar(9),@P40 numeric(1,0),@P41 numeric(1,0),@P42 numeric(1,0),@P43 datetime,@P44 varchar(9),@P45 datetime,@P46 datetime,@P47 varchar(9),@P48 numeric(1,0),@P49 numeric(1,0),@P50 numeric(1,0),@P51 numeric(1,0),@P52 numeric(1,0),@P53 numeric(1,0),@P54 varchar(13),@P55 text','  E0R9ПЕР',' 18R  E0QFПЕР','    1AЦБ ','   1MN   ','   K0YЦБ ','   MKJПЕР','     0   ','     1   ',1.0000,1,6137.10,'     0   ',0,'     0   ',6137.10,'Физическое лицо                                                                 ','Реализация (купля-продажа) №5615 от 18.11.14                    ','                                                                                                                                                      ','B1 1PP     0   ','1  ','U                      ','   ','U                      ','   ','U                      ','   ','B1 1PP     0   ','1  ','U                      ','   ','U                      ','   ','U                      ','   ','     2   ',0,3683,'     0   ','     0   ',0,1,0,'2014-11-19 00:00:00','    GRПЕР','2014-11-18 00:00:00','1753-01-01 00:00:00','     0   ',0,0,0,0,1,0,' 18R  E0QFПЕР',''
go
declare @p1 int
set @p1=-1
exec sp_prepexec @p1 output,N'P1 varchar(9)',N'Delete from DT2196 where IDDOC=P1','  E0R9ПЕР'
select @p1
go
exec sp_executesql N'Insert into DT2196 values( P1,@P2,@P3,@P4)',N'P1 varchar(9),@P2 smallint,@P3 varchar(13),@P4 numeric(14,2)','         ',1,' 18R  E0QFПЕР',0.00
go
9 Z1
 
19.11.14
11:53
(0) Проверь базу с помощью Поиск Ошибок в регистрах.
моя обработка есть на инфостарте
там вроде есть проверки на dh и dt
10 vcv
 
19.11.14
11:53
Вроде сначала всё нормально. Документ с внутренним ИД E0R9ПЕР записывается сначала в _1SJOURN, потом в DH2196. Дальше удаляются возможные строки из DT2196. Все проходит нормально. ПОтом вдруг возникает пустой IDDOC
exec sp_executesql N'Insert into DT2196 values( P1,@P2,@P3,@P4)',N'P1 varchar(9),@P2 smallint,@P3 varchar(13),@P4 numeric(14,2)','         ',1,' 18R  E0QFПЕР',0.00
11 Ёпрст
 
19.11.14
12:01
Где то у тебя есть пустая дата
12 Ёпрст
 
19.11.14
12:01
в журнальчике
13 vcv
 
19.11.14
12:04
(11) Как проверить?
select TOP(100) * from _1SJOURN WITH (NOLOCK) order by DATE_TIME_IDDOC
визуально проблем не обнаруживает
14 Ёпрст
 
19.11.14
12:07
на 1753 проверь дату
15 Ёпрст
 
19.11.14
12:08
и это, проблемный документ с каким временем у тебя ? строк в нём сколько ?
16 vcv
 
19.11.14
12:17
(14) минимальное значение в DATE_TIME_IDDOC стоит '19000101   7PS  39YAОР '
В этом году всякие служебные непроводимые документы хранятся.
(15) Проблемных документов, похоже, несколько. И разных видов. Одно общее - они все либо ПКО, либо СтрокаВыпискиРасход, у которых однотипная табличная часть. см (5).
(9) А что проверяет у тебя пункт 6.4? Он сравнивает дату движения с ACCDATE из 1SSYSTEM. Там же, как я понимаю, хранится текущий период бух.итогов. Зачем сравнивать его с датами движений?
17 vcv
 
19.11.14
12:17
(15) Во всех проблемных документах одна строка.
18 vcv
 
19.11.14
12:19
(9) С пунктом 6.1 тоже категорически непонятно, что и зачем он делает.
19 Z1
 
19.11.14
12:57
(18) как зачем документы с путой датой а точнее с датой
01.01.1753 могут иметь еще и движения
этот пункт как раз такое и ищет.
ну и как бы дата движения не может быть меньше даты первого документа.

6.4 тоже самое только где есть галка быстрые движения
20 vcv
 
19.11.14
13:14
(19) Да, но из _1system берётся дата accdate, которая содержит текущий бухгалтерский период. То есть, сейчас, 4 квартал 2014 года.
21 vcv
 
19.11.14
15:21
В трассе профайлера при загрузке проблемного документа видится странная вещь. Перед загрузкой удаляются связанные записи этого документа в различных таблицах. Наблюдаются запросы на delete к регистрам, операциям, проводкам, шапке документа, _1SCRDOC, _1SACCSEL, _1SSBSEL и всему прочему.
Но ни где не могу найти удаление записи по IDDOC в _1SJOURN перед тем, как делается Insert into _1SJOURN ...
22 vcv
 
19.11.14
15:28
Не, вру. Нашлось удаление. По ROW_ID удаляет
23 vcv
 
19.11.14
20:13
Проблема, кажется, решилась обновлением конфигурации с реструктуризацией табличных частей проблемных документов (добавил реквизит, сохранил с реструктуризацией, удалил реквизит, сохранил с реструктуризацией).
24 Z1
 
19.11.14
21:52
(20) Ошибка у меня.
Писал по своей базе где только регисты и ошибочно интерпретировал что поле accdate это наименьшая дата документа
25 Z1
 
19.11.14
22:04
(0) Копия базы с ошибкой осталось ?
Был уверен что в (9) есть проверка на связь dt и dh
оказалось что нет этого в 9 ( скорее всего написал
это и  стер  а в голове осталось)

Как бы условие как раз что у тебя
Если в DT есть IDDOC и нет этого  IDDOC в DH
то это ошибка ( на 99% это ситуация из subj )

ну и еще можно написать проверки dh и _1sjourn
ну и еще можно написать проверки dt и _1sjourn

если надо могу дописать эту проверку
26 vcv
 
20.11.14
05:24
(25) Бэкапы есть, конечно. Но мне второй рабочий день на разборки тратить жалко. Вылечилось и ладно.
>> Если в DT есть IDDOC и нет этого  IDDOC в DH
Сомнительно. Содержимое _1SJOURN, DT, DH по ID незагружающегося документа я смотрел через Management Studio. Всё было.
К тому же, ошибки связи DT, DH и прочие аналогичные обновление конфигурации с реструктуризацией не лечит. А тут проблема исчезла (надеюсь, тьфу-тьфу-тьфу).

Основное подозрение на какие-то несоответствие MD, DDS и базы. Потому что как раз перед этим делал подмену MDшника. Но структура базы не менялась. В проблемных видах документов структура базы соответствовада DDS. Чем подменённый МД оказался не такой, как штатно загруженный - загадка.
27 DrZombi
 
гуру
20.11.14
06:27
(16) >>>>  минимальное значение в DATE_TIME_IDDOC стоит '19000101   7PS  39YAОР '

Вот твоя ошибка, грохни её :)
28 DrZombi
 
гуру
20.11.14
06:28
+(27) "И что за привычка на скуле сдвигать значения дат?" :)
29 vcv
 
20.11.14
07:20
(27) Да там вся база сплошная моя ошибка. Многолетней выдержки, как вино :)
(28) >> "И что за привычка на скуле сдвигать значения дат?"
Эээээ... Если в этом высказывании есть какой-то смысл, то я его не понял. Поясни.