При работе в программе 1С:Бухгалтерия предприятия 3.0 пользователи и программисты часто сталкиваются с неприятной ситуацией: при попытке провести документ «Передача ОС», «Принятие к учету ОС» или «Модернизация ОС» система выдает критическую ошибку: «Запись с такими ключевыми полями существует!». Чаще всего проблема указывает на регистры сведений НачислениеАмортизацииОСНалоговыйУчет или ПараметрыАмортизацииОСНалоговыйУчет. Особенно остро эта проблема проявляется в базах, которые были перенесены из редакции 2.0.
В этой статье мы подробно разберем причины возникновения данной ошибки, проанализируем программный код и рассмотрим пошаговые инструкции по её устранению.
Наиболее распространенная причина — некорректные или «наложившиеся» друг на друга записи в истории налогового режима организации. При проведении документа по ОС программа обращается к учетной политике, чтобы определить, является ли организация плательщиком налога на прибыль. Если в регистре настроек есть неопределенность или некорректная дата начала действия, механизмы проведения могут инициировать запись в регистры налогового учета дважды.
Рассмотрим решение:
Иногда корень проблемы кроется в самой логике проведения документа, которая дает сбой при определенных условиях (например, у ИП на ОСНО). Проанализируем ситуацию: программа последовательно вызывает несколько процедур формирования движений, и каждая из них пытается добавить строку в один и тот же набор записей регистра сведений.
Разберем фрагмент кода, где может происходить дублирование. В модуле УчетОС вызываются процедуры:
УчетОС.СформироватьДвиженияИзменениеПараметровАмортизацииОСНУ(...);
УчетОС.СформироватьДвиженияИзменениеПризнакаНачисленияАмортизацииОСНУ(...);
Внутри этих процедур выполняется проверка ОтражатьВНалоговомУчете. Если функциональная опция ПлательщикНалогаНаПрибыль возвращает Истина, выполняется добавление записи:
Движение = Движения.НачислениеАмортизацииОСНалоговыйУчет.Добавить;
Движение.Период = Реквизиты.Период;
Движение.ОсновноеСредство = СтрокаТаблицы.ОсновноеСредство;
Движение.Организация = Реквизиты.Организация;
Движение.НачислятьАмортизацию = Реквизиты.НачислятьАмортизацию;
Проблема в том, что далее по стеку вызовов может сработать процедура УчетДоходовИРасходовПредпринимателя.СформироватьДвиженияПринятиеКУчетуОС, которая снова пытается добавить запись в этот же регистр для того же самого ОС. Поскольку ключ регистра сведений (обычно это Период + ОС + Организация) совпадает, возникает конфликт при записи в базу данных.
Выясним причину ошибки при использовании амортизационной премии в документе «Принятие к учету ОС». При установке флага «Включить амортизационную премию в состав расходов» на вкладке «Налоговый учет», программа задействует дополнительные алгоритмы расчета.
В некоторых релизах конфигурации наблюдался баг: если ОС принимается к учету с премией, система генерирует движения по параметрам амортизации в основном блоке и повторно — в блоке обработки премии. Чтобы проверить эту версию, попробуйте временно снять флаг амортизационной премии. Если документ проведется — значит, вы столкнулись именно с этой ошибкой релиза.
Как исправить:
Если ... Тогда Возврат; КонецЕсли; перед повторным добавлением записи в процедурах УчетОС.Иногда ошибка вызвана человеческим фактором или некорректными данными, перенесенными из 2.0. Рассмотрим по шагам, что нужно проверить в данных:
1. Проверка дублей в табличной части. Убедитесь, что в документе одно и то же ОС не выбрано дважды в разных строках. Программа попытается создать две записи в регистр на одну секунду времени для одного объекта, что недопустимо.
2. Счета учета. Проанализируем счета начисления амортизации (например, 02.01). Если в документе принятия к учету ошибочно указан счет, который не соответствует виду актива, или выбрана некорректная аналитика, механизмы проведения могут «зациклиться» на формировании движений по налоговому учету.
3. Время документа. Регистры сведений по ОС имеют периодичность «В пределах секунды». Если в одну и ту же секунду (например, 09:00:00) введены два разных документа по одному ОС (например, «Принятие к учету» и «Модернизация»), возникнет ошибка ключевых полей. Попробуйте изменить время одного из документов на одну секунду.
Если вышеперечисленные методы не помогают, выполним глубокую техническую очистку базы. Выясним, не остались ли в базе «призрачные» записи, которые не видны в интерфейсе, но мешают проведению.
Рекомендуемый алгоритм действий:
%AppData%\1C\1Cv8. Часто платформа «помнит» старую структуру регистров, что вызывает конфликты.НачислениеАмортизацииОСНалоговыйУчет с отбором по конкретному «проблемному» ОС. Если запрос находит записи, датированные тем же числом, что и новый документ, их необходимо удалить (через «Групповое изменение реквизитов» или специальную обработку), так как они блокируют проведение.ТиИ с флагами «Реиндексация таблиц» и «Проверка логической целостности». Если база файловая, предварительно запустите утилиту chdbfl.exe из каталога установки платформы.ПлательщикНалогаНаПрибыль в значение Ложь в регистре настроек через обработку «Редактирование регистров сведений», проведение документа и возврат настройки обратно.Подведем итог: ошибка «Запись с такими ключевыми полями существует» в учете ОС — это почти всегда конфликт между настройками налогообложения и жесткими требованиями уникальности записей в регистрах сведений. Начните с перевыбора системы налогообложения в настройках — в 90% случаев это решает проблему без правки кода.