При обновлении типовых конфигураций неоднократно приходилось сталкиваться с проблемой, когда обработчики обновления пытаются записать в справочник элемент с кодом, который уже существует. В итоге получаем неуникальность кодов и невозможность дальнейшего обновления. Какая религия запрещает разработчикам применять простое правило: «проверь перед записью» совершенно непонятно, но имеем то, что имеем. И вот в этот раз проблема возникла при обновлении ЗУПа до 3.1.29.21. В справочник «ПричныУвольненияПФР» упорно пытался записаться элемент с кодом «п3ч1с77тк», который там уже существовал. Почему он там оказался вопрос любопытный, но в контексте проблемы не особо важный.
Исправить ситуацию можно было двумя способами: поправить код обработчика в расширении, либо исправлять сами данные внешней обработкой. Второй вариант показался более целесообразным, т. к. позволял применять его и на базовых версиях. Поэтому была написана очень простая обработка, но, возможно, она сбережет кому-то минуты жизни и нервные клетки.
На деле имеем две кнопки и один реквизит. В реквизит вбиваем «проблемный» код, который берем из описания ошибки, по-умолчанию это тот самый «п3ч1с77тк». Обработку надо запустить два раза. Первый раз до обновления, или же в момент получения ошибки обработчиков (после нужно запустить процесс заново) и нажать кнопку «До обновления», после нажатия будет найден «проблемный» элемент и исправлен его код, чтобы он не мешал записи нового элемента.
Когда обработчики успешно выполнились, опять запускаем обработку и нажимаем кнопку «После обновления». Произойдет следующее: код нового элемента будет изменен, а сам элемент помечен на удаление, старому элементу будет возвращен прежний код, а реквизиты «Наименование» и «Основание» обновлены в соответствии с новым элементом. В справочнике «ОснованияУвольнения» будет исправлен реквизит «ПричинаУвольненияПФР» для связанного элемента т. е. возвращена прежняя ссылка. После останется только удалить помеченный объект и всё.
Такой приоритет именно старому элементу дается, т. к. на него могут быть ссылки, особенно в доработанных конфигурациях, или в конфигурациях с расширениями.
Проверено на следующих конфигурациях и релизах:
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.29.21