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

Как правильно писать сообщения пользователю?

Автор aleon1, 28 мая 2020, 03:36

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

aleon1

Добрый день!
Хочу вывести сообщение с привязкой к полю ввода управляемой формы (поле называется "Начало"), в соответствии с рекомендацией в обработчике события ПриИзменении для поля "Начало" пишу такой код:


&НаКлиенте
Процедура НачалоПриИзменении(Элемент)
Лажа = ? ((Отчет.Начало > Отчет.Окончание), Истина, Ложь);
Если Лажа Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка: начало периода больше окончания. Отчет не будет сформирован.";
Сообщение.Поле = "Начало";
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры


Но сообщение выводится не около поля "Начало", а в самом низу страницы, как если бы я просто написал:


&НаКлиенте
Процедура НачалоПриИзменении(Элемент)
Лажа = ? ((Отчет.Начало > Отчет.Окончание), Истина, Ложь);
Если Лажа Тогда
Сообщить("Ошибка: начало периода больше окончания. Отчет не будет сформирован.");
КонецЕсли;
КонецПроцедуры


Что я делаю не так?

antoneus

Проверку надо вешать не на событие изменения, а ставить в начало процедуры сформировать, сообщать и делать возврат, если начало больше окончания. А что не так - забыл написать Сообщение.УстановитьДанные(Отчет)

Код можно упростить до

Лажа = Отчет.Начало > Отчет.Окончание

а потом еще упростить до

Если Отчет.Начало > Отчет.Окончание Тогда

А еще можно использовать стандартный период. Туда тоже можно неправильный интервал впихнуть, но вероятность этого уже меньше.

aleon1

Цитата: antoneus от 28 мая 2020, 09:19
Проверку надо вешать не на событие изменения, а ставить в начало процедуры сформировать, сообщать и делать возврат, если начало больше окончания. А что не так - забыл написать Сообщение.УстановитьДанные(Отчет)

Код можно упростить до

Лажа = Отчет.Начало > Отчет.Окончание

а потом еще упростить до

Если Отчет.Начало > Отчет.Окончание Тогда

А еще можно использовать стандартный период. Туда тоже можно неправильный интервал впихнуть, но вероятность этого уже меньше.

Какая разница где проверять правильность вводимых данных, главное, чтобы стандартный механизм работал как надо, а он не работает... См. картинку




antoneus

Разница такая, что после того, как у пользователя в пятый выскочит предупреждение о том, что дата начала больше даты окончания, а дату окончания он еще не заполнил, потому что логично начинать заполнение с даты начала - он начнет тихо материться. Но, в самом деле, кто об этих пользователях думает вообще.

Цитата: antoneus от 28 мая 2020, 09:19
А что не так - забыл написать Сообщение.УстановитьДанные(Отчет)

aleon1

Цитата: antoneus от 28 мая 2020, 09:51
Разница такая, что после того, как у пользователя в пятый выскочит предупреждение о том, что дата начала больше даты окончания, а дату окончания он еще не заполнил, потому что логично начинать заполнение с даты начала - он начнет тихо материться. Но, в самом деле, кто об этих пользователях думает вообще.

Я вообще-то подумал о пользователе и при открытии формы "Начало" и "Окончание" уже заполнены так, как хотел заказчик. Но у заказчика, видимо, есть особо продвинутые пользователи, которым при редактировании (когда и редактировать-то не надо) перепутать начало и окончание раз плюнуть, так что сообщение появится только в том случае, когда соблюдается условие проверки.
Мне все равно, где будет выводиться сообщение, но, если механизм не работает так, как написано, то зачем вся эта камасутра с СообщениеПользователю.

Цитата: antoneus от 28 мая 2020, 09:19
А что не так - забыл написать Сообщение.УстановитьДанные(Отчет)

Добавление этой строчки ничего не изменило, по-прежнему хочется понять, как надо делать правильно.

antoneus

А, правильно, что неправильно, это для реквизита формы так. Для реквизита объекта надо писать

Сообщение.ПутьКДанным = "Отчет.Начало"

aleon1

Цитата: antoneus от 28 мая 2020, 10:56
А, правильно, что неправильно, это для реквизита формы так. Для реквизита объекта надо писать

Сообщение.ПутьКДанным = "Отчет.Начало"

Благодарю Вас, сработало!

Теги:

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

Рейтинг@Mail.ru

Поиск