Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Блокировка всех элементов управляемой формы, кроме одного

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

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

Может вообще можно как-то по-другому блокировать все элементы, кроме одного?
Свойство "ТолькоПросмотр" формы - не вариант, поскольку по кнопке изменяются данные.
   acht
 
1 - 15.03.21 - 13:42
J xtv vjlyj ujdjhbnm c xtkjdtrjv, rjnjhsq yt pyftn rfr gbitncz Light?
   Масянька
 
2 - 15.03.21 - 13:44
(1) О! Месье понимает толк в извращениях!
   Woold
 
3 - 15.03.21 - 13:58
Тем, кому интересно, но кто ленивый, (1) написал "О чем модно говорить с человеком, который не знает как пишется Light?".
Почему (1) общается только модно осталось за кадром.
   Kassern
 
4 - 15.03.21 - 14:02
(1) ну так он по немецки написал...kraft und licht (сила и свет)
   Ёпрст
 
5 - 15.03.21 - 14:05
(0) если лень проверять свойство, то Попытка-Исключение.. и привет.
   Ёпрст
 
6 - 15.03.21 - 14:05
А так, можно только нужным Группам делать доступность, так быстрее, чем всем элементам формы
   Woold
 
7 - 15.03.21 - 14:09
(0) Можешь еще перед блокировкой обойти все элементы формы, и собрать список элементов, являющихся "РасширеннымиПодсказками" для других элементов формы.
Ну а потом обходи все элементы повторно, и если элемент не будет входить в собранный массив "РасшиернныеПодсказки" устанавливай этим элементам доступность.
   acht
 
8 - 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
Точнее, не скорость, а меньше кода.. :)
   Kassern
 
24 - 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
так может проверять на 
Тип: ДекорацияФормы, ГруппаФормы, КнопкаФормы, ТаблицаФормы, ПолеФормы.
   polosov
 
29 - 15.03.21 - 14:38
(27) Это "бест практис" из типовых.
   banco
 
30 - 15.03.21 - 14:54
(0) ЭтаФорма.ТолькоПросмотр = Истина а у команды снимаешь галочку изменяет данные
 
 
   Лкфае гтв Дшысре
 
31 - 15.03.21 - 14:59
(30) Эта кнопка реально изменяет данные объекта. Если снять галку изменяет данные, то не будет меняться модифицированность и объект не будет блокироваться для изменения. Модифицированность можно и вручную включить, а вот с блокировкой связываться не хочется
   Лкфае гтв Дшысре
 
32 - 15.03.21 - 15:03
(28) С проверкой по типу данных вот такой интересный прикол: https://ibb.co/svQXPpr
   acht
 
33 - 15.03.21 - 16:10
(32) ЭтоРасширеннаяПодсказка = Элемент.Родитель.РасширеннаяПодсказка = Элемент;
Ваш К.О.

Наличие реквизита РасширеннаяПодсказка у родителя сам уж проверишь - по типу или (25).
И не забудь, что на расширенной подсказке может быть активная гиперссылка, которая тоже что-то там меняет.
   acht
 
34 - 15.03.21 - 16:11
(33) Потом сделай замер, сравни с Попытка/Исключение и не парь народу мозг своими 100 элементами.
   zmaximka
 
35 - 15.03.21 - 16:18
Для каждого Элемент Из Элементы Цикл
            Если ТипЗнч(Элемент) = Тип("ДекорацияФормы") Тогда
                Продолжить; 
            КонецЕсли; 
            Элемент.Доступность = Ложь; 
        КонецЦикла;
   acht
 
36 - 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) Лениво, поверю на слово)))
   banco
 
41 - 15.03.21 - 17:34
(31) В чем проблема программно ставить модифицированность и блокировку?
ЗаблокироватьДанныеФормыДляРедактирования(); 
И если изменили объект модифицированность = истина;
   Dzenn
 
42 - 15.03.21 - 17:55
Думаю, задача В ПРИНЦИПЕ звучит неверно. Ставь ВСЮ форму на просмотр, а кнопку располагай так, чтобы она не являлась элементом формы. Если это управляшки, то можно вынести в команду или в подчинённую форму. Если обычные формы, то форму списка документов, например. Способов много, мораль одна — не ищи обходных путей, будь в тренде возможностей платформы.
   acht
 
43 - 15.03.21 - 18:00
(42) Бедные твои пользователи
   ДедМорроз
 
44 - 15.03.21 - 21:32
А зачем все,когда мы делаем недоступным элемент,то все его дети также становятся недоступными.
Поэтому,проверять на владельца,чтобы только верхний уровень и в путь.


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.