Tema: Transacion
Ver Mensaje Individual
  #2  
Antiguo 20-05-2008
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Reputación: 21
Paulao Va por buen camino
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
   //..> Obtem Valor das Vendas agrupadas por Vendedor.
   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;
   //..> Obtem Valor das Devoluções agrupadas por Vendedor.
   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;
   //..> Carrega variável de Funcionarios.
   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;
   //..> Loop.
   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;
Responder Con Cita