Обращение к реквизиту в формеСписка документа (ОБЫЧНОЕ ПРИЛОЖЕНИЕ)

1. Johney20 18.02.18 19:43 Сейчас в теме
Ребят, с обычными формами не работаю, а ту пришлось. Не могу понять, как мне найти Исполнителя?
А именно, мне нужно сравнить Исполнителя в документе с текущим пользователем, и если они совпадают, тогда видимость для того документа сделать истиной, иначе ложью. Вот не получается что-то обратиться к этому исполнителю.

Скриншот формы списка приложила.

Вот что у меня пока получается:

Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель;
	Объект = ЭлементыФормы.ДокументСписок.Видимость;
	
	Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда
		Объект = Истина;
	Иначе
		Объект = Ложь;
	КонецЕсли;
Показать
Прикрепленные файлы:
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
19. BackinSoda 05.03.18 14:10 Сейчас в теме
(1) В ПриОткрытии прописываете 1 строку и всё
ДокументСписок.Отбор.Исполнитель.Установить(ПараметрыСеанса.ТекущийПользователь);
+
2. vasilev2015 2696 18.02.18 21:25 Сейчас в теме
Здравствуйте !

Проверьте в отладчике:

Будет ли определено ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель если колонка "исполнитель" в списке отсутствует из-за ручной настройки ?

Типы данных Исполнитель = ПараметрыСеанса.ТекущийПользователь совпадают ?

Не используйте служебное Объект для переменных, пишите напрямую
ЭлементыФормы.ДокументСписок.Видимость = Истина (Ложь)

Учтите, что управляете видимостью всего списка. Это неверно.

Таким способом скрыть документ не удастся. Используйте отборы.
+
3. Johney20 18.02.18 21:42 Сейчас в теме
(2) Нет, данная конструкция не определена в отладчике.
Насчет типов - нет, не совпадают. У параметра сеанса "ТкеущийПользователь" , тип - спр.Пользователи, а у "Исполнителя - составной тип, спр.Пользователи и спр.Сотрудники.


Я предполагала, что скроется весь список документов, но туда еще не дошла, пока исполнителя не получу. Спасибо. Отборами просто не приходилось пользоваться, буду разбираться, как их установить программно.

И как же все-таки мне обратиться к этому исполнителю???

Не совсем поняла, что Вы хотели сказать: "если колонка "исполнитель" в списке отсутствует из-за ручной настройки ? "
+
4. Johney20 18.02.18 21:53 Сейчас в теме
(2) Отбор ставится таким образом??

        Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные;
	
	Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда
		ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель = ПараметрыСеанса.ТекущийПользователь;
        ЭлементыФормы.ДокументСписок.Видимость = Истина;
	Иначе
		ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель = ПараметрыСеанса.ТекущийПользователь;
        ЭлементыФормы.ДокументСписок.Видимость = Ложь;
	КонецЕсли;
Показать
+
5. Vix 28 19.02.18 01:39 Сейчас в теме
(4)
Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель;

 Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда
        ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.Использование = ИСТИНА; 
        ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.ВидСравнения  = ВидСравнения.Равно; 
        ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.Значение = ПараметрыСеанса.ТекущийПользователь;
        ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
 Иначе
        ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.Использование = ЛОЖЬ; 
        ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
 КонецЕсли;
Показать
+
6. Johney20 19.02.18 03:34 Сейчас в теме
(5) "Значение не является значением объектного типа"

Он не видит через текущие данные исполнителя. В этом то и проблема. Вопрос как раз и заключается в том, как мне найти исполнителя(
+
7. Johney20 19.02.18 03:35 Сейчас в теме
(5) И код немного поменяла. Это обычное приложение.





       Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель;	
       Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда 
		ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ИСТИНА; 
		ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.ВидСравнения = ВидСравнения.Равно; 
		ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Значение = ПараметрыСеанса.ТекущийПользователь; 
		ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ; 
	Иначе 
		ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ЛОЖЬ; 
		ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ; 
	КонецЕсли;
Показать
+
8. catena 110 19.02.18 05:12 Сейчас в теме
В каком месте написан этот код? Так-то, текущие данные не всегда определены.

текСтр = ЭлементыФормы.ДокументСписок.ТекущиеДанные;
Если текСтр<>Неопределено Тогда
         Исполнитель = ТекСтр.Исполнитель;
КонецЕсли;


(7) И отбор и видимость? Может оставить что-то одно?

А вообще странная задача. Скрыть список, если пользователь ткнул не в свой документ?
+
9. Johney20 19.02.18 18:56 Сейчас в теме
(8) Код в модуле формы списка документа в процедуре ПриОткрытии;
Через ЭлементыФормы.ДокументСписок.ТекущиеДанные не получает исполнителя, я ВСЕГДА получаю НЕОПРЕДЕЛЕНО. Вот в этом и прблема.

И отбор и видимость? Может оставить что-то одно? - смысл задачи в том, что пользователь, открыв список документов, должен увидеть ТОЛЬКО те, где он является исполнителем.

Еще момент. У параметра сеанса "ТкеущийПользователь" , тип - спр.Пользователи, а у "Исполнителя - составной тип, спр.Пользователи и спр.Сотрудники. Это же наверняка каким-то образом повлияет, правильно?
+
11. independ 1520 19.02.18 19:06 Сейчас в теме
(9) динамический список в ОФ? Нужно скрыть строки по условию? Тогда достаточно в ПриОткрытии()
		Отбор.Исполнитель.ВидСравнения = ВидСравнения.НеРавно;
		Отбор.Исполнитель.Значение =  ПараметрыСеанса.ТекущийПользователь;
		Отбор.Исполнитель.Использование = Истина;
Garik8866; catena; +2
14. Johney20 05.03.18 12:19 Сейчас в теме
(11) Не достаточно. Он не делает отбор. Захожу под разными пользователями, все равно вижу документы других.
+
15. catena 110 05.03.18 12:22 Сейчас в теме
(14) Чудес не бывает. Не ту форму открываете, не туда отбор накладываете. Проверяйте отладчиком.
+
16. spacecraft 05.03.18 13:50 Сейчас в теме
(14) там должно быть "Отбор.Исполнитель.ВидСравнения = ВидСравнения.Равно;"
При НеРавно он и будет видеть только документы других.
+
17. Johney20 05.03.18 14:06 Сейчас в теме
(16) Да, но он видит и свои и других
+
18. spacecraft 05.03.18 14:09 Сейчас в теме
(17) давайте полный листинг процедуры ПриОткрытии
+
20. Johney20 05.03.18 14:40 Сейчас в теме
(18)
Процедура ПриОткрытии()
	ВидимостьЭлементовЭД();
	
		
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ПЛ_ПользователиИБ.Сотрудник
	               |ИЗ
	               |	РегистрСведений.ПЛ_ПользователиИБ КАК ПЛ_ПользователиИБ
	               |ГДЕ
	               |	ПЛ_ПользователиИБ.Пользователь = &Пользователь";
	Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
	
	Если НЕ РольДоступна("ПолныеПрава") Тогда
		Отбор.Исполнитель.ВидСравнения = ВидСравнения.Равно;
		Отбор.Исполнитель.Значение = Выборка.Сотрудник;
		Отбор.Исполнитель.Использование = Истина;
	КонецЕсли;
	
	КонецЦикла;
 
	
КонецПроцедуры
Показать
+
21. spacecraft 05.03.18 17:04 Сейчас в теме
(20) если дописать:
Пока Выборка.Следующий() Цикл
    Сообщить(Выборка.Сотрудник);
...

Что выводит?
+
13. Vix 28 22.02.18 11:47 Сейчас в теме
(7) он и не найдет исполнителя, пока строка не будет активирована, при открытии формы, она у вас не активна. Получается так, что в таб части у вас может быть много исполнителей разных, если вы будите перебирать строки, то и смысл накладывать фильтр? может просто наложить фильтр по текущему пользователю? При открытии формы срабатывает ОбновлениеОтображения, там можете сделать свои действия, но я не пойму зачем бежать по списку и его фильтровать, если пользователи в таб части будут разные
+
10. Johney20 19.02.18 19:01 Сейчас в теме
Немного исправила структура и код, чтобы избежать проблему с разными типами.

ТекСтр = ЭлементыФормы.ДокументСписок.ТекущиеДанные; 
	Если текСтр<>Неопределено Тогда 
		Исполнитель = ТекСтр.Исполнитель; 
	КонецЕсли; 	
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ПЛ_ПользователиИБ.Сотрудник,
	               |	ПЛ_ПользователиИБ.Пользователь
	               |ИЗ
	               |	РегистрСведений.ПЛ_ПользователиИБ КАК ПЛ_ПользователиИБ
	               |ГДЕ
	               |	ПЛ_ПользователиИБ.Пользователь = &Пользователь";
	Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		Если Исполнитель = Выборка.Сотрудник Тогда 
			ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ИСТИНА; 
			ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.ВидСравнения = ВидСравнения.Равно; 
			ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Значение = ПараметрыСеанса.ТекущийПользователь;  //Выборка.Сотрудник
			ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ; 
		Иначе 
			ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ЛОЖЬ; 
			ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ; 
		КонецЕсли;
		
	КонецЦикла;
Показать
+
12. catena 110 20.02.18 05:26 Сейчас в теме
ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;

Тут вы пытаетесь скрыть весь список документов. Само поле со списком.

Если Исполнитель = Выборка.Сотрудник Тогда

Для чего это условие? Отбор сам по себе проверит каждую строчку. Вам вообще не нужна текущая строка. Отбор работает одинаково, хоть в ОФ, хоть в УФ, хоть в Африке. Вам не нужен доступ к полям списка, вам не нужно определять текущие данные, вам нужно просто установить отбор.

Код в модуле формы списка документа в процедуре ПриОткрытии;
Через ЭлементыФормы.ДокументСписок.ТекущиеДанные не получает исполнителя, я ВСЕГДА получаю НЕОПРЕДЕЛЕНО

Что логично в приОткрытии, ведь текущиеДанные являются текущими только если в поле списка активирована строка.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот