Имя: Пароль:
1C
 
Программно отключить стандартную кнопку "Обновить" динамического списка управляемой формы
0 TormozIT
 
гуру
27.05.22
13:43
Потребовалось программно подменить стандартную кнопку "Обновить" динамического списка управляемой формы, чтобы сложным образом накладывать отбор при каждом обновлении списка.
Свою команду+кнопку сделал и она работает. Теперь хочется повесить на нее сочетание клавиш F5 и отключить стандартную кнопку "Обновить", т.к. иначе по F5 только она будет работать. Как это сделать по возможности универсально?
У меня есть командная панель. Надо найти в ней кнопку стандартной команды "Обновить".
Пока придумал только перебирать все кнопки и проверить, что имя кончается на "Обновить". Но хочется чего то красивее и надежнее.
https://i.imgur.com/u81DDOn.png
1 TormozIT
 
гуру
27.05.22
13:55
Почему ты молчишь?
2 vicof
 
27.05.22
14:14
Отключить автозаполнение и сделать свою панель, с блэкджеком и кнопками, не?
3 youalex
 
27.05.22
14:15
Программно - Если только всю панель убрать, вместо нее свою подсунуть

ПоложениеКоманднойПанелиЭлементаФормы (FormItemCommandBarLabelLocation)
Нет (None)
4 TormozIT
 
гуру
27.05.22
14:19
(3) Есть пример как сделать БЕЗ автозаполнения такую же командную панель как с автозаполнением? Кажется это будет непростая задача, если делать универсально.
5 youalex
 
27.05.22
14:44
(4) Не знаю, плюс как программно назначить стандартное действие для команды - тоже непонятно)
6 TormozIT
 
гуру
27.05.22
14:47
Пока сделал так
            СочетаниеКлавишF5 = Новый сочетаниеКлавиш(Клавиша.F5);
            Для Каждого Кнопка Из КоманднаяПанельСписка.ПодчиненныеЭлементы Цикл
                Если Истина
                    И ТипЗнч(Кнопка) = Тип("КнопкаФормы")
                    И Кнопка.Видимость
                    И Кнопка.ИмяКоманды = ""
                    И СтрЗаканчиваетсяНа(Кнопка.ИмяКоманды, "Обновить")
                Тогда
                    // Таким некрасивым путем ищем стандартную кнопку "Обновить", т.к. других путей в 8.3.21 не найдено
                    КнопкаОбновить = Кнопка;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
7 TormozIT
 
гуру
27.05.22
14:49
(6) Исправил

            СочетаниеКлавишF5 = Новый сочетаниеКлавиш(Клавиша.F5);
            Для Каждого Кнопка Из КоманднаяПанельСписка.ПодчиненныеЭлементы Цикл
                Если Истина
                    И ТипЗнч(Кнопка) = Тип("КнопкаФормы")
                    И Кнопка.Видимость
                    И Кнопка.ИмяКоманды = ""
                    И СтрЗаканчиваетсяНа(Кнопка.Имя, "Обновить")
                Тогда
                    // Таким некрасивым путем ищем стандартную кнопку "Обновить", т.к. других путей в 8.3.21 не найдено
                    КнопкаОбновить = Кнопка;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
8 Aleksandr N
 
27.05.22
14:51
(0) вроде через состав команд можно убирать ненужные команды.
9 Галахад
 
гуру
27.05.22
14:53
(7) А в чем прикол такого написания?

Если Истина
   И ТипЗнч(Кнопка) = Тип("КнопкаФормы")
10 TormozIT
 
гуру
27.05.22
14:58
(8) Пример кода в студию. На самом деле нельзя это делать программно.
11 TormozIT
 
гуру
27.05.22
15:01
(9) А в отборе компоновкки тебе такое написание норм?
https://i.imgur.com/WJpmEIk.png
Здесь примерно тот же прикол - более структурное и гранулярное представление сложного выражения. https://infostart.ru/1c/articles/152801/
12 Aleksandr N
 
27.05.22
15:06
(11) В вашей статье элементарные и очевидные вещи описаны.
(10) Программно да, так не сделать.
13 Галахад
 
гуру
27.05.22
16:13
(11) Почитал. Спасибо.
14 mikecool
 
27.05.22
16:48
(11) с таким подходом некоторые товарищи тоже умудряются наворотить лес
15 ДедМорроз
 
27.05.22
19:36
Если мы хотим список сами обновлять,то,может быть,проще сразу таблицу или список значений сделать?
Тогда все будет сразу автоматом.
16 TormozIT
 
гуру
28.05.22
11:14
(15) Мне это надо делать во всех формах списков динамически.
17 ДедМорроз
 
28.05.22
16:04
А то,что список может быть обновлен внутренним событием изменения списка через оповещение ?
18 Dzenn
 
гуру
28.05.22
23:44
мне кажется, правильнее всего при таких потребностях — это пересмотреть задачу, сделать её другим, более изящным способом
19 TormozIT
 
гуру
29.05.22
00:34
(17) Методом Обновить() (в частности из оповещения) только запрос списка выполняется, а по F5 обновляется отбор запроса списка и затем выполняется запрос. Это приемлемо.
20 Конструктор1С
 
29.05.22
06:00
(7) слишком сложная логическая проверка. Вынеси её в отдельную функцию

Если ЭтоСтандартнаяКнопкаОбновить(Кнопка) Тогда
21 Конструктор1С
 
29.05.22
06:03
(11) >>более структурное и гранулярное представление сложного выражения

сложное выражение принято выделять в отдельную функцию с "поясняющим" именем
22 TormozIT
 
гуру
29.05.22
09:23
(20), (21) Веской причиной для вынесения кода в метод является его использование двух местах. Дальше идет слишком большое число (у каждого свое). А твое предложение - вкусовщина. Не смог пройти мимо? =)
23 TormozIT
 
гуру
29.05.22
09:24
(22) -> слишком большое число строк
24 Конструктор1С
 
29.05.22
09:31
(22) веской причиной вынесения кода в метод яаляется снижение сложности в коде, которую ты вываливаешь на читающего твой код
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс