GARANTIR DESCONTO

Fórum Baixa de Contas a Receber #337098

01/02/2007

0

Boa tarde galera!
Fiz um form pra baixar contas a receber,,, no botao baixar tem issu:

if (grd.SelectedRows.Count > 1) and (StrToFloat(txtValor.Text) < StrToFloat(txtSelecionado.Text)) then
    begin
    ValorBaixar:= StrToFloat(txtValor.Text);
    for i:= 1 to grd.SelectedRows.Count do
        begin
        qry.GotoBookmark(Pointer(grd.SelectedRows.Items[i - 1]));

        ID_CLIENTE:= qryID_CLIENTE.Text;
        DATA_EMISSAO:= qryDATA_EMISSAO.Value;
        DATA_VCTO:= qryDATA_VCTO.Value;
        DOC:= qryDOC.Value;
        HISTORICo:= qryHISTORICO.Value;
        VALOR:= qryVALOR.Value;

        if ValorBaixar > qryValor.Value then
            begin
            ValorBaixar:= ValorBaixar - qryValor.Value;
            qry.Edit;
            qryDATA_PGTO.Value:= Date;
            qryPENDENTE.Value:= False;
            qry.Post;
            end;
        if ValorBaixar < qryValor.Value then
            begin
            qry.Edit;
            qryDATA_PGTO.Value:= Date;
            qryPENDENTE.Value:= False;
            qryValor.Value:= ValorBaixar;
            qryHistorico.Text:= ´Baixar Parcial Conta de: ´ + FloatToStr(Valor) + HISTORICO;
            qry.Post;

            qry.Insert;
            qryPENDENTE.Value:= True;
            qryValor.Value:= Valor - ValorBaixar;
            qryHistorico.Text:= ´Restante Conta de: ´ + FloatToStr(Valor) + HISTORICO;
            qryID_CLIENTE.Text:= ID_CLIENTE;
            qryDATA_VCTO.Value:= DATA_VCTO;
            qryDATA_EMISSAO.Value:= DATA_EMISSAO;
            qryDOC.Text:= DOC;
            qry.Post;
            end;
        end;
        qry.Close;
        qry.Open;
    end;        
end;



daew o seguinte ... digamos q tenha 2 contas :
Doc 1 ************** 10,00
Doc 2 ************** 12,00

e o user informa q vai ser baixado 20,00 , nesse caso ele faz certo baixa as duas contas - altera o valor do Doc 2 para 10,00 e cria uma nova conta de 2,00

agora o problema ta se estiver invertido as ordens,, por exemplo c estiver assim:
Doc 1 ************** 12,00
Doc 2 ************** 10,00

Dai ele c embanana td ,,, nesse caso c o user informar q vai se baixado 20 tb, ele faz o seguinte:
Cria 2 novas contas
Restante Doc 1 **** 4,00 e
Restante Doc 2 **** 2,00

e baixa assim:
Baixa Parcial Doc 1 **** 8,00 e
Baixa Parcial Doc 2 **** 8,00

pq sera essa bagunça tda ...
Por favor.... alguem consegui me entender????? Entao ! pode me ajudar???

Fikarei no aguardo ..;.. vlw pessoal mais uma vez;..


Output

Output

Responder

Posts

01/02/2007

Gatoledo

Olá Rodrigo,

Na minha opinião você tem que fazer 2 alterações no seu código (elas estão comentadas):

if (grd.SelectedRows.Count > 1) and (StrToFloat(txtValor.Text) < StrToFloat(txtSelecionado.Text)) then 
    begin 
    ValorBaixar:= StrToFloat(txtValor.Text); 
    for i:= 1 to grd.SelectedRows.Count do 
        begin 
        qry.GotoBookmark(Pointer(grd.SelectedRows.Items[i - 1])); 

        ID_CLIENTE:= qryID_CLIENTE.Text; 
        DATA_EMISSAO:= qryDATA_EMISSAO.Value; 
        DATA_VCTO:= qryDATA_VCTO.Value; 
        DOC:= qryDOC.Value; 
        HISTORICo:= qryHISTORICO.Value; 
        VALOR:= qryVALOR.Value; 

        // Altere o operador para >=
        if ValorBaixar >= qryValor.Value then 
            begin 
            ValorBaixar:= ValorBaixar - qryValor.Value; 
            qry.Edit; 
            qryDATA_PGTO.Value:= Date; 
            qryPENDENTE.Value:= False; 
            qry.Post; 
            end
        // Ao invés de fazer 2 ifs, coloque um else 
        else
            begin
            qry.Edit; 
            qryDATA_PGTO.Value:= Date; 
            qryPENDENTE.Value:= False; 
            qryValor.Value:= ValorBaixar; 
            qryHistorico.Text:= ´Baixar Parcial Conta de: ´ + FloatToStr(Valor) + HISTORICO; 
            qry.Post; 

            qry.Insert; 
            qryPENDENTE.Value:= True; 
            qryValor.Value:= Valor - ValorBaixar; 
            qryHistorico.Text:= ´Restante Conta de: ´ + FloatToStr(Valor) + HISTORICO; 
            qryID_CLIENTE.Text:= ID_CLIENTE; 
            qryDATA_VCTO.Value:= DATA_VCTO; 
            qryDATA_EMISSAO.Value:= DATA_EMISSAO; 
            qryDOC.Text:= DOC; 
            qry.Post;
            // Neste caso não haverá mais valor disponível para baixar o
            // CTR, então a rotina pode sair do for
            Break;
            end; 
        end; 
        qry.Close; 
        qry.Open; 
    end;        
end;


Espero ter ajudado.

Gabriel


Responder

Gostei + 0

01/02/2007

Output

bah kra... vlw msm [b:508097374d]gatoledo[/b:508097374d] ...
exatamente issu q eu qria ...

vlw pela dica


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar