Ограничение на просмотр счетов в стандартных отчетах

Администрирование - Защита, права, пароли

ограничить просмотр счетов ограничение на счета ограничение хозрасчетный запрет на просмотр счетов скрыть данные о зарплате скрыть счета

18
В статье рассматривается организация способа закрытия доступа к счетам учета в стандартных отчетах

Здравствуйте ! 

В этой статье я хотел бы поделиться одним из способов закрытия доступа к счетам в стандартных отчетах, таких как Оборотно-Сальдовая Ведомость, Анализ счета и др. 

Данный способ не является чем-то новым - просто хотелось показать,  что нужный результат можно получить без примнения RLS и все изменения не такие маштабные, как кажется на первый взгляд. 

Итак,  суть способа - изменить НастройкиКомпановкиДанных перед тем, как настройки будут проинициализированы,  и инициализировать уже с новыми настройками. Для уменьшения изменений в основной конфигурации воспользуемся  механизмом Расширение конфигураций.

Все настройки рассмотрим на примере Бухгалтерии БП 3.0 (релиз  3.0.44.140) 

1. Для хранения данных о пользователях,  у которых ограничены права на просмотр счетов,  и самих счетов, доступ к которым ограничен, я добавил Справочник  "ОграничениеПравПользователей" с реквизитом "Пользователь" - СправочникСсылка.Пользователи  и две табличные части:. Длину наименования у спрвочника  указываем  50 символов.  

"СписокЗапрещенныхСчетов" - Колонки "Счет" - ПланыСчетов.Хозрасчетный, "Использование" - Тип Булево.

"СписокЗапрещенныхСубконто" - Колонки "ЗапрещенноеСубконто" - Тип ПланВидовХарактеристик.ВидыСубконтоХозрасчетный

Тут важное уточнение - полные права доступа на этот справочник должны быть только у администратора (или пользователя с полными правами), у других должен быть доступ только на чтение. 

2.  Добавление общего модуля «ОграничениеПравПользователей» (если кто использует платформу 8.3.9 модуль можно добавить в расширение) 

Код Модуля (сразу оговорюсь, что данный код не оптимизировался , вполне возможно привести данный код в более красивый вид). Необходимые комментарии в коде


Функция ПроверитьУстановленныйОтбор (Отбор,ВидСравнения,Значение)
	
	Если Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно Тогда 
		
		Если Значение.НайтиПоЗначению(Отбор.ПравоеЗначение)<> Неопределено Тогда			
			Отбор.ПравоеЗначение = Неопределено;			
			ОтборУстановлен = Истина;	
		КонецЕсли;	
		
	ИначеЕсли Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке 
		ИЛИ Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВИерархии 
		ИЛИ Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии Тогда
		
		Для каждого СтрокаСписка  Из Отбор.ПравоеЗначение Цикл		
			Если Значение.НайтиПоЗначению(СтрокаСписка.Значение)<>Неопределено тогда
				Отбор.ПравоеЗначение.Удалить(СтрокаСписка);
			КонецЕсли;					
	    КонецЦикла; 
	
	ОтборУстановлен = Истина;
	
  ИначеЕсли Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВИерархии 
	       ИЛИ Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке
		   ИЛИ Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда
		   
		Для каждого СтрокаСписка  Из Значение Цикл		
			Если Отбор.ПравоеЗначение.НайтиПоЗначению(СтрокаСписка.Значение)=Неопределено тогда
				Отбор.ПравоеЗначение.Добавить(СтрокаСписка.Значение);
			КонецЕсли;					
		КонецЦикла;
		
	ОтборУстановлен = Истина;
	
Иначе
	
	ОтборУстановлен = Ложь;
	
КонецЕсли;	
	
Возврат ОтборУстановлен;	
	
	
	
КонецФункции

////ДОПОЛНИТЕЛЬНЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ///////////////////////
Функция ПоискиУстановкаОтбора (КомпоновщикНастроек,ПолеОтбора,ВидСравнения,ЗначениеОтбора)
	
	ОтборНайден = Ложь;  
	
	Для каждого Отбор Из КомпоновщикНастроек.Отбор.Элементы Цикл 
		
		Если Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных (ПолеОтбора) Тогда 
	
			Если Отбор.Использование = Истина Тогда // Возможно пользователь сам установил какой-то отбор по заданному полю, 
            //поэтому мы должные проверить 		
	            ОтборНайден = ПроверитьУстановленныйОтбор(Отбор,ВидСравнения,ЗначениеОтбора);
			Иначе
				
			Отбор.Использование = Истина;
			Отбор.ВидСравнения = ВидСравнения;		
			Отбор.ПравоеЗначение = ЗначениеОтбора;

			ОтборНайден = Истина;
			
			КонецЕсли;		
     	КонецЕсли;
	КонецЦикла;
	
	Возврат  ОтборНайден;
	
КонецФункции


//Процедура Добавляет Отбор в НастройкуКомпановкиДанных
Процедура ДобавитьОтбор(НастройкаКомпоновкиДанных,ПолеОтбора,ВидСравнения,Значение,Использование)
	
	Отбор = НастройкаКомпоновкиДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	
	ПолеОтбораСчет = Новый ПолеКомпоновкиДанных(ПолеОтбора);
	
	Отбор.ЛевоеЗначение = ПолеОтбораСчет;
	
	Отбор.Использование = Использование;
	
	Отбор.ПравоеЗначение = Значение;
	
	Отбор.ВидСравнения = ВидСравнения;
	
КонецПроцедуры

/////////////ОСНОВННЫЕ ФУНКЦИИ И ПРОЦЕДУРЫ /////////////////////////////////
Процедура УстановитьОграничениеНаПросмотрСчетов(ОтчетОбъект,НастройкаКомпоновкиДанных,Форма,СКД=неопределено) Экспорт;
	
	// Получим список  запрещенных Счетов для текущего пользователя
	Запрос = Новый Запрос;
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ВЫБОР
	|		КОГДА ОграничениеПравПользователейСписокРазрещенныхСчетов.Использование = ЛОЖЬ
	|			ТОГДА ОграничениеПравПользователейСписокРазрещенныхСчетов.Счет
	|	КОНЕЦ КАК ЗапрещенныеСчета
	|ИЗ
	|	Справочник.ОграничениеПравПользователей.СписокРазрещенныхСчетов КАК ОграничениеПравПользователейСписокРазрещенныхСчетов
	|ГДЕ
	|	ОграничениеПравПользователейСписокРазрещенныхСчетов.Ссылка.Пользователь = &Пользователь
	| И ОграничениеПравПользователейСписокРазрещенныхСчетов.Использование = ЛОЖЬ";
	
		
	Запрос.УстановитьПараметр("Пользователь",ПараметрыСеанса.ТекущийПользователь);
	
	Результат = Запрос.Выполнить();
	                
	ТаблицаСчетов = Результат.Выгрузить(); // результат выгружаем в таблиц  
		
	ЗапрещенныеСчета = ТаблицаСчетов.ВыгрузитьКолонку("ЗапрещенныеСчета"); // Получаем массив запрещенных счетов
	
    //Получим список запррещенных к просмотру субконто
    Запрос.Текст ="ВЫБРАТЬ
	|	ОграничениеПравПользователейЗапрещенныеСубконто.ЗапрещенноеСубконто
	|ИЗ
	|	Справочник.ОграничениеПравПользователей.ЗапрещенныеСубконто КАК ОграничениеПравПользователейЗапрещенныеСубконто
	|ГДЕ
	|	ОграничениеПравПользователейЗапрещенныеСубконто.Ссылка.Пользователь = &Пользователь";
	
	Запрос.УстановитьПараметр("Пользователь",ПараметрыСеанса.ТекущийПользователь);
	
	ТаблицаЗапрещенныхСубконто = Запрос.Выполнить().Выгрузить();
	
	Если ЗапрещенныеСчета.Количество()= 0 И ТаблицаЗапрещенныхСубконто.Количество() = 0 тогда  // Если нет ограничений , то выходим 
		Возврат;
	КонецЕсли;	
	
	
	МассивЗапрещенныхСубконто = ТаблицаЗапрещенныхСубконто.ВыгрузитьКолонку("ЗапрещенноеСубконто");
		
	СписокЗапрещенныхСчетов = Новый СписокЗначений;
	СписокЗапрещенныхСчетов.ЗагрузитьЗначения(ЗапрещенныеСчета); // из массива преобразуем в список значений

    //Определим какой отчет запустил пользователь  
	ИдентификаторОбъекта = БухгалтерскиеОтчетыКлиентСервер.ПолучитьИдентификаторОбъекта(Форма); // получаем идентификатор отчета 
	
    // В зависимости от вида отчета переходим к обработке 

	Если ИдентификаторОбъекта = "ОборотноСальдоваяВедомостьПоСчету"   // По иднентификатору определяем дальнейшее действие
		ИЛИ ИдентификаторОбъекта = "АнализСчета" 
		ИЛИ ИдентификаторОбъекта = "КарточкаСчета" ИЛИ ИдентификаторОбъекта = "ОборотыСчета"  Тогда 	
		ОСВПоСчету_АнализСчета_КарточкаСчета(ОтчетОбъект,ИдентификаторОбъекта,НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов,СКД);
	КонецЕсли;
	
	
	Если ИдентификаторОбъекта = "ОборотноСальдоваяВедомость"  тогда 		
		ОСВ(НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов);	
	КонецЕсли;
	
	
	Если ИдентификаторОбъекта = "АнализСубконто" 
		ИЛИ  ИдентификаторОбъекта = "КарточкаСубконто" Тогда 
		АнализСубконто_КарточкаСубконто(НастройкаКомпоновкиДанных,МассивЗапрещенныхСубконто,СписокЗапрещенныхСчетов);	
	КонецЕсли;
	
	
	Если  (ИдентификаторОбъекта = "ОтчетПоПроводкам") ИЛИ (ИдентификаторОбъекта = "ОборотыМеждуСубконто") тогда 	
		ОтчетПоПроводкам_ОборотыМеждуСубконто(НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов);
	КонецЕсли;
	
	
	Если ИдентификаторОбъекта = "СводныеПроводки" Тогда 	
		СводныеПроводки(НастройкаКомпоновкиДанных, СписокЗапрещенныхСчетов);		
	КонецЕсли;
	
	//Если ИдентификаторОбъекта = "ОборотыМеждуСубконто" Тогда 	
	//	ОборотыМеждуСубконто( НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов);
	//КонецЕсли;
		
КонецПроцедуры	




Процедура ОСВПоСчету_АнализСчета_КарточкаСчета(ОтчетОбъект,ИдентификаторОбъекта,НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов,СКД)
	
	    		
		ОтборПоСчету = Ложь ; // установим флаг для поиска Отбора 
		
		ОтборПоСчету = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"Счет",ВидСравнения.НеВСписке,СписокЗапрещенныхСчетов);
		
		Если Не ОтборПоСчету Тогда // Если отбор не найден - установим 
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;	
				
		Если  ИдентификаторОбъекта = "ОборотноСальдоваяВедомостьПоСчету" Тогда 
			
			// В стандартной настройке СКД на поле "Счет" установлено отграничение по условию , поэтому необходимо
			// изменить запрос (только в части настроек для СКД , т.е. основной текст запроса не меняется) и отключить ограничение 
            // на поле "Счет" 
			
			Запрос = СКД.НаборыДанных.ОсновнойНаборДанных.Элементы.ОстаткиИОбороты.Запрос;
			
			ЗапросБезСубконто = СКД.НаборыДанных.ОсновнойНаборДанных.Элементы.ОстаткиИОборотыБезСубконто.Запрос;
			
			ПоляОсновногоНабораДанных = СКД.НаборыДанных.ОсновнойНаборДанных.Поля;
			
			СтрокаЗамены = "{ГДЕ"+ Символы.ПС + "ХозрасчетныйОстаткиИОбороты.Счет.*,";
			ЗаменяемаяСтрока = "{ГДЕ";
			
			Запрос = СтрЗаменить(запрос,ЗаменяемаяСтрока,СтрокаЗамены);
			
			ЗапросБезСубконто = СтрЗаменить(ЗапросБезСубконто,ЗаменяемаяСтрока,СтрокаЗамены);
			
			
			//Ищем поле и отключаем ограничение
			ПолеСчет = ПоляОсновногоНабораДанных.Найти("Счет");
			
			Если ПолеСчет <> неопределено тогда 
				
				ПолеСчет.ОграничениеИспользования.Условие = Ложь;
				ПолеСчет.ОграничениеИспользованияРеквизитов.Условие = Ложь;
				
			КонецЕсли;	
			
			 СКД.НаборыДанных.ОсновнойНаборДанных.Элементы.ОстаткиИОбороты.Запрос = Запрос;
			 СКД.НаборыДанных.ОсновнойНаборДанных.Элементы.ОстаткиИОборотыБезСубконто.Запрос= ЗапросБезСубконто;
			
             // После данных действий - отбор который был установлен выше будет работать 
 	
		КонецЕсли;

		
		Если ИдентификаторОбъекта = "КарточкаСчета" тогда // Для карточки счета необходимо изменить Стандартный запрос для парметров СКД
			
			ОтборДтНайден = Ложь; // Флаги для поиска ранее установленных отборов
			ОтборКтНайден = Ложь; 
			
			//Для стандартного отчета Карточка счета нет возможности установить отбор по счетам. Для возможности добавления отбора необходимо 
			//поменять текст запроса для СКД (только в части настроек для СКД , т.е. основной текст запроса не меняется )  
			 
			Запрос = СКД.НаборыДанных.Проводки.Запрос; // получим текст запроса 
			Запрос = СтрЗаменить(Запрос,"Проводки.ПериодГруппировки}", "Проводки.ПериодГруппировки,"+Символы.ПС
			+ "Проводки.СчетДт.*,"+Символы.ПС+ "Проводки.СчетКт.*}"+Символы.ПС); // Изменяем текст для компоновщика добавляя поля СчетДт И СчетКТ 
			
			СКД.НаборыДанных.Проводки.Запрос = Запрос; // Устанавливаем новый текст Запроса 
			
			//Теперь в СКД нам доступны поля отбора СчетДт и СчетКт и по ним возможно устанавливать отбор. Попробуем найти ранее установленные отборы
			ОтборДтНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"СчетДт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
			
			ОтборДтНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"СчетКт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
						
			Если Не ОтборДтНайден тогда // Если указанный отбор не найден, то установим его  
				
				ДобавитьОтбор(НастройкаКомпоновкиДанных,"СчетДт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
				
			КонецЕсли;
					
			Если Не ОтборКтНайден тогда // Если указанный отбор не найден, то установим его
				
				ДобавитьОтбор(НастройкаКомпоновкиДанных,"СчетКт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
				
			КонецЕсли;
			
		КонецЕсли;	
		
		Если ИдентификаторОбъекта = "АнализСчета" Тогда  // Для Отчета Анализ Счета установим(проверим) отбор на КорСчет
			
			КорСчетНайден = Ложь;
			
			КоррСчетНайден=ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"КорСчет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
			
			Если Не КорСчетНайден тогда 				
				ДобавитьОтбор(НастройкаКомпоновкиДанных,"КорСчет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
			КонецЕсли;
			
		КонецЕсли;

КонецПроцедуры


Процедура ОСВ(НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов)
		
	ПараметрыКомпоновки = НастройкаКомпоновкиДанных.ПараметрыДанных;	
	
	ПараметрСчет = ПараметрыКомпоновки.Элементы.Найти("СчетаИсключенныеИзЗапросаПоСчетам"); 
	
	ПараметрСчетДетализации =ПараметрыКомпоновки.Элементы.Найти("Счетдетализации"); 
	
	Если  ПараметрСчет <> Неопределено Тогда 	
		Если СписокЗапрещенныхСчетов.Количество()>0 Тогда	
			БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметр(ПараметрыКомпоновки.Элементы,"СчетаИсключенныеИзЗапросаПоСчетам",СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;		
	КонецЕсли;
	
	СчетНайден = Ложь;
		
    СчетНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		
	Если Не СчетНайден Тогда 	
		ДобавитьОтбор(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
	КонецЕсли;
		
КонецПроцедуры

Процедура АнализСубконто_КарточкаСубконто(НастройкаКомпоновкиДанных,МассивЗапрещенныхСубконто,СписокЗапрещенныхСчетов)
	
// В принципе можно обойтись только установкой  отбора по счету. Но все таки решил оставить первоначальный вариант с двойной проверкой как по счету так и 
// через удаление запрещенных субконто из списка параметров 

	Если СписокЗапрещенныхСчетов.Количество()> 0 Тогда 
		
		СчетНайден = Ложь;
		
		СчетНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		
		Если Не СчетНайден Тогда 	
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;	
		
	КонецЕсли;
	
	Если МассивЗапрещенныхСубконто.Количество() > 0 Тогда 
		
		ПараметрыКомпоновки = НастройкаКомпоновкиДанных.ПараметрыДанных;	
		
		ПараметрСписокСубконто = ПараметрыКомпоновки.Элементы.Найти("СписокВидовСубконто");
		
		Если  ПараметрСписокСубконто<> неопределено Тогда 
			
			МассивУстановленныхСубконто = ПараметрыКомпоновки.Элементы.Найти("СписокВидовСубконто").Значение;
			
			Для каждого Субконто из МассивЗапрещенныхСубконто Цикл 
				
				ИндексЭлемента = МассивУстановленныхСубконто.найти (Субконто) ;	
				
				Если  ИндексЭлемента<> Неопределено Тогда 			
					МассивУстановленныхСубконто.удалить(ИндексЭлемента) ;
				КонецЕсли;	
				
			КонецЦикла;
			
			Если МассивУстановленныхСубконто.Количество() = 0 Тогда 
				МассивУстановленныхСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка());
			КонецЕсли;	
			
			БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметр(ПараметрыКомпоновки.Элементы,"СписокВидовСубконто",МассивУстановленныхСубконто,Истина);
			
		КонецЕсли;		
		
	КонецЕСли;
		
	КонецПроцедуры

Процедура ОтчетПоПроводкам_ОборотыМеждуСубконто(НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов)
	
	    ОтборКтНайден = Ложь;
		ОтборДтНайден = Ложь;
			
		ОтборКтНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		ОтборДтНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"КорСчет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		
		Если Не ОтборДтНайден тогда 
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;
		
		Если Не ОтборКтНайден тогда 
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"КорСчет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;
	
КонецПроцедуры

Процедура СводныеПроводки (НастройкаКомпоновкиДанных,СписокЗапрещенныхСчетов)
	
		СчетДт = Ложь;
		
		СчетДт = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"СчетДт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		
		Если Не СчетДт Тогда 	
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"СчетДт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;
		
		СчетКт = Ложь;
		
		СчетКт = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"СчетКт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		
		Если Не СчетКт Тогда 	
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"СчетКт",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;
	
КонецПроцедуры

3. В конфигурацию добавляем расширение (имя заданное по умолчанию я менять  не стал Расширение1 , префикс Расш1_

В расширение следует добавить формы отчетов, к которым настраивается ограничение. В моем случае это:

  • Анализ счета
  • Карточка счета
  • Анализ субконто
  • Карточка субконто
  • Оборотно-сальдовая ведомость
  • Оборотно-сальдовая ведомость по счету
  • Обороты между субконто
  • Сводные проводки
  • Обороты счета
  • Отчет по проводкам

В каждую расширенную форму следует добавить 2 функции и 1 процедуру (это в общем случае. отдельный случай будет описан ниже) из расширяемой формы основной конфигурации, а именно:

  • Процедура "СформироватьОтчет"
  • Функция "СформироватьОтчетНаСервере"
  • Функция "ПодготовитьПараметрыОтчета" 

 К указанным функциям и процедуре необходимо добавить префикс расширения.   А для команды "СформироватьОтчет" (кнопка "Сформировать" на форме) назначить новое действие "Расш1_СформирватьОтчет" 

Вот пример  для отчета КарточкаСчета

&НаСервере
Функция Расш1_ПодготовитьПараметрыОтчета()
   // В этой функции происходит подмена настроек "НастройкиКомпоновкиДанных"

	ПараметрыОтчета = Новый Структура;
	ПараметрыОтчета.Вставить("Организация"                      , Отчет.Организация);
	ПараметрыОтчета.Вставить("НачалоПериода"                    , Отчет.НачалоПериода);
	ПараметрыОтчета.Вставить("КонецПериода"                     , Отчет.КонецПериода);
	ПараметрыОтчета.Вставить("ВключатьОбособленныеПодразделения", Отчет.ВключатьОбособленныеПодразделения);
	ПараметрыОтчета.Вставить("ПоказательБУ"                     , Отчет.ПоказательБУ);
	ПараметрыОтчета.Вставить("ПоказательНУ"                     , Отчет.ПоказательНУ);
	ПараметрыОтчета.Вставить("ПоказательПР"                     , Отчет.ПоказательПР);
	ПараметрыОтчета.Вставить("ПоказательВР"                     , Отчет.ПоказательВР);
	ПараметрыОтчета.Вставить("ПоказательВалютнаяСумма"          , Мин(Отчет.ПоказательВалютнаяСумма, БухгалтерскийУчетПереопределяемый.ИспользоватьВалютныйУчет()));
	ПараметрыОтчета.Вставить("ПоказательКоличество"             , Отчет.ПоказательКоличество);
	ПараметрыОтчета.Вставить("ПоказательКонтроль"               , Отчет.ПоказательКонтроль);
	ПараметрыОтчета.Вставить("РазвернутоеСальдо"                , Отчет.РазвернутоеСальдо);
	ПараметрыОтчета.Вставить("РазмещениеДополнительныхПолей"    , Отчет.РазмещениеДополнительныхПолей);
	ПараметрыОтчета.Вставить("Периодичность"                    , Отчет.Периодичность);
	ПараметрыОтчета.Вставить("Счет"                             , Отчет.Счет);
	ПараметрыОтчета.Вставить("ПоСубсчетам"                      , Отчет.ПоСубсчетам);
	ПараметрыОтчета.Вставить("ПоСубсчетамКорСчетов"             , Отчет.ПоСубсчетамКорСчетов);
	ПараметрыОтчета.Вставить("Группировка"                      , Отчет.Группировка.Выгрузить());
	ПараметрыОтчета.Вставить("ДополнительныеПоля"               , Отчет.ДополнительныеПоля.Выгрузить());
	ПараметрыОтчета.Вставить("ГруппировкаКор"                   , Отчет.ГруппировкаКор.Выгрузить());
	ПараметрыОтчета.Вставить("РежимРасшифровки"                 , Отчет.РежимРасшифровки);
	ПараметрыОтчета.Вставить("ВыводитьЗаголовок"                , ВыводитьЗаголовок);
	ПараметрыОтчета.Вставить("ВыводитьПодвал"                   , ВыводитьПодвал);
	ПараметрыОтчета.Вставить("ДанныеРасшифровки"                , ДанныеРасшифровки);
	ПараметрыОтчета.Вставить("МакетОформления"                  , МакетОформления);	
	ПараметрыОтчета.Вставить("СхемаКомпоновкиДанных"            , ПолучитьИзВременногоХранилища(СхемаКомпоновкиДанных));
	ПараметрыОтчета.Вставить("ИдентификаторОтчета"              , БухгалтерскиеОтчетыКлиентСервер.ПолучитьИдентификаторОбъекта(ЭтаФорма));
	НастройкиКомпоновкиДанных = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
	ОграничениеПравПользователей.УстановитьОграничениеНаПросмотрСчетов(Отчет,НастройкиКомпоновкиДанных,ЭтаФорма,ПараметрыОтчета.СхемаКомпоновкиДанных);
	ПараметрыОтчета.Вставить("НастройкиКомпоновкиДанных"        , НастройкиКомпоновкиДанных);
	ПараметрыОтчета.Вставить("НаборПоказателей"                 , Отчеты[ПараметрыОтчета.ИдентификаторОтчета].ПолучитьНаборПоказателей());
	ПараметрыОтчета.Вставить("ОтветственноеЛицо"                , Перечисления.ОтветственныеЛицаОрганизаций.ОтветственныйЗаБухгалтерскиеРегистры);
	ПараметрыОтчета.Вставить("ВыводитьЕдиницуИзмерения"         , ВыводитьЕдиницуИзмерения);
	
	Возврат ПараметрыОтчета;
	
	
КонецФункции

&НаСервере
Функция Расш1_СформироватьОтчетНаСервере() Экспорт
 
	Если Не КомпоновщикИнициализирован Тогда
		ИнициализацияКомпоновщикаНастроек();
	КонецЕсли;
	
	Если Не ПроверитьЗаполнение() Тогда
		Возврат Новый Структура("ЗаданиеВыполнено, ОтказПроверкиЗаполнения", Истина, Истина);
	КонецЕсли;
	
	ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая();
	
	ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания);
	
	ИдентификаторЗадания = Неопределено;
	
	ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать");
	
	Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВыводитьЗаголовок", ВыводитьЗаголовок);
	Отчет.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВыводитьПодвал"   , ВыводитьПодвал);
	Отчет.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки              = "";
	Отчет.КомпоновщикНастроек.Настройки.Порядок.ИдентификаторПользовательскойНастройки            = "";
	Отчет.КомпоновщикНастроек.Настройки.УсловноеОформление.ИдентификаторПользовательскойНастройки = "";
	
    // Получаем параметры отчета из нашей функции

	ПараметрыОтчета = Расш1_ПодготовитьПараметрыОтчета();
	
	Если ИБФайловая Тогда
		АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
		БухгалтерскиеОтчетыВызовСервера.СформироватьОтчет(ПараметрыОтчета, АдресХранилища);
		РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина);
	Иначе
		РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
			УникальныйИдентификатор,
			"БухгалтерскиеОтчетыВызовСервера.СформироватьОтчет",
			ПараметрыОтчета,
			БухгалтерскиеОтчетыКлиентСервер.ПолучитьНаименованиеЗаданияВыполненияОтчета(ЭтаФорма));
			
		АдресХранилища       = РезультатВыполнения.АдресХранилища;
		ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания;
	КонецЕсли;
	
	Если РезультатВыполнения.ЗаданиеВыполнено Тогда
		ЗагрузитьПодготовленныеДанные();
	КонецЕсли;
	
	Элементы.Сформировать.КнопкаПоУмолчанию = Истина;
	
	Возврат РезультатВыполнения;
	
КонецФункции

&НаКлиенте
Процедура Расш1_СформироватьОтчет(Команда)
	
	// СтандартныеПодсистемы.ОценкаПроизводительности
	УИДЗамера = ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Ложь, "ФормированиеОтчетаАнализСчета");
	// СтандартныеПодсистемы.ОценкаПроизводительности
	
	ОчиститьСообщения();
	
	ОтключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания");
	
    // Вызываем нашу функцию Расш1_сформироватьОтчетНаСервере

	РезультатВыполнения = Расш1_СформироватьОтчетНаСервере();
	Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда
		ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания);
		ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина);
		ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "ФормированиеОтчета");
	Иначе
		
		ЗафиксироватьДлительностьКлючевойОперации();
		
		Если НЕ РезультатВыполнения.Свойство("ОтказПроверкиЗаполнения") Тогда
			БухгалтерскийУчетКлиентПереопределяемый.ПодключитьПроверкуАктуальности(ЭтотОбъект);
		КонецЕсли;
		
	КонецЕсли;
	
	Если РезультатВыполнения.Свойство("ОтказПроверкиЗаполнения") Тогда
		ПоказатьНастройки("");
	Иначе	
		СкрытьНастройки();
	КонецЕсли;
	
    //обработку из основной конфигурации отменяем 
	УстановитьВыполнениеОбработчиковСобытия(Ложь);
	
КонецПроцедуры


&НаСервере
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)	
	УстановитьВыполнениеПослеОбработчиковСобытия("Расш1_ПриСозданииНаСервереПосле", Неопределено);
КонецПроцедуры

&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ,СтандартнаяОбработка,ДополнительныйПараметр) 
	
	Если Параметры.Свойство("ОткрытьРасшифровку") И Параметры.ОткрытьРасшифровку Тогда
	  Расш1_СформироватьОтчетНаСервере();
	КонецЕсли;  
		
КонецПроцедуры

Здесь следует обратить внимание на несколько моментов 

1)  Не забыть указать метод УстановитьВыполнениеОбработчиковСобытия(ложь) в самом конце процеду "СформироватьОтчет", что бы не вызывался обработчик  из основной конфигурации

2) В перенесенных функциях и процедуре  заменить обращение к стандарным функциям  на наши 

В процедуре Расш1_СформироватьОтчет - заменить строку 

РезультатВыполнения = СформироватьОтчетНаСервер()

 на  

РезультатВыполнения = Расш1_СформироватьОтчетНаСервер()

   И в функции  "СформироватьОтчетНаСервере" 

ПараметрыОтчета = ПодготовитьПараметрыОтчета();

на 

ПараметрыОтчета = Расш1_ПодготовитьПараметрыОтчета();

3)  в приведенном выше примере можно заметить, что в Расширении еще переопределяется процедура ПриСозданииНаСервере. Сделано это для правильной работы при открытии отчета по расшифровке из другого отчета, так как в этом случае, Расширение не перехватывает вызов СформирватьОтчетНаСервере (), вызванного из Общего модуля. Поэтому, сначала вызывается процедура из Расширения, которая устанавливает обработчик, который будет вызван после отработки процедуры основной конфигурации, и далее снова передаст управление Расширению. И уже здесь мы переформировываем отчет с установкой нужных отборов.   Пока данной действие мне пригодилось только для отчета Карточка Счета (расшифровка вызывается из отчета Анализ счета), но если необходимо - такой же механизм можно включить и в другие отчеты.

Стоит сказать пару слов о недостатках данного подхода

  1. В заголовках отчета пользователь будет видеть установленный отбор (но в настройках его не будет,  и снять отбор пользователь не сможет). 
  2. Некорректные данные. Ну тут все стандартно.   В принципе, как вариант, можно оставлять не закрывать ОСВ так как пользователь будет видеть общую сумму и полную картину, а вот расшифровки через другие отчеты придется закрывать.
  3. Требуется настройка прав на документы. В отчете суммы он может не увидеть, а вот если сможет открыть документ ...
  4. В данном решении не все отчеты прописаны, через которые можно получить данные (например отсутствует Шахматка) - пока не дошли руки . Думаю, реализовать в ближайшее время.
  5. Более сложная настройка по сравнению с RLS - Кода хоть и немного, но все же больше чем  настройка через RLS   

Выношу свое решение на публику. Буду рад обсудить данную тему, конструктивной критике или совету как можно улучшить данный механизм . 

P.S. В прикрепленном файле содержится Расширение конфигурации + текстовый файл с кодом Общего модуля 
Вам остается создать справочник.  

Напомню - Эксперименты лучше проводить сначала на копии базы)))  

18

Скачать файлы

Наименование Файл Версия Размер
Расширение конфигурации + Текст общего модуля
.rar 315,90Kb
19.10.16
26
.rar 315,90Kb 26 Скачать
Свободная конфигурация со справочником "ОграничениеПравДоступа"
.cf 17,39Kb
14.12.16
13
.cf 17,39Kb 13 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. kng67 11.11.16 09:21 Сейчас в теме
У нас стоит Комплексная автоматизация. Так вот периодически возникающая идея фикс у руководства: "как бы закрыть 70 счет для всех кроме расчетчика и главбуха".
Интересно, подойдет ли ваше решение для нашей конфигурации?
2. vadim1011985 57 11.11.16 09:57 Сейчас в теме
КА не смотрел , но думаю что немного видоизменив код , решение может подойти и для КА. + немного зависит от версии конфигурации 1.1 или 2.0 (2.2). Если будет время я посмотрю как КА устроена и смогу сказать подойдет ли данное решение.
3. v_id 94 13.12.16 15:45 Сейчас в теме
Спасибо за подробную статью!
Выгрузку конфы с новым справочником можно попросить добавить в поставку?

ЗЫ. И поправьте, пожалуйста, характеристику статьи Конфигурация на инфостарте как 1С:Бухгалтерия 3.0, а то параметрическим поиском ее не найти.
4. vadim1011985 57 13.12.16 16:54 Сейчас в теме
(3) К сожалению, выгрузку со справочником добавить нельзя, так как это целая рабочая конфигурация и модераторы Инфостарта скорее всего не пропустят ее , так как это будет нарушением авторский прав 1с.

Я думаю что добавление справочника в конфу не составит труда. Один реквизит , 2 табличные части - Там нет никакого сверх сложного кода- заполнение таб.частей по плану счетов , и добавление всех пользователей с установкой ограничения на 70 счет. Если нужно код могу выложить

5. корум 311 13.12.16 17:00 Сейчас в теме
(4)
(4)
выгрузку со справочником добавить нельзя

Можно.
Удали лишние объекты конфигурации - общие модули, перечисления, документы, вот это всё.
6. vadim1011985 57 13.12.16 17:07 Сейчас в теме
(5) т..е. практически всю конфигурацию ?

подскажи сколько времени на это уйдет ? Как вариант создать конфу для разработки и туда добавить этот справочник. Но по моему быстрее самому добавить справочник.
7. корум 311 13.12.16 17:10 Сейчас в теме
(6) можно наоборот, в пустую конфигурацию перетащить нужные объекты :)

покажи товарищу (3) хотя бы скриншоты, а код можно текстовым файлом прикрепить...
22. AnryMc 720 20.12.16 11:26 Сейчас в теме
(6)
чески всю конфигурацию ?

подскажи сколько времени на это уйдет ?


Зачем? Скопируйте в "пустую" нужное...
8. vadim1011985 57 13.12.16 20:12 Сейчас в теме
(3) (7) по просьбам трудящихся добавил пустую конфу со справочником
9. v_id 94 14.12.16 14:28 Сейчас в теме
10. v_id 94 14.12.16 15:05 Сейчас в теме
Тестирую. Конфу со справочником не качал.

1. Здесь в описании "Справочник "ОграничениеПравПользователей" с реквизитом "Пользователи", а в расширении у Справочника реквизит ""Пользователь"
2. Расширение1: Критичная: Значение контролируемого свойства ДлинаНаименования у объекта Справочник.ОграничениеПравПользователей не совпадает со значением в расширяемой конфигурации. Это при запуске, у вас в расширении длина 50, по-умолчанию у меня длинна 25
11. v_id 94 14.12.16 15:10 Сейчас в теме
3. Описано как "СписокЗапрещенныхСубконто" - Колонки "ЗапрещенноеСубконто" - Тип ПланВидовХарактеристик.ВидыСубконтоХозрасчетный", а в расширении ТЧ называется ЗапрещенныеСубконто
17. vadim1011985 57 14.12.16 16:28 Сейчас в теме
(11) В принципе не кретично но посмотрел у себя вроде все правильно на всякий случай выкладываю сюда расширение из рабочей базы
Прикрепленные файлы:
Расширение1.cfe
12. v_id 94 14.12.16 15:17 Сейчас в теме
4. Не, так не пойдет, описание чего-то совсем не совпало. Еще и СписокРазрещенныхСчетов в расширении.

По-этому я просил справочник, и лучше в один архив
13. v_id 94 14.12.16 15:39 Сейчас в теме
Чего-то у меня вообще не получается. Идея закрыть доступ к развороту по сотрудникам на 70 счете.
Включил в список запрещенных субконто "Работники организаций", список счетов не заполнял. Зашел под пользователем в ОСВ по счету и все формируется. Хотя, по-идее, вообще ничего не должно, я же никакой счет не разрешил и в добавок и субконто запретил.
20. vadim1011985 57 14.12.16 16:40 Сейчас в теме
(13) не работает , так как не погрузилось расширение. необходимо исправить ошибки - должно работать
14. v_id 94 14.12.16 15:42 Сейчас в теме
Забыл описать себя
1С:Предприятие 8.3 (8.3.9.1850)
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.44.204)

Общий модуль ОграничениеПравПользователей в расширении
15. v_id 94 14.12.16 16:02 Сейчас в теме
Я так понял, что ограничение по субконто реализовано только для отчета по субконто. Но и там у меня ошибка:
{Расширение1 ОбщийМодуль.ОграничениеПравПользователей.Модуль(346)}: Метод объекта не обнаружен (найти)
ИндексЭлемента = МассивУстановленныхСубконто.найти (Субконто) ;
16. vadim1011985 57 14.12.16 16:16 Сейчас в теме
Так давайте по порядку

1) "Пользователи", а в расширении у Справочника реквизит ""Пользователь" - в описании ошибка Правильно "Пользователь " - описание поправлю
2) Если справочники добавляли сами то нужно у справочника длину наименования указать 50 - тоже укажу в описании
18. vadim1011985 57 14.12.16 16:35 Сейчас в теме
Закомментируйте укакзанные строки

Процедура АнализСубконто_КарточкаСубконто(НастройкаКомпоновкиДанных,МассивЗапрещенныхСубконто,СписокЗапрещенныхСчетов)
	
	Если СписокЗапрещенныхСчетов.Количество()> 0 Тогда 
		
		СчетНайден = Ложь;
		
		СчетНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		
		Если Не СчетНайден Тогда 	
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;	
		
	КонецЕсли;
	
	//Если МассивЗапрещенныхСубконто.Количество() > 0 Тогда 
		
	//	ПараметрыКомпоновки = НастройкаКомпоновкиДанных.ПараметрыДанных;	
		
	//	ПараметрСписокСубконто = //ПараметрыКомпоновки.Элементы.Найти("СписокВидовСубконто");
		
		//Если  ПараметрСписокСубконто<> неопределено Тогда 
			
		//	МассивУстановленныхСубконто = //ПараметрыКомпоновки.Элементы.Найти("СписокВидовСубконто").Значение;
			
			//Для каждого Субконто из МассивЗапрещенныхСубконто Цикл 
				
			//	ИндексЭлемента = МассивУстановленныхСубконто.найти (Субконто) ;	
				
			//	Если  ИндексЭлемента<> Неопределено Тогда 			
			//		МассивУстановленныхСубконто.удалить(ИндексЭлемента) ;
			//	КонецЕсли;	
				
			//КонецЦикла;
			
			//Если МассивУстановленныхСубконто.Количество() = 0 Тогда 
				//МассивУстановленныхСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка());
			КонецЕсли;	
			
			//БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметр(ПараметрыКомпоновки.Элементы,"Список//ВидовСубконто",МассивУстановленныхСубконто,Истина);
			
//		КонецЕсли;		
		
//	КонецЕСли;
		
	КонецПроцедуры
Показать
19. vadim1011985 57 14.12.16 16:36 Сейчас в теме
Закомментируйте укакзанные строки

Процедура АнализСубконто_КарточкаСубконто(НастройкаКомпоновкиДанных,МассивЗапрещенныхСубконто,СписокЗапрещенныхСчетов)
	
	Если СписокЗапрещенныхСчетов.Количество()> 0 Тогда 
		
		СчетНайден = Ложь;
		
		СчетНайден = ПоискиУстановкаОтбора(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов);
		
		Если Не СчетНайден Тогда 	
			ДобавитьОтбор(НастройкаКомпоновкиДанных,"Счет",ВидСравненияКомпоновкиДанных.НеВСписке,СписокЗапрещенныхСчетов,Истина);
		КонецЕсли;	
		
	КонецЕсли;
	
	//Если МассивЗапрещенныхСубконто.Количество() > 0 Тогда 
		
	//	ПараметрыКомпоновки = НастройкаКомпоновкиДанных.ПараметрыДанных;	
		
	//	ПараметрСписокСубконто = //ПараметрыКомпоновки.Элементы.Найти("СписокВидовСубконто");
		
		//Если  ПараметрСписокСубконто<> неопределено Тогда 
			
		//	МассивУстановленныхСубконто = //ПараметрыКомпоновки.Элементы.Найти("СписокВидовСубконто").Значение;
			
			//Для каждого Субконто из МассивЗапрещенныхСубконто Цикл 
				
			//	ИндексЭлемента = МассивУстановленныхСубконто.найти (Субконто) ;	
				
			//	Если  ИндексЭлемента<> Неопределено Тогда 			
			//		МассивУстановленныхСубконто.удалить(ИндексЭлемента) ;
			//	КонецЕсли;	
				
			//КонецЦикла;
			
			//Если МассивУстановленныхСубконто.Количество() = 0 Тогда 
				//МассивУстановленныхСубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ПустаяСсылка());
	//		КонецЕсли;	
			
			//БухгалтерскиеОтчетыКлиентСервер.УстановитьПараметр(ПараметрыКомпоновки.Элементы,"Список//ВидовСубконто",МассивУстановленныхСубконто,Истина);
			
//		КонецЕсли;		
		
//	КонецЕСли;
		
	КонецПроцедуры 
Показать
21. webresurs 159 20.12.16 11:19 Сейчас в теме
явно у кого-то слямзил...
23. vadim1011985 57 20.12.16 11:59 Сейчас в теме
(21)
явно у кого-то слямзил...
Обоснуйте с какого решения это было "слямзино"

Я не отрицаю что может быть похожее решение - я таких решений не встречал , даже наоборот в обсуждении можно найти что реализация через код проблематичная, данная реализация писалась самостоятельно и не откуда не была скопирована.




24. webresurs 159 20.12.16 13:28 Сейчас в теме
(23)
Обоснуйте с какого решения это было "слямзино"


- описание по установке одно, в скрипте совсем другое...
- не полное описание установки...

все сделал по описанию, исправил "опечатки", добавил, но не понятно, где искать настройки пользователя для ограничения?
-все функции - в справочниках....


Блокирует всех пользователей да же не добавленных за чем это и как отключить?
25. Airlord 20.12.16 13:40 Сейчас в теме
Добрый день! работал в прошлом году в КА 1.1 - проблем с разделением доступа к отчетам не возникало. Большинство отчетов построено на универсалке и достаточно указать в настройках - каким пользователям доступен набор параметров и структура отчета. Другой вопрос - если найдется умник - сам "наберет" себе отчет из универсалки.
26. vadim1011985 57 20.12.16 15:56 Сейчас в теме
Не должно блокировать всех пользователей , так как за это отвечает этот код в общем модуле:

Запрос = Новый Запрос;
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ВЫБОР
	|		КОГДА ОграничениеПравПользователейСписокРазрещенныхСчетов.Использование = ЛОЖЬ
	|			ТОГДА ОграничениеПравПользователейСписокРазрещенныхСчетов.Счет
	|	КОНЕЦ КАК ЗапрещенныеСчета
	|ИЗ
	|	Справочник.ОграничениеПравПользователей.СписокРазрещенныхСчетов КАК ОграничениеПравПользователейСписокРазрещенныхСчетов
	|ГДЕ
	|	ОграничениеПравПользователейСписокРазрещенныхСчетов.Ссылка.Пользователь = &Пользователь
	| И ОграничениеПравПользователейСписокРазрещенныхСчетов.Использование = ЛОЖЬ";
	
		
	Запрос.УстановитьПараметр("Пользователь",ПараметрыСеанса.ТекущийПользователь);
	
	Результат = Запрос.Выполнить();
	                
	ТаблицаСчетов = Результат.Выгрузить(); // результат выгружаем в таблиц  
		
	ЗапрещенныеСчета = ТаблицаСчетов.ВыгрузитьКолонку("ЗапрещенныеСчета"); // Получаем массив запрещенных счетов
	
    //Получим список запррещенных к просмотру субконто
    Запрос.Текст ="ВЫБРАТЬ
	|	ОграничениеПравПользователейЗапрещенныеСубконто.ЗапрещенноеСубконто
	|ИЗ
	|	Справочник.ОграничениеПравПользователей.ЗапрещенныеСубконто КАК ОграничениеПравПользователейЗапрещенныеСубконто
	|ГДЕ
	|	ОграничениеПравПользователейЗапрещенныеСубконто.Ссылка.Пользователь = &Пользователь";
	
	Запрос.УстановитьПараметр("Пользователь",ПараметрыСеанса.ТекущийПользователь);
	
	ТаблицаЗапрещенныхСубконто = Запрос.Выполнить().Выгрузить();
	
	Если ЗапрещенныеСчета.Количество()= 0 И ТаблицаЗапрещенныхСубконто.Количество() = 0 тогда  // Если нет ограничений , то выходим 
		Возврат;
	КонецЕсли;
Показать


Я согласен , что в моем описании есть косяк. За что сейчас справедливо, получаю от вас по голове, Подскажите, что Вы правили что бы я мог исправить неточности в публикации ?
27. user627879_am002 14.11.17 07:59 Сейчас в теме
При подключении расширения, ошибка:
Расширение1: Критичная:
Не найден объект ФункциональнаяОпция.Новости_РазрешенаРаботаСНовостями

А в управлении расширениями:
(Критичная) Расширение1: Не найден объект ФункциональнаяОпция.Новости_РазрешенаРаботаСНовостями
(Критичная) Расширение1: Не найден объект Справочник.ОграничениеПравПользователей

Бухгалтерия 3.0.53.38
28. vadim1011985 57 14.11.17 10:12 Сейчас в теме
(27)

1. Необходимо в расширение добавить указанный объект. Для этого в дереве объектов основной конфигурации надо найти указанный объект (ФункциональнаяОпция.Новости_РазрешенаРаботаСНовостями) и в контекстном меню (щелчок второй кнопкой мыши по указанному объекту) .

2. Указанный справочник добавляется в основную конфигурацию (см. описание )

Для хранения данных о пользователях, у которых ограничены права на просмотр счетов, и самих счетов, доступ к которым ограничен, я добавил Справочник "ОграничениеПравПользователей" с реквизитом "Пользователь" - СправочникСсылка.Пользователи и две табличные части:. Длину наименования у спрвочника указываем 50 символов.

"СписокЗапрещенныхСчетов" - Колонки "Счет" - ПланыСчетов.Хозрасчетный, "Использование" - Тип Булево.

"СписокЗапрещенныхСубконто" - Колонки "ЗапрещенноеСубконто" - Тип ПланВидовХарактеристик.ВидыСубконтоХозрасчетный

Тут важное уточнение - полные права доступа на этот справочник должны быть только у администратора (или пользователя с полными правами), у других должен быть доступ только на чтение.
29. user627879_am002 14.11.17 17:27 Сейчас в теме
вот такая картинка при попытке сохранить
Прикрепленные файлы:
30. dsavinov2 1 02.03.18 13:05 Сейчас в теме
При переходе из ОСВ в карточку например, ошибка недостачно прав доступа.
31. dsavinov2 1 02.03.18 15:14 Сейчас в теме
Нашел, нужно права у роли ограничение прав пользователей дать на параметры сеанса
32. user1076285 28.11.18 17:31 Сейчас в теме
Подскажите пожалуйста подробнее:

Тут важное уточнение - полные права доступа на этот справочник должны быть только у администратора (или пользователя с полными правами), у других должен быть доступ только на чтение.


Придется стандартные роли редактировать?
33. vadim1011985 57 28.11.18 17:37 Сейчас в теме
(32) По большому счету конечно желательно это сделать , но если пользователи не сильно шарят в 1с то можно обойтись и без этого
34. user1076285 28.11.18 18:01 Сейчас в теме
(33) Я просто столкнулась с проблемой, при попытке сформировать отчет под пользователем с базовыми правами (на котором стоит ограничение по счетам) выпадает ошибка:
Недостаточно прав для работы с таблицей "Справочник.ОграничениеПравПользователей".

Может быть какой-то нюанс упустила?
35. vadim1011985 57 28.11.18 18:39 Сейчас в теме
(34) возможно стоит проверить право на чтение для базовой роли , в случае чего можно в расширении заимствовать нужную роль и указать для нее необходимые права
36. user1076285 29.11.18 11:45 Сейчас в теме
(35) На базовую роль по умолчанию на все справочники доступно чтение. Но действительно, начало работать только после прямого добавления в эту роль прав на просмотр и чтение данного справочника. Спасибо
Оставьте свое сообщение