Страница 1 из 2

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 12 Декабрь 2015, 15:04
pansoft
Добрый день, всем!

Как правильно написать код кнопки "Ок!", когда нужно проверить, например правильность заполнения полей, и если что не правильно,
то вернутся к редактированию формы, если правильно то закрыть форму?

Заранее благодарен.

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 12 Декабрь 2015, 15:45
gopstop2007
Вы бы указали версию клариона и какие шаблоны используете (Clarion,ABC)...

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 12 Декабрь 2015, 16:11
pansoft
Извеняюсь! Clarion 9.1 ABC.

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 12 Декабрь 2015, 17:05
gopstop2007
Самое простое, до Generated code в Event-е кнопки

Код: Выделить всё

IF a <> 0 THEN select(a); CYCLE END

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 12 Декабрь 2015, 17:41
pansoft
Спасибо, то что нужно!

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 13 Декабрь 2015, 17:02
kreator
"CYCLE" не совсем здесь точно. Лучше сразу "return Level:Notify". Подозреваю, что обработка CYCLE в данных методах ABC-классов осталась для совместимости с Legacy.

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 13 Декабрь 2015, 22:48
Shur
gopstop2007 писал(а): Самое простое, до Generated code в Event-е кнопки

Код: Выделить всё

IF a <> 0 THEN select(a); CYCLE END
Что до меня, то меня вполне устраивает использование CYCLE. Только здесь есть одна ошибка. Надо бы так:

Код: Выделить всё

IF a <> 0 THEN select(?a); CYCLE END
К сожалению, эта ошибка довольно трудно вылавливается, а компилятор думает, что такова задумка мастера, даже warning'а не выдает.

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 15 Декабрь 2015, 11:33
morkovin
когда нужно проверить, например правильность заполнения полей, и если что не правильно,
то вернутся к редактированию формы, если правильно то закрыть форму?
Не понимаю, почему просто не использовать шаблоны Sv Business Rules (global / local)?

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 29 Декабрь 2015, 8:53
ACN
morkovin писал(а): Не понимаю, почему просто не использовать шаблоны Sv Business Rules (global / local)?
CW6.3 ABC. Мне потребуется сделать несколько больше, реализовать причинно-следственную связь в последовательности записей. Поскольку содержимое очередной записи в моей задаче может зависеть от содержания предыдущей записи, то и при добавлении/редактировании последней записи я должен прочитать предыдущую, а по Ok! не только проверить заполнение полей в текущей, но и при определённом условии внести правку в предыдущую запись. Естественно, что сейчас я понятия не имею как это можно настроить и будет делать в АБС. Поделитесь возможными решениями, плиз!

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 29 Декабрь 2015, 11:22
kreator
ACN писал(а):Поскольку содержимое очередной записи в моей задаче может зависеть от содержания предыдущей записи, то и при добавлении/редактировании последней записи я должен прочитать предыдущую, а по Ok! не только проверить заполнение полей в текущей, но и при определённом условии внести правку в предыдущую запись.
На мой взгляд, неправильный подход. Не знаю конкретики, но я бы сделал наоборот - сначала прочитал бы содержимое предыдущей записи, а потом позволил бы пользователю занести только то, что можно. Ну и пример недавний для понимания. У сотрудника в компании могут быть события: приём на работу, перемещение, увольнение. Так вот. Я проверяю, если нет записей совсем, то может быть только "приём". Если есть "приём", то только "перемещение" или "увольнение". Если есть "увольнение" - то только "приём". Как-то так.

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 29 Декабрь 2015, 11:41
ACN
kreator писал(а): но я бы сделал наоборот - сначала прочитал бы содержимое предыдущей записи, а потом позволил бы пользователю занести только то, что можно.
Так и сделано под ДОС, об этом и писал. Причём возможна и цепочка таких связанных записей и не обязательно с предыдущей, но может и с предпредыдущей.
Пояснить суть можно на примере записей наблюдений над объектом. Некоторые наблюдения не получились, пишем то что получилось, ставим пометку повторить, а потом когда повторили возвращаемся и дописываем, что повторено токого то числа. Примерно так.

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 29 Декабрь 2015, 12:24
kreator
ACN писал(а):Так и сделано под ДОС, об этом и писал.
Ну и не надо никаких изменений. Методика работы с реляционными БД не изменилась. Тем более это Clarion, поддерживает старые подходы. В Вашем случае (если всё же хочется писать в предыдущую запись, что неправильно, я бы сделал в новой ссылку на старую) нужно идти в метод окна Kill и там писать в Embeds до закрытия таблиц/файлов свой код, типа:

Код: Выделить всё

  if (self.Request=InsertRecord or self.Request=ChangeRecord) and self.Response=RequestCompleted
     ...
  end

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 29 Декабрь 2015, 12:34
ACN
kreator писал(а): если всё же хочется писать в предыдущую запись, что неправильно, я бы сделал в новой ссылку на старую
Что значит неправильно? Мне понадобится читать старую запись при просмотрах и писать в отчётах и решать вопрос было или нет повторено неудачное наблюдение как и было запланировано. Смысл писать в новую запись есть только тогда когда нет задачи отчётов и контроля, я так понимаю. Другое дело подумать над вспомогательным файлом, но я что ничего не придумал пока.
Вся эта кухня в рамках одной транзакции, однако...

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 29 Декабрь 2015, 13:01
kreator
Вы в новой записи делаете ссылку на старую. А при просмотрах старой и т.д. отображаете информацию, записанную в новой. Грубо говоря, связь "родитель-ребёнок".

Проверка условий при нажатии кнопки "ОК!"

Добавлено: 29 Декабрь 2015, 13:21
ACN
kreator писал(а): Вы в новой записи делаете ссылку на старую. А при просмотрах старой и т.д. отображаете информацию, записанную в новой. Грубо говоря, связь "родитель-ребёнок".
По Вашей методе мне всё равно надо в старой указывать ссылку на новую, потому что я понятия не имею в старой записи о том, что она исполнена должным образом и в какой конкретно очередной новой записи. У меня целые цепочки таких повторений наблюдений. Так что не прокатит писать только в новой, по крайней мере я такой механики пока не придумал.
Выкладывать запись контроля в отдельный дочерний файл тоже не здорово, лишние тормоза на отчётах и логика не проще.