Отбор по текущему пользователю.

1. user1136603 11.03.19 10:22 Сейчас в теме
Надо сделать отбор по текущему пользователю, т.е. в документе находиться сотрудники(пользователи) и если он зашел не под этим пользователем, то он галку поставить не может. Например, согласующий "администратор", я зашел под пользователем "администратор", соответственно я могу поставить галку только у себя, другим не могу.
Кто знает как сделать это?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
25. oleg-x 26 11.03.19 15:34 Сейчас в теме
(24) Переписав код для работы на клиенте
&НаКлиенте
Процедура СогласующиеПередНачаломИзменения(Элемент, Отказ)

ТекПольз = фПолучитьТекущегоВользователяНаСервере();
ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
Если ТекСтрока.Согласующие <> ТекПольз Тогда
       Отказ = Истина;
КонецЕсли;

КонецПроцедуры
Показать
user1136603; +1 Ответить
19. oleg-x 26 11.03.19 14:43 Сейчас в теме
И код будет выглядеть примерно так:

ТекПольз = ПараметрыСеанса.ТекущийПользователь;
ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
Если ТекСтрока.Согласующие <> ТекПольз Тогда
       Отказ = Истина;
КонецЕсли;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. oleg-x 26 11.03.19 10:52 Сейчас в теме
Нужно прописать, что то вроде:
Если ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда
//Запретить менять.
КонецЕсли;

Более детально не напишу, так как не понятно, что это список или обработка. Открывается документ или через список изменение делается.
3. user1136603 11.03.19 10:58 Сейчас в теме
(2)Это документ, в котором добавлена вкладка эта, процедуру вызывается при изменении этой галки на сервере и клиенте.
5. SedovSU@mail.ru 297 11.03.19 11:02 Сейчас в теме
(3) Вам нужно поймать событие, если это флажки, то события у табличного поля ПриИзмененииФлажка,
alex-l19041; +1 Ответить
7. oleg-x 26 11.03.19 11:08 Сейчас в теме
(5) Не совсем, у УФ нет такого события, оно есть только на обычных формах и с галками по сложней работать, так как нет события при изменение.
8. alex-l19041 8 11.03.19 11:13 Сейчас в теме
(7)
нет события при изменении
- ЕСТЬ
9. oleg-x 26 11.03.19 11:19 Сейчас в теме
(8) Есть что? Изменение? или событие табличного поля "ПриИзменениеФлажака".
10. alex-l19041 8 11.03.19 11:21 Сейчас в теме
13. oleg-x 26 11.03.19 11:28 Сейчас в теме
(10) Верно, такое есть, а то что писал (5), ПриИзменениеФлажка, это именно событие обычных форм. А у самого флажка ни каких событий нет на обычных формах.
15. SedovSU@mail.ru 297 11.03.19 11:29 Сейчас в теме
(13) да да все верно, я ошибся
11. SedovSU@mail.ru 297 11.03.19 11:22 Сейчас в теме
(7) Попробуйте событие у табличного поля ПередНачаломИзменения(Элемент, Отказ)
И в нем напишите, если текущая колонка - ваша галочка и ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда Отказ = Истина
35. user1169242 12.03.19 12:29 Сейчас в теме
Процедура ТЧОдобреноПриИзменении(Элемент)
	Если (Элементы.ТЧ.ТекущиеДанные.Согласующие <> ПараметрыСеанса.ТекущийПользователь) Тогда
		Элементы.ТЧ.ТекущиеДанные.Одобрено = НЕ Элементы.ТЧ.ТекущиеДанные.Одобрено;
	КонецЕсли;
КонецПроцедуры


Но я бы добавил еще одну колонку булево в ТЧ, скрыл бы ее и при открытии документа заполнял бы Истина или Ложь в зависимости от того какой пользователь там указан. А дальше в условном оформлении прописал бы доступность в зависимости от значения нашей колонки ТЧ. Условное оформление применяется для каждой строки ТЧ в отдельности. Если не хотите добавлять колонку - можно создавать условное оформление программно. Вот как я это делаю:

УсловноеОформление.Элементы.Очистить();
	
Для каждого строка из ОповещенияПользователю Цикл	
	Элемент 						= УсловноеОформление.Элементы.Добавить();
	ПолеЭлемента 					= Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле			 	= Новый ПолеКомпоновкиДанных(Элементы.ОповещенияПользователю.Имя);		
	Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Отбор.ВидСравнения 				= ВидСравненияКомпоновкиДанных.Равно;
	Отбор.Использование 				= Истина;
	Отбор.ЛевоеЗначение		 		= Новый ПолеКомпоновкиДанных("ОповещенияПользователю.УИНУведомления");
	Отбор.ПравоеЗначение		 	= ПараметрыСеанса.ТекущийПользователь;
		
	ЦветФона 						= Элемент.Оформление.Элементы.Найти("ЦветФона");
	ЦветФона.Значение 				= WebЦвета.СеребристоСерый;
	ЦветФона.Использование 			= Истина;		
КонецЦикла;
Показать
36. oleg-x 26 12.03.19 13:21 Сейчас в теме
(35) Можно, но если надо посмотреть, кто и как "проголосовал", то не годится.
39. user1169242 13.03.19 14:03 Сейчас в теме
(36) Почему не годится? Не будет видно если поставить видимость - ложь. Если поставить доступность - ложь до просто нельзя будет изменить не свои записи. Но все строки будут видны.
4. SedovSU@mail.ru 297 11.03.19 10:59 Сейчас в теме
Нужна обработка события, либо при НачалеРедиктирования или Выбор в табличном поле. В событии описываете как указано в (2)
6. oleg-x 26 11.03.19 11:06 Сейчас в теме
Пропиши перед началом изменения, возможно добавив проверку, в какой колонке изменения, если надо.
Если ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда
Отказ = Истина;
КонецЕсли;
12. user1136603 11.03.19 11:26 Сейчас в теме
Событие при изменении, это имели ввиду?
Прикрепленные файлы:
14. oleg-x 26 11.03.19 11:29 Сейчас в теме
(12) Нет, нажми на саму табличную часть, там будет событие табличной части ПередНачаломИзменения. Там все и прописывайте.
16. SedovSU@mail.ru 297 11.03.19 11:30 Сейчас в теме
Выделите табличную часть у него будет события ПередаНачаломИзменения, там и пишите код вида
Если ПараметрыСеанса.ТекущийПользователь <> Объект.Ответственный Тогда
Отказ = Истина;
КонецЕсли;
17. user1136603 11.03.19 14:36 Сейчас в теме
(16)
Вот так я сделал. Событие при изменении.
Прикрепленные файлы:
18. oleg-x 26 11.03.19 14:40 Сейчас в теме
Не корректно.
1) Зайдите по нужным пользователем и поставьте галку, а потом под не нужным пользователем и тоже попробуйте поставить галку и посмотрите на результат.
Делать надо именно в событие ПередНачаломИзменения
21. user1136603 11.03.19 14:54 Сейчас в теме
(18)А можешь пояснить почему не корректно? Щас зашел под пользователем которого нет в этом списке, и я не могу поставить галку ни на одном поле.
22. user1136603 11.03.19 14:55 Сейчас в теме
(21)Т.е. работает как положено , если данного согласующего нету в списке он поставить галку и не может.
23. oleg-x 26 11.03.19 14:56 Сейчас в теме
(21) А сделай это там, где уже есть галка. Судя по твоему коду, для всех строк будет снята галка.
19. oleg-x 26 11.03.19 14:43 Сейчас в теме
И код будет выглядеть примерно так:

ТекПольз = ПараметрыСеанса.ТекущийПользователь;
ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
Если ТекСтрока.Согласующие <> ТекПольз Тогда
       Отказ = Истина;
КонецЕсли;
20. user1136603 11.03.19 14:53 Сейчас в теме
(19)Сейчас попробую зайти под пользователем, которого вообще нет в этом списке.
Еще надо сделать что бы, после того как первый по списку пользователь поставил галку, у другого открывалась возможность тоже поставить галку и так до конца. Т.е. второй по списку не может поставить галку , если первый не поставил, третий - если 2 и 1.
24. user1136603 11.03.19 15:29 Сейчас в теме
(19)Только одно , НО.
Тек.Пользователь вызывается на сервер.
А ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные вызывается на клиенте
Как это связать?
25. oleg-x 26 11.03.19 15:34 Сейчас в теме
(24) Переписав код для работы на клиенте
&НаКлиенте
Процедура СогласующиеПередНачаломИзменения(Элемент, Отказ)

ТекПольз = фПолучитьТекущегоВользователяНаСервере();
ТекСтрока = Элементы.СписокСогласующий.ТекущиеДанные;
Если ТекСтрока.Согласующие <> ТекПольз Тогда
       Отказ = Истина;
КонецЕсли;

КонецПроцедуры
Показать
user1136603; +1 Ответить
26. user1136603 11.03.19 15:54 Сейчас в теме
(25)а в Функции "фПолучитьТекущегоВользователяНаСервере()"
Что должно быть?
Вот так?
Прикрепленные файлы:
27. oleg-x 26 11.03.19 15:58 Сейчас в теме
(26) Почти, только Не пользователи информационной базы, а параметры сеанса. :-) В таких случаях код выполняется на клиенте, если нужны данные из базы, то обращаемся на сервер за данными, а все выполнение на клиенте.
28. oleg-x 26 11.03.19 16:00 Сейчас в теме
Конечно, если такой параметр у Вас есть в конфигурации.
29. user1136603 11.03.19 16:07 Сейчас в теме
(28)Все заработало, благодарю.
А по поводу по очередной открытии ставки галки, есть варианты как это сделать?
30. oleg-x 26 11.03.19 16:11 Сейчас в теме
(29) Поподробнее, не совсем понял.
31. user1136603 11.03.19 16:19 Сейчас в теме
(30)Ну вот Согласующий "Администратор" стоит по списку 1, ему соответственно всегда можно ставить галку.
Если "Администратор" поставил согласовано, то у второго по списку открывается возможность ставить галку , если у 2 галка поставлена согласован, то и у 3 по списку открывается возможность ставить галки и т.д.
Но если кто либо, не зависимо 1-2-3, поставил Отказано, то у след согласующего возможность ставить галку отсутствует.
Понятно?)
Прикрепленные файлы:
32. oleg-x 26 11.03.19 16:31 Сейчас в теме
С кодом не подскажу, тут уже сам попробуй разобраться.
Но алгоритм таков, в цикле надо обойти все строки и сравнивать текущую строку и строку в цикле.

Для каждого стр из Объект.Согласующие Цикл
    Если стр = ТекСтрока Тогда
        //Тот код который выше написали
        Прервать;
    ИначеЕсли НЕ стр.Одобрено Тогда
        Отказ = Истина;
        Прервать;
    КонецЕсли;
КонецЦикла;
Показать


Таким образом, пока предыдущая строка не одобрена, следующую одобрить нельзя.
user1136603; +1 Ответить
34. user1136603 11.03.19 17:21 Сейчас в теме
33. oleg-x 26 11.03.19 16:56 Сейчас в теме
И да, если отказ можно поставить в любой момент, то проверяй имя колонки в которой пытаются внести изменения, что бы если имя колонки Одобрено, то выполняем весь код, а если нет, то ни каких проверок не делаем.
37. user1136603 13.03.19 10:25 Сейчас в теме
(33)Добрый день, есть вопрос.
Как реализовать, что бы своя форма документа была так же на глав.странице как представлено тут?
Где надо написать , что бы при открытии вкладки или при запуске чего либо, появлялось сразу форма документа??
Прикрепленные файлы:
38. user1136603 13.03.19 10:59 Сейчас в теме
И еще вопрос.
Вот есть типовой документ заявка на расходование ДС.
Так вот, надо что бы и типовая заявка была доступна и доработанная.
Как это лучше и проще сделать?
Оставьте свое сообщение

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