gifts2017

СКД: программно изменить отбор

Опубликовал Kireal Smith (KirealSmith) в раздел Программирование - Практика программирования

Меняем элементы отбора программно.

Видимо предыдущий вариант устарел, так как у меня не срабатывает, поэтому описываю свой вариант.

Мне нобходимо изменить поле отбора "Менеджер" в отборе отчета. Кроме того мне это поле надо закрыть, поэтому ПриОткрытии() запускаю следующую процедурку:

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

Кроме того, аналог надо будет вставить в модуле в ПриКомпоновкеРезультата.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Александр Медведев (anig99) 04.10.13 12:43
2. Kireal Smith (KirealSmith) 04.10.13 22:53
(1) anig99, причем здесь новизна?
Данная публикация должна помочь тем, у кого возникнет вопрос как это делается.
3. Яков Коган (Yashazz) 07.10.13 13:46
(2) Вопрос, как это делается, имеет множество ответов в жёлтых книжках. RTFM, господа начинающие! В крайнем случае - велкам ту http://devtrainingforum.v8.1c.ru/forum/
4. Саша Безымяный (help1Ckr) 09.10.13 12:37
" Если Строка(Стр.ЛевоеЗначение) = "Менеджер" Тогда" - это не по христиански. Правильнее, ИМХО,

Для Каждого Стр ИЗ Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если Строка(Стр.ЛевоеЗначение) = "Менеджер" Тогда

Заменить на
ПолеМенеджер = Новый ПолеКомпоновкиДанных("Менеджер");
Для Каждого Стр ИЗ Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если Стр.ЛевоеЗначение = ПолеМенеджер Тогда
. А так за публикацию плюс ибо сам в первый раз намучался )
5. Данила Елистратов (CagoBHuK) 09.10.13 14:34
Такое ощущение, что программисты нынче мануалы не читают.
6. Петр Усольцев (prohorp) 06.11.14 10:48
CagoBHuK
В Синтакс-помощнике найти не всегда удается.
А так что-бы что-то искать - нужно 100% знать как устроены отборы в СКД.(на что бывает нет времени заморачиваться)
7. Rauan Sandybaev (sandybaev) 27.02.15 12:09
помогает когда нет времени искать варианты. плюсую
8. Serg S (mdSerg) 25.08.15 15:06
(4) help1Ckr,
надо ещё и тип проверять, для группы элементов отбора будет ошибка
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа