Как уже говорилось, если DocID становится равным 0, сервер закрывает документ.
Сумма документа запрашивается с сервера:
procedure
TDMDoc.RecalcDocSum;
begin
with cdsBody do // Свежие изменения
посылаются на сервер
if ChangeCount > 0 then
ApplyUpdates(-1);
with cdsTitle do
begin
if not (State in [dsEdit, dsInsert]) then
Edit;
FieldByName('Summa').asCurrency := GetDocSum;
end;
end;
function TDMDoc.GetDocSum: Currency;
var
AServer: IrdmDocDisp;
begin
AServer :=
IrdmDocDisp(scDoc.GetServer);
Result := AServer.DocSum;
end;
Поле Summa в клиентском наборе данных – вычисляемое, при этом его тип (свойство FieldKind) установлен в fkInternalCalc, что
позволяет работать с этим полем, как с обычным полем данных, используя методы
Edit и Post. Значение для него создается не в обработчике OnCalcFields, как
требуется для типа fkCalculated, а непосредственно при редактировании записи.
Хотя такой способ хорошим не назовешь, руководство VCL рекомендует использовать
OnCalcFields, принципиальных различий нет, internalCalc-поля вычисляются только
при вызове Post, однократно. Второй способ создания поля - сделать calculated
Fields на сервере, и установить у них ProviderFlags = []; в этом случае поля на
клиенте будут иметь тип fkData (данные записи), и с ними также можно работать, как с обычными полями данных.
Для показа значения поля "Поставщик" удобно
воспользоваться процедурой из модуля DMCommon:
Рекомендуем скачать другие рефераты по теме: зимнее сочинение, шпаргалки по уголовному.