Думаю, что нередко у программистов возникает ситуация, когда какой-то программный код вдруг перестаёт работать, а после разбора программы выясняется, что кому-то из пользователей взбрело в голову переименовать группу (или элемент) справочника и т.п.
Хороший программист старается избегать поиска по наименованию, поскольку это небезосновательно считается ненадёжным методом. Чаще прибегают к поиску по коду – это поле, как правило, не так-то просто поменять, да и в голову пользователям это приходит чуть реже, чем никогда.
Однако и такой подход однажды подвёл меня - код в карточке был изменен после синхронизации с другой программой, и после этого другая синхронизация перестала работать. И я был вынужден снова подумать над своим поведением...
После раздумий было принято решение опираться на внутренний уникальный идентификатор ссылки, который точно не изменишь ни программно, ни, тем более, в пользовательском режиме.
И родилась эта обработка, чтобы облегчить написание кода. Да и получение идентификатора - задача не самая заурядная, требует автоматизации.
Обработка позволяет в пользовательском режиме выбрать необходимые ссылочные объекты и сформировать программный код, однозначно идентифицирующий именно эти объекты независимо от кода и/или наименования.
Обработка работает в любой конфигурации на управляемых формах, тестировалась в типовых и нетиповых конфигурациях на платформе 1С:Предприятие 8.3 (8.3.22.1704), но будет работать на всей линейке релизов платформы 1С:Предприятие 8.3
UPD: На основании комментариев привожу дополнение к описанию.
Предлагается использовать функцию платформы "XMLЗначение" как лаконичное и быстрое решение. Однако, я провел проверки и остался в своём решении.
Во-первых, предложенный мной подход подходит для авторефакторинга - при переименовании объекта в дереве конфигурации код будет модифицирован так, что он останется рабочим. Исключение составляет единственный случай - это формирование пустой ссылки на точку бизнесс-процесса. Пустое значение такого объекта можно сформировать только через конструктор.
В приведенном ниже коде показано три способа формирования пустой ссылки, и только первый из них подходит для авторефакторинга и выглядит лаконичнее других. В моей обработке второй вариант используется вынужденно по причине отсутствия другой возможности создать ссылку на точку бизнесс-процесса.
//1:
Документы.Документ1.ПустаяСсылка()
//2:
Новый(Тип("ДокументСсылка.Документ1"))
//3:
XMLЗначение(Тип("ДокументСсылка.Документ1"), "00000000-0000-0000-0000-000000000000");
Во-вторых, при проверке текста кода конфигурации мой подход также выигрывает - если объект переименован в дереве конфигурации, а авторефакторинг по какой-то причине не произведен, проверка выявит ошибку, тогда как все методы с использованием имён типов не будут проверены на ошибки корректности имени типа. Здесь в исключение и попадает случай с пустой ссылкой на точку маршрута, но такое значение нужно настолько редко, что можно сказать, что оно вообще не нужно.
В-третьих, предлагаемый мной подход не предназначен для формирования большого объема ссылок, а потому к скорости критики здесь быть не может, даже, если мой подход и не является самым быстрым.