|   |   | 
| 
 | v7: Ошибка CREATE UNIQUE INDEX terminated because a duplicate key was found for inde | ☑ | ||
|---|---|---|---|---|
| 0
    
        Tester 16.09.14✎ 13:06 | 
        При обновлении конфигурации 1С 7.7 поломалась база.
 Ошибка: CREATE UNIQUE INDEX terminated because a duplicate key was found for index ID %X%. Most significant primary key is ' %YYYY% '. При входе в Конфигуратор или в режим Предприятие выдавало ошибку и прога закрывалась. Проштудировал пару веток, в т.ч. 1C 7.7 SQL испорчена базы при установке обновления. В итоге свел решение проблемы в один скриптик-мануал. Может кому будет полезно. /* 1. Выборка документов из журнала по ид. документа */ SELECT * FROM _1sjourn WHERE IDDoc IN ( /* Выборка записей из таблицы "Ссылки документов", где значения 3-х полей повторяются (неуникальные записи) */ SELECT CHILDID FROM _1scrdoc GROUP BY CHILDID, MDID, PARENTVAL HAVING count(*) > 1 ) /* 2. Далее по IDDOCDEF в файле 1Cv7.DDS ищем название документа. */ /* 3. В файле 1Cv7.DDS отключаем уникальность индекса таблицы _1scrdoc */ /* 4. По DOCNO ищем документы в базе и перепроводим их */ /* 5. В файле 1Cv7.DDS обратно включаем уникальность индекса таблицы _1scrdoc и запускаем 1С. Вуаля. После пересчета все работает */ У меня оказалось 9 косячных документов "Выписка". С причиной возникновения ошибки пока не разобрался. | |||
| 2
    
        Ёпрст гуру 16.09.14✎ 13:11 | 
        всего то надо truncate table _1scrdoc и пересчет служебных данных, если всё дело было только в этой табличке     | |||
| 3
    
        МихаилМ 16.09.14✎ 13:15 | 
        не проще удалить дубли     | |||
| 4
    
        VladZ 16.09.14✎ 13:16 | 
        (0) Решение этой проблемы уже было описано. Ищи в Инете.     | |||
| 5
    
        КонецЦикла 16.09.14✎ 13:38 | 
        Запрос может не выявить косячных данных, бывает необходимость в удалении индексов сначала     | |||
| 6
    
        Tester 16.09.14✎ 14:10 | 
        Проблему решил. Но все равно непонятно, что было с теми 9 выписками.
 (2) (3) В _1scrdoc удалял вручную дубли. Но когда дублей уже не было 1С-ка заново пересчитывала графы отбора и перекрестные ссылки и заново писала в _1scrdoc дублирующие записи, пыталась создать уникальный индекс и опять выдавала ту же ошибку. Здесь только поиск документов, приводящих к неверному автозаполнению _1scrdoc. Ими оказались 9 выписок. | |||
| 7
    
        Tester 16.09.14✎ 14:56 | 
        Сейчас парюсь с переводом времени из 36-ричной системы счисления в десятичную и переводом во время :)     | |||
| 8
    
        Ёпрст гуру 16.09.14✎ 14:56 | 
        (7) зачем ?     | |||
| 9
    
        Ёпрст гуру 16.09.14✎ 15:01 | 
        +8 на вот, готовые примеры..
 http://www.1cpp.ru/forum/YaBB.pl?num=1153475454 | |||
| 10
    
        Tester 16.09.14✎ 15:55 | 
        (9) спс, перевел с помощью конвертера http://vanchester.ru/converter.html , а потом разложил в экселе на часы, минуты и секунды.
 В общем все глючные документы имеют время EAEAY8 (в 36-ричной) или 863990000 (в десятичной) или время 23:59:59. Никаких отличий больше не нашел. Непонятно, почему 1С в _1scrdoc лепит дубли. | |||
| 11
    
        Ёпрст гуру 16.09.14✎ 15:56 | 
        (10) это же баян     | |||
| 12
    
        Ёпрст гуру 16.09.14✎ 15:57 | 
        разные позиции доков будут в 1sjourn и в остальныз табличках, при времени 235959..где-то "время" продолжается, а где-то нет.. будет косяк в операциях и в проводках еще     | |||
| 13
    
        Tester 16.09.14✎ 16:20 | 
        (12) Позиции понятно разные при одинаковом времени. Но почему дубли в _1scrdoc?     | |||
| 14
    
        Ёпрст гуру 16.09.14✎ 16:23 | 
        да хз, видать найти не может по позиции и лепит еще одну запись     | |||
| 15
    
        Tester 08.10.14✎ 17:29 | 
        Ребята, продолжение истории.
 После перепроведения выписок проблема решилась. Но через некоторое время опять кажется поменял графу отбора и получил попытку создания уникального индекса по таблице ссылки документов. А там дублирующиеся записи и та же ошибка. Нашел выписки, перепровел их, база работает. Но все равно не пойму по какой причине у меня много документов с временем 23:59:59. И прикол 1С-ки в том, что если есть 2 дока 1. Выписка 1 23:59:59 2. Выписка 2 23:59:59 а я хочу переместить Выписку 1 под Выписка 2, чтобы учитывать движения Выписка 2, то изменение времени не перемещает документы в пределах одной секунды. Вопрос - как установить позицию документу вручную? ПолучитьПозицию(), а установить позицию нету! | |||
| 16
    
        Дык ё 08.10.14✎ 17:41 | 
        (15) в пределах секунды не получится - они будут в порядке iddoc
 установить позицию: распровести, УстановитьВремя, провести | |||
| 17
    
        пипец 08.10.14✎ 17:44 | 
        в скульной видел и 24:05 время ;)) от такое тоже бывает     | |||
| 18
    
        Tester 08.10.14✎ 17:45 | 
        Сейчас ищу документы с временем > 23:59:59.
 Пока таковых нет :) | |||
| 19
    
        КонецЦикла 08.10.14✎ 17:53 | 
        (15) В пределах одной секунды можно тучу доков разместить, не тем голова у тебя забита     | |||
| 20
    
        КонецЦикла 08.10.14✎ 17:54 | 
        Если документ в реальности создан позднее (имеет больший iddoc) - значит только время менять. Если некуда - уменьшать время предыдущих документов.     | |||
| 21
    
        Tester 08.10.14✎ 17:57 | 
        (20) Тут несколько проблем в одной.
 1-я: переместить документ, который в середине 23:59:59 в самый низ. 2-я: разобраться почему стало куча документов в 23:59:59. 3-я: почему строится неверная таблица ссылок документов. Похоже все 3 проблемы связаны. | |||
| 22
    
        КонецЦикла 08.10.14✎ 18:20 | 
        Наличие нескольких документов в одной секунде не приводит к ошибкам
 Либо программист виноват либо одно из двух... | |||
| 23
    
        Tester 09.10.14✎ 11:06 | 
        ыввы     | |||
| 24
    
        Tester 09.10.14✎ 11:07 | 
        Млин, что за глюк. Не могу пост оставить.     | |||
| 25
    
        Tester 09.10.14✎ 11:09 | 
        Короче похоже понял, почему стало много документов в 23:59:59.
 Может кому будет интересно, попробую описать. Есть документ ТоварыВПути с 2-мя табличными частями: 1-я ТЧ обычная, а вторая реализована в виде отдельного документа, данные из ТЧ которого загружаются в ТЗ основного документа. Так вот в 1 прекрасный момент кто-то поставил время любого документа в базе в 23:59:59. | |||
| 26
    
        Tester 09.10.14✎ 11:11 | 
        После этого другой чел создал документ ТоварыВПути на рабочую дату и документ записался с текущим временем (интерактивная запись документа по умолчанию с текущим временем), а связанный отдельный документ записался со временем 23:59:59 (программная запись методом Записать() пишет не с текущем временем, а с временем посл. документа + 10 секунд). Потом наштамповали еще несколько документов ТоварыВПути с нормальным временем, но связанные документы получились в 23:59:59. Потом на след. день, меняют дату документа ТоварыВПути (может и криво, но такая логика работы) и записывают документ. Документ записывается текущим временем, а связанный документ тоже меняет дату на дату основного документа, но записывается со старым временем 23:59:59. Усугубляют положение создание документов задним число. Они пишутся все в 23:59:59, т.к. уже есть документы в это же время. Так ситуация повторяется и получается практически каждый день кот-то создает документы задним числом и все они пишутся в 23:59:59.
 Выход - при программной записи связанных (имеющих цель хранить 2-ю табличную часть к основному документу) документов ВСЕГДА применять метод УстановитьВремя() и писать документы в начало дня! Я применил УстановитьВремя(0,0,1); Буду дальше наблюдать уйдет ли проблема с "CREATE UNIQUE INDEX terminated because a duplicate key was found..." при пересчете таблицы Ссылки документов. | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |