Предыстория:
Никого не удивлю, типичный случай. Приходит бухгалтер и сообщает, что хотела провести документ в 1С 7.7, но он выпадает в ошибку.
Начал разбираться, прошелся отладчиком в копии по коду. Причину сразу не нашел, до конца кода отладку не провел и решил нажать F5, чтобы продолжить работу в базе. Документ провелся. Но я решил отменить проведение и повторно провести его. И вот тут вылетела ошибка "Violation of PRIMARY KEY constraint 'PK_RA17286'. Cannot insert duplicate key in object 'RA17286'." Естественно, это только частный случай, как эта ошибка может возникнуть, но ее решение подойдет для каждого!
Решение:
Данная ошибка в моем случае связана с тем, что в SQL есть движение документа, но документ не проведен. В момент его проведения должна создаться запись в регистре, но она уже есть!
Я нашел два решения:
1. Простой, но долгий.
2. Сложный, но быстрый.
Решение 1.
Зайти в конфигуратор и нажать ТиИ (Тестирование и исправление ИБ). В моем случае база весит ~ 16 гигабайт. ТиИ работало на тестовом сервере ~ 24 часа. Думаю, время решение такой ошибки не устроит вас! Но если у вас есть время или нет в штате опытного программиста, то можете выбрать этот вариант решения вопроса!
Решение 2.
У нас 1С 7.7 стоит на MS SQL Server 2000. Копия базы также развернута на SQL.
Итак, что нам понадобится:
1. Файл "1Cv7.DDS", который лежит в каталоге базы 1с 7.7.
2. Имя документа из конфигуратора.
3. Доступ в SQL.
Откроем файл "1Cv7.DDS" (я использую просмотр по F3 в тоталкомандере). Найдем строку с именем документа. Вы увидите таблицу и в колонке "Name" или "SQLTableNam" будет написано название таблицы в SQL (в моем случае это было "DH17245"). Заходим в "Enterprise Manager" нашего SQL. Находим нашу базу и ищем в ней таблицу с нужным названием (я искал "DH17245"). Когда нашли таблицу с таким именем, то кликаем по таблице ПКМ "Открыть таблицу" (Open table) -> "Вернуть все строки" (Return all rows). Там ищем запись по вашему документу. Мне удалось его легко найти, документ был один в нужном периоде. Нашли запись и запомнили его IDDOC (у меня было "KLMN"). Теперь ищем таблицу, которая вывалилась в ошибке (у меня "RA17286"). Аналогично открываем таблицу с ошибкой (моя таблица "RA17286") и находим запись на нужный документ (мой документ "KLMN"). Удалим запись ПКМ по строке нажать Delete -> Yes.
Все, теперь ошибка при проведении возникать перестанет!
Итог:
Важно! Я четко знал, какой документ был сбойный. У меня была копия базы для экспериментов! Повторять только на копии!