Решил остановиться на таком варианте:
В конфигурации создам справочник "спрСчетчики" чтобы в нём хранить любые собственные счётчики, для любых объектов конфигурации (если ещё нечто подобное понадобится...).
Заведу в этом справочнике единственный числовой реквизит - "ПорядковыйНомер".
Каждый отдельный счётчик будет представлен в этом справочнике отдельным предопределённым элементом.
Чтобы прочитать значение нужного счётчика, обращаюсь к предопределённому элементу по коду и считываю значение его реквизита "ПорядковыйНомер" используя вот эту функцию, где ИмяСправочника - имя, моего единственного справочника "спрСчетчики" (вдруг, будет ещё один подобный справочник счётчиков, хотя вряд ли) , а Код - код предопределённого элемента (код счётчика из которого буду читать "ПорядковыйНомер");
Функция ПолучитьСчётчик(ИмяСправочника, Код) Экспорт
ИмяСправочника = "Справочник." + ИмяСправочника;
Запрос = Новый Запрос("ВЫБРАТЬ " + ИмяСправочника + ".Ссылка
|ГДЕ
| " + ИмяСправочника + ".Код = &Код
|ДЛЯ ИЗМЕНЕНИЯ
| " + ИмяСправочника);
Запрос.УстановитьПараметр("Код", Код);
Счётчик = Запрос.Выполнить().Выгрузить()[0].Ссылка.ПолучитьОбъект();
НовыйПорядковыйНомер = (Счётчик.ПорядковыйНомер + 1);
Счётчик.ПорядковыйНомер = НовыйПорядковыйНомер;
Счётчик.Записать();
Возврат НовыйПорядковыйНомер;
КонецФункции
Цепляю вызов функции в модуле объекта:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
СтандартнаяОбработка = Ложь;
ЭтотОбъект.Код = омСправочники.ПолучитьСчётчик("спрСчётчики", 1);
КонецПроцедуры
Использую файловый вариант базы данных.
Тестировал два дня... параллельно записывал значения в разные справочники из 6-10 отдельных подключений и каждый, в цикле, одновременно записывали по 5000 новых объектов - счётчик всегда оставался уникальным.
В функции сознательно не использовал вызов НачатьТранзакцию() т.к. она увеличивает (в этом случае) количество исключительных ситуаций связанных с взаимными блокировками - если один пользователь получал код более 20сек. у остальных выскакивает сообщение об ошибке. Убрал "НачатьТранзакцию()" всё стало нормально. Уникальность кода сохраняется, даже как-то, параллельность работы пользователей улучшилась. Ещё проверю конечно...
Можно было бы и константы использовать, но как-то не захотелось. Смущает конструкция "ДЛЯ ИЗМЕНЕНИЯ".
Короче, если у кого есть лучше предложения... (или здоровая критика всех выше изложенных)