Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Como Dar Baixa Em Lancamentos Direto Do Cadastro De A


robinhocne

Pergunta

No cadastro de Alunos eu coloquei um DbGrid (DbgLan) para poder vizualizar as parcelas lançadas para o aluno selecionado, mas gostaria de colocar para dar baixa tipo assim:"Clicar na parcela da Linha do DbgLan" e coloquei um RadioButton (RdbBaixa) para poder selecionar como dar baixa e um SpeedButton (SpbBaixa) para poder assim concluir a baixa da parcela.

Na Tabela de Lancamentos eu coloquei um campo como Tipo numeric 1,0 sendo 0 Aberto e 1 Para Baixado.

Uso o Firebird 2.0.3 e Delphi 7

Como poderei atribuir?

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Bom, troquei do jeito que você me informou, mas deu esse erro:

Dynamic SQL error SQL error code =-206 Column unknown BAIXADO
eu queria duas explicações, primeira:

SQL.Add('SET baixado = :Tipo'); No caso dá o erro aqui no Baixado, mas me explica essa intrução para eu poder entender.

E segunda:

E mais essas duas linhas:

SQL.Add('WHERE Codigo = :Codigo and Vencimento = :Vencimento');

ParambyName('Codigo').AsInteger := DtmIza.QryAluLan.FieldByName('Aluno').AsInteger;

ParambyName('Vencimento').AsDateTime := DtmIza.QryAluLan.FieldByName('Vencimento').AsDateTime;

Link para o comentário
Compartilhar em outros sites

  • 0
Dynamic SQL error SQL error code =-206 Column unknown BAIXADO
eu queria duas explicações, primeira:

SQL.Add('SET baixado = :Tipo'); No caso dá o erro aqui no Baixado, mas me explica essa intrução para eu poder entender.

É, eu já sei qual é o problema. Você não tem um campo para indicar baixa - o tal "Baixado", e isso acabou ficando lá do início.

Este tópico já está tão comprido que o tico e o teco não estão gravando mais nada. :D

Então, olhando lá no post#9, vejo que sua tabela lancamento tem apenas os campos:

Codigo

Aluno = referencia da tabela de alunos

Parcela

Valor

Vencimento = Primeiro Vencimento

Emissao

Logo, vem a pergunta: Com que campo você pretende indicar essa baixa na parcela? Sem dúvida vai ter que ter alguma coisa em algum lugar no seu banco de dados que possibilite guardar esta informação!

E segunda:

E mais essas duas linhas:

SQL.Add('WHERE Codigo = :Codigo and Vencimento = :Vencimento');

Voi explicar a instrução completa do UPDATE, se você não entender, passo a bola para outro. ;)

A instrução UPDATE tem como objetivo alterar o valor de uma determinada coluna ou colunas em uma tabela.

Voce restringe os registros (linhas) na tabela que serão afetados utilizando alguma condição na cláusula WHERE.

UPDATE Lancamento // indica que o update será realizado na tabela Lancamento

SET baixado = :Tipo // supondo a existência do campo baixado, SET indica que a coluna/colunas seguintes serão atualizadas com o valor após o sinal de "="

WHERE Codigo = :Codigo and Vencimento = :Vencimento // aqui o objetivo é filtrar (selecionar) apenas um registro - aquele em que o código seja = ao do parâmetro Codigo e que a data de vencimento seja = ao parâmetro Vencimento.

ParambyName('Codigo').AsInteger := DtmIza.QryAluLan.FieldByName('Aluno').AsInteger;

ParambyName('Vencimento').AsDateTime := DtmIza.QryAluLan.FieldByName('Vencimento').AsDateTime;

voce já não utilizou passagem de parâmetros antes? Já não viu inúmeros posts neste forum exemplificando isto?

Estes são os parâmetros que seriam passados para o IBQuery com o UPDATE.

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, Micheus entendi suas explicações.

Bom para indicar que minha parcela foi baixada acrescentei um campo na tabela de praticas com o nome de DtPgto (data de pagamento), então quando a parcela baixada ela vai mostrar no grid a data de pagamento e aparecer em verde e quando estiver vencinda em Vermelho.

Então essa linha SQL.Add('SET Tipo = :Tipo');, ficou assim SQL.Add('SET DTPGTO = :Tipo');.

Mas está dando esse erro:

Dynamic SQL error SQL error code =-303 Conversion error from string "1"

Link para o comentário
Compartilhar em outros sites

  • 0
Então essa linha SQL.Add('SET Tipo = :Tipo');, ficou assim SQL.Add('SET DTPGTO = :Tipo');.

Mas está dando esse erro:

Dynamic SQL error SQL error code =-303 Conversion error from string "1"
Agora você quase pegou o "espírito da coisa".

Voce não vai guardar uma data (DTPgto)? Então, como você pode continuar passanto o parâmetro "Tipo" da mesma forma como antes?

if RdbBaixa.Checked then
      ParambyName('Tipo').AsInteger := 1
    else
      ParamByname('Tipo').AsInteger := 0;
não faz o menor sentido! Voce vai provavelmente passar uma data, que muito provavelmente é a atual (mas pode ser que você queira que o sujeito digite a data). Então, se o cara faz uma baixa, você vai por a data da baixa. Se o cara desmarcar a baixa, supostamente, você vai deixar a data em branco. Primeiramente sugiro que você mude o nome do parâmetro, porque já não tem mais nada há ver com a abordagem inicial. Digamos que seja DtPgto, de modo que a tal linha ficaria: SQL.Add('SET DTPGTO = :DtPagto'); logo, para passar corretamente o parâmetro (uma data) iremos continuar avaliando o tal radiobox:
if RdbBaixa.Checked then
      ParambyName('DtPgto').AsDateTime := Date  // isto deve definir a data do pagto para data atual
    else
      ParamByname('DtPgto').Clear;  // isto deve deixar o parâmetro null - limpando o campo

Siga em frente...

Link para o comentário
Compartilhar em outros sites

  • 0

Mas Micheus, então quer dizer que vou acrescentar um campo de Data, no caso fiz TxtDtPg (MaskEdit), para o usuário fornecer a data, mas no caso a coluna "Tipo" seria para que quando baixado ele setasse para 1 e assim contasse como entrada no caixa.

Bom queria algumas sugestões suas sobre isso.

Pois fiz mudando para as datas e dá esse erro:

UpAluLan: Parameter 'DtPgto' not found.
Link para o comentário
Compartilhar em outros sites

  • 0
Bom para indicar que minha parcela foi baixada acrescentei um campo na tabela de praticas com o nome de DtPgto (data de pagamento), então quando a parcela baixada ela vai mostrar no grid a data de pagamento e aparecer em verde e quando estiver vencinda em Vermelho.
Aqui você disse que criou um campo data de pagamento na sua tabela lancamentos para guardar a data da baixa. Não é isto?!

Mas Micheus, então quer dizer que vou acrescentar um campo de Data, no caso fiz TxtDtPg (MaskEdit), para o usuário fornecer a data, mas no caso a coluna "Tipo" seria para que quando baixado ele setasse para 1 e assim contasse como entrada no caixa.
mas veja só: o fato de você gravar no seu banco, junto a parcela "x" uma data de pagamento, já não está significando que foi dado baixa nesta parcela que estava em aberto?

A prinípio, não há necessidade de você ter as duas coisas para dizer uma. Se tem data de pagamento, então foi baixada! Isto não lhe serve?

Pois fiz mudando para as datas e dá esse erro:
UpAluLan: Parameter 'DtPgto' not found.
robinhocne, tudo bem que eu já não estou nem mais conseguindo manter o raciocínio, mas é só dá uma olhada para ver que troquei "DtPgto" por "DtPagto". Se você já tivesse captado o "espírito da coisa", voce agora estaria me corrigindo. Pelo jeito, ainda não consegui ajudá-lo neste sentido. :(

Vai então a correção:

...
    SQL.Add('SET DTPGTO = :DtPgto');
    if RdbBaixa.Checked then
      ParambyName('DtPgto').AsDateTime := Date  // isto deve definir a data do pagto para data atual
    else
      ParamByname('DtPgto').Clear;  // isto deve deixar o parâmetro null - limpando o campo

Link para o comentário
Compartilhar em outros sites

  • 0

Ok.

Mas então corrigindo e perguntando:

SQL.Add('SET DTPGTO = :DtPgto');

if RdbBaixa.Checked then

ParambyName('DtPgto').AsDateTime := Date // isto deve definir a data do pagto para data atual

else

ParamByname('DtPgto').Clear; // isto deve deixar o parâmetro null - limpando o campo

Nesse codigo não era isso que estava errado mas sim no SQL.Add('SET DTPGTO = :DtPgto'); que eu tinha deixado assim SQL.Add('SET DTPGTO = :Tipo');!

Mas então aqui eu adicionei o campo TxtDtPgto (MaskEdit) ligando com o campo DtPgto da tabela de Lancamento, mas uma duvida, esse procedimento que estamos fazendo é na tabela de alunos, como eu salvo uma data que não é da tabela de alunos.

Ixi estou me confudindo todo.

Pois arrumei e rodo o programa, seleciona a linha da parcela, clico no radiobutton (RdbBaixa) e coloco uma data e clico no botão baixar, mas não acontece nada.

Link para o comentário
Compartilhar em outros sites

  • 0
Mas então aqui eu adicionei o campo TxtDtPgto (MaskEdit) ligando com o campo DtPgto da tabela de Lancamento, mas uma duvida, esse procedimento que estamos fazendo é na tabela de alunos, como eu salvo uma data que não é da tabela de alunos.

Ixi estou me confudindo todo.

Na tabela alunos? :huh:

Achei que fosse na lançamentos! Veja o que viemos (eu, pelo menos) trabalhando encima do que começou-se a "falar", e lá pelo post#5, vou por aqui o que eu entendi que era a consulta que você fazia:

...
      With DtmIza.DsAluLan do
      Begin
         Close;
         Sql.Clear;
         Sql.Add ('Select L.Aluno, L.Parcela, L.Vencimento, L.Valor, L.Emissao, L.Aluno From Lancamento L,'
                  +'Lancamento I Where L.Aluno=' + TxtMat.Text +
                  ' AND I.Codigo=L.Aluno ORDER BY L.Parcela, L.Vencimento');
         Open;
      end;

Eu só vejo referência a tabela lancamento.

Pois arrumei e rodo o programa, seleciona a linha da parcela, clico no radiobutton (RdbBaixa) e coloco uma data e clico no botão baixar, mas não acontece nada.
esta resposta fica para depois da resolução do questionamento acima.

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, eu expressei errado, mas é assim, na tabela de alunos eu tenho a aba de lancamento, que nela tem o grid que é vuzualizado esses dados, mas nela mesmo eu queria colocar para dar baixar na promissoria, nesse caso entrando np cadastro de alunos e dando baixa por lá mesmo, pois esse cadastro de alunos por enquanto são só os dados dos alunos que eu movimento!

Link para o comentário
Compartilhar em outros sites

  • 0
Sim, eu expressei errado, mas é assim, na tabela de alunos eu tenho a aba de lancamento, que nela tem o grid que é vuzualizado esses dados, mas nela mesmo eu queria colocar para dar baixar na promissoria
então o que se fez até agora deveria funcionar, não é?!

Na aba de lancamentos é onde você tem o lance do radiobutton e o tal botão em que colocou-se o procedimento para fazer o UPDATE - não é?!

Link para o comentário
Compartilhar em outros sites

  • 0
Sim exatamente, mas nada funciona, nem demonstra nada,

Não teria que colocar algo para salvar? Ou eu poderia mandar novamente um exemplo com o que estamos fazendo para você vizualizar melhor?

se já não dá erro, pode ser um bom sinal.

Como você utiliza os componentes da paleta IB, acrescente o seguinte comando após a linha em que tem aquele ExecSQL:

Transaction.CommitRetaining;

Outra coisa, como você utiliza um IBQuery para visualizar os dados, para que você visualize as informações atualizadas você terá que Fechar e Reabrir a sua consulta, de modo que as informações sejam atualizadas no seu DBGrid (estamos falando das informações sobre o lançamento - Ok!)

Se você mostra nesta sua consulta a data de pagamento da parcela, após a atualização, ela deverá aparecer preenchida no campo que você mostra no DBGrid (aquele que está mostrando o lançamento - Ok!)

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus, fiz oque você me pediu mas ainda nada, então lhe manda o exemplo que estamos fazendo:

Exemplo do Programa

Consegui Resolver Micheus, pesquisei esta semana e peguei um monte de ideias de muita gente na net e até exemplos, ficou assim:

No Botão Baixar:

procedure Tfrmalunos.SpbBaixarClick(Sender: TObject);
begin

   if ((RdbBaixa.Checked) and (QryBaixa.RecordCount > 0)and (TxtDtPg.Text <> '')) then
      Begin
  with QryUpdate do
  begin
    Close;
    SQL.Clear;
    SQL.Add('UPDATE Lancamento');  // tabela que terá o campo atualizado
    SQL.Add('SET DTPGTO = '+(QuotedStr(FormatDateTime('dd.mm.yyyy',(StrToDate(TxtDtPg.Text) ) ))) );  // campo a ser atualizado com valor -> parâmetro
    SQL.Add('WHERE aluno = '+txtmat.Text+' and Vencimento = ' + (QuotedStr(FormatDateTime('dd.mm.yyyy',(strtodate(n1) )))));
    ExecSQL;  // instrução UPDATE é executa com este método, não o Open;
    Transaction.Commit;
    select;
  end;
  end
  else
  showmessage('Baixa não selecionado');
  exit;
end;
Uma Procedure no Private
procedure Tfrmalunos.select;
begin
   QryBaixa.Close;
   QryBaixa.SQL.Text := 'select parcela,valor,vencimento,emissao,dtpgto from lancamento where aluno = ' + txtmat.Text +
   'Order By Parcela';
   QryBaixa.Open;
end;
Declarei uma String N1 e que foi atribuido no OnCellClick
procedure Tfrmalunos.dbglanCellClick(Column: TColumn);
begin
  inherited;
  n1 := dbglan.Fields[2].AsString;
end;

Com Isso resolvi o meu problema.

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...