//插入
TUpdateKind.ukInsert:
begin
ls_new_billid := lDeltaDataSet.FieldByName('EIBD_BILLID').AsString;
ls_new_contract := lDeltaDataSet.FieldByName('EICONTRACT').AsString;
ls_new_feename := lDeltaDataSet.FieldByName('EIFEENAME').AsString;
ls_new_paymentflag := lDeltaDataSet.FieldByName('EIBD_PAYMENT_FLAG').AsString;
lf_new_inv_fee := lDeltaDataSet.FieldByName('EIBDCstdTtl').AsFloat;
//累加结算单开票金额
//明细档
ldc_ServiceCharge := 0;
ldc_FitmentCharge := 0;
ldc_OtherExpenses := 0;
ldc_MagrofCardFee := 0;
ldc_VacantRent := 0;
ldc_TotalAmount := 0;
ls_sql := 'SELECT COUNT(EBD_AUTOIN) lcount FROM EXP_BILL_DETAIL WHERE EBD_MAINID = ' + QuotedStr(ls_new_billid) +
' AND EBD_CONTRACT = ' + QuotedStr(ls_new_contract) + ' AND EBD_PAYMENT_FLAG = ' + QuotedStr(ls_new_paymentflag) ;
lQueryex := TDbCommand.OpenSqlex(ls_sql, lQueryex);
li_count := 0;
while not lQueryex.Eof do
begin
li_count := lQueryex.FieldByName('lcount').AsInteger;
lQueryex.Next;
end;
lQueryex.EmptyDataSet;
If li_count = 1 Then
begin
ls_sql := 'SELECT (EBD_ServiceCharge - EBD_InvServiceCharge) EBD_ServiceCharge, ' +
'(EBD_FitmentCharge - EBD_InvFitmentCharge) EBD_FitmentCharge, ' +
'(EBD_OtherExpenses - EBD_InvOtherExpenses) EBD_OtherExpenses, ' +
'(EBD_MagrofCardFee - EBD_InvMagrofCardFee) EBD_MagrofCardFee, ' +
'(EBD_VacantRent - EBD_InvVacantRent) EBD_VacantRent, ' +
'(EBD_TotalAmount - EBD_InvTotalAmount ) EBD_TotalAmount, ' +
' EBD_STATUS ' +
' FROM EXP_BILL_DETAIL WHERE EBD_MAINID = ' + QuotedStr(ls_new_billid) +
' AND EBD_CONTRACT = ' + QuotedStr(ls_new_contract) + ' AND EBD_PAYMENT_FLAG = ' + QuotedStr(ls_new_paymentflag) +
' AND EBD_PAYMENT_FLAG = ' + QuotedStr(ls_new_paymentflag);
lQueryex := TDbCommand.OpenSqlex(ls_sql, lQueryex);
ldc_ServiceCharge1 := lQueryex.FieldByName('EBD_ServiceCharge').asfloat;
ldc_FitmentCharge1 := lQueryex.FieldByName('EBD_FitmentCharge').AsFloat;
ldc_OtherExpenses1 := lQueryex.FieldByName('EBD_OtherExpenses').AsFloat;
ldc_MagrofCardFee1 := lQueryex.FieldByName('EBD_MagrofCardFee').AsFloat;
ldc_VacantRent1 := lQueryex.FieldByName('EBD_VacantRent').AsFloat;
ldc_TotalAmount1 := lQueryex.FieldByName('EBD_TotalAmount').AsFloat;
//物业管理费
If ls_new_feename = gs_ServiceCharge Then
begin
If ldc_ServiceCharge1 < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单明细时出错2:编号为 ' + ls_new_billid + '合同号为 ' + ls_new_contract + '费用名称为 ' + ls_new_feename + '的结算单的已开票金额,超出可开票金额。');
lQueryex.Connection.Transaction.Rollback(H);
SysUtils.Abort;
end;
ldc_ServiceCharge := lf_new_inv_fee;
end;
//家具租赁费
If ls_new_feename = gs_FitmentCharge Then
begin
If ldc_FitmentCharge1 < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单明细时出错2:编号为 ' + ls_new_billid + '合同号为 ' + ls_new_contract + '费用名称为 ' + ls_new_feename + '的结算单的已开票金额,超出可开票金额。');
lQueryex.Connection.Transaction.Rollback(H);
SysUtils.Abort;
end;
ldc_FitmentCharge := lf_new_inv_fee;
end;
//物业其他费
If ls_new_feename = gs_OtherExpenses Then
begin
If ldc_OtherExpenses1 < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单明细时出错2:编号为 ' + ls_new_billid + '合同号为 ' + ls_new_contract + '费用名称为 ' + ls_new_feename + '的结算单的已开票金额,超出可开票金额。');
lQueryex.Connection.Transaction.Rollback(H);
SysUtils.Abort;
end;
ldc_OtherExpenses := lf_new_inv_fee;
end;
//会所费
If ls_new_feename = gs_MagrofCardFee Then
begin
If ldc_MagrofCardFee1 < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单明细时出错2:编号为 ' + ls_new_billid + '合同号为 ' + ls_new_contract + '费用名称为 ' + ls_new_feename + '的结算单的已开票金额,超出可开票金额。');
lQueryex.Connection.Transaction.Rollback(H);
SysUtils.Abort;
end;
ldc_MagrofCardFee := lf_new_inv_fee;
end;
//空房租金
If ls_new_feename = gs_VacantRent Then
begin
If ldc_VacantRent1 < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单明细时出错2:编号为 ' + ls_new_billid + '合同号为 ' + ls_new_contract + '费用名称为 ' + ls_new_feename + '的结算单的已开票金额,超出可开票金额。');
lQueryex.Connection.Transaction.Rollback(H);
SysUtils.Abort;
end;
ldc_VacantRent := lf_new_inv_fee;
end;
If ldc_TotalAmount1 = lf_new_inv_fee Then
begin
ls_status := '50';
end
Else
begin
ls_status := '40';
end;
ls_sql := 'UPDATE EXP_BILL_DETAIL SET ' +
' EBD_InvServiceCharge = EBD_InvServiceCharge + ' + floattostr(ldc_ServiceCharge) +
' ,EBD_InvFitmentCharge = EBD_InvFitmentCharge + ' + floattostr(ldc_FitmentCharge) +
' ,EBD_InvOtherExpenses = EBD_InvOtherExpenses + ' + floattostr(ldc_OtherExpenses) +
' ,EBD_InvMagrofCardFee = EBD_InvMagrofCardFee + ' + floattostr(ldc_MagrofCardFee) +
' ,EBD_InvVacantRent = EBD_InvVacantRent + ' + floattostr(ldc_VacantRent) +
' ,EBD_InvTotalAmount = EBD_InvTotalAmount + ' + floattostr(lf_new_inv_fee) +
' ,EBD_STATUS = ' + QuotedStr(ls_status) +
' WHERE EBD_MAINID = ' + QuotedStr(ls_new_billid) +
' AND EBD_CONTRACT = ' + QuotedStr(ls_new_contract) + ' AND EBD_PAYMENT_FLAG = ' + QuotedStr(ls_new_paymentflag);
TDbCommand.ExcSqlex(ls_sql,lQueryex);
end
else
begin
Business.Forms.Dialogs.ShowMessage('累加结算单明细时出错2:编号为 ' + ls_new_billid + '合同号为 ' + ls_new_contract + '的结算单不存在唯一的记录。');
lQueryex.Connection.Transaction.Rollback(H);
SysUtils.Abort;
end;
//头档
ls_sql := 'SELECT COUNT(EBH_AUTOIN) lcount FROM EXP_BILL_HEAD WHERE EBH_AUTOIN = ' + QuotedStr(ls_new_billid);
lQueryex := TDbCommand.OpenSqlex(ls_sql, lQueryex);
li_count := 0;
while not lQueryex.Eof do
begin
li_count := lQueryex.FieldByName('lcount').AsInteger;
lQueryex.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);
lQueryex := TDbCommand.OpenSqlex(ls_sql, lQueryex);
lf_inv_available_valuta := lQueryex.FieldByName('INV_AVAILABLE_VALUTA').AsFloat;
If lf_inv_available_valuta < lf_new_inv_fee Then
begin
Business.Forms.Dialogs.ShowMessage('累加结算单开票金额时出错2:编号为' + ls_new_billid + '的结算单的已开票金额,超出结算金额。');
lQueryex.Connection.Transaction.Rollback(H);
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('累加结算单开票金额时出错2:编号为' + ls_new_billid + '的结算单不存在,不可累加1。');
lQueryex.Connection.Transaction.Rollback(H);
SysUtils.Abort;
Exit;
end;
end; |