|
v7: Финт с выводом текущей колонки с функцией на форме - как? | ☑ | ||
---|---|---|---|---|
0
Злопчинский
08.09.23
✎
13:26
|
Например, Спр.Номенклатура.ФормаСписка
кладем на форму текст с функцией, которая выводит идентификатор текущей колонки формы списка //************************************************************************ // Функция ИмяКолонки() //Форма.Обновить(0); ЗначениеКолонки = Форма.ТекущаяКолонка(); Возврат ЗначениеКолонки; КонецФункции // ИмяКолонки() . если по строке справочника бегаем курсором влево-вправо - функция не отрабатывает, имя колонки не меняется впихнуть в функцию Форма.Обновить() - бяка, экран постоянно перерисовывается. . был какой-то финт, который позволял получить нужный результат, но какой? не помню... ??? |
|||
1
victuan1
08.09.23
✎
13:39
|
Функция ИмяКолонки()
ИмяКолонки_=""; ИмяКолонки_= Форма.ПолучитьАтрибут(Форма.ТекущаяКолонка()).Заголовок(); Форма.Обновить(); Возврат ""+ИмяКолонки_; КонецФункции |
|||
2
Злопчинский
08.09.23
✎
13:45
|
И чем это отличается от (0)..?
не пойдет, обновить - вызывает "зацикливание" перерисовки экрана, проц грузится на постоянку |
|||
3
ЯнСмит
08.09.23
✎
13:51
|
(0) а если попробовать не штатный метод Обновить(), а одноименной от Альфа (РасширениеФормы), он вроде как никаких перерасчетов не делает
|
|||
4
РусскийВедун
08.09.23
✎
13:53
|
(0) поставь флаг если колонка видна то не не надо обновлять и наоборот.
|
|||
5
РусскийВедун
08.09.23
✎
13:55
|
(4) чтобы обновлялось 1 раз при смене видимости.
|
|||
6
ЯнСмит
08.09.23
✎
13:57
|
(0) а еще можно формексом эмулировать нажатие стрелка вниз+стрелка вверх, тогда все работает без всяких обновлений
|
|||
7
Харлампий Дымба
08.09.23
✎
14:47
|
(6) Не сработает, если список пуст или один элемент. Или если курсор на последнем элементе (но тут поможет стрелка вверх+стрелка вниз). Но это надо прикладную задачу уже знать, так-то я бы тоже в эту сторону бы попытался.
|
|||
8
Харлампий Дымба
08.09.23
✎
14:48
|
А было вроде что-то типа Форма.ОбработкаОжидания(1)
|
|||
9
Djelf
08.09.23
✎
14:56
|
(0) Используй ТабличноеПоле Люк!
|
|||
10
Злопчинский
08.09.23
✎
15:25
|
(4) всё колонки видны и при чем здесь это?
|
|||
11
Злопчинский
08.09.23
✎
15:26
|
(3) была мысль, но пока м. Б. Штатно..?
|
|||
12
Злопчинский
08.09.23
✎
15:27
|
(8) и как это сюда прилепить?
|
|||
13
tgu82
08.09.23
✎
15:32
|
(11) Пробовал. ФормаРасш - это РасширениФормы из глобального модуля. Но тогда ничего не работает вообще
Функция ИмяКолонки() ИмяКолонки_=""; Попытка ФормаРасш.Обновить(); ИмяКолонки_= ""+ФормаРасш.ТекущаяКолонка()+": "+ПолучитьАтрибут(ФормаРасш.ТекущаяКолонка()); Возврат ИмяКолонки_; Исключение Возврат ""; КонецПопытки; Возврат ""; КонецФункции |
|||
14
tgu82
08.09.23
✎
15:33
|
(13)+ Или ФормаРасш надо каждый раз инициализировать в процедуре формекса После Открытия ???
|
|||
15
Харлампий Дымба
08.09.23
✎
15:39
|
(12) Перерисовывать реже, не при пробеге курсора по каждой колонке таблицы дёргать Форма.Обновить(), а раз в секунду проверять изменилось ли Форма.ТекущаяКолонка() и обновлять при необходимости.
|
|||
16
tgu82
08.09.23
✎
15:42
|
(12) Через ФормаРасш.Обновить() не мигает но и значения атрибутов не показывает.
(15) Так Форма.ТекущаяКолонка() и меняется после Обновить(1) Иначе вообще не меняется пока клавишу Ввода не нажмешь |
|||
17
Харлампий Дымба
08.09.23
✎
15:44
|
(16) То есть без внешних компонент никак? Хм
|
|||
18
tgu82
08.09.23
✎
15:50
|
(18) ТАк из помощью Формекса не получается. Чего-то я не соображаю.
Там есть еще процедура ПослеОБновленияФормы. Но как к ней прицепить вызов функции в текстовом поле на форме чтоб показать необходимую мне информацию - не знаю |
|||
19
tgu82
08.09.23
✎
15:50
|
(17) Сорри
|
|||
20
tgu82
08.09.23
✎
15:54
|
(19)+ ФиксироватьМногострочнуюЧасть получается, максимизировать окно получается а вот тут неудобно потому что экран дергается как ненормальный.
Мне это надо из-за того что нет возможность наименование колонок в форме списка справочника в несколько строк (для ТЗ у Альфа такое работает) и поэтому я показываю наименование заголовка колонки (на форме не видно если длинные) и тут же значений колонки, которые тоже не видны потому что растянуть значение колонки по высоте исходя из ее ширина я не смог - не нашел какими методами такое можно сделать в Формексе. |
|||
21
tgu82
08.09.23
✎
15:56
|
(9) Насчет использования ТАбличногоПоля. Слишком мало знаний о нем. И к тому же если его использовать как я понимаю то
все удобства Формы списка справочника включая отбор поиск и пр - придется делать самому |
|||
22
tgu82
08.09.23
✎
15:57
|
Я и Альфу написал но пока он ничего не ответил. Занят видимо
|
|||
23
tgu82
08.09.23
✎
16:22
|
(17) Есть реквизит справочника Дата_Точки_подключения с синонимом :Срок представления точки подключения по договору (доп. согл.)
В Форме списка справочника выходит именно нормальное человеческое название но Форма.ТекущаяКолонка() показывает Дата_Точки_подключения а не Синоним - название в человеческом виде. Как зацепить именно синоним ??? |
|||
24
Харлампий Дымба
08.09.23
✎
16:27
|
(23) а как в (1) Форма.ПолучитьАтрибут(Форма.ТекущаяКолонка()).Заголовок(), не?
|
|||
25
tgu82
08.09.23
✎
16:45
|
(24) Ну точно же. Спасибо огромное!!! Вот я баран. Но мигает и дергается экран. Как бы хоть с помощью чего угодно добороть бы это!!!
|
|||
26
FN
08.09.23
✎
17:54
|
(0) В добавок к этому используй другие события
ПриИзмененииРазмераОкна |
|||
27
FN
08.09.23
✎
17:55
|
+
ПриОтжатииКнопкиКлавиатуры ПриОтжатииЛевойКнопки ПриОтжатииПравойКнопки Если текущая колонка поменялась - то значит меняй заголовко нужного атрибута. |
|||
28
Guk
08.09.23
✎
18:03
|
(12) ты не в курсе, что есть нештатная ОбработкаОжидания для каждой формы?...
|
|||
29
Guk
08.09.23
✎
18:10
|
+(28) по крайней мере форма рефрешиться не будет. вполне себе вариант...
|
|||
30
tgu82
08.09.23
✎
19:42
|
(28) В курсе и я ее использую частенько
|
|||
31
Djelf
08.09.23
✎
21:00
|
(21) Это надуманно что это сложно, это довольно просто.
Но там немного другая идеология работы, примерно как в 8ке. Поиск и штатно нормально работает (но можно бустануть средствами ТП), а с вот с отбором посложнее - слишком много вариантов реализаций, можно по тыке на заголовке, можно по пкм по текущему элементу или что-то другое, можно при наборе паттерна по like при наборе в быстром поиске. ТЗ нервно курит в сторонке… |
|||
32
Злопчинский
08.09.23
✎
21:42
|
Вот засосало @Ëпрст болото снеговика... И всë... Некому мастер класс показать...
|
|||
33
Злопчинский
08.09.23
✎
21:46
|
(15) ну так если толькоивлеаовпраао курсор то хоть раз в двадцать секунд - форма.ТекущаяКолонка() без обновить() не поменяется
|
|||
34
Guk
08.09.23
✎
22:34
|
проверил. как два пальца об асфальт. работает...
Процедура ПолучитьИмяКолонки() Сообщить(Таб.ТекущаяКолонка()); КонецПроцедуры Таб.НоваяКолонка("Колонка1"); Таб.НоваяКолонка("Колонка2"); Таб.НоваяКолонка("Колонка3"); Форма.ОбработкаОжидания("ПолучитьИмяКолонки", 1); |
|||
35
Guk
08.09.23
✎
22:34
|
Таб, это ТЗ на форме...
|
|||
36
Guk
08.09.23
✎
22:36
|
чтобы постоянно не херачила, надо завести переменную, где будет имя текущей колонки. если имя текущей колонки = имя текущей колонки, тогда возврат...
|
|||
37
Харлампий Дымба
08.09.23
✎
22:41
|
(33) Да tgu82 в (16 ) написал же. Да и я поэкспрементировал - видимо действительно горизонтальное движение по форме списка не является событием обновления формы и 1Ска не меняет значение функции ТекущаяКолонка() - тупо возвращает значение, которое было после последнего "обновления".
(34) ТЗ возможно работает, а вот заставить бы форму списка без внешних компонент - было бы интересно |
|||
38
Guk
08.09.23
✎
22:45
|
(37) а какая разница?...
|
|||
39
Харлампий Дымба
08.09.23
✎
22:53
|
(38) ну это Злопа надо спрашивать.
Мне как пользователю со типовой формой списка работать поприятнее чем с типовой ТЗ. |
|||
40
Злопчинский
09.09.23
✎
00:07
|
(34) для формы списка это тоже работает.
. но интересует не вывод в табло, а на форму... |
|||
41
Злопчинский
09.09.23
✎
00:14
|
а на форму без Обновить - не получится
|
|||
42
Злопчинский
09.09.23
✎
00:19
|
получается вот так
на форму кладем Текст, в формуле указываем переменную ФормаТекущаяКолонка в код кладем .
|
|||
43
Злопчинский
09.09.23
✎
00:21
|
есть некомфортный лаг отрисовки на форме после позиционирования курсора на новой колонке, можно этого избежать если ОО запустить через РасширениеФормы с таймаутом ~100 мсек (подобрать максимально большое, но еще комфортное)
|
|||
44
Злопчинский
09.09.23
✎
00:33
|
|
|||
45
Злопчинский
09.09.23
✎
00:34
|
у меня 250мсек - еще комфортно, 50мсек - отлично.
но чем меньше таймаут - выше нагрузка на проц, но процент испоользования ~ до 3% |
|||
46
Злопчинский
09.09.23
✎
00:38
|
но, блин, как-то это иначе решалось кажется мне... (поэтому и ветку завел, что про ОО сразу думал, но как-то "вроде по другому...").
. а может, просто туплю, и так это и решалось... |
|||
47
Злопчинский
09.09.23
✎
00:50
|
50мсек хватает чтобы словить быстрое перемещение по всем колонкам. 250мсек - уже "пропуски", но это некритично для интерактивной работы с просмотром значения на форме и движением курсорам по колонкам ;-)
|
|||
48
Злопчинский
09.09.23
✎
00:50
|
Всем спасибо!
|
|||
49
tgu82
09.09.23
✎
10:58
|
(48) А в яем тут смысл использования Формекс ???
Только в том что штатная обработка ожидания шаг меньше 1с не дает ??? |
|||
50
Злопчинский
09.09.23
✎
12:01
|
(49) угу
|
|||
51
FN
11.09.23
✎
09:13
|
(46)
Надо по событию исполнять код, а не по таймеру. В данном случае код будет работать всегда, даже когда 1С свернута или окно не активно. Вот пример того же функционала, но по событиям. // Процедура ВывестиТекКолонку() Если Форма.Заголовок()<>Форма.ТекущаяКолонка() Тогда Форма.Заголовок(Форма.ТекущаяКолонка()); КонецЕсли; КонецПроцедуры Процедура ПриОтжатииКнопкиКлавиатуры(КодКлавиши,Альт,Шифт,Кнтрл,Символ,ФСО) ВывестиТекКолонку(); КонецПроцедуры Процедура ПриОтжатииЛевойКнопки(СостояниеМыши,КоординатаПоГоризонтали,КоординатаПоВертикали,ФСО) ВывестиТекКолонку(); КонецПроцедуры Процедура ПриОтжатииПравойКнопки(СостояниеМыши,КоординатаПоГоризонтали,КоординатаПоВертикали,ФСО) ВывестиТекКолонку(); КонецПроцедуры Процедура ПриИзмененииРазмераОкна(ТипСобытия,Ширина,Высота) ВывестиТекКолонку(); КонецПроцедуры |
|||
52
Злопчинский
11.09.23
✎
09:37
|
(51) ну, в части задачи ТС это требуется для визуального просмотра выводимого, так что свернут/неактивно - не сильно актуально.
|
|||
53
Злопчинский
11.09.23
✎
09:38
|
(51) локальные события формы срабатывают когда форма неактивна?
|
|||
54
FN
11.09.23
✎
09:51
|
(53) нет
|
|||
55
Злопчинский
11.09.23
✎
13:44
|
(54) "В данном случае код будет работать всегда, даже когда 1С свернута или окно не активно." - ???
|
|||
56
FN
11.09.23
✎
14:58
|
(55) это я писал про код из (42) - обработка ожидания работает всегда. даже если пользователь занимается чем-то другим.
локальные события формы как в (51) срабатывают только когда форма активна и когда произошло событие. То есть процессор не нагружается лишней работой и нет никаких некомфортных лагов. |
|||
57
Злопчинский
12.09.23
✎
00:25
|
(56) ага, спасиб.
. если форму с ОО перекрыть сверху дочерней модальной формой, то ОО в родительской форме продолжает фурычить... Это открывает интересные возможности... Осталось придумать какие ;-) |
|||
58
Злопчинский
12.09.23
✎
00:39
|
(51) кстати, так не выйдет, 1Ска упадет вот здесь при открытии формы списка (тестил на Спр.Номенклатура)
ПриИзмененииРазмераОкна() -> ВывестиТекКолонку() -> Форма.ТекущаяКолонка() -> 1C молча падает... |
|||
59
FN
12.09.23
✎
10:46
|
(58) у меня не падала. Может от версии формеска зависит.
Событие ПриИзмененииРазмераОкна можно не использовать для этой задачи - вряд ли изменится текущая колонка при изменении размера. |
|||
60
Злопчинский
12.09.23
✎
23:46
|
(59) а у тебя какая версия формекса? у меня - 175
|
|||
61
Злопчинский
13.09.23
✎
00:16
|
(59) плюс твой вариант для ТС не подойдет.
да, при изменении размеров окна можно, наверное, убрать (но тестил чисто твой вариант ;-) 1. но если убрать ПриИзмененииРазмеровОкна (на котором у меня падает, пока непонятно почему) - то при открытии формы заголовок формы не поменяется... ;-) Приходится использовать ПриАктивацииОкна() 2. без Форма.Обновить() - не обойтись, ибо заголовок формы менеятс, но функция на форме не отрабатывает-то.. ;-) |
|||
62
Злопчинский
13.09.23
✎
00:16
|
Рабочий вариант:
.
|
|||
63
tgu82
13.09.23
✎
10:19
|
И тогда обработка ожидания не нужна ???
|
|||
64
FN
13.09.23
✎
11:34
|
(60) у меня 2.0.5.131
(61) вместо "кладем на форму текст с функцией, которая выводит идентификатор текущей колонки формы списка" нужно атрибуту с текстом назначить идентификатор и в процедуре ВывестиТекКолонку просто меняем заголовок атрибута формы. Например: Процедура ВывестиТекКолонку() Если Форма.АтрибутТекст_ТекущаяКолонка.Заголовок()<>Форма.ТекущаяКолонка() Тогда Форма.АтрибутТекст_ТекущаяКолонка.Заголовок(Форма.ТекущаяКолонка()); КонецЕсли; КонецПроцедуры При этом не нужно делать Обновить(). Вместо ПриИзмененииРазмеровОкна() можно использовать событие ПослеОткрытия() (63) обработка ожидания в таком случае не нужна. Как и принудительное обновление формы. |
|||
65
Злопчинский
13.09.23
✎
11:55
|
(64) насчет менять заголовок атрибута - это ты ловко придумал... Сейчас попробую!
|
|||
66
Злопчинский
13.09.23
✎
12:16
|
(64) Проверил, работает. Здорово.
.
|
|||
67
Злопчинский
13.09.23
✎
12:17
|
(64)я там скинул на почту 175 формекс - будет возможность - проверь первоначальный вариант с ПриИзмененииРазмераОкна() с этим формексом.
|
|||
68
Злопчинский
13.09.23
✎
12:18
|
(66) ... и там какая-то тонкость есть у модальной формы с использованием ПослеОткрытия... вроде..
в старых каких-то версиях формекса для модальной формы она не отрабатывала, приходилось юзать ПослеСоздания() Сейчас есть ПослеСозданияФормы() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |