Ir para conteúdo
  • Cadastre-se

eneias.carvalho

Membros
  • Total de ítens

    116
  • Registro em

  • Última visita

Tudo que eneias.carvalho postou

  1. Efetuei uma RZ no ECF sem movimento, ocorreu erro na unit ACBrECFBematech.pas na linha 2908, exatamente neste treco de código: DataDoMovimento := StringToDateTime( copy(RetCmd,1237,2) + DateSeparator + copy(RetCmd,1239,2) + DateSeparator + copy(RetCmd,1241,2), 'dd/mm/yy' ); O problema é que o ECF estava sem movimento, dessa forma foi retornado a data do movimento como 000000.
  2. Opa encontrei a resposta em outro tópico: Necessitou apenas de uma pequena alteração: procedure TFrmCheckout.ecfMsgPoucoPapel(Sender: TObject); var OldTecladoBloqueado : Boolean ; begin OldTecladoBloqueado := tef.TecladoBloqueado; try //Parte editada if (OldTecladoBloqueado) then tef.BloquearMouseTeclado( False ); //fim edição ShowMessage('Detectado pouco papel'); finally tef.BloquearMouseTeclado( OldTecladoBloqueado ); end ; end;
  3. Estou com a seguinte dúvida, no teste de pouco papel quando o componente envia a mensagem de pouco papel antes da impressão do comprovante de crédito, o teclado e mouse ficam bloqueados, forçando assim o ctrl + alt + del, como eu faria para que quando essa mensagem apareça meu BloqueiaMouseTeclado receba o valor False e após confirmar a mensagem o mesmo receba o valor anterior no caso True?
  4. Boa tarde, pessoal entendo que na POO quando eu crio uma propriedade que tem como tipo um objeto, quando eu for utiliza-lo eu terei de criar um novo objeto daquele para poder utilizar ex: unit Unit2; interface type TItem = class private FNome : string; public property Nome : string read FNome write FNome; end; type TPedido = class private FItem : TItem; public property Item : TItem read FItem write FItem; constructor Create; end; implementation { TPedido } constructor TPedido.Create; begin Item := Item.Create; end. entao comeco a utilizalo: procedure teste; var Pedido : TPedido; Item : TItem; begin Pedido := TPedido.Create; {FAZENDO ISSO RETORNA ERRO} Pedido.Item.Nome := 'ABC'; Item := TItem.Create; Item.Nome := 'ABC'; {fazendo isso não da erro} Pedido.Item := Item; end; Então gostaria de saber se é possivel ou não passar valores diretamente para a propriedade Item do Pedido sem ter que criar um objeto do tipo Item e depois passar esse objeto para a propriedade do pedido!
  5. Veja bem, após abrir o dataset(Open) imediatamente eu dou o Insert, e após passar os valores para o dataset executo o Post.
  6. ricardomendes, quem cria Insert, Update, Delete e Select é a aplicação do video, no arquivo denominado "classXXXX.pas" contem apenas as regras de negócio, quem trata da parte de banco de dados propriamente dito é a classe de persistência("classXXXXXDAO.pas"), observe bem, se você for debugar verá que isso ocorre no momento do Insert, quando vc da o Insert clicando no botão, você verá que o insert dessa classe na realidade referencia outro insert da classe DAO.
  7. Segue video do aplicativo em "ação": http://vimeo.com/49762695
  8. Correção, não estou fazendo um framework, apenas um aplicativo para acelerar o processo de desenvolvimento!
  9. Daniel, na realidade é isso que estou fazendo, só que no momento estou focado no banco que trabalho que é o MySQL, más a ideia claro é que seja independente de banco, como explicado anteriormente, a aplicação já faz o trabalho de "mapeamento" da tabela, gera a classe de negócios, gera a classe de persistência(DAO), e na classe de persistência(DAO) já gera Inset, Update, Delete e Select, estou com dúvida apenas como fica uma classe no caso de relacionamento, sei que na classe deve haver uma propriedade do tipo das classes onde houver FK, acredito tambem que isso deve ocorrer com indexação, porem não compreendo bem como desenvolver isso.
  10. De fato deu certo para este teste, fiz apenas o que indicou em eu caso no OnComandaECFSubtotaliza: for P := 0 to cachePay.Count - 1 do ecf.EfetuaPagamento(cachePay.Items[P].IndiceForma, cachePay.Items[P].ValorPago);
  11. Você diz algo do tipo: o código do OnComandaECF: while mPagamentos.Lines.Count > 0 do begin Linha := mPagamentos.Lines[0] ; P := pos('|',Linha) ; if P > 0 then begin CodFPG := Trim(copy(Linha,1,P-1)) ; ValorFPG := StringToFloatDef( copy(Linha, P+1, Length(Linha) ), 0 ); if (CodFPG <> '') and (ValorFPG > 0) then ACBrECF1.EfetuaPagamento( CodFPG, ValorFPG ); end; mPagamentos.Lines.Delete(0); end; mudar para o OnComandaECFSubtotaliza? Se sim quanto à operação(TACBrTEFDOperacaoECF) do ECF? Procurei alguma propriedade que me retorna-se à mesma porem não encontrei nada.
  12. Daniel neste caso para evitar esse "problema" o correto não seria enviar o indice do TEF por último ao contrario do que ocorre atualmente com a última alteração?
  13. Daniel fiz um pequeno roteiro de testes para o Cielo Premia, me deparei com uma situação que sinceramente não sei se pode ocorrer em um caixa no momento do pagamento, más prevendo isso no Demo vi que não foi atendido, veja só, fiz uma venda de R$ 1,03, realizei o pagamento de R$ 0,50 em DINHEIRO, em seguida passei para o CRT R$ 0,53, quando estou no Cielo eu seleciono Débito+Saque, comando o saque de R$ 2,00, após isso finalizo o cupom em seguida imprimo as tranzações pendentes, ocorre que no ECF não é impressa a forma de pagamento DINHEIRO, somente a CARTÃO, acredito que isso ocorra por que forma CARTÃO já é superior ao total da compra, sendo assim o componente nem imprime a outra forma lançada, poderia confirmar isso para mim?
  14. Pesquisando verifiquei que necessito atualizar a minha versão do componente, pois encontrei em outro post que a informação se trata de uma atualização, grato pela ajuda!
  15. Daniel, no exemplo do TEF não encontrei nada sobre: opeImprimePagamentos, no pacote ACBrSerial.dpk tambem não encontrei nada e em ACBr_TEFD.dpk tambem não encontrei nada referente à opeImprimePagamentos.
  16. Regys, segui o que me disse e até ai tudo bem, pelo seguinte fato, faço uma venda de 1,05, utilizarei 3 formas de pagamento: DINHEIRO(0,50), FATURADO(0,30) E CARTÃO(0,25), criei uma classe(TCachePay) para guardar os pagamentos até que se chegue ao valor, quando chega ao mesmo eu subtotalizo(já passando o desconto da venda) em seguida um loop dentro de uma propriedade da classe para passar as formas de pagamento para o ECF, isso ocorre de forma normal. O problema vem a ser justamente quando há desconto ou saque com o Cielo premia, pois não posso subtotalizar, utilizo apenas a função ACBrTEF.FinalizarCupom, e no evento ComandaECFSubtotaliza eu faço o seguinte: try Est := ecf.Estado; if Est = estNaoFiscal then ecf.SubtotalizaNaoFiscal( DescAcre + (StringToFloat(eddescontoR.Text) * (-1)), mensagem ) else ecf.SubtotalizaCupom( DescAcre + (StringToFloat(eddescontoR.Text) * (-1)), mensagem ); RetornoECF := 1; except RetornoECF := 0; end; O problema como é que se mando o ACBrTEF finalizar o cupom, o mesmo irá imprimir apenas a forma referente ao cartão, como devo fazer para imprimir todas as formas, somar o desconto da venda ao desconto do cielo premia?
  17. Como ficaria o Get e o Set para esta situação? Levando em consideração que gravo direto as informações referentes à FK no banco de dados? Segue anexo exemplo(fontes, script db e executavel). Obs: Componente de conexão Zeos, não estou enviando as DLLs em anexo, caso precisem avisar! http://sdrv.ms/QjV7hr
  18. É possível "acumular" informações no ACBrTEF/ACBrNFe para posterior uso no ECF? Pergunto isso pelo seguinte fato, no Cielo Premia não pode-se totalizar o cupom até que se tenha o retorno do Cielo Premia, com desconto, saque ou nenhuma das opções, até ai isso não é problema, desde que a forma de pagamento passada para o ECF seja relacionada à TEF, más no caso de aplicações que fazem uso de multiplas formas o mesmo tambem não pode ser totalizado. O consultor TEF ao qual a empresa que trabalho contratou, me informou que nossa aplicação tem esse problema ainda, quando ele lança a forma de pagamento Dinheiro imediatamente o sistema sutotaliza, em seguida ele lança cartão e o resultado da tranzação já não será correto, pois pode haver desconto com o Cielo Premia, então alguem tem alguma dica de como eu posso controlar isso de forma mais dinâmica? Sei que poderia guardar as informações lançadas e após o retorno do Cielo Premia poderia subtotlizar, lançar as formas de pagamento e em seguida imprimir o vinculado, porem gostaria de gerenciar tudo isso com o componente.
  19. Boa tarde, estou estudando POO e de cara achei um pouco trabalhoso, por exemplo, me deparei com uma tabela com mais de 100 campos, então criar as classes para uma tabela assim se torna algo complicado, de qualquer forma continuo estudando, más dai pensei em uma ferramenta que facilite este trabalho de abstração de informações de uma tabela e gera as classes de negócios e de persistência. Então descobri que já existem frameworks que fazer isso, tem o TMS Aurellius, DoRM, AquaSoft entre outros, ocorre que a maioria dos mesmos está voltada para versões superiores ao Delphi 2009, sendo assim quem tem versão anterior já teria de procurar outras soluções, até encontrei como é o caso do InstantObjects(indicado por EMBarbosa( http://stackoverflow.com/questions/4224 ... lphi-win32)). Então estive lendo e estudando um pouco sobre estes frameworks ORM e confesso que achei interessante, pois o mesmo agiliza bastante o processo de desenvolvimento orientado à objetos, eliminando várias etapas do desenvolvimento, mesmo com tudo isso trabalhar com tabelas muito grandes ainda continua sendo algo complicado(TA PARECENDO COISA DE PREGUIÇOSO RECLAMANDO DO TRABALHO, KKK). Então resolvi criar uma ferramenta que se conecta há um banco de dados(no momento MySQL 5.x) e abstrai as informações das tabelas e gera a classe de negócios e de persistência, isso já está pronto, com poucos cliques do mouse você cria as duas classes independente da quantidade de registros da tabela, já com Insert, Update, Delete e Select. Agora estou querendo fazer com que a ferramente trabalho com relacionamentos do banco, más estou com dúvida de que forma isso pode ser feito, por exemplo: Tabela01 --------------- Id : integer Field01 : Varchar(10) Tabela02 --------------- Id: integer IdTabela01 : integer; Field01 : Varchar(30) Como pode ser visto existe o relacionamento entre a Tabela01 e Tabela02 de 1 : N, más não tenho uma ideia fixo de como isso ficaria dentro da classe. Acredito que na classe da Tabela01 eu devo ter um atributo do tipo Tabela02 pois assim eu consigo "resgatar" informações da Tabela02 dentro do objeto Tabela01, imagino que eu deveria trabalhar com indices, assim eu poderia ter vários objetos do tipo Tabela02 no objeto Tabela01, porem não consigo visualizar como isso ficaria no código, agradeço a ajuda de todos!
  20. resolvido estava faltando instanciar as classes.
  21. Pesso desculpas pela forma direta com a que escrevi, irei me policiar para isso, em seguida seria meio que uma mistura dos dois, pois programo em Delphi 7 e o mesmo não possui nenhum framework ORM(pelo menos desconheço), então resolvi criar um por mais simples que seja é claro. O mesmo faz basicamente o que descrevi, informo à aplicação qual o componente de conexão à dados que irei utilizar(Zeos ou UniDAC), em seguida entro com os dados de conexão(Host, User, Pass, Port e DB), por fim seleciono uma tabela e mando gerar, a aplicação então salva dois arquivos, um referente à negócios(classNomeDaTabela.pas) e outro referente à persistência(classNomeDaTabelaDAO.pas).
  22. Pessoa não sei se este seria o melhor canal para tirar tal dúvida, más desde a "morte" do orkut, desconheço um bom canal de dúvidas Delphi, caso alguem possa ajudar e indicar fico grato, de qualquer segue minha dúvida, estou estudando orientação à objetos e desde o inicio senti que o mesmo pode ser bem trabalhoso, más isso não vem ao caso, a questão é, estou criando um aplicativo para gerar minhas classes(Negócios e Persistência), ocorre que não sei se estou fazendo da maneira correta, na realidade acredito que eu esteja fazendo da maneira errada, do contrario não estaria com problema, um rápido resumo do programa, o mesmo se conecta há um banco mysql, seleciono uma tabela e o sistema se encarrega de gerar os .PAS, porem ao trabalhar com as classes geradas está sendo retornado erro na criação dos componentes, por exemplo, trabalho com o Zeos, sendo assim em minha classe de persistência no Create da mesma eu crio meu componente, porem está sendo retornado um erro, já debuguei porem não consegui encontrar nada que possa indicar o erro, por este motivo imagino que o erro de fato está em minha lógica, se alguem puder ajudar, segue códigos: obs: O erro ocorre na camada de persistência, no Create do componente ZQuery, outro ponto que gostaria de receber alguma orientação é de que forma posso trabalhar melhor estas camadas, pois na camada de negócios acabo tendo que passar o componente de conexão ao banco de dados. classFornecedoresDAO: Unit classFornecedoresDAO; interface uses classFornecedores, DB, ZAbstractRODataset, ZAbstractDataset, ZDataset, Variants, Classes, Controls, ZConnection; type TFornecedoresDAO = class private FSQLFornecedores : TZQuery; public constructor Create(Conn : TZConnection); destructor Destroy; function Insert(oFornecedores : TFornecedores) : Boolean; end; implementation { TFornecedoresDAO } constructor TFornecedoresDAO.Create(Conn: TZConnection); begin inherited Create; FSQLFornecedores := TZQuery.Create(nil); FSQLFornecedores.Connection := Conn; end; destructor TFornecedoresDAO.Destroy; begin inherited; end; function TFornecedoresDAO.Insert(oFornecedores : TFornecedores) : Boolean; begin Result := False; with FSQLFornecedores do begin Close; SQL.Clear; SQL.Add('Select * From Fornecedores'); SQL.Add('Where(Codigo = :Codigo)'); Open; Insert; FieldByName('Tipo').Value := oFornecedores.Tipo; FieldByName('Cnpj').Value := oFornecedores.Cnpj; FieldByName('Ie').Value := oFornecedores.Ie; FieldByName('Im').Value := oFornecedores.Im; FieldByName('Cpf').Value := oFornecedores.Cpf; FieldByName('Rg').Value := oFornecedores.Rg; FieldByName('Nome').Value := oFornecedores.Nome; FieldByName('Endereco').Value := oFornecedores.Endereco; FieldByName('Bairro').Value := oFornecedores.Bairro; FieldByName('Cidade').Value := oFornecedores.Cidade; FieldByName('Estado').Value := oFornecedores.Estado; FieldByName('Cep').Value := oFornecedores.Cep; FieldByName('Fone1').Value := oFornecedores.Fone1; FieldByName('Fone2').Value := oFornecedores.Fone2; FieldByName('Fone3').Value := oFornecedores.Fone3; FieldByName('Email').Value := oFornecedores.Email; FieldByName('Homepage').Value := oFornecedores.Homepage; FieldByName('Obs').Value := oFornecedores.Obs; FieldByName('Contato').Value := oFornecedores.Contato; FieldByName('Empresa').Value := oFornecedores.Empresa; FieldByName('Fantasia').Value := oFornecedores.Fantasia; FieldByName('Negativacao').Value := oFornecedores.Negativacao; FieldByName('Codmunicipio').Value := oFornecedores.Codmunicipio; FieldByName('Contabil').Value := oFornecedores.Contabil; FieldByName('Dtnasc').Value := oFornecedores.Dtnasc; Post; Result := True; end; end; end. classFornecedores: Unit classFornecedores; interface uses Variants, Classes, Controls, ZConnection; type TFornecedores = class private FCodigo : Integer; FTipo : String; FCnpj : String; FIe : String; FIm : String; FCpf : String; FRg : String; FNome : String; FEndereco : String; FBairro : String; FCidade : String; FEstado : String; FCep : String; FFone1 : String; FFone2 : String; FFone3 : String; FEmail : String; FHomepage : String; FObs : String; FContato : String; FEmpresa : Integer; FFantasia : String; FNegativacao : String; FCodmunicipio : String; FContabil : Integer; FDtnasc : TDate; Conexao : TZConnection; procedure SetCodigo(const Value : Integer); procedure SetTipo(const Value : String); procedure SetCnpj(const Value : String); procedure SetIe(const Value : String); procedure SetIm(const Value : String); procedure SetCpf(const Value : String); procedure SetRg(const Value : String); procedure SetNome(const Value : String); procedure SetEndereco(const Value : String); procedure SetBairro(const Value : String); procedure SetCidade(const Value : String); procedure SetEstado(const Value : String); procedure SetCep(const Value : String); procedure SetFone1(const Value : String); procedure SetFone2(const Value : String); procedure SetFone3(const Value : String); procedure SetEmail(const Value : String); procedure SetHomepage(const Value : String); procedure SetObs(const Value : String); procedure SetContato(const Value : String); procedure SetEmpresa(const Value : Integer); procedure SetFantasia(const Value : String); procedure SetNegativacao(const Value : String); procedure SetCodmunicipio(const Value : String); procedure SetContabil(const Value : Integer); procedure SetDtnasc(const Value : TDate); public constructor Create(Conn : TZConnection); destructor Destroy; property Codigo : Integer read FCodigo write SetCodigo; property Tipo : String read FTipo write SetTipo; property Cnpj : String read FCnpj write SetCnpj; property Ie : String read FIe write SetIe; property Im : String read FIm write SetIm; property Cpf : String read FCpf write SetCpf; property Rg : String read FRg write SetRg; property Nome : String read FNome write SetNome; property Endereco : String read FEndereco write SetEndereco; property Bairro : String read FBairro write SetBairro; property Cidade : String read FCidade write SetCidade; property Estado : String read FEstado write SetEstado; property Cep : String read FCep write SetCep; property Fone1 : String read FFone1 write SetFone1; property Fone2 : String read FFone2 write SetFone2; property Fone3 : String read FFone3 write SetFone3; property Email : String read FEmail write SetEmail; property Homepage : String read FHomepage write SetHomepage; property Obs : String read FObs write SetObs; property Contato : String read FContato write SetContato; property Empresa : Integer read FEmpresa write SetEmpresa; property Fantasia : String read FFantasia write SetFantasia; property Negativacao : String read FNegativacao write SetNegativacao; property Codmunicipio : String read FCodmunicipio write SetCodmunicipio; property Contabil : Integer read FContabil write SetContabil; property Dtnasc : TDate read FDtnasc write SetDtnasc; function Insert : Boolean; end; implementation uses classFornecedoresDAO; { TFornecedores } constructor TFornecedores.Create(Conn : TZConnection); begin inherited Create; Conexao := Conn end; destructor TFornecedores.Destroy; begin inherited; end; procedure TFornecedores.SetCodigo(const Value : Integer); begin FCodigo := Value; end; procedure TFornecedores.SetTipo(const Value : String); begin FTipo := Value; end; procedure TFornecedores.SetCnpj(const Value : String); begin FCnpj := Value; end; procedure TFornecedores.SetIe(const Value : String); begin FIe := Value; end; procedure TFornecedores.SetIm(const Value : String); begin FIm := Value; end; procedure TFornecedores.SetCpf(const Value : String); begin FCpf := Value; end; procedure TFornecedores.SetRg(const Value : String); begin FRg := Value; end; procedure TFornecedores.SetNome(const Value : String); begin FNome := Value; end; procedure TFornecedores.SetEndereco(const Value : String); begin FEndereco := Value; end; procedure TFornecedores.SetBairro(const Value : String); begin FBairro := Value; end; procedure TFornecedores.SetCidade(const Value : String); begin FCidade := Value; end; procedure TFornecedores.SetEstado(const Value : String); begin FEstado := Value; end; procedure TFornecedores.SetCep(const Value : String); begin FCep := Value; end; procedure TFornecedores.SetFone1(const Value : String); begin FFone1 := Value; end; procedure TFornecedores.SetFone2(const Value : String); begin FFone2 := Value; end; procedure TFornecedores.SetFone3(const Value : String); begin FFone3 := Value; end; procedure TFornecedores.SetEmail(const Value : String); begin FEmail := Value; end; procedure TFornecedores.SetHomepage(const Value : String); begin FHomepage := Value; end; procedure TFornecedores.SetObs(const Value : String); begin FObs := Value; end; procedure TFornecedores.SetContato(const Value : String); begin FContato := Value; end; procedure TFornecedores.SetEmpresa(const Value : Integer); begin FEmpresa := Value; end; procedure TFornecedores.SetFantasia(const Value : String); begin FFantasia := Value; end; procedure TFornecedores.SetNegativacao(const Value : String); begin FNegativacao := Value; end; procedure TFornecedores.SetCodmunicipio(const Value : String); begin FCodmunicipio := Value; end; procedure TFornecedores.SetContabil(const Value : Integer); begin FContabil := Value; end; procedure TFornecedores.SetDtnasc(const Value : TDate); begin FDtnasc := Value; end; function TFornecedores.Insert : Boolean; var fDAO : TFornecedoresDAO; begin fDAO.Create(Conexao); Result := fDAO.Insert(Self); end; end. Camada de Apresentação: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ZConnection, StdCtrls; type TForm1 = class(TForm) ZConnection1: TZConnection; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses classFornecedores; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var oFornecedor : TFornecedores; begin oFornecedor.Create(ZConnection1); oFornecedor.Nome := 'Eneias'; oFornecedor.Insert; end; end.
  23. Daniel o campo 004 corresponde à Moeda, entrei em contato ainda pouco com a SevenPDV e me informaram que de fato o campo é obrigatório em todos os testes, não somente para o Cielo Premia.
  24. Daniel vou levantar essa informação (004) e lhe repasso.
  25. CHQ --------------------------------- 000-000 = CHQ 001-000 = 39049 002-000 = 003172 003-000 = 100 004-000 = 0 006-000 = F 701-000 = FORTH PAF-ECF 3.1.1 706-000 = 3 716-000 = D C F SANTOS 999-999 = 0 CRT --------------------------------- 000-000 = CRT 001-000 = 39047 002-000 = 003172 003-000 = 100 004-000 = 0 701-000 = FORTH PAF-ECF 3.1.1 706-000 = 3 716-000 = D C F SANTOS 777-777 = TESTE REDECARD 999-999 = 0 CNC --------------------------------- 000-000 = CNC 001-000 = 39051 003-000 = 100 004-000 = 0 010-000 = VISANET 012-000 = 11111111 022-000 = 03092012 023-000 = 111111 701-000 = FORTH PAF-ECF 3.1.1 706-000 = 3 716-000 = D C F SANTOS 999-999 = 0
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.