Страница 2 из 2
Добавлено: 13 мар 2006, 19:52
sth73
если в cmInit: есть Abort, то он закроется с cmCancel и в параметре ничего не вернет. Если надо что-то вернуть из такого интерфейса в параметре, то его (интерфейс) надо описывать как AlwaysReturn. Тогда интерфейс закроется с cmDefault и вернет значение в параметре. В документации это, насколько я помню, описано.
Добавлено: 14 мар 2006, 08:32
поЧитатель
to sth73
Спасибо.
про AlwaysReturn у меня не было документации.
Добавлено: 17 мар 2006, 13:36
Screw
if( VMain.getFirst tpFirstGuiltyDep <> tsOk)
reScanPanel(tntpFirstGuiltyDep);
В этом коде есть очевидный баг: пересканирование не будет выполнено, если позиционирование прошло успешно. Луше записать это дело вот так:
Код: Выделить всё
if VMain.getFirst tpFirstGuiltyDep <> tsOk {}
reScanPanel(tntpFirstGuiltyDep);
Либо остановиться на таком варианте
Далее, сущность
panel считается устаревшей, а связь "редактор значений полей таблицы" - "обработчик табличных событий" реализуется следующим образом:
Код: Выделить всё
browse|screen|tree ...;
table XXX;
...
end;
...
tableevent table XXX;
cmInsertRecord:
...
...
end;
И, наконец, дополнительные логические таблицы (вьюхи) вам помогут лишь немного сократить время загрузки большого интерфейса. А в остальном они представляют собой только лишний геморрой. Насколько мне известно, поля дополнительных логических таблиц не могут фигурировать в browse|screen|tree, поэтому имеет смысл использовать их только в реализации неких расчетных алгоритмов. Инициализация дополнительной ЛТ происходит только в момент первого к ней обращения (основная ЛТ инициализируется во время загрузки интерфейса), за счет этого и достигается "экономия".