А как быть, если используется несколько уровней?
https://drive.google.com/file/d/1v8F...usp=drive_link
Вид для печати
А как быть, если используется несколько уровней?
https://drive.google.com/file/d/1v8F...usp=drive_link
А именно?!
Разрешить доступ в поле ввода только при открытии всех уровней (или определенных).
Как это сделать без макросов?
Опять же танец с бубном.
ФО:
Если не будет хватать хоть одного уровня, то разница будет > 0.Код:Копировать PSB60 -> PSW256.0
Копировать PSB61 -> PSW256.1
Копировать PSB62 -> PSW256.2
Копировать PSB63 -> PSW256.3
Копировать PSB64 -> PSW256.4
Копировать PSB65 -> PSW256.5
Копировать PSB66 -> PSW256.6
Копировать PSB67 -> PSW256.7
Копировать PSB68 -> PSW256.8
Инвертировать PSW256.0
Инвертировать PSW256.1
Инвертировать PSW256.2
Инвертировать PSW256.3
Инвертировать PSW256.4
Инвертировать PSW256.5
Инвертировать PSW256.6
Инвертировать PSW256.7
Инвертировать PSW256.8
Мат.операция PSW256 = 511 - PSW256 (511 dec = 111111111 bin - маска затребованных уровней доступа, если все включены, то результат будет 0)
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Фишка в том что, при делении на 2 (8 раз) любое число > 0 вырождается в 1, т.е. 1/2 = 1
Соответственно PSW256.0 становится "Битом видимости", т.е. признаком того, что не все требуемые уровни открыты.
спасибо, попробую
Результат будет не однозначнымЦитата:
Мат.операция PSW256 = 511 - PSW256 (511 dec = 111111111 bin - маска затребованных уровней доступа, если все включены, то результат будет 0)
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
Мат.операция PSW256 = PSW256 / 2
так как
последнее утверждение весьма опрометчиво. Наверно Вы это проверяли в эмуляции. Если загрузите свой код в панель, то окажется, что 1/2 = 0Цитата:
Фишка в том что, при делении на 2 (8 раз) любое число > 0 вырождается в 1, т.е. 1/2 = 1
Т.е. я утверждаю, что в эмуляции целочисленное деление выполняется не правильно - остаток от деления не отбрасывается, вместо этого происходит округление результата и 1/2 получается равны 1.
А вот в живой панели тоже самое целочисленное деление выполняется правильно - остаток от деления отбрасывается и 1/2 получается равным 0.
А вот такая ФО прокатит?
Код:Копировать PSB60 -> PSW256.0
Копировать PSB61 -> PSW256.1
Копировать PSB62 -> PSW256.2
Копировать PSB63 -> PSW256.3
Копировать PSB64 -> PSW256.4
Копировать PSB65 -> PSW256.5
Копировать PSB66 -> PSW256.6
Копировать PSB67 -> PSW256.7
Копировать PSB68 -> PSW256.8
Инвертировать PSW256.0
Инвертировать PSW256.1
Инвертировать PSW256.2
Инвертировать PSW256.3
Инвертировать PSW256.4
Инвертировать PSW256.5
Инвертировать PSW256.6
Инвертировать PSW256.7
Инвертировать PSW256.8
Мат.операция PSW256 = PSW256 + 0 включить макс значение = 1 (Если PSW256 > 0, то результат не превысит 1)
Попробовал. И не понял сути всего этого. `PSW256` равен единице, если пройдена авторизация. Как это использовать?
Допустим, в проекте заданы 9 уровней пароля. Есть контролы доступные для первого уровня, есть контролы доступные для второго уровня, и т.д. до девятого уровня.
Наверно, надо сделать так, что бы
при авторизации первого уровня `PSW256` был `111111110 bin`
при авторизации второго уровня `PSW256` был `111111100 bin`
...
при авторизации восьмого уровня `PSW256` был `100000000 bin`
при авторизации девятого уровня `PSW256` был `000000000 bin`
и тогда `PSW256` можно будет использовать для битов видимости в кнопках вызова окна с ошибкой
Теперь мой способ с использованием ТОЛЬКО СТАНДАРТНЫХ средств конфигуратора
НИКАКИХ ГМ!!!
И так имеем
Вложение 82281
1. Три Ввода данных с паролями 1, 2 и 3 уровней
PSW300
PSW301
PSW302
2. Вашу Ф.область с копированием/ инвертированием бит оставляю как есть
Вложение 82282
3. Создаем три дисплея для PSW300, 301, 302 с оформлением и размерами таким же как и у цифровых вводов
Скрытый текст:
4. сохраняем их в библиотеке материалов и удаляем дисплеи с экрана, больше они не нужны
Скрытый текст:
5. Берем 3 кнопки открытия окна (окно с аварией уже есть - 61001)
Делаем размеры кнопок равными размерам цифровых вводов. Помещаем кнопки поверх цифровых вводов
В качестве битов видимости для них - PSB300, 301, 302
Скрытый текст:
6.А как же дисплеи сохраненные в библиотеке?
Мы их используем в оформлении внешнего вида кнопок !!!
Скрытый текст:
Теперь внешний вид кнопки совпадает с видом цифрового ввода и даже на кнопке отображаются значения регистров!!!
Скрытый текст: