На форме СКД запретить менять параметры по определенной роли

1. XelOla 17 05.06.17 14:06 Сейчас в теме
Подскажите пожалуйста, как запретить менять параметры СКД для роли Продавец, а точнее оставить чтобы Продавец имел возможность менять только даты отчета, а Администратор настраивал остальные параметры для Продавца.
По теме из базы знаний
Найденные решения
10. XelOla 17 06.06.17 10:18 Сейчас в теме
Все, нашла.
Главное при создании на сервере написала СтандартнаяОбработка = Ложь; и мыкаюсь...

Элементы.КомпоновщикНастроекПользовательскиеНастройки.ПодчиненныеЭлементы[0].ПодчиненныеЭлементы[0].Доступность = Ложь;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 05.06.17 14:16 Сейчас в теме
(1)
пожалуйста, как запретить менять параметры СКД для роли Продавец, а точнее оставить чтобы Продавец имел возможность менять только даты отчета, а Администратор настраивал остальные

пилить общую основную форму отчета
3. XelOla 17 05.06.17 14:28 Сейчас в теме
т.е.? те параметры что есть в СКД дублировать? с похожими именами?
4. Boneman 298 05.06.17 15:09 Сейчас в теме
(3) смотря как у вас там устроено.
В отчетах, где нет собственной формы, вызывается общая форма из свойств конфигурации.
Отчеты могут быть самые разные, с разными параметрами - поэтому, нужно сделать такую схему, чтобы не нарушить работу всех отчетов.
В принципе, при создании на сервере, в типовых уже натыкано множество всяких обработок формы, с видимостью и доступностью.
Вам нужно вникнуть в вашу систему, и аккуратно добавить свои условия. А может даже какую то отдельную страницу отчета сделать, для определенных ролей.

пример общей формы отчета из УНФ.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	ВариантыПанелиКлючТекущегоВарианта = " - ";
	
	Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
		Элементы.КомандыЕще.Ширина = 15;
	КонецЕсли;
	
	// Параметры формы.
	РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено);
	РежимВариантаОтчета = (ТипЗнч(КлючТекущегоВарианта) = Тип("Строка") И Не ПустаяСтрока(КлючТекущегоВарианта));
	ПравоВывода = ПравоДоступа("Вывод", Метаданные);
	
	ФормаПараметры = Новый Структура(
		"КлючНазначенияИспользования, КлючПользовательскихНастроек,
		|Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр,
		|ФиксированныеНастройки, Раздел, Подсистема, ПодсистемаПредставление");
	ЗаполнитьЗначенияСвойств(ФормаПараметры, Параметры);
	ФормаПараметры.Вставить("Отбор", Новый Структура);
	Если ТипЗнч(Параметры.Отбор) = Тип("Структура") Тогда
		ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(ФормаПараметры.Отбор, Параметры.Отбор, Истина);
		Параметры.Отбор.Очистить();
	КонецЕсли;
	
	// СтандартныеПодсистемы.ОценкаПроизводительности
	Попытка
		ОтчетОбъект 		= РеквизитФормыВЗначение("Отчет");
		ОтчетМетаданные		= ОтчетОбъект.Метаданные();
		ПостФикс			= ОтчетМетаданные.Имя + "_" + СтрЗаменить(КлючТекущегоВарианта, " ", "_");
		КлючеваяОперация	= ПредопределенноеЗначение("Справочник.КлючевыеОперации.ФормированиеОтчёта_" + Постфикс); 
	Исключение
		КлючеваяОперация = Неопределено;
	КонецПопытки;
	// Конец СтандартныеПодсистемы.ОценкаПроизводительности
	
	Если ФормаПараметры.Подсистема = Неопределено Тогда
		Элементы.ДругиеОтчеты.Видимость = Ложь;
	КонецЕсли;
	
	// Локальные переменные.
	ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	ОтчетМетаданные = ОтчетОбъект.Метаданные();
	НастройкиОтчета = ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию();
	АдресСхемы = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор);
	
	НастройкиОтчета.Вставить("АдресСхемы", АдресСхемы);
	НастройкиОтчета.Вставить("ПолноеИмя", ОтчетМетаданные.ПолноеИмя());
	НастройкиОтчета.Вставить("Наименование", СокрЛП(ОтчетМетаданные.Представление()));
	
	Информация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(НастройкиОтчета.ПолноеИмя);
	НастройкиОтчета.Вставить("ОтчетСсылка", Информация.Отчет);
	НастройкиОтчета.Вставить("ВариантСсылка", ВариантыОтчетов.ПолучитьСсылку(НастройкиОтчета.ОтчетСсылка, КлючТекущегоВарианта));
	
	Если ВариантыОтчетовПовтИсп.ОтчетыСНастройками().Найти(НастройкиОтчета.ОтчетСсылка) <> Неопределено Тогда
		ОтчетОбъект.ОпределитьНастройкиФормы(ЭтотОбъект, КлючТекущегоВарианта, НастройкиОтчета);
		СоответствиеПериодичностиПараметров = Новый Соответствие;
		Для Каждого КлючИЗначение Из НастройкиОтчета.СоответствиеПериодичностиПараметров Цикл
			ПолеКД = КлючИЗначение.Ключ;
			Если ТипЗнч(ПолеКД) = Тип("ПараметрКомпоновкиДанных") Тогда
				ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(ПолеКД));
			КонецЕсли;
			СоответствиеПериодичностиПараметров.Вставить(ПолеКД, КлючИЗначение.Значение);
		КонецЦикла;
		НастройкиОтчета.Вставить("СоответствиеПериодичностиПараметров", СоответствиеПериодичностиПараметров);
	КонецЕсли;
	
	НастройкиОтчета.Вставить("ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек", Истина);
	Если Параметры.Свойство("СформироватьПриОткрытии") И Параметры.СформироватьПриОткрытии = Истина Тогда
		Параметры.СформироватьПриОткрытии = Ложь;
		НастройкиОтчета.ФормироватьСразу = Истина;
		НастройкиОтчета.ПрочитатьФлажокФормироватьСразуИзПользовательскихНастроек = Ложь;
	КонецЕсли;
	
	НастройкиОтчета.Вставить("Внешний", ТипЗнч(НастройкиОтчета.ОтчетСсылка) = Тип("Строка"));
	НастройкиОтчета.Вставить("ПредопределенныеВарианты", Новый СписокЗначений);
	Если НастройкиОтчета.Внешний И ОтчетОбъект.СхемаКомпоновкиДанных <> Неопределено Тогда
		Для Каждого Вариант Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл
			НастройкиОтчета.ПредопределенныеВарианты.Добавить(Вариант.Имя, Вариант.Представление);
		КонецЦикла;
	КонецЕсли;
	
	// Параметры по умолчанию
	Если НастройкиОтчета.Свойство("ВыводитьСуммуВыделенныхЯчеек") И Не НастройкиОтчета.ВыводитьСуммуВыделенныхЯчеек Тогда
		Элементы.АвтоСуммаГруппа.Видимость = Ложь;
		Элементы.ОтчетТабличныйДокумент.УстановитьДействие("ПриАктивизацииОбласти", "");
	КонецЕсли;
	
	// Скрытие команд вариантов
	Если Не НастройкиОтчета.Свойство("РазрешеноМенятьВарианты") Или Параметры.Свойство("ВидимостьКомандВариантовОтчетов") Тогда
		НастройкиОтчета.Вставить("РазрешеноМенятьВарианты", ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ВидимостьКомандВариантовОтчетов"));
	КонецЕсли;
	Если ТипЗнч(НастройкиОтчета.РазрешеноМенятьВарианты) <> Тип("Булево") Тогда
		НастройкиОтчета.РазрешеноМенятьВарианты = ВариантыОтчетовПовтИсп.ПравоДобавления();
		Если НастройкиОтчета.РазрешеноМенятьВарианты // Команды не отключены параметрами открытия формы.
			И Параметры.КлючВарианта = Неопределено // Открывается без контекста.
			И ЗначениеЗаполнено(НастройкиОтчета.ВариантСсылка) Тогда // Вариант зарегистрирован.
			ПредопределенныйВариант = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиОтчета.ВариантСсылка, "ПредопределенныйВариант");
			Если ЗначениеЗаполнено(ПредопределенныйВариант) Тогда
				Отключенные = ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы();
				Если Отключенные.Найти(ПредопределенныйВариант) <> Неопределено Тогда // Вариант отключен.
					Текст = НСтр("ru = 'Контекстный вариант ""%1"" отчета ""%2"" открыт без контекста.'");
					ВариантыОтчетов.ПредупреждениеПоВарианту(НастройкиОтчета.ВариантСсылка, Текст, НастройкиОтчета.ВариантСсылка, НастройкиОтчета.ОтчетСсылка);
					НастройкиОтчета.РазрешеноМенятьВарианты = Ложь;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	Если Не НастройкиОтчета.РазрешеноМенятьВарианты Тогда
		АвтоНавигационнаяСсылка = Ложь;
	КонецЕсли;
	
	// Регистрация команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек.
	НаборРеквизитов = ПолучитьРеквизиты();
	Для Каждого Реквизит Из НаборРеквизитов Цикл
		ПолноеИмяРеквизита = Реквизит.Имя + ?(ПустаяСтрока(Реквизит.Путь), "", "." + Реквизит.Путь);
		ПостоянныеРеквизиты.Добавить(ПолноеИмяРеквизита);
	КонецЦикла;
	Для Каждого Команда Из Команды Цикл
		ПостоянныеКоманды.Добавить(Команда.Имя);
	КонецЦикла;
	
	// Приведение зависимых элементов формы к кондиции.
	ВидимостьДоступностьКорректность("");
	
	// Тесная интеграция с подсистемами БСП.
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РассылкаОтчетов") Тогда
		МодульРассылкаОтчетов = ОбщегоНазначения.ОбщийМодуль("РассылкаОтчетов");
		МодульРассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	КонецЕсли;
	
	// События.
	ОтчетыПереопределяемый.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	Если НастройкиОтчета.События.ПриСозданииНаСервере Тогда
		ОтчетОбъект.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
	КонецЕсли;
	
	// Если в подменю одна команда, то выпадающий список не отображается.
	Если Элементы.ГруппаОтправить_Левая.ПодчиненныеЭлементы.Количество() = 1 Тогда
		Элементы.ОтправитьПоЭлектроннойПочте_Левая.Заголовок = Элементы.ГруппаОтправить_Левая.Заголовок + "...";
		Элементы.Переместить(Элементы.ОтправитьПоЭлектроннойПочте_Левая, Элементы.КомандыЛевая, Элементы.ГруппаОтправить_Левая);
	КонецЕсли;
	Если Элементы.ГруппаОтправить.ПодчиненныеЭлементы.Количество() = 1 Тогда
		Элементы.ОтправитьПоЭлектроннойПочте.Заголовок = Элементы.ГруппаОтправить.Заголовок + "...";
		Элементы.Переместить(Элементы.ОтправитьПоЭлектроннойПочте, Элементы.КомандыЕще, Элементы.ГруппаОтправить);
	КонецЕсли;
Показать
5. XelOla 17 05.06.17 22:11 Сейчас в теме
Сделала свою форму
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Ответственный = Пользователи.ТекущийПользователь();
	Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы[1].Видимость = Ложь;
КонецПроцедуры

и получила Поле объекта недоступно для записи (Видимость)


Что делать?
Хочу параметры СКД сделать недоступными для редактирования пользователю.
но не все. только даты отчета может редактировать.
6. shnurov 06.06.17 02:29 Сейчас в теме
(5) Сделайте свой отчет, копируйте оригинальный и сделайте свой как внешний и извращайтесь как хотите. Дорабатывать типовой, да еще на СКД веселое занятие, но можно.


Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы[1].Видимость = Ложь;


у реквизита формы нет свойства видимость, вам нужен элемент формы.
7. XelOla 17 06.06.17 07:24 Сейчас в теме
(6) не типовый.
пробовала
этотобъект.ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы[1].Видимость
этаформа.ЭтотОбъект.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.Элементы[1].Видимость
8. shnurov 06.06.17 08:39 Сейчас в теме
(7) Повторяюсь вам нужен элемент формы, а не реквизиты формы. Вы пытаетесь установить видимость для одного из элементов доступных параметров СКД, вам нужен элемент формы:


Этаформа.Элементы.

Или проще
Элементы.


В отладчике то что после точки это и будут элементы формы.
9. XelOla 17 06.06.17 10:14 Сейчас в теме
вот кнопку сформировать нашла... а периоды нет
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Элементы.ФормаСформировать.Доступность = Ложь;
10. XelOla 17 06.06.17 10:18 Сейчас в теме
Все, нашла.
Главное при создании на сервере написала СтандартнаяОбработка = Ложь; и мыкаюсь...

Элементы.КомпоновщикНастроекПользовательскиеНастройки.ПодчиненныеЭлементы[0].ПодчиненныеЭлементы[0].Доступность = Ложь;
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот