09.11.2007, 14:28 | #1 |
Участник
|
Такая ситуация:
Имметься форма, на форме имеются кнопки.! При нажатие на одну из кнопок, в событие OnPush уменя сразу идет обращения к кодеюниту! В кодеюните производяться различные операции... Как мне допустим выйти из кодеюнита обратно в событие OnPush,не проходя весь код кодеюнита! |
|
09.11.2007, 14:35 | #2 |
Участник
|
|
|
09.11.2007, 15:20 | #3 |
Участник
|
хорошо..копаем глубже... =)
В кодеюните я вызываю ошибку: // Если поле не заполнено... // Комитом, я останавливаю все действия и вызываю ошибку! IF Setup."Pattern Name" = '' THEN BEGIN COMMIT; ERROR(Text1); END; // Как мне в это случае В Этом Условие выйти из кодеюнита обратно в событие! |
|
09.11.2007, 15:39 | #4 |
Участник
|
Цитата:
Код: Setup.TESTFIELD("Pattern Name"); |
|
09.11.2007, 15:41 | #5 |
Участник
|
Это из хелпа про ERROR
Use this function to display an error message and end the execution of C/AL code. Думаю тут надо использовать MESSAGE() а в тексте написать "Ошибка: бла-бла-бла". |
|
09.11.2007, 15:45 | #6 |
Участник
|
Никогда так не делайте.. Иначе дебагер (о котором вы сами упомянули в теме чуть раньше) никогда не выйдет на эту ошибку.. Если вы хотите потратить в несколько раз больше времени для локализации ошибки - не используйте комбинацию MESSAGE() EXIT(). А то придется искать в одном или нескольких объектах по тексту "Ошибка: бла-бла-бла" вместо того, чтобы активизировать дебаггер и запустить код на выполнение.
|
|
09.11.2007, 15:53 | #7 |
Участник
|
Ага, и сообщение будет типа Определите поле "Pattern Name" в таблице Setup, что для юзера то же самое что "Программа выполнила недопустимую операцию и будет закрыта".
|
|
09.11.2007, 15:55 | #8 |
Участник
|
В том то и дело, что время дорого . А что касается MESSEGE. То я так понял человеку нужно дальше выполнение кода. Вот и предложил вариант, иначе написал, что при ERROR идет откат всех выполненных действий до него.
|
|
09.11.2007, 15:57 | #9 |
Участник
|
Цитата:
Подобные проверки (на заполненность критичных полей) нужно делать ДО, а не после выполнения основного алгоритма. |
|
09.11.2007, 16:09 | #10 |
Участник
|
Цитата:
Сообщение от romeo
Именно так. Только так. И пользователь программы Навижен должен привыкать ИМЕННО к этому, к такой реации системы. Этот оператор ОДНОЗНАЧНО определяет ключ записи и поле, значение в котором вызвало ошибку. К тому же сообщение об ошибке, присланное юзером разработчику даст последнему более исчерпывающую информацию и возможно сразу подскажет, в каком месте копать..
|
|
09.11.2007, 16:20 | #11 |
Участник
|
Это сообщение системы. Стандартное. Юзеров много и быть с каждым из них friendly .. А еще некоторые, чтобы быть ближе к пользователям делают отмену учета вместо использования стандартных средств коррекции. Некоторые прописывают юзеров, с которыми нужно быть особенно friendly прямо на открытие форм в строке фильтра .. Ну не заводить же для этого новое поле в таблице Менеджер, выводить это поле в карточку Менеджера и обязать пользователям ставить эту галку кого-то ...
|
|
09.11.2007, 16:38 | #12 |
Участник
|
Цитата:
Сообщение от romeo
Это сообщение системы. Стандартное. Юзеров много и быть с каждым из них friendly .. А еще некоторые, чтобы быть ближе к пользователям делают отмену учета вместо использования стандартных средств коррекции. Некоторые прописывают юзеров, с которыми нужно быть особенно friendly прямо на открытие форм в строке фильтра .. Ну не заводить же для этого новое поле в таблице Менеджер, выводить это поле в карточку Менеджера и обязать пользователям ставить эту галку кого-то ...
|
|
09.11.2007, 16:59 | #13 |
Участник
|
|
|
09.11.2007, 17:24 | #14 |
Участник
|
Цитата:
Сообщение от by_HT
Такая ситуация:
Имметься форма, на форме имеются кнопки.! При нажатие на одну из кнопок, в событие OnPush уменя сразу идет обращения к кодеюниту! В кодеюните производяться различные операции... Как мне допустим выйти из кодеюнита обратно в событие OnPush,не проходя весь код кодеюнита! IF CODEUNIT.RUN(MyNumber) THEN; а выход из кодеюнита: ERROR(''); если нужно с откатом EXIT; если без отката |
|
09.11.2007, 17:44 | #15 |
Участник
|
2 GMC
Слова "Насчет отмены это отдельная история, практика показывает что она в наших условиях нужна. " тербуют пояснения, как слова человека из Лондона 2 romeo и GMC Думаю все же, истина как всегда где-то посередине. С одной стороны Nav выдает сообщения совершенно безграмотные с точки зрения русского языка (хотя, я конечно не филолог). И думаю, уместно писать сообщения для пользователей об их ошибках на нормальном русском языке. С другой сторононы подгонять систему под нежелание пользователей делать нормальные корректирующие документы считаю крайне вредным делом. |
|
09.11.2007, 17:54 | #16 |
Участник
|
Конечно все решается на месте, в зависимости от задачи.. Просто давая совет на форуме человеку, который в навижене не очень давно (я имею в виду автора топика) я не хочу чтобы он видел все возможные варианты.. Иначе не совсем хорошо зная возможности системы и функционал он закрепит для себя шаблоны использования операторов, такие как MESSAGE() EXIT() (у нас в компании писалось такое года 4 назад, до сих пор вызывает раздражение когда наталкиваемся), поймет, что использовать COMMIT очень даже удобно (почему нет? никаких дурацких блокировок), будет включать в текст ошибок слова "Уважаемый " + USERID() ... (кому не приятно вспомнить свой логин) и тд. Я хочу, чтобы он сразу знал, что имеет система для борьбы с частовозникающими ситуациями в работе. К тому же TESTFIELD() это собственно не ошибка. Это бескомпромиссное предупреждение о том, что пользователь плохо делает дело, за которое ему платят бабки (посмотрите юниты учета.. думаю неуместно будет в ряд стандартных тестфилдов пихать свою мессагу об ошибке с дружественным интерфейсом).
Лирика .. |
|
12.11.2007, 14:50 | #17 |
Участник
|
Цитата:
Сообщение от romeo
Конечно все решается на месте, в зависимости от задачи.. Просто давая совет на форуме человеку, который в навижене не очень давно (я имею в виду автора топика) я не хочу чтобы он видел все возможные варианты.. Иначе не совсем хорошо зная возможности системы и функционал он закрепит для себя шаблоны использования операторов, такие как MESSAGE() EXIT() (у нас в компании писалось такое года 4 назад, до сих пор вызывает раздражение когда наталкиваемся), поймет, что использовать COMMIT очень даже удобно (почему нет? никаких дурацких блокировок), будет включать в текст ошибок слова "Уважаемый " + USERID() ... (кому не приятно вспомнить свой логин) и тд. Я хочу, чтобы он сразу знал, что имеет система для борьбы с частовозникающими ситуациями в работе. К тому же TESTFIELD() это собственно не ошибка. Это бескомпромиссное предупреждение о том, что пользователь плохо делает дело, за которое ему платят бабки (посмотрите юниты учета.. думаю неуместно будет в ряд стандартных тестфилдов пихать свою мессагу об ошибке с дружественным интерфейсом).
Лирика .. С TESTFIELD не совсем. Пердставте, что вам вместо кресла за компьютером предложат сидеть на табурете, как на стандартном средстве работы . Не логично и не удобно. Чем юзер хуже? P.S. А вобще можно выделить нужные места цветом, и сказать, что это обязательно для заполнения. Тогда каждый юзер получив сообщение об ошибке и ничего в нем не поняв будет просто перепроверять ввденную информацию с идентификацией по цвету |
|
13.11.2007, 09:02 | #18 |
Участник
|
Цитата:
Сообщение от Fordewind
С частью о наставлении на пусть истинный новых программистов полностью согласен.
С TESTFIELD не совсем. Пердставте, что вам вместо кресла за компьютером предложат сидеть на табурете, как на стандартном средстве работы . Не логично и не удобно. Чем юзер хуже? P.S. А вобще можно выделить нужные места цветом, и сказать, что это обязательно для заполнения. Тогда каждый юзер получив сообщение об ошибке и ничего в нем не поняв будет просто перепроверять ввденную информацию с идентификацией по цвету |
|