Как исправить ошибку «Запись с такими ключевыми полями существует!» в 1С:ERP при проведении Авансового отчета?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием Управленческий учет Промышленность, строительство и АПК
← На главную

При обновлении конфигурации 1С:ERP до версий 2.5.11 и выше многие пользователи и разработчики столкнулись с критической ошибкой проведения документов, таких как Авансовый отчет или Приобретение товаров и услуг. Система прерывает процесс со ссылкой на Регистр сведений: Суммы документов в валютах учета, сообщая о нарушении уникальности записей. Давайте разберем, почему возникает этот конфликт и какими способами мы можем его устранить.

Природа возникновения ошибки

Данная ошибка сигнализирует о том, что алгоритм проведения пытается добавить в Регистр сведений запись, которая уже существует. Это происходит из-за того, что при расчете движений документа система создает дублирующие записи в служебном регистре СуммыДокументовВВалютахУчета. В частности, это часто вызвано особенностями учета денежных средств у подотчетных лиц, где развернутые остатки в разрезе Цель выдачи приводят к коллизиям при попытке записи данных системой.

Способ №1: Настройка контроля целей выдачи (рекомендуемый)

Самым эффективным и «чистым» способом решения проблемы, не требующим вмешательства в код или выполнения сложных обработок, является изменение настроек системы. Этот метод заставляет 1С более строго и корректно обрабатывать движения по подотчетным суммам.

  1. Перейдите в раздел НСИ и администрирование.
  2. Выберите пункт Настройка НСИ и разделов — Казначейство и взаиморасчеты.
  3. Найдите настройку Контролировать выдачу под отчет в разрезе целей.
  4. Установите флажок для активации данной настройки.

После активации этого признака алгоритм проведения документов пересчитывает движения с учетом новых правил, что позволяет избежать формирования дублей. Обратите внимание, что включение этой опции может потребовать от вас актуализации или инвентаризации ранее оформленных документов, если учет подотчетных средств велся без детализации по целям.

Способ №2: Свертка регистра сведений

Если активация контроля целей не приводит к желаемому результату, или же бизнес-процессы компании не позволяют использовать данный метод, разработчики 1С предлагают вариант со сверткой записей в регистре СуммыДокументовВВалютахУчета. Этот метод подразумевает техническую очистку регистра от дублей, возникших из-за некорректного развертывания данных при обновлении конфигурации.

Важно: Данный метод является радикальным. Мы рекомендуем выполнять его только после создания резервной копии информационной базы и в присутствии квалифицированного специалиста.

Суть свертки заключается в поиске записей с идентичными ключевыми полями (регистратор, период, валюта) и объединении их в одну запись с суммированием значений. В коде 1С это может выглядеть как использование набора записей регистра:


// Пример логики обработки записей регистра
НаборЗаписей = РегистрыСведений.СуммыДокументовВВалютахУчета.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
НаборЗаписей.Прочитать();
// Здесь выполняется анализ записей и их свертка
НаборЗаписей.Записать();

Почему обновление до последних релизов не всегда помогает?

Как показывает практика, даже при обновлении до версий 2.5.12 и выше, ошибка может сохраняться, если данные в базе уже «испорчены» некорректными записями, созданными до внесения исправлений в сам код конфигурации. Система пытается провести документ, опираясь на существующие записи в регистрах, и наталкивается на конфликт.

В такой ситуации мы рекомендуем предпринять следующие шаги:

Помните, что регистр СуммыДокументовВВалютахУчета является служебным и играет ключевую роль в расчете себестоимости и отражении финансовых результатов. Любые ручные манипуляции с ним должны быть обоснованы и протестированы на копии базы данных.

← На главную