Не работает хранилище общих настроек в клиент серверном режиме

1. Aleksandr_prof 197 07.11.20 21:00 Сейчас в теме
В клиент-серверном режиме следующий код выдаёт ошибку "Метод объекта не обнаружен Загрузить()":
Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);

Код выполняется в неглобальном общем модуле с галками: Сервер, Вызов сервера.
При этом код в файловом режиме работает отлично.
Как устранить ошибку?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. FatPanzer 07.11.20 21:39 Сейчас в теме
(1)
Как устранить ошибку?
Надо просто не вызывать этот метод с клиента. У вас стоит "Вызов сервера". Соответственно, при вызове метода с клиента - сохраняется клиентский контекст, в котором ХранилищеОбщихНастроек недоступно.
5. Aleksandr_prof 197 07.11.20 21:46 Сейчас в теме
(1) Нашёл проблему. Оказывается всё работает в серверном режиме. Проблема была в следующем: в это хранилище ни разу не сохранялись настройки, поэтому и не работал метод Загрузить(). Так произошло, потому что в момент разработки много раз что-либо сохранялось. А при моделировании первых действий с конфигурацией выходила ошибка. Не знаю, на сколько это правильно. Решение: вызов исключения:
Попытка
Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);
Исключение
КонецПопытки;

В других встречающихся случаях в коде просто добавил другую строку в попытку, в которой выходит ошибка.
6. FatPanzer 07.11.20 21:55 Сейчас в теме
(5) Абсолютно неверно. Метод Загрузить() умеет возвращать Неопределено, если сохраненные настройки отстутсвуют. И никакая попытка в данном случае не вариант. Она спасает от ошибки, но она не заставляет механизм работать.

Как я и написал - вызывать процедуру с этим кодом надо с серверного контекста, а не с клиентского.
7. Aleksandr_prof 197 07.11.20 22:03 Сейчас в теме
(6) Она и вызывалась с серверного) В вопросе же написано: серверный общий модуль. Просто у меня дальше в коде шло: Настройки.Получить(). Вот это пришлось заключить в попытку, на случай, если хранилище вообще пустое. Ну или правильнее было бы проверять так: Если настройки = неопределено тогда возврат.
8. FatPanzer 07.11.20 22:07 Сейчас в теме
(7) Нет. У вас у модуля стоит признак "ВызовСервера". А это не совсем серверный модуль. При вызовея с клиента - сохраняется клиентский контекст, а не серверный. По аналогии с клиент-серверными модулями.
Вот это пришлось заключить в попытку, на случай, если хранилище вообще пустое.

Тоже неверно. Если хранилище пустое, то будет возвращено Неопределено. Ошибки не произойдет. У вас ошибка именно в том, что нет доступа к объекту ХранилищеОбщихНастроек, вам система об этом пишет. А значит, в момент попытки обращения к нему вы находитесь в клиентском контексте.
9. Aleksandr_prof 197 07.11.20 22:12 Сейчас в теме
(8) Тоже проверял) Прописывал перед строкой:
#Если сервер тогда
// сюда заходит
#ИначеЕсли клиент тогда
// сюда не заходит
#КонецЕсли

Возможно я просто не так ошибку обозначил. Ошибка была не в "Загрузить()", а в "Получить()", т. к. неопределено)
11. FatPanzer 07.11.20 22:15 Сейчас в теме
(9)
Возможно
Возможно? Вот это ты называешь "возможно"???
В игнор.
Прикрепленные файлы:
12. Aleksandr_prof 197 07.11.20 22:18 Сейчас в теме
(11) =)
Конечно возможно. Потому что ошибку я переписывал по памяти)
В рамках приличия инфостарта я просто скажу: "тема закрыта".
13. tetraren 35 07.11.20 23:06 Сейчас в теме
(12) Извините, но вы написали говнокод. Не надо так. Потом когда будете отлаживать с галкой "остановка по ошибке", отладчик постоянно будет спотыкаться об этот участок.

Поэтому и существует рекомендация - не использовать попытку без объективной на то необходимости. У вас такой необходимости нет, лучше разберитесь. Давайте писать чистый код, иначе нас, 1С-ников так и будут называть ненастоящими программистами.
10. SlavaKron 07.11.20 22:14 Сейчас в теме
(8) Модуль остается серверным и с галкой "ВызовСервера". Никакого клиентского контекста в нем быть не может.
wolfalan; tetraren; +2 Ответить
2. tetraren 35 07.11.20 21:21 Сейчас в теме
В вашем общем модуле в вызываемой процедуре случайно нет параметра "ХранилищеОбщихНастроек" или строчки "Перем ХранилищеОбщихНастроек;" ?
3. Aleksandr_prof 197 07.11.20 21:23 Сейчас в теме
(2) нет, такое отсутствует.
14. Pryanishnikov_Vladimir 09.11.20 11:11 Сейчас в теме
Если в конфе есть БСП:

ХранилищеОбщихНастроекЗагрузить
Предусмотрено две одноименных функции:
ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, ИмяПользователя) //для вызова с сервера
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, ИмяПользователя) //для вызова с клиента



Также нужно обратить внимание, что нужны полные права либо привилегированный режим для загрузки настроек под пользователем не полноправным
15. EVKash 8 09.11.20 11:34 Сейчас в теме
(14)
Также нужно обратить внимание, что нужны полные права либо привилегированный режим для загрузки настроек под пользователем не полноправным

не обязательно. если пользователя не указывать, то загружаются настройки для текущего пользователя. полных прав для этого не требуется.
16. Pryanishnikov_Vladimir 09.11.20 11:38 Сейчас в теме
(15)Вы видимо не поняли. Если вы сохранили под каким то пользователям или вот так "" - без указания пользователя. То загрузить сможете либо под тем же пользователем либо полноправным пользователем либо в привилегированном режиме.
17. FatPanzer 09.11.20 11:43 Сейчас в теме
(16)
или вот так "" - без указания пользователя
Что мешает в параметрах этих методов передавать "" в качестве Пользователя?
18. Pryanishnikov_Vladimir 09.11.20 11:44 Сейчас в теме
(17)Ничего, так у себя всегда и делаю. Но от не полноправного пользователя при загрузки из хранилища будет НЕОПРЕДЕЛЕНО
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот