Ir para conteúdo
  • Cadastre-se

Daniel Simoes

Fundadores
  • Total de ítens

    27.502
  • Registro em

  • Última visita

  • Days Won

    766

Tudo que Daniel Simoes postou

  1. O ACBr é Open Source... Já tentou debugar essa rotina ?
  2. É um desconto um tanto agressivo... mas realmente parece ser um problema na regra de rateio... Vou solicitar apoio do Fabricante
  3. Ou seja, você deve querer ligar a Balança ao PC, e ler o peso diretamente na sua aplicação, correto ? Se SIM, essa balança, em conjunto com o componente ACBrBAL, atenderia a sua necessidade https://www.automacaototal.com.br/balancas/balanca-computadora-dp-15
  4. Será que não haveria uma maneira mais assertiva, de separarmos as duas vias ? Se eles mudarem o Texto, o código irá quebrar... Não há algum outro campo, que possamos usar ? Como por exemplo, o número de linhas na 1a via...
  5. Realmente o novo design de classes em 2 Units não ficou bom... a própria IDE fica um pouco perdida, com alguns tipos declarados na Unit ACBrPosPrinterClass Fiz a reversão dessas modificações, e apliquei alguns novos ajustes
  6. Rode novamente o ACBrInstall
  7. O SVN deixa tudo no lugar correto... minha suspeita é que você tem alterações do seu lado... experimente baixar tudo em outra pasta e instalar
  8. Verifique se esse arquivo está na ACBrComum
  9. Olá pessoal, Introduzi no componente ACBrPosPrinter, um novo mecanismo de acesso a Impressora Agora poderemos acessar algumas impressoras, usando a Sintaxe: ACBrPosPrinter1.Porta := 'DLL:MARCA'; Onde MARCA, será o nome da Marca do Fabricante da Impressora... Até o momento, temos suporte para as marcas "ELGIN", e "EPSON" A ideia por traz dessa nova sintaxe de Porta, é permitir usar a DLL/SO do Fabricante, para Imprimir diretamente na Impressora... Ok.. o ACBrPosPrinter, já conseguia acessar impressoras Não Fiscais, pela Porta USB, usando a Sintaxe "RAW:" ACBrPosPrinter1.Porta := 'RAW:Nome da Impressora no Windows'; Mas então porque desenvolvemos essa nova forma de acesso ? A nova sintaxe "DLL:", tem algumas vantagens, em relação a sintaxe "RAW:" Não depende da instalação do Driver de Spool da Impressora.. (note porém, que em alguns casos, o Driver de Spool não pode estar instalado, pois ele bloqueia o acesso a USB) Podemos Ler Informações da Impressora (o que não é possível no modo RAW) Entretanto, como foi dito antes, dependemos de DLL exclusiva do fabricante, para o acesso a Impressora pela USB... Quais são essas DLLs ? Para onde eu devo copiá-las ? Vejamos como foi descrito no ACBrSerial-change-Log.txt Creio que isso responde as duas perguntas, correto ? Você pode encontrar as DLLs no nosso SVN, na pasta: \ACBr\DLLs\PosPrinter, ou ainda pela Web: http://svn.code.sf.net/p/acbr/code/trunk2/DLLs/PosPrinter/ Você pode ainda baixar uma versão do Demo PosPrinterTeste, atualizada, compilado em Lazarus/FPC no link abaixo: Como funciona essa nova técnica ? Quem faz todo acesso as Portas suportadas pelo ACBr, é um subcomponente chamado ACBrDevice, e há um bom tempo, esse componente já possui uma possibilidade de Integração por Hooks O que é Hook ? https://pt.wikipedia.org/wiki/Hooking A ideia por trás dos Hooks, é instalar ganchos, em eventos, que nos permitam interceptar algumas ações e chamadas... Veja esse trecho de código FDevice.HookAtivar := PosPrinterHookAtivar; FDevice.HookDesativar := PosPrinterHookDesativar; FDevice.HookEnviaString := PosPrinterHookEnviaString; FDevice.HookLeString := PosPrinterHookLeString; Aqui instruímos o subcomponente ACBrDevice, a chamar nossos eventos, quando ele precisar "Ativar", "Desativar" uma porta e também quando ele for "EnviarString" e "LeString", de uma determinada porta... Então no interior do componente ACBrPosPrinter, implementamos os eventos indicados acima (PosPrinterHookAtivar, PosPrinterHookDesativar, etc) ... Com isso, o ACBrDevice executará um código nosso, ao invés do que ele normalmente executaria... Veja que dentro dos eventos de ativação e desativação usamos uma Classe de Hook (leia mais abaixo) procedure TACBrPosPrinter.PosPrinterHookAtivar(const APort: String; Params: String); begin if Assigned(FHook) then FHook.Open(APort); end; procedure TACBrPosPrinter.PosPrinterHookDesativar(const APort: String); begin if Assigned(FHook) then FHook.Close; end; FHook por sua vez, é uma variável interna ao ACBrPosPrinter, que contem uma Classe de Hook (TACBrPosPrinterHook), e implementa os comandos necessários, para transmitir essas ações, a DLL do fabricante... Veja o exemplo abaixo, como fica a implementação dos Hooks de Ativar e Desativar, da ELGIN... observe que chamamos métodos Externos, da DLL da Elgin, como: "PrtPortOpenW" e "PrtPortClose" procedure TElginUSBPrinter.Open(const APort: String); var errorNo: Integer; begin if Connected then Exit; inherited Open(APort); try errorNo := xPrtPortOpenW(FPrinter, WideString(fpPort)); // <------- A Q U I ------- if (errorNo <> E_SUCCESS) then raise Exception.CreateFmt(CERROR_OPEN, [fpPort, fpPrinterName]); except fpConnected := False; fpPort := ''; raise; end; end; procedure TElginUSBPrinter.Close; var errorNo: Integer; begin if not Connected then Exit; errorNo := xPrtPortClose(FPrinter); // <------- A Q U I ------- if (errorNo <> E_SUCCESS) then raise Exception.CreateFmt(CERROR_CLOSE, [fpPort, fpPrinterName]); inherited Close; end; Com isso, conseguimos usar a DLL do Fabricante, para estabelecer um túnel entre o ACBrPosPrinter e o equipamento... Como posso implementar um Hook para um novo modelo ? Os Primeiros passos, são verificar: Se o Fabricante disponibiliza uma DLL para acesso direto ao equipamento (sem depender do Spooler) Se há nessa DLL, um método que nos permita Escrever e Ler Dados da Porta USB Ou seja, não precisamos de métodos de alto nível, que façam a formatação de caracteres, ou manipulem a impressora... Pois continua sendo o ACBrPosPrinter, quem montará toda a Sintaxe de comandos a serem enviados para a Impressora, usando a linguagem Esc/Pos... e igualmente, será o ACBrPosPrinter que fará a leitura de respostas, quando for necessário... Na DLL da Elgin, temos um ótimo exemplo de método para isso... function PrtDirectIO(printer:Pointer; // Ponteiro com a Impressora instanciada por PrtPrinterCreatorW writeData:PByte; // Buffer com dados a serem enviados writeNum:integer; // Número de Bytes em "writeData" (tamanho do Buffer) readData:PByte; // Ponteiro com o Retorno a ser Lido (Buffer de saída) readNum:integer; // Numero de bytes disponíveis para escrita em "readData" (tamanho disponível no Buffer de Saída) preadedNum:PInteger // Número de bytes realmente escritos em "readData" ): Integer; cdecl; // Status de retorno E_SUCCESS = 0; Tendo isso em mãos, podemos criar uma cópia de uma das Units já existentes, como por exemplo a Unit ACBrEscPosHookElginDLL.pas, e implementar o suporte usando a nova DLL, e efetuar os ajustes referente a nova Marca
  10. Recebi do @André Ferreira de Moraes, esse link com um artigo muito interessante, sobre o esse assunto... https://www.focus.jor.br/economia/sefaz-impos-uma-pitomba-amarga-desnecessaria-e-ineficiente/
  11. Not sure if I made myself clear.... so, in other words... There is no relation between with your current problem and your ACBr SAC signature status
  12. ACBrMonitorPLUS is a OpenSource application... There is no limitation for use, or blocking routine for no payment signature inside ACBrMonitorPLUS source code... You may be confusing the ACBr SAC payment... Please Read this (in Portuguese) https://www.projetoacbr.com.br/forum/sac/sobre/ Please tell us what is the exactly issue, you are facing... And attach de ACBrMonitorPLUS log file
  13. parece realmente ser um Bug... a Classe está retendo valores dos comandos anteriores... Obrigado pelo Bug Report... @José M. S. Junior, pode adicionar essa caso à sua lista ?
  14. Obrigado por reportar. Fechando. Para novas dúvidas, criar um novo tópico.
  15. Que estranho... a sua opção parecia estar corretamente selecionada... O Instalador estava rodando com privilégios de Administrador ?
  16. Anexe o Log gerado pelo Instalador
  17. Já vai tarde.... kkkk
  18. Estamos andando... quase lá... Agradecemos muito a ajuda nos testes, e os bug reports...
  19. BPLs são apenas DLLs com outra extensão... Essas BPLs dependem de várias DLLs, que o instalador pode ou não copiar, conforme sua seleção
  20. Veja os Itens grifados no Log Veja a versão de XML, informada na página do Sefaz, para esse Fabricante + Versão Sw.Básico https://portal.fazenda.sp.gov.br/servicos/sat/Paginas/Modelos-SAT.aspx O layout 0.06 não é mais aceito pelo SEFAZ Solução ? Enviar o SAT para o Fabricante...
  21. No Instalador do ACBr, marque a opção para Copiar as DLLs requeridas
  22. Não parece haver nada de errado com o seu XML.. provavelmente é erro na sua Rotina de carregamento e impressão... você pode testar o XML, carregando o mesmo no Demo SATTeste e imprimindo Isso porque o próprio componente carrega o XML no CFe, após recebe-lo do SAT
×
×
  • 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.