|   |   | 
| 
 | 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) ... и там какая-то тонкость есть у модальной формы с использованием ПослеОткрытия... вроде..
 в старых каких-то версиях формекса для модальной формы она не отрабатывала, приходилось юзать ПослеСоздания() Сейчас есть ПослеСозданияФормы() | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |