Использование хранилища общих настроек вместо "НайтиПоНаименованию" или "НайтиПоКоду"

22.06.21

Разработка - Инструментарий разработчика

Использование хранилища общих настроек для хранения ссылок, которые используются программистом в коде (вместо "НайтиПоНаименованию" или "НайтиПоКоду")

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Использование хранилища общих настроек вместо "НайтиПоНаименованию" или "НайтиПоКоду"
.epf 9,99Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.
Использование хранилища общих настроек вместо "НайтиПоНаименованию" или "НайтиПоКоду":
.cfe 13,82Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.
Использование хранилища общих настроек вместо "НайтиПоНаименованию" или "НайтиПоКоду":
.cf 83,90Kb
3
3 Скачать (1 SM) Купить за 1 850 руб.

При разработке тех или иных решений, периодически приходится использовать прямое указание ссылок на элементы справочников, планов видов характеристик, документов, счетов и т.д.

Как Вы знаете, конструкции вида

ОсновнойСклад = Справочники.Склады.НайтиПоКоду("СКЛ00000016");
//или
ОсновнойСклад = Справочники.Склады.НайтиНоНаименованию("Основной склад", Истина);

использовать не рекомендуется по причине их ненадежности. Пользователи могут как переименовать склады, так и поменять коды ("Если технически они могут это сделать - это будет сделано, если не могут - то со временем найдут способ").

Надежнее выглядят конструкции:

Справочники.Склады.НайтиПоРеквизиту("ИмяДляПрограммиста", "ОсновнойСклад");

Но для их использования - нужно добавлять новые реквизиты к справочнику "Склады" (и ко всем справочникам, используемым в программном коде), что тоже не желательно.
Похожий подход используется в типовых конфигурациях на БСП в подсистеме "Дополнительные реквизиты и сведения" - в Плане видов характеристик для этого выделено поле "Имя".

Однако, если у Вас есть возможность изменять конфигурацию - возможно, более правильным решением будет использование предопределенных значений.

Если конфигурация находится на поддержке и обновляема, и Вы не хотите усложнять процесс обновления (на сравнение доработок поставщика с Вашими доработками, при каждом обновлении) - то нужно что-то другое.

Еще один способ - задавать элементы через их внутренний идентификатор:

ОсновнойСклад = Справочники.Склады.ПолучитьСсылку(новый УникальныйИдентификатор("c23de3dc-cc0d-11e5-9653-3085a93ddca2"));

Внутренний идентификатор записанного элемента не изменяется ни пользователем, ни программистом. Но такой подход имеет свои недостатки:

  1. Внутренние идентификаторы нужно узнавать заранее (в режиме "Предприятие" через консоль, например)
  2. Код не нагляден и другой разработчик (или Вы-же через год) - может не понять что это за элемент такой "c23de3dc-cc0d-11e5-9653-3085a93ddca2"
  3. Код привязан к базе данных. При переносе в другую базу - нужно находить все такие идентификаторы и обновлять их

 

Предлагается использовать следующий вариант:

ОсновнойСклад = НастройкиВОбщемХранилищеСервер.ПолучитьОбщуюНастройку("ОсновнойСклад");

При этом, настройка хранится в общем хранилище (добавлять новые объекты не нужно), сохраняется туда при помощи отдельной обработки "Настройка параметров разработчика".

В конфигурацию добавляются два модуля и сама обработка

  • Общие модули можно добавить через "Расширение"
  • Обработку можно поместить в "Дополнительные отчеты и обработки" и ограничить доступ только Администратору системы

Список настроек хранится в макете обработки (тип макета "Табличный документ"):

Данный макет настраивается разработчиком "Под себя" - список настроек и групп.

После настройки - обработка в режиме "Предприятие" будет выглядеть так:

 

 
Для тех, кто не хочет скачивать ("сделай сам")


Примечание: при установке доработок в качестве расширения - расширение следует отключить "Безопасный режим":

Если безопасный режим включен, то код "УстановитьПривилегированныйРежим(Истина)" не будет иметь никакого эффекта (не установит "полные права", но и не вызовет ошибок), а последующая строка чтения данных из хранилища будет вызывать ошибку. Возможно, это можно обойти другими способами (настройкой прав на чтение чужих настроек всем пользователям).

 

UPD (Важное замечание):

В комментарии от Yashazz было высказано обоснованное опасение относительно использования Хранилища настроек. Основная причина в том, что само хранилище настроек - это своего рода "чёрный ящик". Описаны пара случаев реального сбоя хранилища настроек в базах. Особую осторожность следует уделять при использовании РИБ.
Варианты решения:

  • При использовании расширений и платформы версии 8.3.11 и выше (учитывается режим совместимости конфигурации), в расширении можно добавить Справочник или Регистр сведений и хранить настройки там.
  • При использовании расширений и платформы версии 8.3.16 и выше (учитывается режим совместимости конфигурации), в расширении можно добавить Константу.

 

Также, при разработке внешней обработки для конфигурации на БСП - настройки можно хранить в самой обработке.

В статье "Способ хранения данных расширения или дополнительной обработки" (//infostart.ru/1c/articles/1243789/) описаны альтернативные способы хранения настроек. 

Там-же в первом комментарии приведена ссылка на статью ИТС, в которой рассказывается как в дополнительных отчетах и обработках БСП можно хранить собственные настройки.

 

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

02.09.2020    171545    960    403    

923

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14113    107    46    

107

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    27200    96    48    

137

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    17224    43    15    

75

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11863    45    27    

67

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    191113    1152    0    

920

Инструментарий разработчика Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    1097    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    104101    244    100    

307
Отзывы
14. Yashazz 4804 23.06.21 21:16 Сейчас в теме
Всё это до первого же случая копирования/тиражирования базы, либо до программного/ручного сброса или иной гибели подобных данных. А ещё автор явно не нарывался на фокусы динамического обновления, когда в таких сохранённых настройках оказываются фантомные, лажовые, пустые данные, и прям такая начинается неповторяемость, аж жесть, никому не пожелаю. Один сеанс читает одно, другой - другое, спустя пару минут третье. Лично видел.
Настройки юзера зависят от юзера, прекрасно падают и исчезают в никуда, в т.ч. при программной работе с пользователями ИБ.
А ещё некоторые регламентые операции SQL Management Studio тоже их гробят.

Darklight всё верно написал.
ivan453; ILM; oldcopy; dnikolaev; Светлый ум; alekseineputin; Oculta; GATTUSO; zqzq; Xershi; +10 Ответить
27. Cvetic 307 24.06.21 16:57 Сейчас в теме
Я для этого добавляю константы типа: ОсновнойСклад,ОсновнойПоставщикСырья, ОсновнойПоставщикАвтоЗапчастей и т.п.
Константы гораздо удобнее чем реквизиты справочников - все объекты конфигурации остаются на поддержке.
DELOVOYDOM; Lapitskiy; dnikolaev; DrAku1a; +4 Ответить
21. Yashazz 4804 23.06.21 22:48 Сейчас в теме
а насчёт предопределённых - https://infostart.ru/1c/articles/310542/
ILM; dnikolaev; DrAku1a; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Sergafan10 23.06.21 10:39 Сейчас в теме
Интересный подход, спасибо!
2. Dmitryiv 162 23.06.21 11:34 Сейчас в теме
Будет работать до тех пор, пока пользователь не залезет в настройки и не нажмёт "Очистить" все настройки. Все типовые такой функционал предоставляют.
3. DrAku1a 1749 23.06.21 11:50 Сейчас в теме
(2) Попробовал в демо-версии БП3 - сделать очистку. Ничего не поменялось, настройки сохранились. Возможно, это потому, что пользователь "ОбщаяНастройка" в списке пользователей отсутствует и система не проходится по нему при чистке даже всех настроек.
Это скорее баг, чем "фича" и со временем его могут пофиксить. Потому, более надежным будет - хранить настройки в справочнике или регистре сведений, добавленном через расширение.
Прикрепленные файлы:
4. bugagashenka 203 23.06.21 12:23 Сейчас в теме
Вообще, если прям очень хочется, то можно и общий реквизит сделать, чтобы у всех одновременно появился.
Все выкрутасы с регистрами, хранилищами работают ровно до того момента, пока не сменится бизнес-логика и основной склад уже не основной, и надо постоянно держать в голове эти настройки. Грубо говоря, был склад основной, по нему были движения. И его решили закрыть , переименовать в НеИспользовать для истории и вместо него использовать склад РЦ, который переименовали в основной. Логика данного примера хромает на обе ноги, как и тот факт, что пользователь полезет менять код, например.
В любом случае спасибо за пример, платформа пока не дала нормального инструмента для идентификации справочников без костылей, кроме своего решения в ПВХ. И его я бы и взял за эталон, когда пилил свой регистр допконстант, если бы знал о таком механизме.
RustIG; pavlov_dv; +2 Ответить
7. DrAku1a 1749 23.06.21 14:37 Сейчас в теме
Кстати, 1С в платформе 8.3.20 обещали в расширения подвезти возможность добавлять предопределенные элементы в справочники, а не только заимствовать их. В принципе, хорошая замена будет без костылей.
5. itoptimum 24 23.06.21 13:03 Сейчас в теме
Подход интересен и имеет право на существование, но не помешало бы развитие: наличие индивидуальных настроек для разных пользователей, вопрос повторной инициализации "по-умолчанию" для конкретного пользователя после очистки настроек/инициализации новой базы, да мало ли еще какие варианты. Регистр сведений в этом плане, действительно, гибче.
6. malikov_pro 1327 23.06.21 13:59 Сейчас в теме
(4) с РС "доп. констант" нормальное решение, разделяю на подсистемы, храню значение в типе "ХранилищеЗначения", инициализацию настроек делаю только через обработку, зачем ПВХ использовать

Функция ПолучитьНастройки() Экспорт
	
	Обработка = Обработки.хк_НастройкиПодсистемы_хк_ОбменAPI.Создать();
	Обработка.ПолучитьНастройки();

	Возврат Обработка;

КонецФункции
Показать
10. ixijixi 1979 23.06.21 15:42 Сейчас в теме
(6) Сейчас по фэншую принято обращаться к модулю менеджера
Возврат Обработки.хк_НастройкиПодсистемы_хк_ОбменAPI.ПолучитьНастройки();
fatman78; Serg O.; DrAku1a; +3 Ответить
8. RustIG 1836 23.06.21 14:55 Сейчас в теме
Файловая база, УТ 10.3, обычные формы...

на платформе 8.3.12 НайтиПоКоду() работает сносно и быстро - без блокировок таблицы - что для Номенклатуры, что для Контрагентов.

Обновил УТ 10.3 до последнего релиза (май 2021г) :
1) конфа и цфшник выросли с 65 Мб до 650Мб - это цфшник конфигруации
2) потребовался обязательным переход на новую плафторму 8.3.14
и тут начались пляски с бубном - "конфликт блокировок" при поиске по коду..... что в номенклатуре, что в контрагентах...

Пришлось создать свой справочник "Настройки базы данных" - засунуть в него 22 реквизита с типами Номенклатура и Контрагенты - указать в реквизитах конкретные ссылки - для ускорения работы и исключения блокировок

Не помогло - поскольку приходилось проверять иерархию по процедуре ПринадлежитЭлементу(СсылкаНаЭлемент) - сразу блокировка срабатывает на платформе 8.3.14

Пришлось при записи Номенклатуры и Контрагентов делать проверки и записывать реквизиты "НашКонтрагент", "НеИспользоватьТовар" и т.д. и тому подобное....

Более -менее стало возможным работать....
Были еще блокировки на журналах документов - жуткие.... в механизмах ЕГАИС и ЭДО - хотя ЕГАИС и ЭДО через УТ 10.3 в строительном магазине не использовалась - но при записи любого документа срабатывали к примеру подписки на события ЕГАИС и ЭДО - становилось жутко....

ОТключил все журналы документов, все механизмы ЕГАИС и ЭДО в УТ 10.3 - стало возможным работать....

Пережил худшие две недели в сезон продаж - когда пробитие чека вылетало в ошибку - из-за блокировок таблиц висела вся база.....

Через некоторое время перешли на серверную 1С - блокировки все равно иногда и редко возникают - и тут я уже не понимаю... и главное , что Журнал регистрации не регистрирует такие события...отловить как?

технологический журнал не предлагать - разбираться с ним нет времени

Короче, намутили они платформу 8.3.14 с ошибками, да и конфу УТ 10.3 криво в релиз выпустили... Пора вещи называть своими именами. Без обид, если кто сопричастен.
9. Serg O. 300 23.06.21 15:29 Сейчас в теме
(8) наверное надо сначала платформу обновить...8.3.14 старовата уже....
сейчас актуальная платформа 8.3.19 вышла (ну или предыдущую... 8.3.18 )

Через некоторое время перешли на серверную 1С - блокировки все равно иногда и редко возникают - и тут я уже не понимаю... и главное , что Журнал регистрации не регистрирует такие события...отловить как?


попробуйте бесплатные сервисы от команды Гилев.ру с сайта Gilev.ru
------------------------------------------------------------------------------
там есть несколько полезных сервисов
Сервис анализа Взаимо-блокировок (DeadLock) - именно они могут приводить к вылетаниям в ошибку
или сильных тормозам.
+ обязательно поставьте Сервис Анализа Длительных запросов (80% тормозов из-за неоптимальных запросов) - статистику покажет,
+ события тех-журнала Status (иногда тут видны конфликты блокировок, на которых пользователи через 20 сек вылетают)

и да, эти сервиса используют тех.журнал, но разбираться в нём самому не надо!
очень и очень полезная штука.
----------------------------------------------------------------------------------------
P.S. проверьте свойства конфигурации - закладка Совместимость ...
Режим управления блокировкой данных .... должен быть "Управляемый"
-----------------------------------------------------------------------------------------
если у Вас до сих пор "Разделяемый" - вот отсюда масса блокировок может быть
НО! это нужно тестировать и дорабатывать конфу, а не просто переключатать!
надо переходить! (не просто поменять, а дорабатывать конфу! ) на режим

+ там же есть конфа нагрузочного тестирования - покажет вам оценку вашего железа...
------------------------------------------------------------------------------------------
поиск по коду номенклатуры может вылетать по тайм-ауту 20 сек,
если кто-то в 1 транзакции пишет большие объёмы новой номенклатуры.
Может дело просто в какой-то обработке - надо писать порциями по 50-100 товаров.
------------------------------------------------------------------------------------------
самая свежая конфа УТ 10.3.70 - выдаёт ошибку при входе на платформе ниже 8.3.16.1814
Прикрепленные файлы:
DrAku1a; RustIG; +2 Ответить
11. RustIG 1836 23.06.21 15:44 Сейчас в теме
22. Xershi 1561 23.06.21 22:55 Сейчас в теме
(8) во насмешили, как будто только сдали спеца.
Пора учиться, а не жаловаться на платформу.
23. RustIG 1836 24.06.21 06:49 Сейчас в теме
(22) видимо бегло и невнимательно прочитали - пора вам учиться внимательно читать и учиться уважительно писать посты, а не понтоваться тут.
я делюсь опытом в контексте темы публикации - автор пришел к подобному механизму, что у меня - только на управляемых формах.

...Еще раз про свою ситуацию - на платформе 8.3.12 НайтиПоКоду(), ПринадлежитЭлементу() для Номенклатуры и Контрагентов - работали отлично и быстро во всех документах.... Достаточно длительное время я использовал эту конструкцию....

Но пришло время перейти на платформу 8.3.14, в которой данные процедуры тяжеловесны. Истина познается в практике... Декларации от 1с и от таких как вы, что " у нас все гуд" - оставьте своим детям и внукам. Я уже сыт этим.
ixijixi; DJ_Codebase; Светлый ум; +3 Ответить
12. malikov_pro 1327 23.06.21 15:45 Сейчас в теме
(10) Именно объект создаю, в нем реквизиты с нужными типами, загружаю в него то что присутствует в регистре, не написал еще проверку заполненности (пока не критично) из недостатков при смене структуры табличной части часть информации при загрузке настроек теряется.
13. Darklight 34 23.06.21 16:03 Сейчас в теме
Хранилище настроек штука хорошая, но хранятся только раздельно в разрезе пользователей - поэтому общие настройки надо хранить на одном общем пользователе (не знаю как сейчас - можно ли хранить на пустом пользователе, по-моему с какого-то релиза это изменилось). Проблема в том, что доступ к настройкам чужого пользователя требует административные права доступа в такой сессии - Вы решаете это путём установки Привилегированного режима в соответствующей функции. Насколько я знаю, до какого-то релиза это не прокатывает. Так как аналогичный способ я сам уже давно использую (и у меня тут даже есть публикация его использующая) - но пока он мне не внушает доверия.

Уж лучше завести отдельный регистр сведений (дабы и расширения конфигураций это поддерживают, да и просто в конфигурации можно легко добавить новый регистр - это не помешает обновлению) и хранить настройки там - эту практику я применяют давно и с ней нет проблем. Более того - очень удобно хранить настройки с разной степенью детализации учета (например по разным организациям, пользователям, метаданным, узлам, периодические, в любом сочетании этой детализации) - и не бояться что они вдруг потеряются (особенно если всё-таки не использовать расширения - это же всё новые объекты). А права на регистр - ну тоже самое - функция "УстановитьПривилегированныйРежим(Истина)" решает вопрос с правами - роли менять не нужно.

Ну а если менять конфу не хочется - есть типовые места хранения настроек (для отчётов обычно) - и про них на Инфостарте уже ни раз писали - их можно использовать по любому назначению (а не только для отчётов).

Кстати, предопределённые элементы легко эмулировать для любого способа хранения вот - просто написав в каком-то модуле (обычно общий модуль с вызовом сервера) отдельные функции для каждого предопределённого параметра - каждая из которых будет просто обращаться к нужному параметру через общую функцию но указывая заданный внутри путь-имя этого параметра.
Не поможет это только, увы для запросов - там всё в этом плане для автоматизации организации доступа на платформе 1С Предприятие 8 очень очень всё плохо! Хотя на СКД конечно можно немного решать вопрос за счёт доступа к общим функциям.

Кстати, если настройки в хранилище настроек - то из запроса к ним вообще не обратиться. А вот из регистра можно. Если они только не упакованы - вот тогда будут сложности
Светлый ум; Cyberhawk; Yashazz; tormozit; DrAku1a; Serg O.; +6 Ответить
28. Cyberhawk 135 24.06.21 18:51 Сейчас в теме
(13)
удобно хранить настройки с разной степенью детализации учета (например по разным организациям, пользователям, метаданным, узлам, периодические, в любом сочетании этой детализации)
Можешь показать структуру такого регистра?
32. Darklight 34 25.06.21 10:18 Сейчас в теме
(28)Оптимальную структуру пока не нащупал - периодически в разных проектах меняю. Сейчас такая, как в прилагаемой картинке (регистр не периодический)
Значение храню в запакованном (стерилизованном) в строку виде. Есть поддержка значений-коллекций (реализовано в форме записи регистра - вся магия в функциях установки и поучения значения, конечно, скрывается)
Прикрепленные файлы:
Cyberhawk; +1 Ответить
14. Yashazz 4804 23.06.21 21:16 Сейчас в теме
Всё это до первого же случая копирования/тиражирования базы, либо до программного/ручного сброса или иной гибели подобных данных. А ещё автор явно не нарывался на фокусы динамического обновления, когда в таких сохранённых настройках оказываются фантомные, лажовые, пустые данные, и прям такая начинается неповторяемость, аж жесть, никому не пожелаю. Один сеанс читает одно, другой - другое, спустя пару минут третье. Лично видел.
Настройки юзера зависят от юзера, прекрасно падают и исчезают в никуда, в т.ч. при программной работе с пользователями ИБ.
А ещё некоторые регламентые операции SQL Management Studio тоже их гробят.

Darklight всё верно написал.
ivan453; ILM; oldcopy; dnikolaev; Светлый ум; alekseineputin; Oculta; GATTUSO; zqzq; Xershi; +10 Ответить
15. DrAku1a 1749 23.06.21 21:23 Сейчас в теме
(14) Есть одно применение на практике: Обновляемая база. SQL. Не РИБ. Пол-года работает. Копию через dt делали. Проблем не было.
Если что-то изменится - напишу и поменяю на регистр сведений.
16. Yashazz 4804 23.06.21 21:37 Сейчас в теме
(15) А у меня было два применения, и две мега-засады, после которых ничего ценного в хранилищах не держу.
17. DrAku1a 1749 23.06.21 21:39 Сейчас в теме
(16) Подробнее можно? РИБ? Что было не так? В чём нашли причину или какие версии?
18. Yashazz 4804 23.06.21 21:51 Сейчас в теме
(17) Оба случая не РИБ.

Первая была сильно пилёная БП 1.6, на платформе 8.2.19.130 - постоянно теряла всякие настройки, сохранённые данные и прочее, начиная от размеров форм и заканчивая историями поиска. Прав хватало. Служба крутилась нормально. Сеансовые данные не лажали. Просто почему-то иногда оно исчезало, и не всё одновременно, разом, а попеременно.
Вторая была на 8.3.13, самописная на базе Документооборота, с тогдашней БСП (на которую я долго валил, но оказалось, зря). После каждого динамического обновления из хранилищ общих настроек - и стандартного, и юзерского, и отчётов, и системного - начинала читаться полная ересь, неведомо откуда взятая. Иногда читалась пустота. Пару раз при таком чтении падало (специально по ТЖ ловили). Спасал перезапуск всей тройки серверов (клиент-рдп, сервер 1С, сервер СУБД) и лютая чистка кэшей всех пользователей.

В обоих случаях не смогли докопаться до причин и просто обошли эти грабли. Оба раза 1С отвечала "обновите релиз".
19. DrAku1a 1749 23.06.21 22:04 Сейчас в теме
(18) С динамическим обновлением можно в принципе много "чудес" хапнуть, это на практике прочувствовал. Впрочем, принимаю к сведению и добавлю в статью.
20. Yashazz 4804 23.06.21 22:11 Сейчас в теме
(19) К сожалению, лично я не знаю, где проходит граница между хранимым в системных таблицах скуля и хранимым в компаунде на основе конфигурации, но подозреваю, что при дин.обновлении где-то застревает проинтерпретированный ранее фрагмент, p-код может даже, кэшируется как-то или обращается куда-то, куда не должен, и выходят такие чудеса. В этом смысле поведение хранилищных данных сродни поведению навигационных ссылок из Истории посещения и Избранного, там некоторые ключи тоже так начинают себя вести. А ещё иногда после дин.обновления глючат ссылки во встроенной справке (подозреваю, по той же причине, что-то их не обновляет).
Также есть подозрение, что новый режим (который /UpdateDBCfg -Dynamic -v2 и описан в https://infostart.ru/1c/articles/934237/) этой беды лишён. Но я не проверял.

А навели меня на эти подозрения формы внешек, которые я разбирал/собирал из хмл-файлов и прочего. Разрешение ссылок относительно указанной IBName весьма сильно меняло картину происходившего с этими данными, т.е. для одной и той же ИБ оно в разные разы вело себя по-разному.
24. RustIG 1836 24.06.21 08:54 Сейчас в теме
(19) у меня как было, база файловая, платф. 8.3.12 - динамическое обновление проходило без ошибок.

НО перешел на новую платф. 8.3.14 + обновил до последн. релиза УТ 10.3 + перешел на серверную 1с, СУБД MS SQL Server - динамич. обновление вываливается в ошибку СУБД - обновляет, выключает сеанс.

MS SQL Сервер + Конфа (новая, тяжелая) + Платформа (новая, тяжелая) = Бум!

...Я вместо регистра сведений в ряде случаев на проектах использую справочник с реквизитами. Мне не надо периодически изменять настройки - их у меня две в справочнике - "Тестовые" и "Рабочие". А изменяющиеся настройки делаю через табличную часть этих справочников - без хранения истории - поскольку не надо хранить историю.
Что из себя представляет Хранилище общих настроек? - некая таблица в базе? или механизм кэширования на время сеанса пользователя? Если кэш пользователя почистить, настройка из Хранилища останется в силе?
33. Darklight 34 25.06.21 13:40 Сейчас в теме
(14)А вообще-то иметь универсальное хранилище настроек, по типу того как устроено в объекте 1С «Хранилища настроек» вполне было бы неплохо. Некоторое время назад я размышлял над тем, как бы должен был быть устроен этот объект. И пока пришёл к такой структуре:

Настройки должны храниться по ключу, в принципе как и сейчас – ключ владельца (хотя считаю его не особо нужным и только сбивающим с толку), ключ настройки – оба строковые, считаю, что таких ключей вполне достаточно. Хотя могу быть любыми – по которым можно построить константный хеш. Так оно есть и сейчас. Собственно, с этим сходство заканчивается.

Помимо вышеназванных ключей, адрес ячейки настройки может определяться следующей аналитикой – все является не обязательными:
- Дата,время – позволяет хранить периодические значения
- Пользователь – позволяет привязать к конкретному пользователю
- Область разделения – Специальный объект, инициированный для сессии (но можно создавать вручную), определяющий область действия значения относительно всей базы данных – может определяться параметрами разделения облачного хранилища, узлом распределённой базы, сервером, компьютером с которого открыта сессия.
- Отбор – это произвольная аналитика

Смысл в том, что значения задаются с указанными параметрами аналитики.

Если значение будет задано с датой – то оно будет действовать с этой даты (отдельно, с нужной даты можно отключить значение), значение заданное без даты – это как значение по умолчанию – действует если нет значения на заданную дату, ну или когда просто не нужна хронология.

Если значение будет задано по пользователю –оно и будет получаться только по этому пользователю. Если по пользователю нет значения – то будет получаться значение по пустому пользователю.
Область разделения – определяет область владения значения – как уже сказал, это специальный общий объект. Всегда используется, пустых значений по умолчанию нет.

Отбор – вся фишка в том, что для любого значения можно задать свою доп аналитику – тогда если значение будет задано по этой аналитике – то по ней же оно должно будет получаться. Но у каждого значения может быть произвольный отбор. Но если при получении значения в отборе больше аналитики, чем при установке – лишняя аналитика игнорируется (но не наоборот). Пустое значение поля отбора совместимо с любым значением поля.

По полям отбора можно указать привязку к параметра сеанса – откуда будут браться данные по умолчанию при ПОЛУЧЕНИИ хранимого значения.

Устанавливать можно в т.ч. значения-коллекции. Тип специально не задаётся. Хотя… отдельно функцией при необходимости его можно было бы фиксировать.

Хранить и получать Описание настройки как «Хранилища настроек» тоже можно.
Для каждого значения можно задать свои права доступа по ролям и по пользователям. Права на доступ к другим областям разделения кроме текущей должны настраиваться одномоментно, но в другом месте – это общий объект.

При получении значения, нужно указывать ключи пути доступа и всё. Пользователь будет подставлен текущий, область разделения тоже, дата текущая дата актуальности. Но, конечно, рекомендуется всегда указывать дату исходя из контекста применения, так же рекомендуется всегда указывать аналитику отбора – для этого можно использовать специальную функцию из конфигурации – подготавливающую универсальный отбор с аналитикой для текущего контекста вызов, далее этот отбор можно дополнительно программно до настроить при необходимости.

Вот такая вот архитектура – заменят и «Хранилище настроек» и «Константы», и отлично подходит как средство хранения функциональных опций. Так как очень гибкое и универсальное. Заменит и кучу вариантов использования регистра сведений.
Как и с «Хранилищем настроек» должен быть модуль-менеджер для произвольного управления получением и установкой значений (и некоторыми другими событиями)

Считаю, что можно реализовать и поддержку предопределённых элементов - такие имеют именованный путь, напрямую доступный из конфигурации, но главное - по ним прям в конфигурации можно задать наборы значений по умолчанию.

Но, хранение, конечно, должно быть надёжным – т.е. в таблицах СУБД

P.S.
Говоря об Отборе я в простейшем случае имел в виду просто структуры аналитики Ключ=Значение. Но сейчас немного подумав - считаю, что можно сделать и полноценные Отборы со сложными условиями - их можно считать описанием множеств, тогда при получении значения должны пересечься два отбора как два множества - если пересеклись - их значение будет получено. Но это чревато - тем, что так может быть получено сразу несколько значений - а возвращено должно быть только одной. Так что это всё-таки экзотика. Обычных структур Ключ=Значение вполне достаточно, хотя иметь возможность передавать сразу несколько вариантов Значения по ключу - очень бы хотелось.
Имеющееся тут в виду "Значение" - тут это значение аналитики, не хранимое за этой аналитикой значение ячейки хранения
39. DELOVOYDOM 15.01.24 05:25 Сейчас в теме
(14) я все держу в константах либо создаю справочники с предопред данными. Мне хоть убейте не понятна идея с Хранилищем настроек, ну только что разделение по пользователям по фен шую
21. Yashazz 4804 23.06.21 22:48 Сейчас в теме
а насчёт предопределённых - https://infostart.ru/1c/articles/310542/
ILM; dnikolaev; DrAku1a; +3 Ответить
25. zqzq 25 24.06.21 09:12 Сейчас в теме
К вышеперечисленным недостаткам: данные в хранилище хранятся в бинарном виде и не работает поиск/замена ссылок.

Костыль (поиск по коду) заменили граблями.

Сам использую:
1) РС+ПВХ (одиночные значения),
2) Справочник с ТЧ + ПВХ (массивы значений).
Также, ТОЛЬКО предопределённые элементы ПВХ. НайтиПоНаименованию -- грабли при загрузке сf между базами тестовыми/рабочими/распределенными.
29. Cyberhawk 135 24.06.21 18:55 Сейчас в теме
(25)
использую:
1) РС+ПВХ (одиночные значения),
2) Справочник с ТЧ + ПВХ (массивы значений)
Можешь показать структуру такого регистра, справочника и ПВХ?
35. zqzq 25 28.06.21 09:13 Сейчас в теме
(29) ОК. Пояснения:
1) использую период для "периодических констант" как в 7-ке (но на практике редко пригождается);
2) отдельные ПВХ для одиночных значений и массивов, чтобы ясно было как с этим программно работать и исключить баги времени выполнения;
3) запрет добавления значений ПВХ в режиме предприятия (только предопределенные);
4) загрузка значений в макет (путем ручного копирования макета) и автоматическое заполнение пустых (новых) элементов из макета (встроено в контур автоматического обновления рабочей базы);
5) специальная функция для получения значения в привилегированном модуле (роли это головная боль у стандартных констант): Функция ЗСП( Знач Переменная, Знач Период = Неопределено ) Экспорт
Прикрепленные файлы:
Cyberhawk; +1 Ответить
26. Serg O. 300 24.06.21 13:43 Сейчас в теме
недавно была похожая по теме публикация:

Значения по умолчанию для пользователей (Расширение)
https://infostart.ru/public/1296972/

Хранилище общих настроек наверное можно иногда использовать (вместо констант),
но лучше, наверное регистр сведений (и лучше периодический),
чтобы брать "Основной склад" на дату документа
31. DrAku1a 1749 25.06.21 08:06 Сейчас в теме
(26) Это немного не то, но тоже очень интересная разработка. Если там будет во все документы, справочники и т.п. добавлена кнопка "Использовать как настройки по умолчанию", по нажатию открывается форма со списком реквизитов и пользователь галочками отмечает что именно использовать.
А ещё можно отдельную галочку что-то типа "Проверять когда". Ставишь её на организацию и подразделение, например. И получается правило:
Проверять когда Организация = ООО "Рога и копыта" и Подразделение = "Склад брака" тогда Склад = "Склад брака (ВРК)"
27. Cvetic 307 24.06.21 16:57 Сейчас в теме
Я для этого добавляю константы типа: ОсновнойСклад,ОсновнойПоставщикСырья, ОсновнойПоставщикАвтоЗапчастей и т.п.
Константы гораздо удобнее чем реквизиты справочников - все объекты конфигурации остаются на поддержке.
DELOVOYDOM; Lapitskiy; dnikolaev; DrAku1a; +4 Ответить
30. DrAku1a 1749 25.06.21 07:47 Сейчас в теме
(27) Согласен, и расширения уже позволяют добавлять константы (версия 8.3.16 и выше, включая режим совместимости конфигурации).
34. Scratch_sv 27.06.21 10:33 Сейчас в теме
Ну не знаааю... А если Базовая, а если старая платформа, а если 2000-ный на дворе?
Со времён оных, и по сей тяжёлый день для целей хранения своих констант использовал регистр значений СоответствияОбъектовИнформационныхБаз, благо он уже есть везде.
УзелИнформационнойБазы не заполняю, в УникальныйИдентификаторПриемника пишу имя объекта, в УникальныйИдентификаторИсточника - собственно, сам объект.
Бонусом идут ещё два текстовых поля по 100 байт каждое - ТипПриемника и ТипИсточника, для разного рода уточнений и комментариев.
И никаких не надо ни тебе расширееений, ни тебе допииисок, всё уже наличествует!
DrAku1a; ildary; +2 Ответить
36. ildary 21 30.06.21 08:34 Сейчас в теме
(34) большое спасибо за оригинальное решение!
37. RustIG 1836 14.04.22 09:15 Сейчас в теме
Но для их использования - нужно добавлять новые реквизиты к справочнику "Склады" (и ко всем справочникам, используемым в программном коде), что тоже не желательно.
Похожий подход используется в типовых конфигурациях на БСП в подсистеме "Дополнительные реквизиты и сведения" - в Плане видов характеристик для этого выделено поле "Имя".

В КА 2.4 есть справочник СоглашенияСКлиентами - он не включен в состав объектов метаданных, для которых работает механизм БСП "Дополнительные реквизиты" - как и еще 50 справочников КА 2.4.
Добавил механизм дополнительных реквизитов через расширение - работает сносно. Одно соглашение сделал с наименованием "Служебное", использую для пересчета цен в валюте закупа (Доллар или Евро).
Уж лучше через допреквизиты, чем через хранилище общих настроек или через константы...
38. lettitbit 111 04.08.23 09:53 Сейчас в теме
Мое виденье предопределенных данны: https://infostart.ru/1c/tools/1853367/
Оставьте свое сообщение