Esta no es mi Unit, pero si mi Procedure para hacer el cerre. Abajo una Procedure de INSERT comentada erriba. Mismo con error en la transacion, este Insert esta acontecendo, mismo que la transacion va a RollBack, pues esto estas acontecendo.
Código Delphi
[-]procedure TFrmEncerramento.AtualizaFunv;
const
MAX_CD_FUN = '99999';
var
sCd_Fun, sCD_FunDev: string;
begin
CDS.Close;
CDS.CommandText := 'SELECT'+
' TB_SAC_NF_CAPEADOR.CD_FUNC,'+
' SUM(COALESCE(TB_SAC_NF_CAPEADOR.VL_BRUTO,0) + COALESCE(TB_SAC_NF_CAPEADOR.VL_DESC_ACR,0)) AS VL_LIQ'+
' FROM'+
' TB_SAC_NF_CAPEADOR'+
' WHERE'+
' (TB_SAC_NF_CAPEADOR.CD_FUNC <> 99999) AND'+
' (TB_SAC_NF_CAPEADOR.ST_CANC = 0) AND'+
' ((TB_SAC_NF_CAPEADOR.SR_NF = ''D2'') OR ((TB_SAC_NF_CAPEADOR.SR_NF = ''B2'') AND'+
' (TB_SAC_NF_CAPEADOR.CD_CFOP = 6102)))'+
' GROUP BY'+
' TB_SAC_NF_CAPEADOR.CD_FUNC';
CDS.Open;
CDSDEV.Close;
CDSDEV.CommandText := ' SELECT'+
' TB_SAC_NF_CAPEADOR.CD_FUNC,'+
' SUM(COALESCE(TB_SAC_NF_CAPEADOR.VL_BRUTO,0) + COALESCE(TB_SAC_NF_CAPEADOR.VL_DESC_ACR,0)) AS VL_DEV '+
' FROM' +
' TB_SAC_NF_CAPEADOR' +
' WHERE' +
' (TB_SAC_NF_CAPEADOR.CD_FUNC <> 99999) AND' +
' (TB_SAC_NF_CAPEADOR.ST_CANC = 0) AND' +
' (TB_SAC_NF_CAPEADOR.SR_NF = ''E2'')' +
' GROUP BY'+
' TB_SAC_NF_CAPEADOR.CD_FUNC';
CDSDEV.Open;
if CDS.Eof then begin
sCD_Fun := MAX_CD_FUN;
end
else begin
sCD_Fun := IntToStr(CDS.FieldByName('CD_FUNC').AsInteger);
end;
if cdsdev.Eof then begin
sCD_FunDev := MAX_CD_FUN;
end
else begin
sCD_FunDev := IntToStr(CDSDEV.FieldByName('CD_FUNC').AsInteger);
end;
while Not (sCD_Fun = MAX_CD_FUN) or Not (sCD_FunDev = MAX_CD_FUN) do
begin
if sCD_Fun < sCD_FunDev then begin
sacp_Funv_ins(sCD_FUN,
FormatDateTime('DD/MM/YYYY', gDat),
cds.FieldByName('VL_LIQ').AsFloat);
CDS.Next;
end
else if sCD_Fun = sCD_FunDev then begin
sacp_Funv_ins(sCD_FUN,
FormatDateTime('DD/MM/YYYY', gDat),
(CDS.FieldByName('VL_LIQ').AsFloat - CDSDEV.FieldByName('VL_DEV').AsFloat));
CDS.Next;
CDSDEV.Next;
end
else begin
sacp_Funv_ins(sCD_FunDev,
FormatDateTime('DD/MM/YYYY', gDat),
((-1) * CDSDEV.FieldByName('VL_DEV').AsFloat));
CDSDEV.Next;
end;
if cds.Eof then begin
sCD_Fun := MAX_CD_FUN;
end
else begin
sCD_Fun := CDS.FieldByName('CD_FUNC').AsString;
end;
if cdsdev.Eof then begin
sCD_FunDev := MAX_CD_FUN;
end
else begin
sCD_FunDev := CDSDEV.FieldByName('CD_FUNC').AsString;
end;
end;
CDS.Close;
CDSDEV.Close;
end;