Страница 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);
Либо остановиться на таком варианте

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

ReReadRecord(tntpFirstGuiltyDep);
Далее, сущность panel считается устаревшей, а связь "редактор значений полей таблицы" - "обработчик табличных событий" реализуется следующим образом:

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

  browse|screen|tree ...;
    table XXX;
    ...
  end;

  ...
  tableevent table XXX;
    cmInsertRecord: 
      ...
    ...
  end;
И, наконец, дополнительные логические таблицы (вьюхи) вам помогут лишь немного сократить время загрузки большого интерфейса. А в остальном они представляют собой только лишний геморрой. Насколько мне известно, поля дополнительных логических таблиц не могут фигурировать в browse|screen|tree, поэтому имеет смысл использовать их только в реализации неких расчетных алгоритмов. Инициализация дополнительной ЛТ происходит только в момент первого к ней обращения (основная ЛТ инициализируется во время загрузки интерфейса), за счет этого и достигается "экономия".