Ir para conteúdo
  • Cadastre-se

Gerson De Simone

Membros
  • Total de ítens

    8
  • Registro em

  • Última visita

Últimos Visitantes

796 visualizações

Gerson De Simone's Achievements

Rookie

Rookie (2/14)

  • First Post
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

1

Reputação

  1. Desculpe não entendi, qual evento devo apagar? Outra coisa, eu vi no ACBrMter tem umas funções de balança mas estão comentadas(desabilitadas), sabe se posso habilitar e usar? Obrigado.
  2. Boa tarde Sim eu atualizei a partir do trunk2, mas eu não alterei o fonte ACBrMTer, mas sim a unit1 do exemplo. O Delphi XE7 sempre da esse tipo de problema, quando migra do D7 que é onde eu tenho vários projetos e vou ter que migrar todos, principalmente por causa da NFe com a partilha de icm e as outras mudanças. Desculpe eu realmente não tenho experiencia em comentários, como vi alguém com esse problema de incompatibilidade, achei valido mostrar minha solução, e no caso da leitura da balança vou testar as opções do acbrmter e do exemplo do fabricante, mas com a conexão física. Os emuladores ajudam mas, no local é melhor. Eu alterei mais coisas, o tipo do campo na linha 457(AvaliarRespostaTerminal) e outras referencias iguais, o arquivo UTerminal é da willtech a procedure é terminalBalanca linha 618. Espero ter sido util. Obrigado. unit1.zip UTerminal.zip
  3. Olá. Esse erro E2010 Incompatible types: 'string' and 'AnsiString' , eu resolvi alterando a unit1 ficou assim procedure ACBrMTer1Conecta(const IP: AnsiString); procedure ACBrMTer1Desconecta(const IP: AnsiString; Erro: Integer; ErroDesc: AnsiString); procedure ACBrMTer1RecebeDados(const IP: AnsiString; var Recebido: AnsiString); function AlterarEstadoTerminal(aIP: AnsiString; aEstado: Integer): Boolean; procedure AvaliarRespostaTerminal(aIP: AnsiString; var aString: AnsiString); na declaração e na procedure/função, mas ainda na hora de compilar ele avisa que a procedure ACBrMTer1RecebeDados é incompatível e se que retirar a declaração, é só dizer que não que compila e funciona normal. Uso o XE7. para a leitura da balança o exemplo da willtec usa essa procedure procedure TFTerminal.terminalBalanca(xterminal: Pointer); begin with PTerminal(xterminal)^ do begin // socket.SendText(#27 + '[?24h' + #27 + '[5i' + #5 + #27 + '[4i'); //Serial 1 para MT TCP socket.SendText(Chr(27) + '[?24r' + Chr(27) + '[5i' + Chr(5) + Chr(27) + '[4i'); // serial 0 para MT TCP end; end; no emulador de balança não funcionou, mas acho que é falha do emulador de terminal porque é em uma janela dele que se coloca o peso e envia, e também é onde simula a impressão, eu não entendi qual a diferença entre as duas linhas que seleciona a porta serial, mas vou testar com um socket e depois ver se é possível mandar a string pelo ACBrMter , enviar texto pela serial também não funcionou com os emuladores, vou testar fisicamente, se der certo eu passo a solução mas aceito alguma ideia.
  4. Não sei se aqui seria o local para perguntar, mas quanto ao KIT Sat ACBr existe um plano para revenda ou agenciamento de venda?
  5. Relatando minha experiência migrando do D7 para o XE7, o meu maior problema foi ter demorado para sair do bde para IB, tenho que refazer toda essa parte, já mudei em alguns para Firedac mas acho que o IB é melhor, nos componentes ACBR não tive problemas em alguns casos é melhor, no Sat-Cfe quase obrigatório, como foi citado antes PCHAR tem que mudar para PANSICHAR, no caso das consultas SQL e STOREDPROCEDURE tem varias diferenças, principalmente no tipo de variável nos parâmetros tanto de entrada como retorno, principalmente datetime, outra diferença esta no tamanho do executável, um aplicativo em D7 de 4Mb no XE7 fica com mais de 45Mb, posso estar fazendo algo errado, mas em todos aconteceu isso. Bom, eu vou apressar a mudança, melhor estar atualizado, mas vai uma dica, fiz um aplicativo que funciona como o AcbrMonitor, esse em XE7, só passo o tipo(NFe/Sat) e o respectivo Nº, fiz a principio pro Sat ficou bom acrescentei a NFe e vou colocar as ECF também, assim ganho mais tempo para migrar ou refazer tudo. Se durante o processo, notar algum detalhe relevante, vou anotar e compartilhar. Agradeço a equipe do Projeto ACBr e aos outros colaboradores, pelo excelente trabalho.
  6. Usa stored procedures, nas rotinas criticas, fazendo todo o procedimento nela, também nos procedimentos concorrentes, isso resolve o problema. Por exemplo esse TRIGGER é parecido com o que vc tem que fazer CREATE TRIGGER "AJ" FOR "PED_IT_TMP" ACTIVE BEFORE INSERT POSITION 0 as declare variable DATA TIMESTAMP; declare variable QT_VENDAS NUMERIC(9, 3); declare variable N_VENDAS NUMERIC(9, 3); declare variable QTD NUMERIC(9, 3); declare variable NQT NUMERIC(9, 3); declare variable QT NUMERIC(9, 3); declare variable TP VARCHAR(10); declare variable DT INTEGER; declare variable TOT DECIMAL(9, 3); begin data=CURRENT_DATE; qt=PED_IT_tmp.QUANT; select tipo from pedidos where cod=PED_IT_tmp.cod_ped into tp; select vendas,qt_vend,pro_eqtd from produto1 where COD=PED_IT_tmp.cod_prod INTO :qt_vendas,:N_vendas,:qtd; if (tp<>'Devolucao') then begin nqt=:qtd-:qt; update produto1 set pro_eqtd=:nqt, dt_ult_vend=:data, qt_ult_vend=:QT, qt_vend=:N_vendas+1, vendas=:qt_vendas+:qt, VAL_COMP=(PRO_CUSTO*:NQT), VAL_VEND=(PRO_VVEND*:NQT) WHERE COD=PED_IT_tmp.cod_prod ; end else begin nqt=:qtd+:qt; update produto1 set pro_eqtd=:nqt, dt_ult_vend=:data, qt_ult_vend=:QT, qt_vend=:N_vendas-1, vendas=:qt_vendas-:qt, VAL_COMP=(PRO_CUSTO*:NQT), VAL_VEND=(PRO_VVEND*:NQT) WHERE COD=PED_IT_tmp.cod_prod ; end end ele atualiza uma movimentação inteira (tipo todos os itens de um pedido), a partir dessa stored procedure CREATE PROCEDURE "AJUSTA_EST_TOTAL" ( "C_PED" INTEGER ) AS BEGIN EXIT; END ^ ALTER PROCEDURE "AJUSTA_EST_TOTAL" ( "C_PED" INTEGER ) AS declare variable CLI INTEGER; declare variable TIPO VARCHAR(15); declare variable TP VARCHAR(1); begin insert into PED_IT_TMP select * from "PED_IT" where cod_ped=:c_ped; delete from PED_IT_TMP where cod_ped=:c_ped; select cli,tipo from pedidos where cod=:"C_PED" into :cli,:tipo; execute procedure tp1 :tipo RETURNING_VALUES :tp; if (tp='V') then tp='P'; update pedidos set fechado='T', blq='T', data=current_date, hora=current_time where cod=:c_ped; update ped_it set data=current_date, tipo=:"TP" where cod_ped=:c_ped; update EMPRESA set DT_ULT_COMP=current_date where empr_cod=:cli; suspend; end a única informação que trafega na rede é o nº do pedido, mesmo com 20 transações diferentes o FB gerencia. Eu passo todo trabalho para o servidor FB, em 80% das tarefas, é mais rápido e sem erros. espero ter dado uma dica, pode dar trabalho no inicio, mas resolve.
  7. Exatamente essa era a minha duvida, vou testar a solução do Kohzito.
  8. Valeu pra mim funcionou.
×
×
  • 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.