Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 07:24

Событие при изменении любого элемента формы типа "Поле ввода" , "Таблица формы" (управляемое приложение) ?

Автор oooo800, 28 авг 2020, 14:22

0 Пользователей и 2 гостей просматривают эту тему.

oooo800

Самописная конфигурация, платформа 8.3.16, управляемые формы.
Есть форма элемента справочника, с кучей реквизитов типа Поле ввода и одним Таблица формы.
До записи формы, после изменения любого из элементов формы, форма становится модифицированной - появляется значок "*" и свойство формы Модифицированность устанавливается в Истина.
Нужно сразу после этого вывести в эту же форму сообщение, например, что элемент теперь редактируется.
Но события ПриИзменении формы нет.
.
Как это лучше всего сделать, для Толстого/Тонкого и Веб клиента ?

LexaK

а что, самой звездочки, которая и говорит что элемент редактируется - не достаточно?
ее,что, плохо видно?
если помогло нажмите: Спасибо!

oooo800

Некоторые пользователи, особенно в совсем зрелом возрасте ее не видят (она не привлекает их внимание) и появилась такая задача.

Ее реализовал, но, пока считаю, не очень оптимальным путем, хотя пока знаю его как единственный:
"обход" всех нужных элементов формы в "ПриСозданииНаСервере" в цикле и установка действия "ПриИзменении" этих элементов на одну для всех этих элементов процедуру &НаКлиенте,что-то вроде "ПриИзменениииКучиРеквизитов" .
Работает.
Но хотелось бы что-то по элегантнее......

LexaK

попробуйте в событии
ПриОткрытииФормы

подключить обработчик ожидания, с периодом 2-3 сек.
в процедуре обработчика проверяете Модифицированность и выводите в заголовок приписку
ЗаголовокФормы +" (Редактирование)"

в этом случае, не надо, все события, всех элементов формы перехватывать
если помогло нажмите: Спасибо!

oooo800

Да не хотелось бы со временем, а по событию - после факта наступления изменения.

Вдруг пользователь откроет форму, она будет открыта несколько минут, а потом передумает что-то делать в ней и закроет её неизменной.
А в это время каждые 2-3 секунды будет опрос...

С событием, по крайней мере, может по времени исполнения это и более затратно, но только 1 раз, при открытии формы.
В любом случае спасибо за вариант.

Если у вас есть возможность достучаться до 1С, может отправить им "хотелку" с таким событием - тем более, факт изменения формы "отлавливается" в люобом случае.

LexaK

ЦитироватьА в это время каждые 2-3 секунды будет опрос...
и чё? таких опросов с 1С-ке тысячи, кучу системных опросов вы просто не видите, а они есть!

и если оптимально напишите, это будет занимать пару микросекунд,
зато у вас одна процедурка, в одном месте формы
если помогло нажмите: Спасибо!

oooo800

Цитата: LexaK от 28 авг 2020, 17:20
ЦитироватьА в это время каждые 2-3 секунды будет опрос...
и чё? таких опросов с 1С-ке тысячи, кучу системных опросов вы просто не видите, а они есть!

и если оптимально напишите, это будет занимать пару микросекунд,
зато у вас одна процедурка, в одном месте формы
И ни чё. :D
Первоначально за это и думал, не поверите.
Но не хочется добавлять в эту кучу еще и свою кучку.
Как и не хочется первоначально "грузить" событиями кучу элементов.
Просто предположил, что есть "секретный метод"  - аля "секретное" событие, которое не известно мне, но известно Гуру.
Оказывается, всего 2 вариант:
- опрос каждые .... секунд/минут/часов;
- установка события на ВСЕ реквизиты, меняющие форму.

IL2016

Цитата: oooo800 от 28 авг 2020, 14:22...Нужно сразу после этого вывести в эту же форму сообщение, например, что элемент теперь редактируется.
Но события ПриИзменении формы нет.
Есть метод ПоказатьПредупреждение().
Есть метод ПоказатьОповещениеПользователю().

Использую учебную платформу 1С:Предприятие 8.3

oooo800

Цитата: IL2016 от 31 авг 2020, 21:49
Цитата: oooo800 от 28 авг 2020, 14:22...Нужно сразу после этого вывести в эту же форму сообщение, например, что элемент теперь редактируется.
Но события ПриИзменении формы нет.
Есть метод ПоказатьПредупреждение().
Есть метод ПоказатьОповещениеПользователю().

Великолепно.
А в каком событии их "запускать" ?
Во в чем главный вопрос.
Про эти методы знаю.
Было бы что-то "ПриИзмененииФорма(.....)"
Так оттуда можно использовать эти и другие методы.

LexaK

oooo800, вы с самого начала неправильно подошли к решению этой задачи
по большому счету, работа пользователя в базе, сводится к двум режимам
1.либо он (пользователь) что-то смотрит в базе
2.либо вводит/изменяет данные

для вашего случая подходит следующий "правильны/взрослый" вариант.
1.добавьте в реквизиты формы реквизит ЭтоРедактирование - Тип:Булево
2.настройте открытие формы элемента ВашегоСправочника только на просмотр 
в событии ПриОткрытии(), Этаформа.ТолшькоПросмотр = Не ЭтоРедактирование;
при обычном открытии формы реквизит ЭтоРедактирование будет равен Ложь.
3.в Форме СПИСКА вашего справочника сделайте кнопку: Редактировать
при нажатии на эту кнопку, создаете форму Элемента и в параметрах передаете ЭтоРедактирование = Истина
В самой форме, в событии ПриОткрытии
Если ЭтоРедактирование Тогда
    а.Пытаетесь заблокировать данный элемент справочника, вдруг его уже кто-то редактирует, получите предупреждение кто редактирует, форму не открываете
    б.Если блокировка установилась, вот здесь в заголовок и пишите большими буквами РЕДАКТИРОВАНИЕ ЭЛЕМЕНТА ....

суть такая, как бы пользователь не кликал по элементу справочника, ему открывается форма только на просмотр,
если же пользователю необходимо внести зменения, то ему надо выделить в списке нужный элемент и нажать вашу кнопку Редактирвать
в принциае эту кнопку можно разметить и на самой форме элемента,
Пользователь открыл форму (на просмотр) что-то там увидел, что срочно изменить нужно, нажимает на кнопку Редатировать и при этом отрабатывает алгоритм выше (с блокировкой и с доступом на редактирование).
если помогло нажмите: Спасибо!

Похожие темы (5)

Рейтинг@Mail.ru

Поиск