Обращение к реквизиту в формеСписка документа (ОБЫЧНОЕ ПРИЛОЖЕНИЕ)
Ребят, с обычными формами не работаю, а ту пришлось. Не могу понять, как мне найти Исполнителя?
А именно, мне нужно сравнить Исполнителя в документе с текущим пользователем, и если они совпадают, тогда видимость для того документа сделать истиной, иначе ложью. Вот не получается что-то обратиться к этому исполнителю.
Скриншот формы списка приложила.
Вот что у меня пока получается:
А именно, мне нужно сравнить Исполнителя в документе с текущим пользователем, и если они совпадают, тогда видимость для того документа сделать истиной, иначе ложью. Вот не получается что-то обратиться к этому исполнителю.
Скриншот формы списка приложила.
Вот что у меня пока получается:
Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель;
Объект = ЭлементыФормы.ДокументСписок.Видимость;
Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда
Объект = Истина;
Иначе
Объект = Ложь;
КонецЕсли;
ПоказатьПрикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Здравствуйте !
Проверьте в отладчике:
Будет ли определено ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель если колонка "исполнитель" в списке отсутствует из-за ручной настройки ?
Типы данных Исполнитель = ПараметрыСеанса.ТекущийПользователь совпадают ?
Не используйте служебное Объект для переменных, пишите напрямую
Учтите, что управляете видимостью всего списка. Это неверно.
Таким способом скрыть документ не удастся. Используйте отборы.
Проверьте в отладчике:
Будет ли определено ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель если колонка "исполнитель" в списке отсутствует из-за ручной настройки ?
Типы данных Исполнитель = ПараметрыСеанса.ТекущийПользователь совпадают ?
Не используйте служебное Объект для переменных, пишите напрямую
ЭлементыФормы.ДокументСписок.Видимость = Истина (Ложь)
Учтите, что управляете видимостью всего списка. Это неверно.
Таким способом скрыть документ не удастся. Используйте отборы.
(2) Нет, данная конструкция не определена в отладчике.
Насчет типов - нет, не совпадают. У параметра сеанса "ТкеущийПользователь" , тип - спр.Пользователи, а у "Исполнителя - составной тип, спр.Пользователи и спр.Сотрудники.
Я предполагала, что скроется весь список документов, но туда еще не дошла, пока исполнителя не получу. Спасибо. Отборами просто не приходилось пользоваться, буду разбираться, как их установить программно.
И как же все-таки мне обратиться к этому исполнителю???
Не совсем поняла, что Вы хотели сказать: "если колонка "исполнитель" в списке отсутствует из-за ручной настройки ? "
Насчет типов - нет, не совпадают. У параметра сеанса "ТкеущийПользователь" , тип - спр.Пользователи, а у "Исполнителя - составной тип, спр.Пользователи и спр.Сотрудники.
Я предполагала, что скроется весь список документов, но туда еще не дошла, пока исполнителя не получу. Спасибо. Отборами просто не приходилось пользоваться, буду разбираться, как их установить программно.
И как же все-таки мне обратиться к этому исполнителю???
Не совсем поняла, что Вы хотели сказать: "если колонка "исполнитель" в списке отсутствует из-за ручной настройки ? "
(2) Отбор ставится таким образом??
Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные;
Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель = ПараметрыСеанса.ТекущийПользователь;
ЭлементыФормы.ДокументСписок.Видимость = Истина;
Иначе
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель = ПараметрыСеанса.ТекущийПользователь;
ЭлементыФормы.ДокументСписок.Видимость = Ложь;
КонецЕсли;
Показать
(4)
Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель;
Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда
ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.Использование = ИСТИНА;
ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.ВидСравнения = ВидСравнения.Равно;
ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.Значение = ПараметрыСеанса.ТекущийПользователь;
ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
Иначе
ЭлементыФормы.ДокументСписок.ОтборСтрок.Исполнитель.Использование = ЛОЖЬ;
ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
КонецЕсли;
Показать
(5) И код немного поменяла. Это обычное приложение.
Исполнитель = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Исполнитель;
Если Исполнитель = ПараметрыСеанса.ТекущийПользователь Тогда
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ИСТИНА;
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.ВидСравнения = ВидСравнения.Равно;
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Значение = ПараметрыСеанса.ТекущийПользователь;
ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
Иначе
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ЛОЖЬ;
ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
КонецЕсли;
Показать
В каком месте написан этот код? Так-то, текущие данные не всегда определены.
(7) И отбор и видимость? Может оставить что-то одно?
А вообще странная задача. Скрыть список, если пользователь ткнул не в свой документ?
текСтр = ЭлементыФормы.ДокументСписок.ТекущиеДанные;
Если текСтр<>Неопределено Тогда
Исполнитель = ТекСтр.Исполнитель;
КонецЕсли;
(7) И отбор и видимость? Может оставить что-то одно?
А вообще странная задача. Скрыть список, если пользователь ткнул не в свой документ?
(8) Код в модуле формы списка документа в процедуре ПриОткрытии;
Через ЭлементыФормы.ДокументСписок.ТекущиеДанные не получает исполнителя, я ВСЕГДА получаю НЕОПРЕДЕЛЕНО. Вот в этом и прблема.
И отбор и видимость? Может оставить что-то одно? - смысл задачи в том, что пользователь, открыв список документов, должен увидеть ТОЛЬКО те, где он является исполнителем.
Еще момент. У параметра сеанса "ТкеущийПользователь" , тип - спр.Пользователи, а у "Исполнителя - составной тип, спр.Пользователи и спр.Сотрудники. Это же наверняка каким-то образом повлияет, правильно?
Через ЭлементыФормы.ДокументСписок.ТекущиеДанные не получает исполнителя, я ВСЕГДА получаю НЕОПРЕДЕЛЕНО. Вот в этом и прблема.
И отбор и видимость? Может оставить что-то одно? - смысл задачи в том, что пользователь, открыв список документов, должен увидеть ТОЛЬКО те, где он является исполнителем.
Еще момент. У параметра сеанса "ТкеущийПользователь" , тип - спр.Пользователи, а у "Исполнителя - составной тип, спр.Пользователи и спр.Сотрудники. Это же наверняка каким-то образом повлияет, правильно?
(9) динамический список в ОФ? Нужно скрыть строки по условию? Тогда достаточно в ПриОткрытии()
Отбор.Исполнитель.ВидСравнения = ВидСравнения.НеРавно;
Отбор.Исполнитель.Значение = ПараметрыСеанса.ТекущийПользователь;
Отбор.Исполнитель.Использование = Истина;
(18)
Процедура ПриОткрытии()
ВидимостьЭлементовЭД();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПЛ_ПользователиИБ.Сотрудник
|ИЗ
| РегистрСведений.ПЛ_ПользователиИБ КАК ПЛ_ПользователиИБ
|ГДЕ
| ПЛ_ПользователиИБ.Пользователь = &Пользователь";
Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если НЕ РольДоступна("ПолныеПрава") Тогда
Отбор.Исполнитель.ВидСравнения = ВидСравнения.Равно;
Отбор.Исполнитель.Значение = Выборка.Сотрудник;
Отбор.Исполнитель.Использование = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
(7) он и не найдет исполнителя, пока строка не будет активирована, при открытии формы, она у вас не активна. Получается так, что в таб части у вас может быть много исполнителей разных, если вы будите перебирать строки, то и смысл накладывать фильтр? может просто наложить фильтр по текущему пользователю? При открытии формы срабатывает ОбновлениеОтображения, там можете сделать свои действия, но я не пойму зачем бежать по списку и его фильтровать, если пользователи в таб части будут разные
Немного исправила структура и код, чтобы избежать проблему с разными типами.
ТекСтр = ЭлементыФормы.ДокументСписок.ТекущиеДанные;
Если текСтр<>Неопределено Тогда
Исполнитель = ТекСтр.Исполнитель;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПЛ_ПользователиИБ.Сотрудник,
| ПЛ_ПользователиИБ.Пользователь
|ИЗ
| РегистрСведений.ПЛ_ПользователиИБ КАК ПЛ_ПользователиИБ
|ГДЕ
| ПЛ_ПользователиИБ.Пользователь = &Пользователь";
Запрос.УстановитьПараметр("Пользователь", ПараметрыСеанса.ТекущийПользователь);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Исполнитель = Выборка.Сотрудник Тогда
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ИСТИНА;
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.ВидСравнения = ВидСравнения.Равно;
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Значение = ПараметрыСеанса.ТекущийПользователь; //Выборка.Сотрудник
ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
Иначе
ЭлементыФормы.ДокументСписок.Значение.Отбор.Исполнитель.Использование = ЛОЖЬ;
ЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
КонецЕсли;
КонецЦикла;
ПоказатьЭлементыФормы.ДокументСписок.Видимость = ЛОЖЬ;
Тут вы пытаетесь скрыть весь список документов. Само поле со списком.
Если Исполнитель = Выборка.Сотрудник Тогда
Для чего это условие? Отбор сам по себе проверит каждую строчку. Вам вообще не нужна текущая строка. Отбор работает одинаково, хоть в ОФ, хоть в УФ, хоть в Африке. Вам не нужен доступ к полям списка, вам не нужно определять текущие данные, вам нужно просто установить отбор.
Код в модуле формы списка документа в процедуре ПриОткрытии;
Через ЭлементыФормы.ДокументСписок.ТекущиеДанные не получает исполнителя, я ВСЕГДА получаю НЕОПРЕДЕЛЕНО
Через ЭлементыФормы.ДокументСписок.ТекущиеДанные не получает исполнителя, я ВСЕГДА получаю НЕОПРЕДЕЛЕНО
Что логично в приОткрытии, ведь текущиеДанные являются текущими только если в поле списка активирована строка.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот