Как исправить ошибку «уже существует вид НДФЛ с таким значением поля Код (2012)» при обновлении 1С:Бухгалтерия 3.0

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Налоговый учет
← На главную

При обновлении конфигурации «1С:Бухгалтерия предприятия 3.0» (особенно при переходе на релизы 3.0.169.х и выше) специалисты часто сталкиваются с критической ошибкой: «уже существует вид НДФЛ с таким значением поля Код (2012)». Ситуация осложняется, если обновление было запущено без создания резервной копии, а база перестала открываться как в пользовательском режиме, так и в режиме конфигуратора для завершения обновления. В этой статье мы подробно разберем причины возникновения этой проблемы и рассмотрим пошаговые алгоритмы её решения.

Выясним причину возникновения ошибки

Для начала проанализируем ситуацию с технической точки зрения. Код дохода НДФЛ 2012 соответствует суммам отпускных выплат. В старых релизах конфигурации этот элемент справочника ВидыДоходовНДФЛ часто создавался пользователями вручную или загружался из внешних источников как обычный (не предопределенный) элемент.

В последних обновлениях (начиная с релиза 3.0.165.21) разработчики фирмы «1С» перевели код 2012 в разряд предопределенных элементов. Это необходимо для корректной работы новых механизмов учета НДФЛ и автоматического заполнения отчетности. Когда система пытается выполнить реструктуризацию базы данных и создать новый предопределенный элемент с кодом 2012, она обнаруживает, что запись с таким кодом уже существует в таблице. Возникает конфликт уникальности индекса, и процесс обновления аварийно завершается.

Разберем последовательность обновлений

Одной из главных причин сбоя является попытка «перепрыгнуть» через несколько значимых релизов. Например, обновление напрямую с версии 3.0.164.x на 3.0.169.x официально не поддерживается. Рассмотрим правильный подход:

  1. Проанализируем текущую версию конфигурации и найдем промежуточные релизы на сайте поддержки пользователей.
  2. Выясним, в каком именно релизе произошли изменения структуры справочника. Для данной проблемы критическим является переход на 3.0.165.21 или 3.0.166.x.
  3. Выполним обновление последовательно. На промежуточных этапах конфигурация содержит специальные обработчики обновления, которые должны «мягко» сопоставить существующие пользовательские записи с новыми предопределенными данными. При «прыжке» через версии эти обработчики просто не запускаются.

Метод 1: Восстановление работоспособности через накат CF-файла

Если база уже находится в «подвешенном» состоянии и не запускается, проанализируем метод, который помог автору темы. Этот способ позволяет временно вернуть базу в рабочее состояние, чтобы отредактировать данные.

Внимание: Этот метод является рискованным. Перед любыми действиями попробуйте сделать хотя бы копию файла базы данных (1Cv8.1CD), если работаете в файловом варианте.

  1. Запустим Конфигуратор.
  2. Выберем пункт меню «Конфигурация» — «Загрузить конфигурацию из файла».
  3. Выберем файл 1cv8.cf той версии, которая была у вас установлена ДО начала неудачного обновления (например, 3.0.164.x).
  4. После загрузки выполним «Обновить конфигурацию базы данных» (клавиша F7). Если система выдаст предупреждение о несоответствии, согласимся.
  5. Теперь, когда структура метаданных вернулась к исходной, попробуем запустить базу в режиме «1С:Предприятие».

После того как база открылась, найдем справочник ВидыДоходовНДФЛ. Проанализируем список: найдем элемент с кодом 2012 и изменим его код на любой другой, например 20120. Это освободит код для системы при будущем обновлении.

Метод 2: Использование режима технического специалиста и консоли запросов

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

Часто код 2012 не виден в обычном списке, потому что он помечен на удаление или возникла ошибка привязки к владельцу. Мы можем написать простой запрос, чтобы увидеть все записи в таблице:


ВЫБРАТЬ
    ВидыДоходовНДФЛ.Ссылка,
    ВидыДоходовНДФЛ.Код,
    ВидыДоходовНДФЛ.Наименование,
    ВидыДоходовНДФЛ.Предопределенный
ИЗ
    Справочник.ВидыДоходовНДФЛ КАК ВидыДоходовНДФЛ
ГДЕ
    ВидыДоходовНДФЛ.Код ПОДОБНО "2012%"

Проанализируем результат. Если мы видим две строки с кодом 2012, одну из них (ту, которая не является предопределенной) необходимо переименовать или удалить. Для редактирования записи прямо из консоли запросов можно использовать программный код в обработке:


ОбъектДохода = СсылкаНаОбъект.ПолучитьОбъект();
ОбъектДохода.Код = "2012_СТАРЫЙ";
ОбъектДохода.Записать();

Метод 3: Принудительный запуск для исправления данных

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

  1. В окне выбора баз нажмем «Изменить».
  2. Перейдем на последнюю закладку и в поле «Дополнительные параметры запуска» введем: /ОтключитьЛогикуРаспределенныхИнформационныхБаз. Это иногда помогает обойти блокировки обновления.
  3. Также можно попробовать запустить систему через Конфигуратор — Отладка — Параметры запуска, прописав команду для запуска конкретной обработки по очистке дублей.

Техническое обслуживание после исправления

После того как вы устранили дубль кода 2012 и успешно обновились до целевого релиза (например, 3.0.169.15), обязательно выполним следующие действия:

Во-первых, запустим «Тестирование и исправление» в Конфигураторе. Выберем пункты «Проверка логической целостности» и «Реиндексация таблиц». Это критически важно, если вы использовали метод с «накатом» CF-файла, так как структура таблиц могла быть нарушена.

Во-вторых, проверим справочник ВидыДоходовНДФЛ еще раз. Убедимся, что код 2012 теперь имеет значок предопределенного элемента (с синей точкой). Если у вас остались начисления, ссылающиеся на старый (переименованный вами) элемент, воспользуемся стандартной обработкой «Поиск и замена дублей», чтобы перенести все движения на новый предопределенный элемент.

Рекомендации по предотвращению проблемы

Проанализировав ситуацию, можно сделать вывод, что большинства проблем можно было избежать. Разберем основные правила:

Таким образом, мы выяснили, что ошибка с кодом 2012 — это типичный конфликт данных при изменении метаданных конфигурации. Используя предложенные методы, вы сможете восстановить базу даже в самых сложных случаях.

← На главную