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

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При проведении или перепроведении документа Больничный лист в программе 1С:Зарплата и Управление Персоналом 3.0 может возникнуть критическая ошибка платформы: «Запись с такими ключевыми полями существует! : ЗначенияПоказателейНачислений: Больничный лист..., 1, МРОТ (Регистр сведений: Значения показателей начислений; Номер строки: 2)». При этом стандартные средства администрирования, такие как тестирование и исправление информационной базы или утилита chdbfl.exe, не выявляют нарушений целостности таблиц, так как проблема кроется в логической несогласованности прикладных данных.

Разберем детально механизм возникновения этой коллизии, проанализируем структуру регистра и пошагово рассмотрим способы устранения неисправности.

Почему возникает ошибка контроля уникальности записей

Регистр сведений ЗначенияПоказателейНачислений предназначен для хранения значений показателей расчета (таких как МРОТ, РайонныйКоэффициент и др.), примененных при расчете конкретных строк начислений. Этот регистр имеет режим записи «Подчинение регистратору».

Ключ уникальности каждой записи в данном регистре формируется платформой из трех обязательных измерений:

  1. Регистратор — ссылка на документ (например, Больничный лист).
  2. ИдентификаторСтроки — числовой идентификатор, связывающий показатель с конкретной строкой табличной части начислений документа.
  3. Показатель — ссылка на элемент справочника Показатели расчета зарплаты.

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

Способ 1. Поиск и объединение дублирующихся показателей расчета

Наиболее частая причина задвоения — появление в справочнике Показатели расчета зарплаты второго элемента с наименованием «МРОТ» (например, созданного пользователем вручную или загруженного в результате некорректной синхронизации данных). Если один расчет обращается к предопределенному показателю, а другой — к его дублю, в движениях может сформироваться коллизия.

Выполним поиск и слияние дублей по шагам:

  1. Перейдем в раздел Администрирование → Обслуживание → Корректировка данных.
  2. Откроем сервисную обработку Поиск и удаление дублей.
  3. В поле поиска выберем справочник Показатели расчета зарплаты.
  4. Зададим условие сравнения по совпадению наименования и нажмем кнопку Найти дубли.
  5. Если обнаружено несколько элементов МРОТ, выберем в качестве оригинального (главного) предопределенный системный элемент конфигурации и выполним объединение.

Способ 2. Проверка формул и состава начислений

Проанализируем настройки видов начислений, которые рассчитываются в документе Больничный лист (например, «Больничный», «Больничный за счет работодателя», доплаты до среднего заработка):

  1. Перейдем в раздел Настройка → Начисления.
  2. Откроем карточки начислений, связанных с пособиями по временной нетрудоспособности.
  3. Проверим формулу расчета. Убедимся, что один и тот же показатель не входит в расчет дважды через вложенные формулы или некорректно настроенные показатели.
  4. При наличии доработанных формул временно восстановим типовую формулу начисления для проверки проведения документа.

Способ 3. Программная очистка зависших движений регистра

Поскольку регистр ЗначенияПоказателейНачислений подчинен регистратору, пользователи не могут вручную удалить ошибочные строки через форму списка. Если документ не удается распровести или записать штатно, очистим его движения программно через внешнюю обработку или консоль кода:


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

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

Способ 4. Проверка периодических регистров сведений МРОТ

Выясним, нет ли коллизий в значениях государственных нормативов. Проверим регистр сведений Минимальная оплата труда РФ (а также Значения периодических показателей расчета зарплаты):

  1. Откроем регистр через меню Функции для технического специалиста (или Все функции).
  2. Отфильтруем записи по датам и убедимся, что на одну и ту же дату нет записей-дублей с микроскопической разницей во времени или разными регистраторами.
  3. При обнаружении некорректных записей удалим лишние или восстановим типовую историю изменений МРОТ.

Способ 5. Локализация ошибки в режиме отладки

Если вышеперечисленные шаги не дали результата, локализуем проблему в конфигураторе:

  1. Установим точку останова в общем модуле РасчетЗарплатыРасширенный перед строкой Движения.ЗначенияПоказателейНачислений.Записать();.
  2. Запустим проведение проблемного документа в режиме отладки.
  3. В окне Табло вычислим выражение Движения.ЗначенияПоказателейНачислений.Выгрузить().
  4. Сгруппируем полученную таблицу значений по полям ИдентификаторСтроки и Показатель. Выявив повторяющуюся строку, определим, какая именно строка начисления и какой показатель вызывают конфликт уникальности ключа.
← На главную