Ir para conteúdo
Fórum Script Brasil

Fireboard

Membros
  • Total de itens

    111
  • Registro em

  • Última visita

Tudo que Fireboard postou

  1. alguém tem um layout ou sabe qual é a regra para validar a linha digitável de um cheque? Para a linha magnética faço a validação normalmente, mas caso o usuário digite a linha digitável do cheque, se eu usar a mesma função não funciona. Segue código que estou utilizando: function TDm.validaCMC7(linha_dig: string): boolean; var soma, total, num, i, i1, i2, i3, res: integer; c1, c2, c3, c4: string; begin // Validar tamanho do campo if length(linha_dig) <> 34 then begin Result:= false; exit; end; //----------------------------------------- C1 ---------------------------------------- c1:= AnsiMidStr(linha_dig,2,7); // Validar se contém apenas números for i:= length(c1) downto 1 do begin if (c1[i] <> '1') and (c1[i] <> '2') and (c1[i] <> '3') and (c1[i] <> '4') and (c1[i] <> '5') and (c1[i] <> '6') and (c1[i] <> '7') and (c1[i] <> '8') and (c1[i] <> '9') and (c1[i] <> '0') then begin result:= false; exit; end; end; i1:= strtoint(AnsiMidStr(linha_dig,22,1)); //----------------------------------------- C2 ---------------------------------------- {passar o campo conta corrente com uma string de 10 posicoes} c2:= AnsiMidStr(linha_dig,11,10); // Validar se contém apenas números for i:= length(c2) downto 1 do begin if (c2[i] <> '1') and (c2[i] <> '2') and (c2[i] <> '3') and (c2[i] <> '4') and (c2[i] <> '5') and (c2[i] <> '6') and (c2[i] <> '7') and (c2[i] <> '8') and (c2[i] <> '9') and (c2[i] <> '0') then begin result:= false; exit; end; end; i2:= strtoint(AnsiMidStr(linha_dig,9,1)); //----------------------------------------- C3 ---------------------------------------- {passar o campo Numero do Cheque com uma string de 6 posicoes} c3:= AnsiMidStr(linha_dig,23,10); // Validar se contém apenas números for i:= length(c1) downto 1 do begin if (c3[i] <> '1') and (c3[i] <> '2') and (c3[i] <> '3') and (c3[i] <> '4') and (c3[i] <> '5') and (c3[i] <> '6') and (c3[i] <> '7') and (c3[i] <> '8') and (c3[i] <> '9') and (c3[i] <> '0') then begin result:= false; exit; end; end; i3:= strtoint(AnsiMidStr(linha_dig,33,1)); //------------------------------- Cálculo C1 ------------------------------------ soma:= 0; num:= 2; total:= 0; validaCMC7:= true; for i:= length(c1) downto 1 do begin soma:= 0; soma:= strtoint(c1[i]) * num; if soma >= 10 then begin c4:= inttostr(soma); soma:= strtoint(c4[1]) + strtoint(c4[2]); end; total:= total + soma; if num = 2 then num:= 1 else num:= 2; end; res:= total mod 10; if res <> 0 then res:= 10 - res; if res <> i1 then begin validaCMC7:= false; end; //------------------------------- Cálculo C2 ------------------------------------ soma:= 0; num:= 2; total:= 0; for i:= length(c2) downto 1 do begin soma:= 0; soma:= strtoint(c2[i]) * num; if soma >= 10 then begin c4:= inttostr(soma); soma:= strtoint(c4[1]) + strtoint(c4[2]); end; total:= total + soma; if num = 2 then num:= 1 else num:= 2; end; res:= total mod 10; if res <> 0 then res:= 10 - res; if res <> i2 then begin validaCMC7:= false; end; //------------------------------- Cálculo C3 ------------------------------------ soma:= 0; num:= 2; total:= 0; for i:= length(c3) downto 1 do begin soma:= 0; soma:= strtoint(c3[i]) * num; if soma >= 10 then begin c4:= inttostr(soma); soma:= strtoint(c4[1]) + strtoint(c4[2]); end; total:= total + soma; if num = 2 then num:= 1 else num:= 2; end; res:= total mod 10; if res <> 0 then res:= 10 - res; if res <> i3 then begin validaCMC7:= false; end; end; Obrigado
  2. Fireboard

    BDE administrator

    Carlos, não cheguei a testar isso em máquinas com Windows Vista, mas encontrei um tópico no site da Microsoft que diz algo a respeito, dê uma olhada se pode te ajudar.
  3. Fireboard

    BDE administrator

    A solução para a instalação do BDE na máquina do cliente é simples e está dividida em 5 passos: 1) Procure em sua máquina (máquina de desenvolvimento que possua o Delphi instalado) por um arquivo denominado BDEINST.CAB. Este arquivo está compactado e pode ser aberto pelo winzip, winrar ou qualquer outro descompactador de sua preferência; 2) Ao abrir o arquivo você encontrará a dll BDEINST.DLL. Descompacte-a na pasta Windows\System32 ou WinNT\System32 dependendo da sua versão do Windows; 3) Vá para o prompt de comando e na pasta onde copiou a DLL digite: REGSVR32 BDEINST.DLL e a seguinte tela surgirá: Definição da pasta de instalação do BDE 4) Clique no botão OK para a instalação default; 5) Pronto! O BDE está instalado! Nota Importante: Nas versões Windows 95 esta dica não funcionará!
  4. Fireboard

    ECF

    Carlos, acho interessante você saber (caso ainda não saiba) que as empresas do estado de SP que utilizam o ECF, devem se adequar a nota fiscal paulista. Quando for emitir o cupom fiscal, o sistema deve dar a opção de ser impresso o cpf ou o cnpj do cliente para ele (cliente) poder se creditar de parte do imposto. Pelo que estou vendo nos softwares em geral, quase todos estão tendo que se adaptar a isso. O cpf/cnpj deve ser digitado pelo usuário que estiver emitindo o cupom fiscal, ou o software permitir selecionar um cliente já cadastrado para imprimir.
  5. Fireboard

    ECF

    As marcas mais utlizadas são Bematech, Sweda e Daruma. Elas podem ser matriciais e térmicas, aconselho você a utilizar impressora térmica, é muito melhor, mais econômica, mais rápida. Eu trabalho com ecf, como usuário não como programador, segundo a empresa que desenvolve o sistema para a empresa que trabalho, a melhor impressora que eles trabalharam (no desenvolvimento de rotinas para ecf e tef) é a da Daruma ( Site da Daruma, tanto no desenvolvimento de rotinas quanto no suporte que a empresa dá aos programadores. Em relação ao desenvolvimento do software, aconselharia você a falar primeiro com um contador para lhe informar melhor sobre as leis, o que pode e o que não pode fazer, pois o ecf envolve a parte fiscal também, no estado de São Paulo (não sei se nos outros estados também é assim) existe o Sintegra onde são informados ao governo do estado as informações fiscais da empresa (incluindo os cupons fiscais). Também têm o caso do Tef (transferência eletrônica de fundos) onde o cartão de crédito é emitido por um software homologado pelas administradoras de cartão de crédito, mas é "chamado" pelo software emissor do ecf, e impresso pela impressora fiscal. Caso você tenha que desenvolver também o tef, você terá que homologar o seu software em um órgão credenciador das administradoras de cartão de crédito, mas como eu disse, um contador com certeza lhe informará melhor e mais precisamente sobre isso. Espero ter ajudado Abraços
  6. Eu agradeço pela ajuda, pra quem sabe pode parecer simples o código, mas eu não sabia resolver, inclusive em utilizar a função "EncodeDate", eu não tinha a mínima idéia de que podia ser feito assim. Em relação ao código que postei: FormatDateTime('yyyy/mm/dd', date) > formatdatetime('aaaa/mm/dd', 06/02/2008 eu digitei errado ao postar o tópico, no meu código não está como "aaaa/mm/dd".
  7. Pessoa, inseri uma procedure para que quando o sistema iniciar verifique pela data se expirou, o código é o seguinte: procedure TFrmPrincipal.verifica_data; begin if FormatDateTime('yyyy/mm/dd',date) > formatdatetime('aaaa/mm/dd',06/02/2008) then begin Application.MessageBox('Atenção'+#13+'O programa expirou, entre em contato com o fabricante do software','Expirou o programa',MB_ICONINFORMATION+MB_OK); Application.Terminate; end; end; No exemplo acima, sugeri que a data limite seja 06/02/2008 (por exemplo), só que o programa não faz essa verificação, depurei o sistema e na linha em que devia fazer a conta entre as datas aparece a mensagem "date=inaccessible value". Como eu faço para resolver isso? Vocês me recomendariam um jeito melhor de fazer alguma amarração no programa para informar ao usuário que o programa expirou? Obrigado.
  8. Bem Greed, no exemplo que te passei: DatRec.TbParametrosLogotipo.Text, DatRec é o DataModule; Text é o conteúdo do campo Logotipo da tabela parâmetros do banco de dados, neste caso criei um data module com o nome DatRec, uma tabela com o nome TbParametros e um campo para armezenar o caminho da imagem chamado Logotipo. DbLogotipo é o objeto que está amarrado a tabela TbParametros e ao campo logotipo que contém o caminho em que está a figura. Mude os objetos para o nome que você deu ao seu banco de dados, tabelas e campos para ver se funciona. Abraços
  9. Valeu fera, funcionou, mas mesmo eu chamando pelo executável quando forço uma data inválida para fazer a verificação, a mensagem de erro vem do Delphi e não do meu programa, como no exemplo que você me passou: procedure TForm1.Button1Click(Sender: TObject); begin if tbStrIsDate(Edit1.Text) then ShowMessage(Edit1.Text + ' é data válida.') else [b] ShowMessage(Edit1.Text + ' NÃO é data válida.');[/b] end; Não tem problema, o importante é funcionar, e funcionou, a única dúvida que ficou foi essa de ser exibida a mensagem de erro do Delphi. Obrigado
  10. Estou com um problema quando digito uma data inválida. Aparece uma mensagem do próprio Delphi dando erro: "Project P_Recibo.exe raised exception class EConvertError with message "11/13/2007" is not a valid date'. Process Stopped. Use Step or Run to continue". Neste exemplo digitei uma data inválida para dar o erro. Eu queria que fosse exibido uma mensagem do meu programa que a data é inválida e não a mensagem do Delphi. O código que inseri no evento on exit do objeto Dbdata foi: try StrToFloat((Sender as tdbedit).Text); // não atribuirá a ninguém o resultado, é apenas para tentar obter o erro except on E:Exception do begin E.Message := 'Valor digitado não é válido'; raise; end; end; Obs.: eu peguei esse código em um post aqui no site para ver se dava certo no meu programa, mas vai direto para a mensagem do Delphi e não do meu programa. Como eu faço para corrigir isso? Outra pergunta, no Delphi há alguma função para verificar se a data é válida?, exemplo, no Visual Basic há a função IS DATE, que verifica se o conteúdo de um objeto é uma data válida (if is date(edit1.text) = true), ser não me engano a sintaxe é essa. Obrigado
  11. Obrigado pela dica Lord Wolf, valeu mesmo. Encontrei um jeito de exibir a mensagem do jeito que eu quero usando o application.messagebox ao invés de usar o Messagedlg: if Application.MessageBox('Você deseja realmente sair do sistema?','Sair',MB_ICONQUESTION+MB_YESNO) = mrYes then begin close; end; Obrigado e feliz ano novo a todos
  12. Como eu faço para traduzi-las? Em que lugar do Delphi eu vou?
  13. Mais uma vez obrigado pela ajuda Micheus, fiz algumas alterações de acordo com o que você e o colega Jhonas postaram e funcionou.
  14. Se eu entendi direito, você quer que quando você clicar no button1, automaticamente sejam executados os outros buttons? Bem se for isso, faça o seguinte: no evento on click do button1 digite: button2.click; button3.click; Tente fazer isso para ver se é o que você quer
  15. Eu fiz o seguinte: Inseri um objeto image no formulário e no banco de dados tenho um campo que armazena somente o caminho da figura (declarei como alfanumérico) Quando carrego o formulário, no evento on create inseri os códigos: imagem.Stretch:=true; // para acertar o tamanho da figura ao objeto imagem.Picture.LoadFromFile(DatRec.TbParametrosLogotipo.Text); // a propriedade picture do objeto imagem busca a imagem contida no caminho DatRec.TbParametrosLogotipo.Text. Para alterar a imagem (caso queira) inseri um button com os códigos: OpenPictureDialog.Execute; // você deve inserir um objeto OpenPictureDialog na aba Dialogs do Delphi if OpenPictureDialog.FileName <> '' then begin DbLogotipo.Text:=OpenPictureDialog.FileName; imagem.Stretch:=true; Imagem.Picture.LoadFromFile(DatRec.TbParametrosLogotipo.Text); end; Obs.: Quando você fechar a tela da OpenPictureDialog, a imagem não se alterará, você deverá inserir novamente a linha Imagem.Picture.LoadFromFile(DatRec.TbParametrosLogotipo.Text); para o objeto imagem alterar a figura. Espero ter ajudado
  16. Dê uma olhada neste tópico, acho que é o que você está pesquisando: http://scriptbrasil.com.br/forum/index.php...g\.Execute
  17. Pessoal, me digam uma coisa, utilizo o Delphi na versão 6 e caso eu mude para a versão 7, os projetos podem dar problema de incompatibilidade? Parece que a versão 7 do Delphi não vem com o quick report, é verdade? Outra coisa, falando em windows, o fato de eu desinstalar uma versão e instalar outra diferente pode dar problema em alguma dll ou coisa desse tipo?
  18. O problema aumentou, não sei se tem alguma coisa a ver, mas tá dando erro no banco de dados, não tá nem compilando e dá uma mensagem " Project P_recibo.exe raised exception class EDatabaseError with message DBEDIT5: Field 'Estado' not found. Process Stoped". Tem alguma coisa a ver?
  19. Eu depurei linha a linha e dá o erro quando está na linha DtRec.Tbrecibo.EmptyTable;
  20. Quero deletar todos os registros de meu banco de dados, criei um button e inseri esta sequência: DtRec.Tbrecibo.Close; DtRec.Tbrecibo.Exclusive := True; DtRec.Tbrecibo.EmptyTable; DtRec.Tbrecibo.Exclusive := False; DtRec.Tbrecibo.Open; Só que aparece a mensagem: table is busy. Procurei na Internet e em todos os links que vi disseram que a tabela deve estar exclusiva, no código que inseri ela está exclusiva e não está em rede, está somente na minha máquina. O que pode ser?
  21. Fireboard

    Query

    Valeu Micheus, muito obrigado pelas dicas.
  22. Fireboard

    Query

    Fiz uma alteração no código: select * from "clientes.db" where nomcli = 'jose' Fiz um teste usando a palavra josé para ver se dava certo, deste jeito deu certo, daí eu inseri o que realmente me interessa: select * from "clientes.db" where nomcli = 'ednome.text' (ednome.text está em outro formulário) só que o objeto ednome.text não é reconhecido no quick report. Como eu faço para que ele seja reconhecido no relatório, eu inseri em implementation do quick report: uses U_ConsCli; que é o arquivo .pas do formulário. Obrigado
  23. Fireboard

    Query

    Estou tentando utilizar um query no quick report da seguinte maneira: inseri um objeto query, mudei a propriedade dataset do quick report para query1 no objeto query1, na propriedade SQL inseri: select * from clientes.db nomcli where nomcli = ednome.text onde ednome.text contém a palavra a pesquisar, mas o relatório não exibe nenhum dado. Fiz algumas alterações, mas aparecem mensagens de erro de número 10070, 10038, No que estou errando?
×
×
  • Criar Novo...