try
while not lDeltaDataSet.Eof do
begin
case lDeltaDataSet.UpdateKind of
//修改 `
TUpdateKind.ukModify:
begin
ls_new_billid := lDeltaDataSet.FieldByName('EIBD_BILLID').AsString;
lf_new_inv_fee := lDeltaDataSet.FieldByName('EIBDCstdTtl').AsFloat;
lDeltaDataSet.Prior;
ls_old_billid := lDeltaDataSet.FieldByName('EIBD_BILLID').AsString;
lf_old_in_fee := lDeltaDataSet.FieldByName('EIBDCstdTtl').AsFloat;
If lf_new_inv_fee = '' then lf_new_inv_fee := lf_old_in_fee;
If ls_new_billid = '' then ls_new_billid := ls_old_billid;
lDeltaDataSet.Next;
//恢复结算单开票金额
ls_sql := 'SELECT COUNT(EBH_AUTOIN) lcount FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_old_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
li_count := 0;
while not lQuery.Eof do
begin
li_count := lQuery.FieldByName('lcount').AsInteger;
lQuery.Next;
end;
lQuery.EmptyDataSet;
If li_count = 1 Then
begin
ls_sql := 'SELECT EBH_INV_VALUTA FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_old_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
lf_inv_available_valuta := lQuery.FieldByName('EBH_INV_VALUTA').AsFloat;
If lf_inv_available_valuta < lf_old_in_fee Then
begin
Business.Forms.Dialogs.ShowMessage('恢复结算单开票金额时出错:编号为' + ls_old_billid + '的结算单的已开票金额,不够扣减。');
SysUtils.Abort;
end;
If lf_inv_available_valuta - lf_old_in_fee = 0 Then
begin
ls_bill_inv_status := '20';
end
Else
begin
ls_bill_inv_status := '40';
end;
*********************************************************************************
ls_sql := 'UPDATE EXP_BILL_HEAD SET EBH_INV_VALUTA = EBH_INV_VALUTA - ' + floattostr(lf_old_in_fee) +
', EBH_STATUS = ' + QuotedStr(ls_bill_inv_status) + 'WHERE EBH_AUTOIN = ' + QuotedStr(ls_old_billid);
TDbCommand.ExcSqlex(ls_sql,lQueryex);
end;
**************************************************************************************
//累加结算单开票金额
ls_sql := 'SELECT COUNT(EBH_AUTOIN) lcount FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_new_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
li_count := 0;
while not lQuery.Eof do
begin
li_count := lQuery.FieldByName('lcount').AsInteger;
lQuery.Next;
end;
If li_count = 1 Then
begin
ls_sql := 'SELECT EBH_ALL_VALUTA - EBH_INV_VALUTA INV_AVAILABLE_VALUTA FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_new_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
lf_inv_available_valuta := lQuery.FieldByName('INV_AVAILABLE_VALUTA').AsFloat;
If lf_inv_available_valuta + lf_old_in_fee < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单开票金额时出错:编号为' + ls_new_billid + '的结算单的已开票金额,超出结算金额。');
SysUtils.Abort;
end;
If lf_inv_available_valuta + lf_old_in_fee - lf_new_inv_fee = 0 Then
begin
ls_bill_inv_status := '50';
end
Else
begin
ls_bill_inv_status := '40';
end;
********************************************************************
ls_sql := 'UPDATE EXP_BILL_HEAD SET EBH_INV_VALUTA = EBH_INV_VALUTA + ' + floattostr(lf_new_inv_fee) +
', EBH_STATUS = ' + QuotedStr(ls_bill_inv_status) + 'WHERE EBH_AUTOIN = ' + QuotedStr(ls_new_billid);
TDbCommand.ExcSqlex(ls_sql,lQueryex);
*************************************************************************
end
Else
begin
Business.Forms.Dialogs.ShowMessage('累加结算单开票金额时出错:编号为' + ls_new_billid + '的结算单不存在,不可累加。');
SysUtils.Abort;
Exit;
end;
end;
//插入
TUpdateKind.ukInsert:
begin
ls_new_billid := lDeltaDataSet.FieldByName('EIBD_BILLID').AsString;
lf_new_inv_fee := lDeltaDataSet.FieldByName('EIBDCstdTtl').AsFloat;
//累加结算单开票金额
ls_sql := 'SELECT COUNT(EBH_AUTOIN) lcount FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_new_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
li_count := 0;
while not lQuery.Eof do
begin
li_count := lQuery.FieldByName('lcount').AsInteger;
lQuery.Next;
end;
If li_count = 1 Then
begin
ls_sql := 'SELECT EBH_ALL_VALUTA - EBH_INV_VALUTA INV_AVAILABLE_VALUTA FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_new_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
lf_inv_available_valuta := lQuery.FieldByName('INV_AVAILABLE_VALUTA').AsFloat;
If lf_inv_available_valuta < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单开票金额时出错:编号为' + ls_new_billid + '的结算单的已开票金额,超出结算金额。');
SysUtils.Abort;
end;
If lf_inv_available_valuta - lf_new_inv_fee = 0 Then
begin
ls_bill_inv_status := '50';
end
Else
begin
ls_bill_inv_status := '40';
end;
***********************************************************************
ls_sql := 'UPDATE EXP_BILL_HEAD SET EBH_INV_VALUTA = EBH_INV_VALUTA + ' + floattostr(lf_new_inv_fee) +
', EBH_STATUS = ' + QuotedStr(ls_bill_inv_status) + 'WHERE EBH_AUTOIN = ' + QuotedStr(ls_new_billid);
TDbCommand.ExcSqlex(ls_sql,lQueryex);
************************************************************************************
end
Else
begin
Business.Forms.Dialogs.ShowMessage('累加结算单开票金额时出错:编号为' + ls_new_billid + '的结算单不存在,不可累加1。');
SysUtils.Abort;
Exit;
end;
end;
//删除
TUpdateKind.ukDelete:
begin
ls_old_billid := lDeltaDataSet.FieldByName('EIBD_BILLID').AsString;
lf_old_in_fee := lDeltaDataSet.FieldByName('EIBDCstdTtl').AsFloat;
//恢复结算单开票金额
ls_sql := 'SELECT COUNT(EBH_AUTOIN) lcount FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_old_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
li_count := 0;
while not lQuery.Eof do
begin
li_count := lQuery.FieldByName('lcount').AsInteger;
lQuery.Next;
end;
If li_count = 1 Then
begin
ls_sql := 'SELECT EBH_INV_VALUTA INV_AVAILABLE_VALUTA FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_old_billid);
lQuery := TDbCommand.OpenSql(ls_sql);
lf_inv_available_valuta := lQuery.FieldByName('INV_AVAILABLE_VALUTA').AsFloat;
If lf_inv_available_valuta < lf_old_in_fee Then
begin
Business.Forms.Dialogs.ShowMessage('恢复结算单开票金额时出错:编号为' + ls_old_billid + '的结算单的已开票金额,不够扣减2。');
SysUtils.Abort;
end;
If lf_inv_available_valuta - lf_old_in_fee = 0 Then
begin
ls_bill_inv_status := '20';
end
Else
begin
ls_bill_inv_status := '40';
end;
******************************************************************************
ls_sql := 'UPDATE EXP_BILL_HEAD SET EBH_INV_VALUTA = EBH_INV_VALUTA - ' + floattostr(lf_old_in_fee) +
', EBH_STATUS = ' + QuotedStr(ls_bill_inv_status) + 'WHERE EBH_AUTOIN = ' + QuotedStr(ls_old_billid);
TDbCommand.ExcSqlex(ls_sql,lQueryex);
***************************************************************************************
end;
end;
else
//
end;
lDeltaDataSet.NextStatus;
end;
finally
lDeltaDataSet.Free;
end; |