Отдел продаж:

1С СКД отбор программно

Для чего может понадобиться в СКД отбор программно

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


Если вам необходимо доработать вашу 1С или вы желаете приобрести лицензии 1С, вы можете обратиться в отдел продаж нашей фирмы. Номер телефона указана в шапке сайта. С нашими услугами вы можете ознакомиться перейдя по ссылке ->


Как установить отбор

Итак, для начала создадим форму отчета. Как ее создать можно почитать в одной из прошлых статей (пункт “Решение задачи”). Далее в свойствах формы отчета инициализируем событие ПриОбновленииСоставаПользовательскихНастроек. Создаем процедуру на клиенте. В данной процедуре вызовем собственную процедуру, которая будет выполнять добавление отбора в отчете. Так ее и назовем – УстановитьОтбор().

Процедура УстановитьОтбор()

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

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

Как изменить созданный в конфигуратор отбор программно

Теперь приведем пример задачи, когда необходимо устанавливать значение отбора в зависимости от выполнения условий. Итак, есть два варианта – менеджер может видеть все заказы покупателей и менеджер может видеть только свои заказы покупателей. В первом случае пользователю должен быть доступен отбор по менеджерам в заказах покупателей. Во втором случаи пользователю недоступен отбор и он может видеть только свои заказы покупателей. Переименуем описанную выше функцию, назовем ее – УстановитьНастройкиОтбора(). Предположим, что есть некая функция, которая определяет доступность отбора для менеджера. Назовем ее ПользователюДоступенОтборПоМенеджерамПоПродажам(). Так как сам механизм работы этой функции нам не особо интересен, то описывать его мы не будем. Нам главное знать, что она возвращает значение Истина или Ложь. Сам отбор мы создадим в конфигураторе, программно будем лишь настраивать его. Если пользователю доступен отбор, то ничего по сути менять не нужно. А вот если отбор не доступен, то необходимо программно установить его значение и скрыть из пользовательского интерфейса. Последний пункт необходим для того, чтобы пользователь не смог сам изменить значение отбора. Суть алгоритма заключается в том, чтобы из списка отборов найти отбор по менеджерам, затем установить для него нужное значение и убрать его из быстрого доступа. Для реализации последнего необходимо “затереть” идентификатор пользовательской настройки данного отбора. Ниже приведен код процедуры:

Процедура УстановитьНастройкиОтбора()

	ОтборПоМенеджерамДоступен = УС_УправлениеДоступом.ПользователюДоступенОтборПоМенеджерамПоПродажам(Пользователи.ТекущийПользователь());

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

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

Ну а на этом все, вам также может быть интересно:

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *