Respondendo a pergunta do Gerson, não tinha nenhum valor negativo. Lairton, estou enviando o código da função onde o erro acontece. Mas queriaa deixar claro que essa função funciona, só quando alguma linha da tabela é apagada é que o erro ocorre.
De qualquer forma a solução que eu encontrei foi somar a coluna por meio de um While. Obrigado pela atenção e ajuda de todos. ###################################################################### Function: fPegaRetencoes Description: Seta as retenções de acordo com o cadastro do cliente e com a parametrização das retenções. Returns Parameters Static Variables Local variables String: sRetIss String: sRetInss String: sRetIrrf String: sRetCofins String: sRetPis String: sRetContrib String: sRetRetencRc1 String: sRetRetencRc2 Number: nIss Number: nInss Number: nIrrf Number: nCofins Number: nPis Number: nContrib Number: nRetencRc1 Number: nRetencRc2 Actions If NOT bRetencoes Return FALSE ! If dfAlterouRetencoes != 'S' ! ! Se for venda de Serviço do tipo Fatura, não pega as retenções do cliente If sServicoFatura = 'F' Call fInicializaRetencoes( ) Return FALSE ! O SELECT QUE APARECE NA MENSAGEM DO ERRO Call SqlImmediate( "Select clie_ind_inss, clie_ind_ir, clie_ind_iss, clie_ind_pis, clie_ind_cofins, clie_ind_contrib_social, clie_ind_retencRc, clie_ind_retencRc2, clie_aliquota_inss, clie_aliquota_ir, clie_aliquota_iss, clie_aliquota_pis, clie_aliquota_cofins, clie_aliquota_contribsocial, clie_aliquota_retencRc1, clie_aliquota_retencRc2 from cliente into :sRetInss, :sRetIrrf, :sRetIss, :sRetPis, :sRetCofins, :sRetContrib, :sRetRetencRc1, :sRetRetencRc2, :nInss, :nIrrf , :nIss, :nPis, :nCofins, :nContrib, :nRetencRc1, :nRetencRc2 where clie_cod = :dfnVendClieCod " ) Call SqlClearImmediate( ) ! If sRetInss = 'S' Set cbINSS = TRUE Set dfSecuridadePerc = nInss If sRetIrrf = 'S' Set cbIRRF = TRUE Set dfIRRFPerc = nIrrf If sRetPis = 'S' Set cbPIS = TRUE Set dfPISPerc = nPis If sRetCofins = 'S' Set cbCOFINS = TRUE Set dfCOFINSPerc = nCofins If sRetContrib = 'S' Set cbContribuicaoSoc = TRUE Set dfContribuicaoPerc = nContrib If sRetIss = 'S' Set cbISS = TRUE If sRetRetencRc1 = 'S' Set cbRetencRc1 = TRUE Set dfAliquotaRetencRc1 = nRetencRc1 If sRetRetencRc2 = 'S' Set cbRetencRc2 = TRUE Set dfAliquotaRetencRc2 = nRetencRc2 ! nPercInssTemp If cbINSS Set dfsVendRetInss = 'S' If ( dfSecuridadePerc = NUMBER_Null or dfSecuridadePerc = 0 ) and dfSecuridade != NUMBER_Null Call SalSendMsg( dfSecuridade, SAM_FieldEdit, wParam, lParam ) If NOT bNavegacao Call SalSendMsg( dfsVendRetInss, SAM_AnyEdit, wParam, lParam ) ! aki Call SalSendMsg( dfSecuridadePerc, SAM_Validate, wParam, lParam ) ! Call SalSendMsg( dfSecuridadePerc, SAM_FieldEdit, wParam, lParam ) ! If cbINSS Set dfsVendRetInss = 'S' If ( dfSecuridadePerc = NUMBER_Null or dfSecuridadePerc = 0 ) and dfSecuridade != NUMBER_Null Call SalSendMsg( dfSecuridade, SAM_FieldEdit, wParam, lParam ) Call SalSendMsg( dfsVendRetInss, SAM_AnyEdit, wParam, lParam ) Call SalSendMsg( dfSecuridadePerc, SAM_FieldEdit, wParam, lParam ) If cbIRRF Set dfsVendRetIrrf = 'S' If ( dfIRRFPerc = NUMBER_Null or dfIRRFPerc = 0 ) and dfIRRF != NUMBER_Null Call SalSendMsg( dfIRRF, SAM_FieldEdit, wParam, lParam ) If NOT bNavegacao Call SalSendMsg( dfsVendRetIrrf, SAM_AnyEdit, wParam, lParam ) Call SalSendMsg( dfIRRFPerc, SAM_Validate, wParam, lParam ) If cbPIS Set dfsVendRetPis = 'S' If ( dfPISPerc = NUMBER_Null or dfPISPerc = 0 ) and dfPIS != NUMBER_Null Call SalSendMsg( dfPIS, SAM_FieldEdit, wParam, lParam ) If NOT bNavegacao Call SalSendMsg( dfsVendRetPis, SAM_AnyEdit, wParam, lParam ) Call SalSendMsg( dfPISPerc, SAM_Validate, wParam, lParam ) If cbCOFINS Set dfsVendRetCofins = 'S' If ( dfCOFINSPerc = NUMBER_Null or dfCOFINSPerc = 0 ) and dfCOFINS != NUMBER_Null Call SalSendMsg( dfCOFINS, SAM_FieldEdit, wParam, lParam ) If NOT bNavegacao Call SalSendMsg( dfsVendRetCofins, SAM_AnyEdit, wParam, lParam ) Call SalSendMsg( dfCOFINSPerc, SAM_Validate, wParam, lParam ) If cbContribuicaoSoc Set dfsRetVendContribSoc = 'S' If ( dfContribuicaoPerc = NUMBER_Null or dfContribuicaoPerc = 0 ) and dfContribuicao != NUMBER_Null Call SalSendMsg( dfContribuicao, SAM_FieldEdit, wParam, lParam ) If NOT bNavegacao Call SalSendMsg( dfsRetVendContribSoc, SAM_AnyEdit, wParam, lParam ) Call SalSendMsg( dfContribuicaoPerc, SAM_Validate, wParam, lParam ) If cbISS Set dfsVendRetIss = 'S' If NOT bNavegacao Call SalSendMsg( dfsVendRetIss, SAM_AnyEdit, wParam, lParam ) ! Set dfISS = (dfTotalServico + dfTotalMercadoria) * nIss / 100 If cbRetencRc1 Set dfsRetRetencRc1 = 'S' If ( dfAliquotaRetencRc1 = NUMBER_Null or dfAliquotaRetencRc1 = 0 ) and dfRetencRc1 != NUMBER_Null Call SalSendMsg( dfRetencRc1, SAM_FieldEdit, wParam, lParam ) If NOT bNavegacao Call SalSendMsg( dfsRetRetencRc1, SAM_AnyEdit, wParam, lParam ) Call SalSendMsg( dfAliquotaRetencRc1, SAM_Validate, wParam, lParam ) If cbRetencRc2 Set dfsRetRetencRc2 = 'S' If ( dfAliquotaRetencRc2 = NUMBER_Null or dfAliquotaRetencRc2 = 0 ) and dfRetencRc2 != NUMBER_Null Call SalSendMsg( dfRetencRc2, SAM_FieldEdit, wParam, lParam ) If NOT bNavegacao Call SalSendMsg( dfsRetRetencRc2, SAM_AnyEdit, wParam, lParam ) Call SalSendMsg( dfAliquotaRetencRc2, SAM_Validate, wParam, lParam ) ! Set dfnVendTotal = 0 Set nLinha = -1 If SalTblAnyRows( tblItens, 0, 0 ) ! Set dfnVendTotal = SalTblColumnSum( tblItens, SalTblQueryColumnID( tblItens.colVendTotalMerc ), 0, 0 ) - SalTblColumnSum( tblItens, SalTblQueryColumnID( tblItens.colValorSimBahia ), 0, 0 ) - dfnVendDesconto + dfValorIPI + dfnVendEmbalagem + dfValorICMSSub While SalTblFindNextRow( tblItens, nLinha, 0, 0 ) Call SalTblSetContext( tblItens, nLinha ) Set dfnVendTotal = dfnVendTotal + (tblItens.colVendTotalMerc) - (tblItens.colValorSimBahia) - dfnVendDesconto + dfValorIPI + dfnVendEmbalagem + dfValorICMSSub Set nLinha = -1 If SalTblAnyRows( tblServico, 0, ROW_MarkDeleted|ROW_Edited|ROW_Selected) ! Set dfnVendTotal = dfnVendTotal + SalTblColumnSum( tblServico, SalTblQueryColumnID( tblServico.colValorTotal ), 0, 0 ) While SalTblFindNextRow( tblServico, nLinha, 0, 0 ) Call SalTblSetContext( tblServico, nLinha ) Set dfnVendTotal = dfnVendTotal + (tblServico.colValorTotal) If dfsVendTipoFrete = 'FOB' Set dfnVendTotal = dfnVendTotal + dfnVendFrete If cbIRRF Set dfnVendTotal = dfnVendTotal - dfIRRF If cbPIS Set dfnVendTotal = dfnVendTotal - dfPIS If cbCOFINS Set dfnVendTotal = dfnVendTotal - dfCOFINS If cbINSS Set dfnVendTotal = dfnVendTotal - dfSecuridade If cbContribuicaoSoc Set dfnVendTotal = dfnVendTotal - dfContribuicao If cbRetencRc1 Set dfnVendTotal = dfnVendTotal - dfRetencRc1 If cbRetencRc2 Set dfnVendTotal = dfnVendTotal - dfRetencRc2 If cbISS Set dfnVendTotal = dfnVendTotal - dfISS If bRetencoes = FALSE If cbPIS Set dfnVendTotal = dfnVendTotal - ((dfTotalServico + dfTotalMercadoria) * gbnPis / 100) If cbCOFINS Set dfnVendTotal = dfnVendTotal - ((dfTotalServico + dfTotalMercadoria) * gbnCofins / 100) If cbContribuicaoSoc Set dfnVendTotal = dfnVendTotal - ((dfTotalServico + dfTotalMercadoria) * gbnContribuicaoSocial / 100) If cbINSS Set dfnVendTotal = dfnVendTotal - ((dfTotalServico + dfTotalMercadoria) * gbnInss / 100) If cbRetencRc1 Set dfnVendTotal = dfnVendTotal - ((dfTotalServico + dfTotalMercadoria) * gbnAliqRetencRc / 100) If cbRetencRc2 Set dfnVendTotal = dfnVendTotal - ((dfTotalServico + dfTotalMercadoria) * gbnAliqRetencRc2 / 100) ! Set dfnVendTotal = dfnVendTotal + dfnEncargos + dfnDespesas + dfnSeguro ! ! AQUI É ONDE O ERRO ACONTECE Set dfTotalPagamento = SalTblColumnSum( tblParcelas, SalTblQueryColumnID( tblParcelas.colValor ), 0, 0 ) Set dfnJuros = oPlanoPagamento.nJuros Set dfnTotalPag = dfnVendTotal + (dfnVendTotal * oPlanoPagamento.nJuros / 100) Set dfnTotalPagto = dfnTotalPag Call fTotalBruto() ! Set bNavegacao = FALSE ! ###############################################################################################