2.Вносим изменения в форму редактирования
Для простоты решения
а рассматриваем пока только на основе поля номер доверенности.
- В BestIde открываем на редактирование форму frmDoveredit.prg
- В форму перетаскиваем объект TBObject
- в форму перетаскиваем объект xbButton
- в форму перетсакиваем еще один объект xbButton
(готовим два объекта под кнопки "ОК" и "ОТМЕНА")
- настраиваем в инспекторе
ВО
Код |
---|
name...........................BO
xbsClassName...................boDover |
DSR
Код |
---|
BOObject.............................BO
TableName............................очищаем значение |
Первая xbButton
Код |
---|
Caption................................OK
ModalResult............................mrOk
Name...................................btnOk |
Вторая xbButton
Код |
---|
Caption................................ОТМЕНА
ModalResult............................mrCancel
Name...................................btnCancel |
- На кнопке ОК делаем двойной щелчок мышкой - получилась заготовка в тескте прогамммы формы
- Повторяем действие на кнопке ОТМЕНА
- Вносим изменения в текст prg файла формы:
Определяем новые методы
Цитата |
---|
METHOD DocSave
METHOD DocClose
METHOD btnOk_Click
METHOD btnCanctl_Click |
Переписываем метод From_Create
Цитата |
---|
::BO:Active:=.T.
::DS:Active:=.T.
::FormState:=p[1] |
FormState выполняет роль аналогичную nApp в InitList
Цитата |
---|
IF ::FormState=2
::bo:bo:append() |
Отрабатываем открытие карточки по F4 (режим ввода)
Не стоит покупаться на append() выполнение этого действия не означает что в
таблице dover.dbf появится новая запись. Ввод записи как бы разделен на две половинки.
Первую часть мы сейчас делаем и вносим данные в некую виртуальную таблицу.
Вторая половинка действия будет выполнена позже - непосредственная запись в таблицу.
Такой механизм позволяет нам легко реализовывать варианты отката, когда нажатие на
клавишу ОК или еще как-либо не инициирует реальную запись. Т.е. в случае кнопки ОТМЕНА
пустой записи в таблице не появится.
Цитата |
---|
elseif ::FormState=1
::ds:goto(p[2]) |
От того что мы открыли новую форму еще не значит что курсор в DS стоит на нужной нам строке. Для этого вторым параметром при открытии формы мы передаем номер записи а тут выполняем переход на нее
Цитата |
---|
::bo:bo:edit()
endif
::ds:refresh() |
После смещения курсора неплохо бы обновить данные в DS
В метод FORM_CLOSE() добавляем строку ::BO:Active:=.F.
В заготовку метода кнопки ОК вносим строки
Цитата |
---|
::DocSave()
::DocClose(0) |
И в метод кнопки ОТМЕНА
Теперь собственно и выполним вторую половинку действия записи в таблицу
Цитата |
---|
METHOD DocSave class frmDoveredit
local lSave
lSave:=::BO:BO:SAVE()
RETURN lSave |
Ну и последний метод для закрытия формы после работы со строкой БД
Цитата |
---|
METHOD DocClose(nAction) class frmDoveredit
if(::parent == nil) .and. (nAction == 0)
::ReturnValue:= ::DS:bo:Recno
endif
::Close(nAction)
RETURN .T. |
Теперь опять компилируем для проверки на отсутствие синтаксических ошибок