При обновлении типовых конфигураций 1С (особенно Зарплата и управление персоналом 3.1 и Бухгалтерия предприятия 3.0) системные администраторы и программисты часто сталкиваются с прерыванием процесса обновления на этапе выполнения обработчиков обновления. Сообщение об ошибке выглядит так: «Уже существует основание увольнения с таким значением поля Наименование (ст. 71)» (вместо ст. 71 может быть указана любая другая статья, например, п. 2 ч. 1 ст. 77).
Эта проблема блокирует дальнейшую работу в программе и не позволяет завершить обновление информационной базы. В данной статье мы подробно проанализируем ситуацию, выясним причины возникновения конфликта и рассмотрим несколько эффективных способов решения задачи.
При обновлении конфигурации программа пытается автоматически заполнить справочники ОснованияУвольнения и ПричиныУвольненияПФР актуальными данными из своих внутренних макетов. Это необходимо для корректного формирования отчетности (например, ЕФС-1). Ошибка возникает в следующих случаях:
ЗарплатаКадрыСобытия прописана процедура ПередЗаписью, которая блокирует создание элементов с одинаковыми именами, чтобы избежать путаницы в кадровых приказах.Рассмотрим подробнее способы устранения этой ошибки, используя групповое изменение текстовых реквизитов для предварительной обработки данных, начиная от самых простых и заканчивая методами для опытных разработчиков.
Если обновление прервалось, но система позволяет запустить базу (иногда это возможно через запуск с параметром /AllowExecuteScheduledJobs -Force), попробуем решить проблему штатными средствами; для этого может потребоваться получить монопольный доступ к базе.
Основания увольнения.Основания увольнения с критерием сравнения по наименованию. Найденные дубли нужно «схлопнуть», назначив правильным элементом тот, который является предопределенным (с иконкой точки).Часто ошибка возникает именно в процессе «Пользовательского режима обновления», когда интерфейс программы недоступен. Посмотрим, как применить «хак» с внешней обработкой:
В момент, когда на экране висит окно с ошибкой обновления, мы можем нажать сочетание клавиш Ctrl + O. Это откроет диалог выбора файла. Если у вас есть заранее подготовленная обработка для очистки или переименования элементов справочника, вы можете запустить ее прямо сейчас. Логика такой обработки обычно заключается в следующем:
Выборка = Справочники.ОснованияУвольнения.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
// Добавляем префикс к наименованию, чтобы проверка уникальности прошла успешно
Объект.Наименование = Объект.Наименование + "_дубль";
Объект.Записать();
КонецЦикла;
После переименования существующих элементов процедура обновления 1С не найдет совпадений по имени, создаст новые «чистые» элементы и успешно завершит работу. После этого вы сможете вручную навести порядок в справочнике.
Если у вас есть доступ к Конфигуратору и база не на «замке» (разрешено редактирование), проанализируем «дедовский», но крайне надежный метод:
ОснованияУвольнения, раскроем ветку Макеты.ОснованияУвольненияПоТКРФ (это может быть текстовый или HTML документ).Чтобы не снимать базу с поддержки и не менять основную конфигурацию, создадим расширение. Это современный и безопасный метод.
ПричиныУвольненияПФР (или ОснованияУвольнения).В исключительных случаях, когда обновление зацикливается, можно временно изменить программный код модуля менеджера справочника. Рассмотрим пример модификации процедуры начального заполнения:
Процедура НачальноеЗаполнение() Экспорт
// ... какой-то код инициализации данных
Для Каждого СтрокаДанных Из ТаблицаДанных Цикл
ОбъектСправочника = ... // получение объекта
Попытка
ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектСправочника);
Исключение
// Если запись не удалась из-за дубля наименования, просто пропускаем
ЗаписьЖурналаРегистрации("Обновление", УровеньЖурналаРегистрации.Предупреждение, , ,
"Не удалось записать основание: " + ОбъектСправочника.Наименование);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Использование блока Попытка...Исключение гарантирует, что даже если система встретит дубль, она не «упадет» с критической ошибкой, а просто перейдет к следующей записи. Это позволит обработчику обновления дойти до 100%.
Чтобы в будущем не сталкиваться с подобными ситуациями, рекомендуем соблюдать следующие правила:
.dt) перед началом обновления.Мы проанализировали основные пути решения проблемы. Выбор метода зависит от ваших компетенций и прав доступа к конфигурации базы данных. В большинстве случаев сочетание удаления дублей и использования внешней обработки переименования является самым быстрым и эффективным решением.