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
!
###############################################################################################