При обновлении конфигурации «1С:Бухгалтерия предприятия 3.0» (особенно при переходе на релизы 3.0.169.х и выше) специалисты часто сталкиваются с критической ошибкой: «уже существует вид НДФЛ с таким значением поля Код (2012)». Ситуация осложняется, если обновление было запущено без создания резервной копии, а база перестала открываться как в пользовательском режиме, так и в режиме конфигуратора для завершения обновления. В этой статье мы подробно разберем причины возникновения этой проблемы и рассмотрим пошаговые алгоритмы её решения.
Для начала проанализируем ситуацию с технической точки зрения. Код дохода НДФЛ 2012 соответствует суммам отпускных выплат. В старых релизах конфигурации этот элемент справочника ВидыДоходовНДФЛ часто создавался пользователями вручную или загружался из внешних источников как обычный (не предопределенный) элемент.
В последних обновлениях (начиная с релиза 3.0.165.21) разработчики фирмы «1С» перевели код 2012 в разряд предопределенных элементов. Это необходимо для корректной работы новых механизмов учета НДФЛ и автоматического заполнения отчетности. Когда система пытается выполнить реструктуризацию базы данных и создать новый предопределенный элемент с кодом 2012, она обнаруживает, что запись с таким кодом уже существует в таблице. Возникает конфликт уникальности индекса, и процесс обновления аварийно завершается.
Одной из главных причин сбоя является попытка «перепрыгнуть» через несколько значимых релизов. Например, обновление напрямую с версии 3.0.164.x на 3.0.169.x официально не поддерживается. Рассмотрим правильный подход:
3.0.165.21 или 3.0.166.x.Если база уже находится в «подвешенном» состоянии и не запускается, проанализируем метод, который помог автору темы. Этот способ позволяет временно вернуть базу в рабочее состояние, чтобы отредактировать данные.
Внимание: Этот метод является рискованным. Перед любыми действиями попробуйте сделать хотя бы копию файла базы данных (1Cv8.1CD), если работаете в файловом варианте.
1cv8.cf той версии, которая была у вас установлена ДО начала неудачного обновления (например, 3.0.164.x).После того как база открылась, найдем справочник ВидыДоходовНДФЛ. Проанализируем список: найдем элемент с кодом 2012 и изменим его код на любой другой, например 20120. Это освободит код для системы при будущем обновлении.
Если база запускается, но выдает ошибки при попытке записи данных, мы можем использовать консоль запросов для поиска «невидимых» дублей. Рассмотрим, как это сделать:
Часто код 2012 не виден в обычном списке, потому что он помечен на удаление или возникла ошибка привязки к владельцу. Мы можем написать простой запрос, чтобы увидеть все записи в таблице:
ВЫБРАТЬ
ВидыДоходовНДФЛ.Ссылка,
ВидыДоходовНДФЛ.Код,
ВидыДоходовНДФЛ.Наименование,
ВидыДоходовНДФЛ.Предопределенный
ИЗ
Справочник.ВидыДоходовНДФЛ КАК ВидыДоходовНДФЛ
ГДЕ
ВидыДоходовНДФЛ.Код ПОДОБНО "2012%"
Проанализируем результат. Если мы видим две строки с кодом 2012, одну из них (ту, которая не является предопределенной) необходимо переименовать или удалить. Для редактирования записи прямо из консоли запросов можно использовать программный код в обработке:
ОбъектДохода = СсылкаНаОбъект.ПолучитьОбъект();
ОбъектДохода.Код = "2012_СТАРЫЙ";
ОбъектДохода.Записать();
В некоторых случаях, когда обновление прервано, можно попытаться зайти в базу, игнорируя незавершенные процессы. Посмотрим на дополнительные параметры запуска:
/ОтключитьЛогикуРаспределенныхИнформационныхБаз. Это иногда помогает обойти блокировки обновления.После того как вы устранили дубль кода 2012 и успешно обновились до целевого релиза (например, 3.0.169.15), обязательно выполним следующие действия:
Во-первых, запустим «Тестирование и исправление» в Конфигураторе. Выберем пункты «Проверка логической целостности» и «Реиндексация таблиц». Это критически важно, если вы использовали метод с «накатом» CF-файла, так как структура таблиц могла быть нарушена.
Во-вторых, проверим справочник ВидыДоходовНДФЛ еще раз. Убедимся, что код 2012 теперь имеет значок предопределенного элемента (с синей точкой). Если у вас остались начисления, ссылающиеся на старый (переименованный вами) элемент, воспользуемся стандартной обработкой «Поиск и замена дублей», чтобы перенести все движения на новый предопределенный элемент.
Проанализировав ситуацию, можно сделать вывод, что большинства проблем можно было избежать. Разберем основные правила:
Таким образом, мы выяснили, что ошибка с кодом 2012 — это типичный конфликт данных при изменении метаданных конфигурации. Используя предложенные методы, вы сможете восстановить базу даже в самых сложных случаях.