|
Отбор в форме списка регистра сведений | ☑ | ||
---|---|---|---|---|
0
TIGER1c
28.06.16
✎
13:01
|
Всем привет!
Имеется регистрСведений "Задания" с полями: Пользователь, Задание, дата и т.д. Необходимо чтобы при открытии формы производился отбор по пользователю БД и выводились задания, соответствующие только данному пользователю. Форма управляемая. Как прописать отбор в данном случае? |
|||
1
Радим1987
28.06.16
✎
13:07
|
Динамический список?
|
|||
2
TIGER1c
28.06.16
✎
13:11
|
(1) а поточнее
|
|||
3
Mankubus
28.06.16
✎
13:19
|
(2) При открытии формы добавляй отбор в дин.список
|
|||
4
TIGER1c
29.06.16
✎
12:48
|
А как передать туда параметр, который будет содержать пользователя. Или я что-то не верно понимаю?
|
|||
5
TIGER1c
29.06.16
✎
12:59
|
апп
|
|||
6
aleks_default
29.06.16
✎
13:00
|
читай про УстановитьЗначениеПараметра()
|
|||
7
Cyberhawk
29.06.16
✎
13:02
|
ОткрытьФорму
|
|||
8
TIGER1c
29.06.16
✎
15:38
|
(7) какое отношение имеет к дин списку?
|
|||
9
TIGER1c
29.06.16
✎
15:38
|
(6) тоже не понял куда это
|
|||
10
aleks_default
29.06.16
✎
15:48
|
(9) ну нет, так нет
|
|||
11
TIGER1c
29.06.16
✎
15:58
|
Есть еще знающие?
|
|||
12
Nuobu
29.06.16
✎
15:59
|
(11) Я знающий!
УФ или ОФ? |
|||
13
TIGER1c
29.06.16
✎
16:00
|
(12) УФ
|
|||
14
Euguln
29.06.16
✎
16:00
|
(11) А подсмотреть в конфигурации не судьба?
|
|||
15
Nuobu
29.06.16
✎
16:02
|
(13) Зайди в форму и глянь, там динамический список используется?
|
|||
16
hhhh
29.06.16
✎
16:15
|
(13) всё же уже сказали. Волшебный пендель еще какой-то нужен?
Список.Параметры.УстановитьЗначениеПараметра("ДатаНач", НачалоДня(ТекущаяДата())); Список.Параметры.УстановитьЗначениеПараметра("ДатаКон", КонецДня(ТекущаяДата())); |
|||
17
Cyberhawk
29.06.16
✎
17:14
|
(8) "Необходимо чтобы при открытии формы производился отбор" в (0)
|
|||
18
TIGER1c
30.06.16
✎
09:00
|
(15) Используется
|
|||
19
TIGER1c
30.06.16
✎
09:05
|
(16) Ну вот открываю я настройку списка, вкладка отбор, вижу доступные поля, выбираю "сотрудник", надо указать чему оно равно. Ну и в моем распоряжении только реквизиты моего регистра.
куда это? В модуль формы, в процедуру при открытии? |
|||
20
TIGER1c
30.06.16
✎
09:11
|
(17) не понимаю зачем. Форма открывается вызовом пользователя. Зачем её открывать программно?
|
|||
21
Nuobu
30.06.16
✎
09:13
|
(19) В процедуру "ПриОткрытии".
|
|||
22
TIGER1c
30.06.16
✎
09:50
|
Сделал в произвольном запросе, но вот проблема, как настроить админу, который должен видеть всё и всех
|
|||
23
TIGER1c
30.06.16
✎
09:51
|
Ведь параметр то жестко прописан в форме, условие в модуле тут не поможет
|
|||
24
Nuobu
30.06.16
✎
10:05
|
(23) Два параметра!
|
|||
25
Cyberhawk
30.06.16
✎
10:08
|
(20) Что "зачем"?
|
|||
26
Fedor-1971
30.06.16
✎
10:17
|
(22) вот тебе на выбор:
1. Динамическое формирование текста запроса в ПрисозданииНаСервере, примерно такое: Список.ТекстЗапроса=Список.ТекстЗапроса+?(РольДоступна(Метаданные.Роли.Администратор, "", "Остальным напиши: Где Пользователь=&текПользватель"); Только тебе видно какой у тебя запрос в ДС. 2. Как вариант: Где Пользователь=&текПользватель ИЛИ &Админ - для сложных запросов в ДС не годится, могут подтормаживать 3. Отборы - настраиваешь отбор ДС делаешь его не активным, в ПриСозданииНаСервере определяешь роль вошедшего, или как-то идентифицируешь админов и включаешь отбор не админам. |
|||
27
Aleksandr N
30.06.16
✎
10:18
|
ОткрытьФорму()
В параметрах открытия указываешь параметр "Отбор" - тип "Структура" И не надо никаких великов изобретать. |
|||
28
Aleksandr N
30.06.16
✎
10:21
|
Отбор = Новый Структура("Пользователь", <Пользователь>);
ОткрытьФорму(<ИмяФормы>, Новый Структура("Отбор", Отбор)); |
|||
29
Fedor-1971
30.06.16
✎
10:22
|
(27) тут ТС выбирать, извернуться в открываемой форме - универсальное решение или передать параметры - придётся извращаться в месте открытия оной, например, в системном меню.
|
|||
30
Fedor-1971
30.06.16
✎
10:23
|
(28) а как же админы?
|
|||
31
Aleksandr N
30.06.16
✎
10:23
|
(30) В смысле?
|
|||
32
Fedor-1971
30.06.16
✎
10:25
|
(31) твой отбор сработает и для админов, а они ничего не создавали, но должны видеть все записи
|
|||
33
Aleksandr N
30.06.16
✎
10:25
|
(29) В открываемой форме при использовании (28) ничего писать при этом не надо.
|
|||
34
Aleksandr N
30.06.16
✎
10:26
|
(32) ОК:
Если ЭтоНеАдмин Тогда Отбор = Новый Структура("Пользователь", <Пользователь>); ОткрытьФорму(<ИмяФормы>, Новый Структура("Отбор", Отбор)); Иначе ПростоТупоОткрытьФорму(); КонецЕсли; |
|||
35
Fedor-1971
30.06.16
✎
10:27
|
(34) да, а как будешь передавать параметры открытия формы из системного интерфейса
|
|||
36
Fedor-1971
30.06.16
✎
10:28
|
35+ про это то-же не надо забывать, ТС не озвучил как он открывает форму своего списка
|
|||
37
Aleksandr N
30.06.16
✎
10:31
|
(36) Не понятно.
|
|||
38
Fedor-1971
30.06.16
✎
10:41
|
(37) в (34)козырное решение для формы выбора - можем рулить как хотим, а для основного списка не всегда пригодно.
На мой личный взгляд, проще всё замкнуть в рамках самой формы, а не в рамках её открытия, если что-то изменяется в условиях отбора, не придётся шариться по всей конфигурации выясняя где мы вызывали открытие, что-бы установить новые условия работы механизма отбора |
|||
39
TIGER1c
30.06.16
✎
10:45
|
(26) (28) Спасибо! Пробую делать по совету (26) 1.
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Список.Параметры.УстановитьЗначениеПараметра("ТекПользователь", ПользователиИнформационнойБазы.ТекущийПользователь().Имя); //ТекПользователь = ПользователиИнформационнойБазы.ТекущийПользователь().Имя; Список.ТекстЗапроса=Список.ТекстЗапроса+?(РольДоступна(Метаданные.Роли.ПолныеПрава), "", " ГДЕ РегистрСведенийЗаданияИПоручения.Сотрудник.Наименование = &ТекПользователь"); КонецПроцедуры Для админа все ок. А когда обычный пользователь, то пробелма с параметром |
|||
40
Fedor-1971
30.06.16
✎
11:19
|
(39) строки местами поменяй. Сначала изменяем текст запроса, потом устанавливаем параметр. Особенность ДС - при установке параметра проверяется его наличие в запросе
|
|||
41
TIGER1c
30.06.16
✎
12:13
|
(40) Спасибо большое! Помог неучу =) Всё получилось. Приложу на всякий случай свой быдлоКод
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Список.ТекстЗапроса=Список.ТекстЗапроса+?(РольДоступна(Метаданные.Роли.ПолныеПрава), "", " ГДЕ РегистрСведенийЗаданияИПоручения.Сотрудник.Наименование = &ТекПользователь"); Если Не РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда Список.Параметры.УстановитьЗначениеПараметра("ТекПользователь", ПользователиИнформационнойБазы.ТекущийПользователь().Имя); КонецЕсли; КонецПроцедуры |
|||
42
Fedor-1971
30.06.16
✎
12:26
|
(41) Вот тебе направление совершенствования:
1.сделай ПараметрСеанса.ТекущийПользователь, 2.заполни его ссылкой на справочник Пользователи при старте 1С 3.используй оный в запросах для сравнение ссылок, а не строк наименований |
|||
43
TIGER1c
30.06.16
✎
12:30
|
(42) да, сравнивать строки как-то не кошерно
|
|||
44
Fedor-1971
30.06.16
✎
12:47
|
42+ Посмотри в сторону оптимизации кода:
Если Не РольДоступна(Метаданные.Роли.ПолныеПрава) Тогда Список.ТекстЗапроса=Список.ТекстЗапроса+" ГДЕ РегистрСведенийЗаданияИПоручения.Сотрудник.Наименование = &ТекПользователь"; Список.Параметры.УстановитьЗначениеПараметра("ТекПользователь", ПользователиИнформационнойБазы.ТекущийПользователь().Имя); КонецЕсли; Функции дёргай по возможности один раз, чай время тратится |
|||
45
aleks_default
30.06.16
✎
14:25
|
(41)Лучше сделай в тексте запроса такое условие
ГДЕ ВЫБОР КОГДА &ЭтоАдмин ТОГДА ИСТИНА ИНАЧЕ РегистрСведенийЗаданияИПоручения.Сотрудник.Наименование = &ТекПользователь КОНЕЦ И передавай два параметра: ТекПользователь и ЭтоАдмин = РольДоступна(Метаданные.Роли.ПолныеПрава). А то при изменении текста запроса всякие пользовательские отборы слетают. |
|||
46
Renat11111
30.06.16
✎
14:54
|
РегистрСведенийЗаданияИПоручения.Сотрудник.Наименование = &ТекПользователь
Ты крут. |
|||
47
Fedor-1971
30.06.16
✎
14:56
|
(45) Текст запроса меняется в ПриСозданииНаСервере там ещё нет отборов, они наложатся позже. Может и ошибаюсь.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |