Ограничение формирования стандартных отчётов некоторым набором счетов
30.11.10
Задачи пользователя - Адаптация типовых решений
В стандартных средствах платформы 7 нет возможности ограничить доступ к отчётам только определёнными счетами, хотя вопрос этот периодически возникает.
Предложено решение, позволяющее путём небольших переделок типовой конфигурации внедрить механизм ограничения выбора счёта в стандартном отчёте и относительно легко настраивать его для новых пользователей.
В стандартных средствах платформы 7 нет возможности ограничить доступ к отчётам только определёнными счетами, хотя вопрос этот периодически возникает. Для организации такого разграничения понадобятся небольшие доработки стандартных алгоритмов. Прежде всего во все отчёты, в которых мы хотим конкретному пользователю разрешить выбирать конкретные счета, в процедуру ПриНачалеВыбораЗначения(ИдентЭлемДиалога,Флаг) добавим:
Если ИдентЭлемДиалога = "Счет" ТогдаТаким образом мы в зависимости от значения переменной глКонтролироватьСчета перенаправим выбор счета в функцию глДоступныйСчет(). Теперь разберёмся с глобальным модулем. Вставим в него описание двух переменных
Если глКонтролироватьСчета = 0 Тогда
Флаг = 1;
Иначе
Флаг = 0;
Счет = глДоступныйСчет();
ПриВыбореСчета();
КонецЕсли;
КонецЕсли;
// Определение переменных(глСписокСчетов будет списком значений, содержащих доступные счета) и функцию глДоступныйСчет()
Перем глКонтролироватьСчета Экспорт;
Перем глСписокСчетов;
//Функция глДоступныйСчет() - располагается в любом месте ГМТеперь определим значение глКонтролироватьСчета и заполним глСписокСчетов. Сделаем это в процедуре ПриНачалеРаботыСистемы(). Используем одну хитрость. Если мы ограничиваем пользователю формирование каких-либо отчётов, то, естественно, нам придётся создавать для него новый набор прав. (Как минимум, мы запретим ему запуск любых внешних отчётов, использование шахматки - её-то списком счетов не ограничишь, ну и скорее всего ещё урежем его в правах.) Название нового набора прав будет состоять из слова "Только" и списка счетов через запятую. Например - "Только41,60,62". Используя этот нехитрый приём, мы обеспечим работу нашей системы ограничения стандартных отчётов для любого нового пользователя (например, "Только70,68,69", "Только50.51" и т.д.).
Функция глДоступныйСчет() Экспорт
Перем сч;
Если глСписокСчетов.РазмерСписка()>0 Тогда
глСписокСчетов.ВыбратьЗначение(сч);
Иначе
сч = ПолучитьПустоеЗначение("Счет");
КонецЕсли;
Возврат(сч) ;
глСписоксчетов = СоздатьОбъект("СписокЗначений");Прочитали название набора прав, если оно пустое (пользователь не авторизован) не делаем ничего, если же оно начинается со слова "Только", заполним глСписокСчетов. Для этого вычленим из названия набора прав значения кодов счетов. добавим их в список. Для счетов-групп добавим также все субсчета.
глКонтролироватьсчета = 1;
НаборПрав = НазваниеНабораПрав(1);
Если СокрЛП(НаборПрав)="" Тогда
ИначеЕсли Лев(СокрЛП(НаборПрав),6)="Только"
_Состав = Сред(НаборПрав,7);Для ситуации. когда название набора прав определено, но не начинается словом "Только" установим глКонтролироватьСчета в ноль.
Пока СтрДлина(_Состав)>0 Цикл
_Состав = СокрЛП(_Состав);
ПозицияЗапятой = Найти(_Состав,",");
Если ПозицияЗапятой = 0 Тогда
НовоеЗначение = _Состав; _Состав = "";
ИначеЕсли ПозицияЗапятой = 1 Тогда
_Состав = Сред(_Состав,2);
Продолжить;
Иначе
НовоеЗначение = СокрЛП(Лев(_Состав,ПозицияЗапятой - 1));
Если ПозицияЗапятой<СтрДлина(_Состав) Тогда
_Состав = Сред(_Состав,ПозицияЗапятой + 1);
Иначе
_Состав = "";
КонецЕсли;
КонецЕсли;
ДобавляемыйСчет = СчетПоКоду(НовоеЗначение) ;
глСписоксчетов.ДобавитьЗначение(ДобавляемыйСчет,""+НовоеЗначение+" "+ДобавляемыйСчет.Наименование);
Если ДобавляемыйСчет.ЭтоГруппа()=1 Тогда
ЕщеСчета = СоздатьОбъект(\"Счет\");
ЕщеСчета.ИспользоватьРодителя(ДобавляемыйСчет);
ЕщеСчета.ВыбратьСчета();
Пока ЕщеСчета.ПолучитьСчет() = 1 Цикл
глСписоксчетов.ДобавитьЗначение(ЕщеСчета.ТекущийСчет(),""+ЕщеСчета.Код+" "+ЕщеСчета.Наименование);
КонецЦикла;
КонецЕсли;
КонецЦикла;
ИначеТаким образом, для всех пользователей с набором прав "Только" у нас будут сформированы списки доступных счетов, для прочих авторизованных пользователей контроль выбора счета будет отключен, а неавторизованные пользователи не смогут использовать эти стандартные отчёты вообще (у них при включённом контроле список доступных счетов будет пустой).
глКонтролироватьСчета = 0;
КонецЕсли;
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.