Как хранить предопределенные значения или список значений?
Можно добавить константу в метаданные и не забыть дать на нее права всем кому потребуется…
Можно в коде прописать НайтиПоНаименованию(…), НайтиПоКоду(…) и надеяться, что наименование или код не поменяется…
Можно добавить предопределенное значение в объект метаданных, но такой элемент уже есть в базе…
Для хранения подобных констант будем использовать справочник. Где наименование будет название константы, а в табличной части будут храниться значения.
Чем удобен данный справочник:
Права выдаются единоразово для нужных ролей.
Получать константу сразу в коде внешних обработок и отчетов без обновления конфигурации.
Получать константы без обращения к базе данных (общий модуль с повторно используемыми возвращаемых значений)
Примеры использования:
в коде:
МояОрганизация = Справочники.БДВ_Константы.ПолучитьЗначениеКонстанты("Моя организация", 1);
СписокПользователей = Справочники.БДВ_Константы.ПолучитьЗначениеКонстанты("СписокПользователей", 0);
Второй параметр указывает в каком виде возвращается значение:
0 — список значений,
1 — текущее значение.
в запросе:
"ВЫБРАТЬ Первые 1
| К.Значение КАК Значение
|ИЗ
| Справочник.БДВ_Константы.Значения КАК К
|ГДЕ
| К.НаименованиеКонстанты = ""Моя организация"""
установка константы в коде:
Справочники.БДВ_Константы.УстановитьЗначениеКонстанты("Моя организация", Справочники.Организация.НайтиПоКоду("000001"));
СписокПользователей = Новый СписокЗначений;
СписокПользователей.Добавить(ПараметрвСеанса.ТекущийПользователь);
Справочники.БДВ_Константы.УстановитьЗначениеКонстанты("СписокПользователей", СписокПользователей, Истина);
Наименование константы может содержать любые символы.
При записи константы проверяется уникальность наименования, второй с таким же именем создать нельзя.
Перед записью проверяется наличие значений в других константах и выводится список констант, где эти значения присутствует.
Константы можно группировать по папкам.
Конфигурация тестировалась на платформе 8.3.10.2580.
А еще как вариант использовать связку ПВХ + РегистрСведений. Если константы меняются редко и их много, то для скорости получения можно использовать модуль с повторным использованием
присоединяюсь к (1)
СписокПользователей = Новый СписокЗначений;
СписокПользователей.Добавить(ПараметрвСеанса.СекущийПользователь);
но улыбнуло — СекущийПользователь ,может быть ТекущийПользователь
А можно вообще не лепить таблицы в БД, а создать обработку в расширении или через механизм БСП, а в ней
макет «Константы» с колонками
Имя/ТипМетаданныхСтрокой/ ВидМетаданныхСтрокой/ УидXmlСтрокой
….
«Филиал1″/»Справочник»/»Организации»/»……»
написать простейшую функцию общего модуля получения значения ссылки из строки макета.
обслуживание таких «констант» заключается в добавлении новой строки в макет и сохранении обработки
в любой момент без «терзания» основной конфигурации.
думаю это будет не медленнее, чем обращение к таблицам
Используем: Регистр сведений, повторно используемый модуль, ОбщееХранилищеНастроек (на служебного пользователя, для некритичных задач)
(2)Поправил
(4) Повторно используемый модуль там используется.
В первоначальном варианте был регистр сведений, все значения хранились в Хранилище значений. Если там была ссылка, то контроля при удалении ни какого не было.
И из-за того что было много записей в регистре, хотелось немного их структурировать.
Поэтому пришлось использовать справочник.
(3) вариантов можно много придумать, один из них вы видите здесь
Хороший вариант, но мы ушли к регистру сведений из-за того, что появилась необходимость ввода периодических параметров
Контроль удаления решили через настройку прав доступа к регистру
может я раньше не полностью высказался — для наглядной структуры — справочник, а вот же возможна периодика — с записью в регистр сведений за (1) + (8) . но полностью согласен с автором — каждый придумывает свое решение. Я лишь добавлю что ДОЛЖНА быть периодика, если хотите гибкости в длительном периоде, но это будет сложней.
Не понял, зачем константе табличная часть со значениями. По какому принципу выбирается значение, если значений много? Сомневаюсь, что одна и та же константа может использоваться и так и так, и как одно значение и как список.
Если надо хранить список значений, так пусть это и будет список где-нибудь в хранилище, да хоть таблица значений. Есть же тип значения в колонке.
Параметры 0 и 1 лишние, проще было бы без параметра берется текущее значение, а с каким-либо параметром (Истина, например) — весь массив значений.
(10) Сколько значений хранить решается исходя из требований прикладного решения. Если надо одно значение, то хранится одно значение в ТЧ, если список, то набивают сколько угодно.
Константы / предопределенные элементы или Найти по наименованию в коде отчета/обработки — это уже холивар.
Есть математический принцип доказательств «Необходимо и достаточно». Необходимо чтобы данные заполнения для конкретно этой(любой) обработки/отчета/документа/справочника хранились либо для одного пользователя либо для всех.
Для одного пользователя хранится в кэше. При очистке кэша пропадает.
При хранении для всех — мы должны либо написать в коде(НайтиПоНаименованию) либо предусмотреть какой либо вариант констант (константа, справочник, регистр сведений с текстовым измерением или что-то еще).
Проблема в администрировании этого, а не в архитектуре. Пользователь в принципе может не знать — вносит от данные в базу как настройка для себя или для всех?
Или сегодня он делает эту работу один и ему нужны эти настройки, завтра их будет пятеро и у каждого свои индивидуальные, или вовсе без настроек, потому что каждый раз разное. А послезавтра снова один.
Для того чтобы другому пользователю не выскакивало то, что запомнил в базе кто-то другой — нужен администратор.
Мне вот понравилось как отчеты в ЗУП 2,5 настройки сохраняют.
Можно же сделать такое на документах/обработках/справочниках, нажал на кнопочку, видим список реквизитов/параметров которые можно сохранить и выбираем себе или всем или кому то конкретному. Как элемент БСП.
Поиск по наименованию плох не сам по себе, а как постоянно используемое в модуле для разных клиентов.Для заполнения первоначальных настроек при первом запуске это нормально