Саму целесообразность и соответствиям идеологиям вышеозначенного, в заметке обсуждать не буду.
Кто-то может сказать, что это очередная статья из-за одной галочки, но, т.к. я потратил на это кучу времени, считаю, что кому-то это может быть полезно.
Подопытная база - УТ11.1 примерно на 20-30 активных пользователей.
Текущая версия платформы 8.3.18.1289. Все описанное работало также на платформе 8.3.16, как и приложенный файл.
Первая попытка.
Такую задачу, чтобы пользователи не могли настраивать интерфейс передо мной поставили еще лет 5 назад. Тогда я не нашел ничего об этом в сети.
Единственное, что удалось сделать - программно заблокировать пункт меню "Изменить форму".
Это можно сделать примерно таким образом:
Код отключения пунктов "Изменить форму"Код заворачивается в процедуру общего модуля, и вызывается в процедуре ПриОткрытии() каждой формы
ЭА_Клиент.ПриСозданииНаСервере(ЭтаФорма);
Для чего пришлось создать специальную обработку, позволяющую вставить код во все формы //infostart.ru/public/609469/
Этот вариант работал пару лет, пока к вопросу не вернулись, т.к. остались еще панели навигации.
Была сделана попытка модифицировать служебные окна "Настройка панели навигации" и другие, через механизмы, найденные на ИС, но их удалось только выгрузить, но не упаковать обратно. К тому же, надежность и корректность такого метода весьма сомнительна.
Решение
Флаг "Сохранение данных пользователя" в ролях доступа.
С чем пришлось столкнуться:
- Нужно найти все роли, где он установлен, и снять во всех, кроме специальной роли "Сохранение данных пользователя". Делал программно через сохранение конфигурации в файлы, и поиску по тегу "SaveUserData".
- Нужно обработать профили групп доступа, удалив оттуда роль "Сохранение данных пользователя". Делал через консоль запросов с обработкой результата.
- В некоторых версиях платформы (примерно 8.3.15) без доступа "Сохранение данных пользователя" не работает печать. Пришлось подождать более новой платформы.У меня многие формы печатались не через БСП-шное окно печати, а через вывод табличного документа на экран. Переделал на вывод в свою форму печати.Не запоминается выбранный принтер печати. Решил следующим образом. В добавленной форме сделал свое поле для выбора принтера. Список принтеров получаю при запуске конфигурации. В модуле приложения:
Получение списка принтеров
Перем глЭА_СписокПринтеров Экспорт; Процедура ЭА_ЗаполнитьСписокПринтеров() Попытка WSпринтеры = Новый COMОбъект ("WScript.Network"); prn = WSпринтеры.EnumPrinterConnections(); i = 0; глЭА_СписокПринтеров = Новый СписокЗначений; Пока i < prn.Count()-1 Цикл глЭА_СписокПринтеров.Добавить(prn.Item(i+1)); i = i + 2; КонецЦикла; Исключение КонецПопытки; КонецПроцедуры Процедура ПриНачалеРаботыСистемы() .... ЭА_ЗаполнитьСписокПринтеров(); КонецПроцедуры
Форму печати прикладываю. Вызов:
Не сохраняются выбранные пользователем значения. Решено программным сохранением важных в привилегированном режиме :Вызов формы печати&НаКлиенте Процедура НапечататьТабДок(ТабДок,КлючПараметровПечати, Синоним = "")Экспорт Если ТабДок=Неопределено Тогда Возврат; КонецЕсли; ТабДок.ТолькоПросмотр = Истина; ТабДок.КлючПараметровПечати = КлючПараметровПечати; ТабДок.ОтображатьСетку = Ложь; ТабДок.АвтоМасштаб = Истина; ПараметрыФормы = Новый Структура("ТабДок", ТабДок); Если ЗначениеЗаполнено(Синоним) Тогда ПараметрыФормы.Вставить("Синоним", Синоним); КонецЕсли; ОткрытьФорму("ОбщаяФорма.ЭА_Печать", ПараметрыФормы,,Истина); КонецПроцедуры
УстановитьПривилегированныйРежим(Истина); ХранилищеОбщихНастроек.Сохранить("ИмяНастройки
- Возникает ошибка при программном сохранении истории открытых объектов. ( ИсторияРаботыПользователя.Добавить(НовыйЭлементСправочника) ;) Столкнулся с этим только в помощнике ввода номенклатуры. Решается закомментированием, ну или установкой привилегированного режима.
Итог
Несмотря на мое изначально отрицательное отношение к идее, должен сказать, что схема работает. И в некоторых организациях может быть вполне уместной. В случаях, когда редактированием интерфейсов должен заниматься не программист, а опытный пользователь, авторитарный директор или руководитель подразделений, которые готовы отключать поля, изменять названия, определять, что нужно видеть подчиненным, и как лучше упростить адаптировать интерфейс. Созданы специальные пользователи каждого набора прав, под которыми редактируются настройки, а затем копируются другим пользователям аналогичного набора прав, но без роли "Сохранение данных пользователя".