По теме раздельной работы пользователей хочу подвести итог, возможно кому-то будет полезно:
Свойство "Место исполнения" - это как раз та "галочка", о которой я говорил (включить выполнение на клиентах по отдельности).
ФБ GetCurrentUsername может вызываться не только в дереве объектов (иных примеров я не находил), но и в программах.
Программа, место исполнения которой указано "в основной задаче узла" и которая вызывается кнопкой с экрана или любыми другими действиями, будет как раз работать "одна на всех" - то есть изменения будут отображаться для всех клиентов.
Если мы ставим место исполнения "в задаче экрана", то программа будет вызываться только у клиента, который её вызвал (нажатием кнопки и тд), и оказывается, что вставлять её в объект, где этот экран находится - необязательно.
Такая программа может исполняться периодически, что как раз помогает реализовать мою тему с меню, а также с корректным получением имени пользователя при квитировании записей простоев.
Пример:
Есть экран с иконками меню. Создаем программу ST, место исполнения "в задаче экрана", входы: "наведениеИконка", "наведениеМеню", выход: "видимостьМеню". В настройках иконки мы указываем событие "Захват мыши", там добавляем действие "Установить параметр". Источник - TRUE, а приемником будет входная переменная программы "наведениеИконка". Далее добавляем событие "Покидание мыши" - "Установить параметр". Источник FALSE, приемник "наведениеИконка". Тоже самое проделываем с контейнером окна, в который вставлено окно меню, только переменная будет "наведениеМеню".
Видимости контейнера назначается выходная переменная "видимостьМеню", она равна "наведениеИконка" ИЛИ "наведениеМеню". Изначально думал, что будет пропадать при переводе с иконок на контейнер, но если на схеме их поставить вплотную - то все работает корректно.
Теперь меню работает как и должно - на разных клиентах то отображение, которое им нужно, а не общее на всех.
Проблема: при клике на один из пунктов меню, который открывает другой экран и возвращению обратно в главное меню, оказывается, что меню не закрывается, то есть "Покидание мыши" не работает. Чтобы пофиксить - нужно добавить к обоим элементам (иконки, контейнер меню) событие "Потеря фокуса" - источник FALSE, приемник - та переменная, которая отвечает за видимость. Всё отлично работает.
По пользователям - в этой же программе добавил вызов ФБ GetCurrentUsername, условие - ЕСЛИ переменная ТО вызов, добавил кнопку на экране, и назначил на клик мыши "Выдать импульс", приемник - переменная для вызова.
На экран добавил текст, туда передаю значение, полученное из ФБ GetCurrentUsername при вызове.
Открываем скаду на двух экранах, логиниться можно под одним пользователем, можно под разными.
Жмем кнопку на одном экране - на нём же поялвяется имя пользователя, а на втором экране пусто.
Жмем кнопку на втором - также появляется имя пользователя, равное тому, с которого была авторизация, а на первом экране значение не меняется.
В документации вызов GetCurrentUsername делается через события, а результат уже передается куда нужно, но у меня были какие то проблемы с ним. Возможно теперь, понимая подход, всё получится сделать и через события.




Ответить с цитированием