Имя: Пароль:
1C
1С v8
Отбор в форме списка регистра сведений
, ,
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) Текст запроса меняется в ПриСозданииНаСервере там ещё нет отборов, они наложатся позже. Может и ошибаюсь.