Если ИдентЭлемДиалога = "Счет" ТогдаТаким образом мы в зависимости от значения переменной глКонтролироватьСчета перенаправим выбор счета в функцию глДоступныйСчет(). Теперь разберёмся с глобальным модулем. Вставим в него описание двух переменных
Если глКонтролироватьСчета = 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;
КонецЕсли;
Вступайте в нашу телеграмм-группу Инфостарт