Консультация № 145851
03.10.2008, 09:03
0.00 руб.
0 16 4
8.1 У меня есть некий документ "Продажа" у которого есть реквизит "Ответственный" типа "Справочник.Пользователи". У элементов этого справочника есть реквизит "Бригада" типа "Справочник.Подразделения".
Я хочу что бы каждый пользователь в списке этих документов видел только продажи своей бригады, т.е. при открытии мне нужно установить некий отбор. Как мне это сделать? Добавлять в документ еще один реквизит "Бригада" не хочется,

Обсуждение

Неизвестный
03.10.2008, 09:51
общий
это ответ
Здравствуйте, Маргарита!

Используйте метод списка документов Отбор. Пример для отбора документов одного вида:
Код:
 ЖурналДокументовСписок.Отбор.ВидДокумента.Установить(Метаданные.Документы.ПриемНаРаботу);  

Соответственно, установить отбор по реквизиту документа.
Следующий код поможет выяснить, какие отборы установлены в журнале:
Код:
 СтруктураОтборов = Новый Структура; 
СтруктураПараметровОтбора = Новый Структура;

Для Каждого ЭлементОтбора из ЖурналДокументовСписок.Отбор Цикл
Если ЭлементОтбора.Использование Тогда
СтруктураПараметровОтбора.Очистить();
СтруктураПараметровОтбора.Вставить("Имя", ЭлементОтбора.Имя);
СтруктураПараметровОтбора.Вставить("ВидСравнения", ЭлементОтбора.ВидСравнения);
СтруктураПараметровОтбора.Вставить("Значение", ЭлементОтбора.Значение);
СтруктураПараметровОтбора.Вставить("ЗначениеПо", ЭлементОтбора.ЗначениеПо);
СтруктураПараметровОтбора.Вставить("ЗначениеС", ЭлементОтбора.ЗначениеС);
СтруктураПараметровОтбора.Вставить("Представление", ЭлементОтбора.Представление);
СтруктураПараметровОтбора.Вставить("ПутьКДанным", ЭлементОтбора.ПутьКДанным);
СтруктураПараметровОтбора.Вставить("ТипЗначения", ЭлементОтбора.ТипЗначения);

СтруктураОтборов.Вставить(ЭлементОтбора.Имя, СтруктураПараметровОтбора);
КонецЕсли;
КонецЦикла;


Успехов!
Владимир.
Неизвестный
03.10.2008, 10:28
общий
К сожалению ваш ответ не относится к описанной проблеме, т.к. отбор надо делать не по реквизиту документа, а по некоему полю этого реквизита и естественно этого нет в доступных отборах.
Неизвестный
03.10.2008, 11:08
общий
Либо вы создаете реквизит и отбор по нему, либо не создаете реквизит и не получаете возможности отбора.
Разве что сами создадите обработку, которая будет отбирать нужные документы.
Неизвестный
03.10.2008, 11:49
общий
07.09.2009, 10:36
это ответ
Посмотрите статью на ИТС "Управление видимостью ячеек табличного поля"
Неизвестный
03.10.2008, 12:07
общий
мысль дельная. я сама к ней пришла, но питала надежду, что все же можно сделать иначе как-то...
Неизвестный
03.10.2008, 12:51
общий
Вам виднее... А сам отбор по реквизиту документа в конфигураторе установлен?
Неизвестный
03.10.2008, 18:43
общий
Увы, не до конца понял вопрос.
Неизвестный
04.10.2008, 15:15
общий
это ответ
Здравствуйте, Маргарита!
Можно сделать. Для ограничения прав существует объект конфигурации - Роль.
В Роли можно прописать фильтр на чтение документов этого вида.
У галочки чтение нужно написать запрос. В нем соединение 2х таблиц: документа Продажа и справочника пользователи, по условию Пользователи.ССылка= ТекущийПользователь, а текущий пользователь - параметр сеанса, после этого на закладке условия нужно написать условие, что продажа.бригада=пользователь.бригада.
давно
Студент
218854
56
06.10.2008, 07:19
общий
это ответ
Здравствуйте, Маргарита!
Если я правильно поняла, то "Бригада" есть группа справочника "Пользователи". Значит можно использовать отбор реквизита "Ответственный" "В группе". Остается вопрос в получении бригады текущего пользователя.
Пусть глТекущийПользователь (параметр сеанса) есть текущий пользователь БД.
Тогда Бригада = глТекущийПользователь.Бригада. Ну и отбор по реквизиту "Ответственный" с видом отбора "В группе"

Приложение:
Бригада = глТекущийПользователь.Бригада;
ОтборБригада = ЖурналДокументовСписок.Отбор.Найти("Ответственный");
ОтборБригада.Значение = Бригада;
ОтборБригада.ВидСравнения = ВидСравнения.ВИерархии;
ОтборБригада.Использовать = Истина;
Неизвестный
06.10.2008, 09:06
общий
Странно. Никого не хочу обидеть, НО создалось такое впечатление, что бросаются отвечать не прочитав внимательно вопроса. Видимо просто увидев знакомые словаИли может этио я не сумела понятно сформулировать вопрос?
Как можно было из моего вопроса предположить что ""Бригада" есть группа справочника "Пользователи""? Из чего можно можно было предположить что можно просто использовать отбор? Но все равно всем благодарна! Были интересные и полезные советы!
Неизвестный
06.10.2008, 11:53
общий
Тогда нужно создать свою обработку, которая тупо перебирает документы за заданный период и в список на своей форме выдаёт те, у которых совпадают условия - пользователь (его родитель в справочнике пользователей) и реквизит, указанный в шапке документа. Правильно понял?
Неизвестный
06.10.2008, 13:16
общий
где-то так... Правда тогда введенный другим документ не сразу отобразится в списке или же надо делатьь оповещение о событии. Вобщем схема реализуемая, но довольно сложная. Решила пока обойтись добавлением реквизита "Бригада" в документ "Продажа" Ну и заполнять его, не отображая на форме, при изменении ответственного.
Неизвестный
06.10.2008, 13:18
общий
Правда теперь все усложнилось - теперь стало нужно фильтровать удже не по бигаде, а по исполнителям, указанным в табличной части продажиВидимо буду делать запрос, получать все доки, в которых ткекущий пользователь помянут исполнителем и накладывать отбор по попаданию документа в этот список.
Неизвестный
06.10.2008, 15:06
общий
Точно - раз еще пересматривать еще табличную часть документа, то Вам нужно не в форме списка документов делать отбор, а в отчете или выгружать результаты запроса в табличное поле на форме обработки (отчета).

От правильно сформулированного ТЗ зависит способ решения ;)
Неизвестный
06.10.2008, 20:41
общий
Если есть желание сделать именно отбором, установленным программно, то отбор можно сделать, например по номеру документа, предварительно выбрав запросом соответствующие номера.
Неизвестный
07.10.2008, 10:08
общий
А можно и не по номеру а по списку ссылокВо всяком случае так универсальнее - не зависит от наличия и уникальности номера. СписокДокументов.Отбор.Ссылка - работает.
Форма ответа