Jump to content
Fórum Script Brasil

Fireboard

Membros
  • Posts

    111
  • Joined

  • Last visited

About Fireboard

  • Birthday 02/23/1978

Contatos

Perfil

  • Gender
    Male
  • Location
    SP

Fireboard's Achievements

0

Reputation

  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. 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. 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.
×
×
  • Create New...