Как обычно обновлял пачку баз 1С и тут выскочила такая ошибка
Далее сказ о том, как я ее решал
В подробностях вот такая портянка
Ошибка при вызове метода контекста (Записать){ОбщийМодуль.ЗарплатаКадрыСобытия.Модуль(544)}:ВызватьИсключение ТекстСообщения{ОбщийМодуль.ОбновлениеИнформационнойБазы.Модуль(78)}:Объект.Записать();{Справочник.ПричиныУвольненияПФР.МодульМенеджера(77)}:ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ОбъектСправочника);{(1)}:Справочники.ПричиныУвольненияПФР.НачальноеЗаполнение(){ОбщийМодуль.ОбщегоНазначения.Модуль(5962)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(9399)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(Обработчик.Процедура, ПараметрыОбработчика);{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(1546)}:ВыполнитьОбработчикОбновления(Обработчик, ПараметрыОбработчика, ДополнительныеПараметры);{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(2549)}:ИтерацияОбновления.ВыполненныеОбработчики = ВыполнитьИтерациюОбновления(ИтерацияОбновления, Параметры); // @skip-check query-in-loop - выполнение монопольных и оперативных обработчиков.{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(111)}:ВыполнитьДействияПриОбновленииИнформационнойБазы(ПараметрыОбновления, ДополнительныеПараметры);{ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный.Модуль(2891)}:Результат = ВыполнитьОбновлениеИнформационнойБазы(ПараметрыОбновления);{(1)}:ОбновлениеИнформационнойБазыСлужебный.ВыполнитьОбновлениеИнформационнойБазыВФоне(Параметры[0],Параметры[1]){ОбщийМодуль.ОбщегоНазначения.Модуль(5962)}:Выполнить ИмяМетода + "(" + ПараметрыСтрока + ")";{ОбщийМодуль.ДлительныеОперации.Модуль(1692)}:ОбщегоНазначения.ВыполнитьМетодКонфигурации(ИмяПроцедуры, ПараметрыВызова);{ОбщийМодуль.ДлительныеОперации.Модуль(1671)}:ВызватьПроцедуру(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения);[ОшибкаВоВремяВыполненияВстроенногоЯзыка]по причине:Ошибка при выполнении обработчика - 'ПередЗаписью'по причине:Уже существует причина увольнения (сфр) с таким значением поля Код (ч1с71тк)[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка]
Решил глянуть на этот элемент. К сожалению окно обновления модальное, получить доступ к органам управления нельзя. Но можно открыть обработку.
Поэтому кинул самый простой вариант - реквизит с нужным типом ( а можно и все, чтобы выбрать при ошибке на другой справочник
Открыл обработку в базе. И действительно есть дубли:
Но это было плохой идеей, так как там много дублей.
Тогда я решил проверить, а были ли дубли раньше? Развернул базу из бэкапа:
Оказывается очень много дублей, поэтому воспользуемся стандартной обработкой удаления дублей
Основания увольнения также полон дублей. Но здесь не надо доверяться программе в выборе метода поиска дублей, стоит сделать так:
В итоге все успешно обновилось. А вот откуда ошибка я знаю, данная база создавалась методом переноса части данных из старой при помощи универсальной выгрузки загрузки из XML.
_______________________________________________________
Добавка из 2026 года. Опять вылезла такая проблема и я, спортивного интереса ради, решил поискать способ обойти ошибку без восстановления из бэкапа.
Даже если удастся запустить обработку "Поиск и удаление дублей" в момент этой ошибки, она все равно не сможет ничего сделать, там выскакивает ошибка и дальше висит несколько часов без результата.
Открыть список элементов справочника можно, но он не позволит поставить пометку на удаление.
Обработка удаление помеченных объектов также выпадает в ошибку.
Остается попробовать удалить непосредственно.
Все действия выполняются на свой страх и риск. Работайте с копией базы.
Пишем обработку, в которой получаем объект и пробуем выполнить к нему Удалить(). Такое не всегда возможно и всегда чревато последствиями, ибо объект удаляется без проверки на наличие ссылок. Т.о. можно случайно удалить использующийся элемент.
После удаления элементов база успешно завершила обновление.
Вот тут можно попробовать провести Тестирование и исправление с проверкой ссылочной целостности. Дальше проанализировать вывод и исправить документы, в которых данный элемент отсутсвует.
Накидал на коленке простую обработку. 
Собственно можете сами попробовать запустить нужную обработку или удалить элемент справочника. Кнопка "Найти места использования справочника" выдает список мест, где этот справочник мог бы быть использован, а не где используется именно этот элемент. Подразумевается, что пользователь сам пройдет гипотетические места и исправит ошибки.
Добрый день, подскажите: вот этот пункт - "воспользуемся стандартной обработкой удаления дублей" вы делали в какой момент?
ОтветитьУдалитьОткатились на предыдущий релиз, удалили дубли, потом обновлялись?
Прямо перед указанной Вами цитатой идет предложение "Тогда я решил проверить, а были ли дубли раньше? Развернул базу из бэкапа:".
УдалитьА по сути - да, восстановил из бэкапа, выполнил необходимые процедуры и провел обновление
Сегодня попробовал другой вариант - использование обработки поиск и удаление дублей из набора "Инструменты разработчика" https://devtool1c.ucoz.ru/index/variant_portativnyj/0-39
УдалитьОткрываем ее также, через Еще, внешняя обработка. Но, она скажет, что не может работать в режиме управляемого приложения и попросит перезапустится в обычный режим.
Доброго времени суток уважаемое сообщество. Возникла проблема, при обновлении конфигурации на версию 3.0.194.23, процесс обновления был прерван с ошибкой: Приложение не было обновлено на новую версию по причине: Уже существует причина увольнения (сфр) с таким значением поля Код (п3ч1с77тк). После перезапуска программа автоматически продолжает обновление и снова вываливается с ошибкой. Перепробовал все, что смог придумать и найти в интернете. Даже обновил конфигурацию через Конфигуратор, и там в отчете указано, что конфигурация обновлена и имеет номер последней версии, но программа при запуске все равно продолжает пытаться обновиться с ошибкой в конце. Как мне выйти из этого замкнутого круга. Сохраненной базы нету, последняя сохраненная версия несколько месяцев назад.
ОтветитьУдалитьДобрый
УдалитьТут от сообщества 1,5 человека ))
Вам бы на Инфостарт, вот там много.
Я бы попробовал найти путь удалить дубли. Не проверял, но попробуйте написать обработку, которая позволит открыть нужный справочник или обработку поиск дублей, потом также откройте удаление помеченных
Увы, использовать встроенную обработку не получится. Даже пометить на удаление нельзя. Сегодня мне удалось проверить, чисто из спортивного интереса, бэкап у меня есть. Но, можно попробовать прямое удаление.
УдалитьДобавил в статью описание решения с непосредственным удалением элемента
Удалить