Имя: Пароль:
1C
1С v8
Блокировка всех элементов управляемой формы, кроме одного
, ,
0 Лкфае гтв Дшысре
 
15.03.21
13:35
Добрый день!
Нужно, чтобы по логическому условию вся форма была заблокирована, кроме одной кнопки.

Пытаюсь установить доступность = ложь у всех элементов формы, кроме этой кнопки в цикле перебора всех элементов. И возникает такая проблема - в коллекции элементов формы есть элемент ИмяЭлементаExtendedTooltip, тип которого - "ДекорацияФормы". Но у него отсутствует свойство "Доступность". Вываливается исключение.
При этом, на форме есть другие элементы с типом "ДекорацияФормы" у которых есть свойство доступность.
Вопрос: как выловить этот кривой элемент ExtendedTooltip без использования Попытка-Исключение и поиска "ExtendedTooltip" в имени реквизита?

Может вообще можно как-то по-другому блокировать все элементы, кроме одного?
Свойство "ТолькоПросмотр" формы - не вариант, поскольку по кнопке изменяются данные.
1 acht
 
15.03.21
13:42
J xtv vjlyj ujdjhbnm c xtkjdtrjv, rjnjhsq yt pyftn rfr gbitncz Light?
2 Масянька
 
15.03.21
13:44
(1) О! Месье понимает толк в извращениях!
3 Woold
 
15.03.21
13:58
Тем, кому интересно, но кто ленивый, (1) написал "О чем модно говорить с человеком, который не знает как пишется Light?".
Почему (1) общается только модно осталось за кадром.
4 Kassern
 
15.03.21
14:02
(1) ну так он по немецки написал...kraft und licht (сила и свет)
5 Ёпрст
 
15.03.21
14:05
(0) если лень проверять свойство, то Попытка-Исключение.. и привет.
6 Ёпрст
 
15.03.21
14:05
А так, можно только нужным Группам делать доступность, так быстрее, чем всем элементам формы
7 Woold
 
15.03.21
14:09
(0) Можешь еще перед блокировкой обойти все элементы формы, и собрать список элементов, являющихся "РасширеннымиПодсказками" для других элементов формы.
Ну а потом обходи все элементы повторно, и если элемент не будет входить в собранный массив "РасшиернныеПодсказки" устанавливай этим элементам доступность.
8 acht
 
15.03.21
14:13
(7) > и собрать список элементов, являющихся "РасширеннымиПодсказками"
А там, конечно, определение того, что элемент является расширенной подсказкой, будет сделано совершенно по другому, да.
9 Масянька
 
15.03.21
14:15
(4) Вот это "Лкфае гтв Дшысре" по-немецки?!
10 программистище
 
15.03.21
14:16
(1) двойной слепой метод ввода
11 Ёпрст
 
15.03.21
14:16
(9) lf
12 Ёпрст
 
15.03.21
14:17
(9) ybrjulf nfr yt gbcfkf xnj kt &
13 программистище
 
15.03.21
14:17
(0) делай тогда уж через попытку
14 Лкфае гтв Дшысре
 
15.03.21
14:20
(1) уже написали, что это по-немецки) И да, забыл, написал Lischt. Стыд мне и позор)
15 Лкфае гтв Дшысре
 
15.03.21
14:21
(5) Попытка - исключение - это медленно. Поэтому и возник вопрос.
16 Лкфае гтв Дшысре
 
15.03.21
14:22
(7) Смешная шутка)
17 Масянька
 
15.03.21
14:22
(12) E vtyz gthtrk.xfntkm cnjbn/
18 Ёпрст
 
15.03.21
14:23
(15) медленно ? )) Схрена ли ?
19 Ёпрст
 
15.03.21
14:24
(17) фу, какая бяка.. никогда не понимал этих автоматических переключателей клавы.
20 Масянька
 
15.03.21
14:25
(19) Рада за тебя. Правда.
21 Лкфае гтв Дшысре
 
15.03.21
14:26
(18) Перебор происходит при открытии формы. В цикле из ~100 элементов отлавливать исключение - это неплохо так тормознёт открытие
22 Ёпрст
 
15.03.21
14:27
(21) ну дык, ты проверь. Нет там никаких тормозов при этом.
Нужна скорость - рули доступностью группы. Можешь хоть все элементы в одну группу затолкать
23 Ёпрст
 
15.03.21
14:27
Точнее, не скорость, а меньше кода.. :)
24 Kassern
 
15.03.21
14:28
(21) помести все элементы формы в одну группу и ограничь доступ к ней. А твой нужный реквизит запихни вне этой группы.
25 Многолетний Апельсин
 
15.03.21
14:31
>>Вопрос: как выловить этот кривой элемент ExtendedTooltip без использования Попытка-Исключение и поиска "ExtendedTooltip" в имени реквизита?
Использовать что-то типа такой функции для проверки:

Функция ЕстьРеквизитОбъекта(Объект,ИмяРеквизита)
ИД = новый УникальныйИдентификатор;
Проверка = новый Структура(ИмяРеквизита,ИД);
ЗаполнитьЗначенияСвойвств(Проверка,Объект);

Возврат (Проверка[ИмяРеквизита] <> Ид);
КонецФункции
26 Лкфае гтв Дшысре
 
15.03.21
14:33
(24) Пожалуй, да. Пока это самый оптимальный вариант
27 Лкфае гтв Дшысре
 
15.03.21
14:34
(25) Можно и так, но слишком громоздко. Я надеялся, что кто-нибудь поделиться более быстрым вариантом, чем перебор всех элементов формы.
28 программистище
 
15.03.21
14:36
так может проверять на
Тип: ДекорацияФормы, ГруппаФормы, КнопкаФормы, ТаблицаФормы, ПолеФормы.
29 polosov
 
15.03.21
14:38
(27) Это "бест практис" из типовых.
30 banco
 
15.03.21
14:54
(0) ЭтаФорма.ТолькоПросмотр = Истина а у команды снимаешь галочку изменяет данные
31 Лкфае гтв Дшысре
 
15.03.21
14:59
(30) Эта кнопка реально изменяет данные объекта. Если снять галку изменяет данные, то не будет меняться модифицированность и объект не будет блокироваться для изменения. Модифицированность можно и вручную включить, а вот с блокировкой связываться не хочется
32 Лкфае гтв Дшысре
 
15.03.21
15:03
(28) С проверкой по типу данных вот такой интересный прикол: https://ibb.co/svQXPpr
33 acht
 
15.03.21
16:10
(32) ЭтоРасширеннаяПодсказка = Элемент.Родитель.РасширеннаяПодсказка = Элемент;
Ваш К.О.

Наличие реквизита РасширеннаяПодсказка у родителя сам уж проверишь - по типу или (25).
И не забудь, что на расширенной подсказке может быть активная гиперссылка, которая тоже что-то там меняет.
34 acht
 
15.03.21
16:11
(33) Потом сделай замер, сравни с Попытка/Исключение и не парь народу мозг своими 100 элементами.
35 zmaximka
 
15.03.21
16:18
Для каждого Элемент Из Элементы Цикл
            Если ТипЗнч(Элемент) = Тип("ДекорацияФормы") Тогда
                Продолжить;
            КонецЕсли;
            Элемент.Доступность = Ложь;
        КонецЦикла;
36 acht
 
15.03.21
16:21
(35) И тут тебе хрясь, такая декорацияформы типа надпись с гиперссылкой или просто с нажатием
37 Лкфае гтв Дшысре
 
15.03.21
16:25
(34)
Для Каждого Элемент Из ЭтаФорма.Элементы Цикл
    Попытка
        Элемент.Доступность = Ложь;
    Исключение
    КонецПопытки;
КонецЦикла

Всегда считал такой способ проверки существования реквизита *овнокодом, так как задействуется ресурсоёмкий механизм исключений. Связывал это с тем, что исключения медленно обрабатываются. Если я не прав, то поправьте.
38 Ёпрст
 
15.03.21
16:26
(37) замер то включи уже
39 Лкфае гтв Дшысре
 
15.03.21
16:28
(35) скрин посмотрите в (32)
40 Лкфае гтв Дшысре
 
15.03.21
16:28
(38) Лениво, поверю на слово)))
41 banco
 
15.03.21
17:34
(31) В чем проблема программно ставить модифицированность и блокировку?
ЗаблокироватьДанныеФормыДляРедактирования();
И если изменили объект модифицированность = истина;
42 Dzenn
 
гуру
15.03.21
17:55
Думаю, задача В ПРИНЦИПЕ звучит неверно. Ставь ВСЮ форму на просмотр, а кнопку располагай так, чтобы она не являлась элементом формы. Если это управляшки, то можно вынести в команду или в подчинённую форму. Если обычные формы, то форму списка документов, например. Способов много, мораль одна — не ищи обходных путей, будь в тренде возможностей платформы.
43 acht
 
15.03.21
18:00
(42) Бедные твои пользователи
44 ДедМорроз
 
15.03.21
21:32
А зачем все,когда мы делаем недоступным элемент,то все его дети также становятся недоступными.
Поэтому,проверять на владельца,чтобы только верхний уровень и в путь.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.