Имя: Пароль:
1C
1С v8
УФ. Зачем нужно событие ИзменениеТекстаРедактирования для поля ввода строки?
,
0 Тихий омут
 
08.11.19
03:29
СП:

ИзменениеТекстаРедактирования(<Текст>, <СтандартнаяОбработка>)
Параметры:
<Текст>
Тип: Строка.
Содержит редактируемый текст.
<СтандартнаяОбработка>
Тип: Булево.
В данный параметр передается признак выполнения стандартной (системной) обработки события. Если после вызова обработчика данный параметр содержит значение Ложь, то не будут выполняться действия по автоподбору (в том числе, не будет вызван обработчик события АвтоПодбор).
Значение по умолчанию: Истина.
Описание:
Вызывается при изменении текста в поле ввода – при наборе текста, при работе с буфером обмена, при вызове команд "Отменить"/"Вернуть", а также при отмене ввода.

Любая попытка анализа параметра <Текст> сложнее проверки на пустую строку приводит к весьма неожиданным результатам, делающим бессмысленным любые попытки использования этого события. Может, где-то есть некая волшебная методика её полезного использования? Например, в типовой УТ 11.2 найти пример её применения не удалось
1 RomaH
 
naïve
08.11.19
06:53
там еще строчка ниже должна быть
про серверные вызовы
не?
2 RomaH
 
naïve
08.11.19
06:55
ну да -
но вы молодец - осилили почти весь текст
многие только первую фразу могут понять

пишу письмо - в нем три вопроса
ответ приходит только на первый
3 RomaH
 
naïve
08.11.19
07:04
я использую для красивости - например очищаю связанные с полем списки документов при редактировании этого поля

&НаКлиенте
Процедура ПациентИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)

    ПредыдущаяЯвка = Неопределено;
    
    Элемент.ПодсказкаВвода = "Выберите пациента";
    ДанныеПациента = Неопределено;
    
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(СписокОбращений,"Выводить",ЛОЖЬ,ВидСравненияКомпоновкиДанных.Равно,,Истина);
        
КонецПроцедуры
4 Тихий омут
 
08.11.19
07:06
(1) Увы. Нет там ничего про клиент-сервер. Но даже предположив о неуказанном в СП запрете на выполнение контекстных серверных вызовов из этого события и написав код в обработчике, выполняющийся только на клиенте, от неожиданностей не избавляешься. Достаточно чего угодно сложнее чем проверка на пустую строку. Например, попытаться определить кол-во символов в параметре Текст
5 RomaH
 
naïve
08.11.19
07:08
(4) вы меня удивили ... очень
это что?
https://dl.dropboxusercontent.com/s/fup0hgr473lys56/2019-11-08_07h07_40.png?dl=0
6 ДенисЧ
 
08.11.19
07:11
(5) Интересно, что этот комментарий появился не так давно ...
7 Тихий омут
 
08.11.19
07:11
(3) Пример полезного использования у меня тоже есть - поле ввода строки, при начале ввода в пустое поле открывается список шаблонов значений поля, выбранный шаблон помещается в поле, после чего возможно обычное редактирование.
(5) У меня 8.3.9. Похоже, вендор сподобился изменить описание только в 8.3.15, о чём и говорит в самом низу. То, что я привёл в топике - полная копия содержимого в моем СП
8 Тихий омут
 
08.11.19
07:19
(5) А вообще информация из Вашего скриншота весьма любопытна и даже может оказаться познавательной - "нельзя использовать серверные методы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову". Вот тут несколько размыто "...которые могут привести к серверному вызову" - к любому серверному вызову, не то что контекстному, а вообще любому? Вопрос само собой не к Вам лично, а скорее в порядке поиска истины:)
9 RomaH
 
naïve
08.11.19
07:22
(6) ну я и говорю - большинство
10 Тихий омут
 
08.11.19
07:34
Интересно, что в 8.3.9 конструктор обработчика этого события предлагает создать всё что душе угодно - как контекстный, так и внеконтекстный серверные методы
11 Тихий омут
 
08.11.19
08:01
(9) Уважаемый, большая просьба - потестите на своей платформе простенькую обработку.
Суть - попытка автоматического увеличения высоты поля ввода в зависимости от объема введенного текста.
На форме единственный реквизит типа строка неогр. длины, ид реквизита - Реквизит1,ид эл-та формы, связанного в ним - такой же Реквизит1. В свойствах эл-та формы, связанного с реквизитом, нужно установить многострочный режим, высоту 1 и подключить обработчик события ИзменениеТекстаРедактирования к соответствующей процедуре из кода, который приведен ниже и который нужно поместить в модуль формы:

&НаКлиенте
Перем КолП;

&НаКлиенте
Процедура Обр() Экспорт
    Элементы.Реквизит1.Высота=КолП+1;
КонецПроцедуры // ОбрПустой()

&НаКлиенте
Процедура Реквизит1ИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
    СтрД=СтрДлина(Текст);
    КолП=0;
    Для Сч=1 По СтрД Цикл
        Если Сред(Текст,Сч,1)=Символы.ПС Тогда
            КолП=КолП+1;
        КонецЕсли; // [Сред(Текст,Сч,1)=Символы.ПС]
    КонецЦикла; // Сч=1 По СтрД
    ПодключитьОбработчикОжидания("Обр",0.1,Истина);
КонецПроцедуры
12 Тихий омут
 
08.11.19
08:02
+(11) Это, само собой, грубая заготовка, ориентирующаяся только на кол-во переносов
13 RomaH
 
naïve
08.11.19
08:58
обработку давай готовую
14 Тихий омут
 
08.11.19
09:05
15 RomaH
 
naïve
08.11.19
09:21
16 Тихий омут
 
08.11.19
09:35
(15) Огромное спасибо! Я был слеп:)