|
Автоматическое программное копирование настроек пользователя от эталонного | ☑ | ||
---|---|---|---|---|
0
erudemz
05.05.22
✎
20:29
|
1С 8.3, конфигурация УХ. Заказчик хочет чтобы при создании нового пользователя ему автоматически копировались все персональные настройки (отчетов, включая произвольный и универсальный отчеты; форм и т.п.).
Ссылка на эталонного пользователя хранится в константе. Что я пробовал: 1) В конфигурации есть стандартная обработка "НастройкиПользователей", которая идеально подходит для этих целей. В форме элемента справочника Пользователи, в событии ПослеЗаписиНаСервере, вызывал функцию КопированиеНастроекПользователей: ЭталонныйПользователь = Константы.ЭталонныйПользовательДляКопированияНастроек.Получить(); Приемники = Новый Массив; Приемники.Добавить(ТекущийОбъект); КопируемыеНастройки = Новый Массив; КопируемыеНастройки.Добавить("НастройкиОтчетов"); КопируемыеНастройки.Добавить("НастройкиВнешнегоВида"); КопируемыеНастройки.Добавить("ПерсональныеНастройки"); КопируемыеНастройки.Добавить("Избранное"); КопируемыеНастройки.Добавить("НастройкиПечати"); КопируемыеНастройки.Добавить("ПрочиеПользовательскиеНастройки"); Обработки.НастройкиПользователей.КопированиеНастроекПользователей(ЭталонныйПользователь, Приемники, КопируемыеНастройки); Но выдаёт ошибку: {(7, 37)}: Неверные параметры ПсевдонимЗаданнойТаблицы.Ссылка В (<<?>>&СсылкиСправочникПользователи) {ОбщийМодуль.ОбщегоНазначения.Модуль(577)}:Выборка = Запрос.Выполнить().Выбрать(); {ОбщийМодуль.ОбщегоНазначения.Модуль(288)}:ЗначенияРеквизитовОбъекта = ЗначенияРеквизитовОбъектов(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Ссылка), Реквизиты, ВыбратьРазрешенные, КодЯзыка)[Ссылка]; {ОбщийМодуль.ОбщегоНазначения.Модуль(401)}:Результат = ЗначенияРеквизитовОбъекта(Ссылка, ИмяРеквизита, ВыбратьРазрешенные, КодЯзыка); {Обработка.НастройкиПользователей.МодульМенеджера(1512)}:ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПользовательСсылка, "ИдентификаторПользователяИБ"); {Обработка.НастройкиПользователей.МодульМенеджера(588)}:ПолучателиНастроек.Добавить(ИмяПользователяИБ(Элемент)); {Справочник.Пользователи.Форма.ФормаЭлемента.Форма(620)}:Обработки.НастройкиПользователей.КопированиеНастроекПользователей(ЭталонныйПользователь, Приемники, КопируемыеНастройки); Перепроверял все через отладчик, передается ровно то же, что и при обычной работе этой обработки. 2) Вызывал стандартную функцию БСП из общего модуля ПользователиСлужебный: СкопироватьНастройкиПользователя(ЭталонныйПользователь, ТекущийОбъект); Результат - функция отрабатывает без ошибок, но никакие настройки не копируются. Как еще можно реализовать этот механизм? Что я делаю не так? |
|||
2
erudemz
05.05.22
✎
20:39
|
(1) Ключевой момент - программно. Заказчик хочет чтобы "оно само", а не лишние три клика мышкой
|
|||
3
H A D G E H O G s
05.05.22
✎
20:43
|
ЭталонныйПользователь = Константы.ЭталонныйПользовательДляКопированияНастроек.Получить();
Приемники = Новый Массив; Приемники.Добавить(ТекущийОбъект); заменить на ЭталонныйПользователь = Константы.ЭталонныйПользовательДляКопированияНастроек.Получить(); Приемники = Новый Массив; Приемники.Добавить(ТекущийОбъект.Ссылка); |
|||
4
erudemz
05.05.22
✎
20:55
|
(3) Не сработало, к сожалению.
"Неверный первый параметр Ссылка в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта: - Значение должно быть ссылкой или именем предопределённого элемента" |
|||
5
H A D G E H O G s
05.05.22
✎
21:09
|
(4) У меня нормально отработало
|
|||
6
Garykom
гуру
05.05.22
✎
21:15
|
(0) А уверен что в этой конфе настройки пользователя не хранятся в куче разных мест?
|
|||
7
Garykom
гуру
05.05.22
✎
21:16
|
(2) >Ключевой момент - программно. Заказчик хочет чтобы "оно само", а не лишние три клика мышкой
Решить проблему путем найма программиста за оплату конечно уже пробовали да? |
|||
8
Garykom
гуру
05.05.22
✎
21:19
|
>Константы.ЭталонныйПользовательДляКопированияНастроек
- это реальный пи-пи-пи. Науй на каждый чих лезти в метаданные когда есть механизм допреквизитов и допсведений? |
|||
9
H A D G E H O G s
05.05.22
✎
21:21
|
Автор, не обращай внимания, это Егор.
|
|||
10
Garykom
гуру
05.05.22
✎
21:22
|
(9) ты тоже сразу снимаешь с поддержки и начинаешь кучу констант и прочих метаданных безраздумно лепить?
|
|||
11
H A D G E H O G s
05.05.22
✎
21:28
|
(10) Я все делаю ~~для Китая~~ в расширениях.
|
|||
12
erudemz
05.05.22
✎
22:02
|
(6) Да, уверен. Обработка, которая выполняет копирование, прекрасно все копирует, её методы я и пытаюсь использовать. Ну и в корне конфы никаких настроек хранилищ не указано.
(7) Наняли стажера, т.е. меня :) (8) Идея человека на должности "Системный архитектор" (9) Интересная характеристика х) |
|||
13
Garykom
гуру
05.05.22
✎
23:22
|
(12) вероятно криво используешь "Обработки.НастройкиПользователей.КопированиеНастроекПользователей"
Глянь например https://helpf.pro/faq82/view/1749.html Хотя оно и древнее Надо разобраться как правильно вызывать в твоей конфе, она может быть допилена |
|||
14
Garykom
гуру
05.05.22
✎
23:23
|
(0) >Перепроверял все через отладчик, передается ровно то же, что и при обычной работе этой обработки.
Не верю как и в (3) Ибо сам ТекущийОбъект в (0) передавать пытался вместо ТекущийОбъект.Ссылка |
|||
15
Garykom
гуру
05.05.22
✎
23:25
|
Если в ПослеЗаписиНаСервере то попробуй просто Объект.Ссылка вместо ТекущийОбъект
|
|||
16
hhhh
06.05.22
✎
06:37
|
а где это вообще делается? до записи или после записи?
|
|||
17
erudemz
03.06.22
✎
10:21
|
После консультации с другим системным архитектором было подтверждено, что вносить изменения в модуль типового объекта и использовать константу это плохая идея.
В итоге: 1) Вместо константы для установки пользователя-источника использован кастомный механизм предопределённых признаков (через справочник и регистр сведений) 2) Вместо изменения модуля справочника создана подписка на событие ПриЗаписи. В обработчике события использован метод "КопированиеНастроекПользователей" из стандартной обработки "НастройкиПользователей". Всё отрабатывает как требовалось. Спасибо за ответы! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |