Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Фильтр формы списка документов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Constantus
Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Для ограничения просмотра некоторых документов, например, Реализация, на код при открытии повесил следующее:

    ЭтаФорма.Отбор.Склад.Использование=Истина;
    ЭлементыФормы.Список.Значение.Отбор.Склад.ВидСравнения = ВидСравнения.ВСписке;
    ЭлементыФормы.Список.НастройкаОтбора.Склад.Доступность = Ложь;
............................
    ЭтаФорма.Отбор.Склад.Значение = СписокДокументов;


Где "СписокДокументов", т.е. доступных для просмотра складов...

Код работает исправно. Список открывается с нужными фильтрами, и изменить список доступных складов в форме Отбора и сортировки - невозможно...

Но вот столкнулся с такой ситуацией...
Предположим имеется 10 складов, из них только 3-м складам имеется допуск... В результате я вижу только те Реализации, где присутствуют те 3-и элитных склада.

Но вот теперь пользователю хочется отфильтровать Реализации по одному из этих складов, а доступ к редактированию списка доступных складов закрыт.
Если снять доступность, т.е. сделать её редактируемой, то легким движением руки список превращается в желтую прессу доступной по всем складам.

Можно ли сделать так, чтобы на форме "Отбор и сортировка" поле значения складов осталось редактируемым, несмотря на то, что доступность = ложь?

Bernet
Constantus @ Сегодня, 15:04 необходимо зарегистрироваться для просмотра ссылки ,
Это извращения, используйте RLS - Record Level Security или ограничение прав на уровне записи
Flexy
Омг...Противоречивая логика...
Цитата(Constantus @ 20.04.17, 14:04) необходимо зарегистрироваться для просмотра ссылки
Для ограничения просмотра некоторых документов, например, Реализация
...
Код работает исправно. Список открывается с нужными фильтрами, и изменить список доступных складов в форме Отбора и сортировки - невозможно...
....
Можно ли сделать так, чтобы на форме "Отбор и сортировка" поле значения складов осталось редактируемым, несмотря на то, что доступность = ложь?

Конечно можно. Но это костыль... Юзайте RLS или рисуйте свою, произвольную форму и пишите в ней свою логику.
Завтра юзер захочет так же фильтронуть / сортонуть список перемещений или заказов или еще чего...Что будете все формы перепиливать?
Constantus
Flexy @ Сегодня, 17:37 необходимо зарегистрироваться для просмотра ссылки ,


РЛС это возможно и хорошо, но я пробовал РЛС... у меня доступны ограничения только по Организации и Контрагентам... Подскажите как делать ограничения на уровне складов?
Тем более мне предстоит ограничивать еще и по Кассам...

Где и как в "Группу пользователей" в раздел "Вид объекта доступа" добавить Склад и Касса?

Блин "Вид объекта доступа" оказывается Перечисления... там только 2-а значения стоят
Flexy
Constantus @ Сегодня, 15:09 необходимо зарегистрироваться для просмотра ссылки ,
Варианты:
1. Делать по аналогии, как реализовано с Контрагентами и Организациями.
2. Сделать свой регистр сведений (Пользователь, ОбъектДоступа, Значение) + свой запрос RLS к этому регистру в нужных таблицах на нужные поля.
Vofka
Попробуйте в форме выбора справочника Склады обработать событие Выбор списка и там проверять есть ли доступ у пользователя к выбираемому складу. Если нету, то СтандартнаяОбработка = Ложь и "хорошего вам настроения". Если это работает, то можно сделать отбор доступным, т.к. пользователь все равно ничего лишнего туда выбрать не сможет.
Constantus
Vofka @ Вчера, 19:02 необходимо зарегистрироваться для просмотра ссылки ,

Честно сказать не понял как это реализовать. Сделал по-другому. Разместил на форме списка ПолеВыбора, куда в качестве источника прописал все доступные склады + "все доступные"... Вот код

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

    КонецЕсли;    
    
    КонецЕсли;
    

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


К сожалению, в код вписался излишек, это еще один запрос...

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


По задумке "Скл" это ссылка на склад для подстановки в:

ЭтаФорма.Отбор.Склад.Значение = Скл;


Но выдает ошибку о несоответствии типов...

Как из Полявыбора с произвольным типом можно получить нужный тип, чтобы активировать фильтр по складу:
ЭтаФорма.Отбор.Склад.Значение = Скл;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.