Необходимо отслеживать изменения на управляемой форме и запускать общий обработчик. В идеале при изменением элементов типа "поле ввода", но не обязательно можно, например, отслеживать изменение активности элементов.
Как это реализовать?
Что уже попробовал:
1 Посмотрел все события формы - ничего не подходит
2 Присваивал в цикле всем элементам формы общий обработчик. Работает, но если у элемента был свой, индивидуальный, обработчик он ,соответственно не будет отрабатывать - а надо (был бы массив обработчиков на один элемент по одному событию, но его -нет)

Пояснения к задаче (Конфигурация: Документооборот):

На форме элемента справочника находятся доп. реквизиты (очень много). В зависимости от изменения элементов формы у этих доп. реквизитов должны меняться: видимость, доступность и обязательность. Это реализовано в типовом БСП (работает по ожиданию и сервер не требуется). Но функционал недостаточен. Также есть справочник условий (Документооборот), данные условия могут выполнятся только на сервере. Хочу скрестить БСПшный функционал с функционалом документооборота
---
2 Присваивал в цикле всем элементам формы общий обработчик. Работает, но если у элемента был свой, индивидуальный, обработчик он ,соответственно не будет отрабатывать - а надо (был бы массив обработчиков на один элемент по одному событию, но его -нет)
Создать реквизит соответствие.
При установке своего действия сохранять стандартное действие в соответствие.
В своем обработчике проверять есть ли стандартное действие. И если есть то вызывать сначала его через Выполнить("").
---
2 Присваивал в цикле всем элементам формы общий обработчик. Работает, но если у элемента был свой, индивидуальный, обработчик он ,соответственно не будет отрабатывать - а надо (был бы массив обработчиков на один элемент по одному событию, но его -нет)
Создать реквизит соответствие.
При установке своего действия сохранять стандартное действие в соответствие.
В своем обработчике проверять есть ли стандартное действие. И если есть то вызывать сначала его через Выполнить("").
---
Сейчас проверю. Идея поннравилась
---
Заработало. Новый реквизит на форме не создавал, запихал стандартный обработчик в подсказку элемента
---
ссылка на форум
---
Стесняюсь спросить, какую задачу решаете? Подсистему отмены действий при интерактивной работе?
---
Логичным видится решение, когда каждому элементу формы назначается своя процедура обработкаи "ПриИзменении", из которой затем будет вызываться ваша процедура. Таким образом не будет помех выполнению "своих" обработчиков
---
Да, но на предприятии групповая разработка. Не хочется лезть в чужие обработчики. Да и типовые -тоже
---
Не бывает чужих обработчиков. Групповая разработка этого не предусматривает, не ищите оправдания.
---
Своей общей процедурой вы в любом случае "залезите" в чужие обработчики.
С типовыми уже сложнее - добавление в каждую процедуру кода затруднит обновление, либо же форму вытягивать в расширение нужно будет
Если не нужны данные из полей ввода, тогда предложение с обработчиком ожидания стоит рассмотреть. На сервер по таймауту прыгать совсем не обязательно, сам обработчик выполняется на клиенте, где проверяете Модифицированность формы и, если форма модифицирована, только тогда и отправляете выполнение кода на сервер.
И, да, напишите, какую задачу вы хотите выполнить таким образом?
---
А модифицированность сбрасывать каждый раз?
---
Если достаточно факта без источника, то можно по обработке ожидания анализировать признак модифицированности формы
---
Обработчик ожидания -не вариант. При выполнении обработчика необходимо обращаться на сервер. Будет постоянно прыгать с клиента на сервер
---
Кто такое сказал?
---
так необходимо, выполнить часть кода(или запрос) на сервере
---
Тогда мимо. ВСЕ события формы происходят на клиенте.
---
никто не спорит, но вызвать сервер с клиента сервер никто не мешает
---
"Не мешает" и "заставляет" - разные вещи.
---
Не понял. Если вам нужно прыгать на сервер, то вам в любом случае придется прыгать на сервер. Событие-то ловить все равно на клиенте. А как иначе? Но вариант мне самому не нравится. Просто первое, что в голову взбрело.
---
Да но прыгать по событию все же лучше чем по таймауту
---
По таймауту можно проверить - стоит прыгать или нет (произошли изменения или нет).
---
коллега, напишите какую задачу Вы хотите решить. не описывайте выдуманные Вами способы. Может кто предложит более правильный
---
Зачем прыгать по таймауту? По таймауту проверяется нужно прыгать или нет (не уходя с клиента).
---
Поподробнее. Допустим изменили Организацию в шапке и не единожды
---
В очередном таймауте сможешь понять, что чего-то изменилось. Поэтому я сразу оговорился, что без источника.
Больше всего мне тут не нравится, что придется сбрасывать признак модифицированности, чтобы словить следующее изменение.
---
Или рисовать хранилище для значений критичных элементов формы и проверять только их. Но это ваще какой-то "процесс ради процесса"...
Я этого не говорил!!!
---
Этот вариант мне даже больше нравится. Но да - интересна конечная цель.
---
Если известно имя основного реквизита, можно на клиенте узнать были ли модифицированы данные формы, если сравнивать хеш от текста сериализованного основного реквизита, с предыдущим. Либо иметь массив реквизитов, снимок которых проверяется в обработчике ожидания.
---
Через 30 минут опишу задачу более детально
---
Сериализовать мне не оч. нравится. Да и ЕМНИП в веб-клиенте это не получится сделать на клиенте.
Но можно тупо обходить элементы "Объект" как "ДанныеФормыКоллекция". Заодно и источник легко будет определить (правда, не на уровне элементов формы, но тем не менее).
---
Дополнил описание задачи
---
По дополненному описанию обработка ожидания не подходит, так как лагов быть не должно.
---
Мне самый первый ответ понравился. Проверьте его сначала. Только я бы предложил не соответствие (их под каждый элемент плодить не целесообразно). В свойствах самого элемента сохранить старый обработчик. Я частенько для этого "Подсказку" использую.
---
Я бы первым делом покопался в БСП. Возможно, там уже предусмотрены какие-то хуки.
---
При изменении дополнительных реквизитов используется один общий подключаемый обработчик Подключаемый_ПриИзмененииДополнительногоРеквизита. Посмотрите тут была похожая тема https://forum.infostart.ru/forum9/topic187343/
---
Отслеживать надо не только изменение допов, а обычных рек. тоже