gifts2017

[Расширения] Отборы в динамических списках

Опубликовал Oleg Kasyan (OlegK) в раздел Программирование - Практика программирования

Часто на практике возникают ситуации, когда в 1С 8.3 нужно настроить доступ к колонкам динамического списка по определенным критериям (нужно так настроить доступ, чтобы пользователь видел только то, что ему разрешено и не имел возможности изменить эти настройки). Но конфигурация стоит на поддержке и менять ничего нельзя. Предлагаемый пример показывает, как можно с помощью механизма расширений управлять отборами в динамических списках*.

* В дополнение к механизму http://infostart.ru/public/437760/ "Динамическое управление видимостью и доступностью элементов форм"

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

Для каждого из двух "видов" динамических списков отборы устанавливаются по-разному:

1. Для обычного динамического списка: добавить условие с параметром отбора;

Пример: в списке товаров показывать только позиции с остатком больше 10

ТекстУсловия = " ГдеТоварыНаСкладеОстаток.КоличествоОстаток > 10";
Список.ТекстЗапроса= Список.ТекстЗапроса + ТекстУсловия;

2. Для динамичского списка с произвольным запросом: используется свойство Отбор.

Для простых условий используется тип данных ЭлементОтбораКомпоновкиДанных:

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

Для сложных условий используется тип данных ГруппаЭлементовОтбораКомпоновкиДанных:

ГруппаОтбора = Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;

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

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

Одно расширение (Расширение1.cfe) демонстрирует отбор для обычного динамического списка (форма списка номенклатуры - фильтр по остаткам), второе (Расширение2.cfe) - отбор для динамического списка с произвольным запросом (форма списка документов Поступление товаров - фильтр по контрагенту).

В архив входят: дамп демо-базы 1С (закрытой от изменений) и два расширения.

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

Наименование Файл Версия Размер
Отборы в динамических списках с использованием механизма расширений 8
.zip 130,28Kb
21.05.16
8
.zip v.1 130,28Kb Скачать

См. также

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

Комментарии

1. Алексей Ермилов (Alex_E) 25.05.16 08:33
Ещё - Настроить список наверное не катит? Пошто расширение непонятно, но...)))
2. Oleg Kasyan (OlegK) 25.05.16 16:59
Если нужно запретить саму возможность настраивать пользователю доступность и видимость колонок, то - не катит
3. Алексей Ермилов (Alex_E) 25.05.16 17:02
(2) OlegK, Прикольно, но настроить любой список в любой конфигурации разрешено по умолчанию, для чего нужна Ваша разработка маненько непонятно...
4. Oleg Kasyan (OlegK) 25.05.16 17:21
Ок, для тех, кто не понял идею, откорректирую описание. Но ещё раз поясню - часто на практике нужно так настроить доступ, чтобы пользователь видел только то, что ему разрешено. Т. е. настроить для кого-то определенным способом набор колонок (полей). И, чтобы пользователь не имел возможности изменить эти настройки.
5. Алексей Ермилов (Alex_E) 25.05.16 18:16
упс, это настройка доступа...не внял...пусть будет так)))))
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа