Не работает хранилище общих настроек в клиент серверном режиме
В клиент-серверном режиме следующий код выдаёт ошибку "Метод объекта не обнаружен Загрузить()":
Код выполняется в неглобальном общем модуле с галками: Сервер, Вызов сервера.
При этом код в файловом режиме работает отлично.
Как устранить ошибку?
Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);
Код выполняется в неглобальном общем модуле с галками: Сервер, Вызов сервера.
При этом код в файловом режиме работает отлично.
Как устранить ошибку?
По теме из базы знаний
- Многопоточность в 1С. Универсальный «Менеджер потоков» 2.1
- Отслеживание выполнения фонового задания
- Краткое руководство по внесению изменений в конфигурацию
- Как ускорить перенос изменений между хранилищами 1С?
- Интеграция Честный Знак и 1C: обмен и синхронизация для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Нашёл проблему. Оказывается всё работает в серверном режиме. Проблема была в следующем: в это хранилище ни разу не сохранялись настройки, поэтому и не работал метод Загрузить(). Так произошло, потому что в момент разработки много раз что-либо сохранялось. А при моделировании первых действий с конфигурацией выходила ошибка. Не знаю, на сколько это правильно. Решение: вызов исключения:
В других встречающихся случаях в коде просто добавил другую строку в попытку, в которой выходит ошибка.
Попытка
Настройки = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя);
Исключение
КонецПопытки;
В других встречающихся случаях в коде просто добавил другую строку в попытку, в которой выходит ошибка.
(5) Абсолютно неверно. Метод Загрузить() умеет возвращать Неопределено, если сохраненные настройки отстутсвуют. И никакая попытка в данном случае не вариант. Она спасает от ошибки, но она не заставляет механизм работать.
Как я и написал - вызывать процедуру с этим кодом надо с серверного контекста, а не с клиентского.
Как я и написал - вызывать процедуру с этим кодом надо с серверного контекста, а не с клиентского.
(6) Она и вызывалась с серверного) В вопросе же написано: серверный общий модуль. Просто у меня дальше в коде шло: Настройки.Получить(). Вот это пришлось заключить в попытку, на случай, если хранилище вообще пустое. Ну или правильнее было бы проверять так: Если настройки = неопределено тогда возврат.
(7) Нет. У вас у модуля стоит признак "ВызовСервера". А это не совсем серверный модуль. При вызовея с клиента - сохраняется клиентский контекст, а не серверный. По аналогии с клиент-серверными модулями.
Тоже неверно. Если хранилище пустое, то будет возвращено Неопределено. Ошибки не произойдет. У вас ошибка именно в том, что нет доступа к объекту ХранилищеОбщихНастроек, вам система об этом пишет. А значит, в момент попытки обращения к нему вы находитесь в клиентском контексте.
Вот это пришлось заключить в попытку, на случай, если хранилище вообще пустое.
Тоже неверно. Если хранилище пустое, то будет возвращено Неопределено. Ошибки не произойдет. У вас ошибка именно в том, что нет доступа к объекту ХранилищеОбщихНастроек, вам система об этом пишет. А значит, в момент попытки обращения к нему вы находитесь в клиентском контексте.
(12) Извините, но вы написали говнокод. Не надо так. Потом когда будете отлаживать с галкой "остановка по ошибке", отладчик постоянно будет спотыкаться об этот участок.
Поэтому и существует рекомендация - не использовать попытку без объективной на то необходимости. У вас такой необходимости нет, лучше разберитесь. Давайте писать чистый код, иначе нас, 1С-ников так и будут называть ненастоящими программистами.
Поэтому и существует рекомендация - не использовать попытку без объективной на то необходимости. У вас такой необходимости нет, лучше разберитесь. Давайте писать чистый код, иначе нас, 1С-ников так и будут называть ненастоящими программистами.
Если в конфе есть БСП:
ХранилищеОбщихНастроекЗагрузить
Предусмотрено две одноименных функции:
Также нужно обратить внимание, что нужны полные права либо привилегированный режим для загрузки настроек под пользователем не полноправным
ХранилищеОбщихНастроекЗагрузить
Предусмотрено две одноименных функции:
ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, ИмяПользователя) //для вызова с сервера
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек, ЗначениеПоУмолчанию, ОписаниеНастроек, ИмяПользователя) //для вызова с клиента
Также нужно обратить внимание, что нужны полные права либо привилегированный режим для загрузки настроек под пользователем не полноправным
(14)
не обязательно. если пользователя не указывать, то загружаются настройки для текущего пользователя. полных прав для этого не требуется.
Также нужно обратить внимание, что нужны полные права либо привилегированный режим для загрузки настроек под пользователем не полноправным
не обязательно. если пользователя не указывать, то загружаются настройки для текущего пользователя. полных прав для этого не требуется.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот