При разработке тех или иных решений, периодически приходится использовать прямое указание ссылок на элементы справочников, планов видов характеристик, документов, счетов и т.д.
Как Вы знаете, конструкции вида
ОсновнойСклад = Справочники.Склады.НайтиПоКоду("СКЛ00000016");
//или
ОсновнойСклад = Справочники.Склады.НайтиНоНаименованию("Основной склад", Истина);
использовать не рекомендуется по причине их ненадежности. Пользователи могут как переименовать склады, так и поменять коды ("Если технически они могут это сделать - это будет сделано, если не могут - то со временем найдут способ").
Надежнее выглядят конструкции:
Справочники.Склады.НайтиПоРеквизиту("ИмяДляПрограммиста", "ОсновнойСклад");
Но для их использования - нужно добавлять новые реквизиты к справочнику "Склады" (и ко всем справочникам, используемым в программном коде), что тоже не желательно.
Похожий подход используется в типовых конфигурациях на БСП в подсистеме "Дополнительные реквизиты и сведения" - в Плане видов характеристик для этого выделено поле "Имя".
Однако, если у Вас есть возможность изменять конфигурацию - возможно, более правильным решением будет использование предопределенных значений.
Если конфигурация находится на поддержке и обновляема, и Вы не хотите усложнять процесс обновления (на сравнение доработок поставщика с Вашими доработками, при каждом обновлении) - то нужно что-то другое.
Еще один способ - задавать элементы через их внутренний идентификатор:
ОсновнойСклад = Справочники.Склады.ПолучитьСсылку(новый УникальныйИдентификатор("c23de3dc-cc0d-11e5-9653-3085a93ddca2"));
Внутренний идентификатор записанного элемента не изменяется ни пользователем, ни программистом. Но такой подход имеет свои недостатки:
- Внутренние идентификаторы нужно узнавать заранее (в режиме "Предприятие" через консоль, например)
- Код не нагляден и другой разработчик (или Вы-же через год) - может не понять что это за элемент такой "c23de3dc-cc0d-11e5-9653-3085a93ddca2"
- Код привязан к базе данных. При переносе в другую базу - нужно находить все такие идентификаторы и обновлять их
Предлагается использовать следующий вариант:
ОсновнойСклад = НастройкиВОбщемХранилищеСервер.ПолучитьОбщуюНастройку("ОсновнойСклад");
При этом, настройка хранится в общем хранилище (добавлять новые объекты не нужно), сохраняется туда при помощи отдельной обработки "Настройка параметров разработчика".
В конфигурацию добавляются два модуля и сама обработка
- Общие модули можно добавить через "Расширение"
- Обработку можно поместить в "Дополнительные отчеты и обработки" и ограничить доступ только Администратору системы
Список настроек хранится в макете обработки (тип макета "Табличный документ"):
Данный макет настраивается разработчиком "Под себя" - список настроек и групп.
После настройки - обработка в режиме "Предприятие" будет выглядеть так:
Примечание: при установке доработок в качестве расширения - расширение следует отключить "Безопасный режим":
Если безопасный режим включен, то код "УстановитьПривилегированныйРежим(Истина)" не будет иметь никакого эффекта (не установит "полные права", но и не вызовет ошибок), а последующая строка чтения данных из хранилища будет вызывать ошибку. Возможно, это можно обойти другими способами (настройкой прав на чтение чужих настроек всем пользователям).
UPD (Важное замечание):
В комментарии от Yashazz было высказано обоснованное опасение относительно использования Хранилища настроек. Основная причина в том, что само хранилище настроек - это своего рода "чёрный ящик". Описаны пара случаев реального сбоя хранилища настроек в базах. Особую осторожность следует уделять при использовании РИБ.
Варианты решения:
- При использовании расширений и платформы версии 8.3.11 и выше (учитывается режим совместимости конфигурации), в расширении можно добавить Справочник или Регистр сведений и хранить настройки там.
- При использовании расширений и платформы версии 8.3.16 и выше (учитывается режим совместимости конфигурации), в расширении можно добавить Константу.
Также, при разработке внешней обработки для конфигурации на БСП - настройки можно хранить в самой обработке.
В статье "Способ хранения данных расширения или дополнительной обработки" (//infostart.ru/1c/articles/1243789/) описаны альтернативные способы хранения настроек.
Там-же в первом комментарии приведена ссылка на статью ИТС, в которой рассказывается как в дополнительных отчетах и обработках БСП можно хранить собственные настройки.