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

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

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

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

aleon1

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


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


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


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


Что я делаю не так?
Программист без "1С".
Знал Fortran, Macroassembler, Lisp, C, Pascal, VBA, JavaScript, вот только никак не могу одолеть 1С

antoneus

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

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

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

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

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

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

aleon1

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

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

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

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

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

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

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



Программист без "1С".
Знал Fortran, Macroassembler, Lisp, C, Pascal, VBA, JavaScript, вот только никак не могу одолеть 1С

antoneus

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

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

aleon1

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

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

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

Добавление этой строчки ничего не изменило, по-прежнему хочется понять, как надо делать правильно.
Программист без "1С".
Знал Fortran, Macroassembler, Lisp, C, Pascal, VBA, JavaScript, вот только никак не могу одолеть 1С

antoneus

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

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

aleon1

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

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

Благодарю Вас, сработало!
Программист без "1С".
Знал Fortran, Macroassembler, Lisp, C, Pascal, VBA, JavaScript, вот только никак не могу одолеть 1С

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск