Jump to content

naugustijr

Membros
  • Content Count

    7
  • Joined

  • Last visited

Community Reputation

0 Neutral

About naugustijr

  • Rank
    Novato

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Pessoal, acabei de encontrar o problema e a solução. Juntei os argumentos de cada um de vocês, consegui simular o problema, diagnostica-lo e achar uma solução (que está vinculada ao design da minha aplicação). Cenário: Cliente Windows XP Impressora fiscal MP 4000 TH FI Bobina com pouco papel Aplicativo desenvolvido em Visual Basic 6.0 utilizando ACBrFramework Histórico: Aplicativo instalado ontem no cliente. Hoje apresentou problemas ao ativar a impressora (ACBR.ATIVAR), retornando a mensagem DISK FULL. Ao utilizar o formulario de configuração da impressora (no mesmo aplicativo) a impressora ativava normalmente e retornava a mensagem POUCO PAPEL. Eu desativava a impressora e ativava novamente e nada de aparecer a mensagem DISK FULL. Saia da configuração da impressora e quando retornava recebia novamente a mensagem DISK FULL. Ainda no cliente, pedi para que o mesmo trocasse a bobina (com pouco papel) por uma nova. Ele trocou e resolveu o problema. O que não tinha sentido (POUCO PAPEL e DISK FULL) confirmou ter alguma relação obscura. Para encontrar a solução precisava simular o problema no meu ambiente de desenvolvimento. Simulação em Ambiente de Desenvolvimento: Sempre uso o emulador da SWEDA, connectsim, e tentei simular pouco papel com ele. Em todos os aplicativos que tinha em mãos nao retornava o status e nem a mensagem. Instalei o emulador novo da bematech e tambem nao funcionou direito com o com0com que tenho funcionando aqui. Instalei emulador antigo da Bematech. Este sim me retornou o status de pouco papel e fez com o erro acontecesse em ambiente de desenvolvimento. Depois de vários testes e tentativas de alteração de código percebi que: Eu tento no sistema ativar a impressora em 2 locais diferentes: a) para verificar somente se a impressora esta configurada corretamente e funcionando e Declaracao da variavel global Public ACBrECF As New ACBrFramework_Net.ACBrECF para trabalhar efetivamente com a impressora. Declaração da Variavel Local Public WithEvents ACBrECF As ACBrFramework_Net.ACBrECF As diferenças entre os 2 locais de ativação eram a existência( ou não (a) de um formulário (form) associado. Concluí então, que o fato do ACBr disparar eventos como o de POUCO PAPEL exigia um tratamento (ou pelo menos um ambiente-form- em que pudesse se "expressar") para o evento disparado. Para não alterar muito meu código criei um formulário (que fica invisivel o tempo todo) com uma variavel do ACBR que será setada para a instância global e que trata os eventos emitidos pelo ACBrECF. Formulario Public WithEvents ACBrECF As ACBrFramework_Net.ACBrECF Public WithEvents ACBrAAC As ACBrFramework_Net.ACBrAAC Public WithEvents ACBrEAD As ACBrFramework_Net.ACBrEAD Private Sub ACBrECF_OnMsgPoucoPapel() MsgBox "POUCO PAPEL", vbCritical, "IMPORTANTE!" Beep End Sub Chamada ao Formulario Set frm_PDV_Testa_Impressora.ACBrECF = ACBrECF Select Case AtivaEProgramaECF 'Onde ocorria o erro Com esta solução o problema não mais ocorreu. Resumindo, o cenário de ocorrência foi identificado, uma solução viável foi apresentada. Fica faltando a explicação do porque da mensagem DISK FULL. É com vocês agora.
  2. Caro Josevaldo, a sua resposta não consta aqui no Forum. Se você não se solidarizar com minhas duvidas explicitamente temos menos chance de sermos correspondidos. Se tem uma dúvida semelhante faça-a constar aqui tambem. Eu também tenho interesse em ajudar no projeto mas preciso de algo mais mastigado visto que todos temos pouco tempo disponivel.
  3. Me desculpem. Esqueci de perguntar. No tópico a seguinte informação: O próprio componente a extrai numa pasta temporária e a utiliza sem que o usuário saiba. Como o arquivo ACBrFramework32.dll faz/pode fazer manipulações de arquivos (deve utilizar o path da aplicação ou de onde se encontra) e o mesmo é extraído em uma pasta temporária será que os arquivos que ele tenta ler (exemplo: acbrecfmemo.ini) nunca serão encontrados pois não estão nesta pasta temporária?
  4. Pessoal, como ninguém respondeu e precisava de uma solução, recompilei o ACBRFramework32.dll no Lazarus, (com a alteração do parâmetro HTML=1 para HTML=0) compilei novamente o ACBrFramework.Net.dll (ACBrFramework.Net.tlb) e usei no aplicativo feito em Visual Basic 6.0. Funcionou da forma que eu precisava. O problema é que os dados da empresa que ficam na propriedade MemoParams são genéricos e se quiser uma solução alternativa tenho que gerar um arquivo ACBRFramework32.dll (e descendentes) para cada cliente. Preciso resolver a questão da atualização (em tempo de execução) do campo MemoParams. Pensei em algumas alternativas: 1) Gerar um arquivo ACBRFramework32.dll para cada cliente (dito acima) 2) Criar uma propriedade com o local do arquivo ACBrMemoParams.ini (que no ACBrECF.pas é acbrecfmemo.ini, e não consegui ler com este nome tambem) e criar um método (procedure) e encapsulá-lo no ACBrFramework para carregar o arquivo; 3) Encapsular a procedure MemoLeParams no ACBrFramework. É possível, viável? 4) Tentar alterar o código fonte do ACBrFramework para que a propriedade MemoParams aceite ser escrita, assumindo que atualmente ela não está funcionando corretamente. Documentos associados: http://blogs.msdn.com/b/aszego/archive/2009/10/12/visual-basic-6-and-net-com-interop.aspx http://support.microsoft.com/kb/327084 Se alguém puder ajudar, agradeço muito. .
  5. Pessoal, não preciso repetir que tanto o projeto ACBr como o ACBrFramework são fantásticos, mas estou encontrando alguns problemas em usá-lo no VB6. Tenho um aplicativo funcional que utiliza o ACBrX do pessoal do EasyTef. O pessoal sempre me deu um bom suporte mas depois que vocês lançaram o ACBrFramework eles não me responderam mais. Acho que perderam o interesse pelo produto. Dessa forma, estou fazendo uma avaliação para trocar o ACBrX pelo ACBrFramework. Ja baixei o projeto, compilei e consigo fazê-lo funcionar PARCIALMENTE. ------------ Para fazê-lo funcionar tive que fazer algumas alterações no aplicativo de exemplo: Trocar: Private Sub ACBrECF_OnBobinaAdicionaLinhas(ByVal e As ACBrFramework_Net.BobinaEventArgs) Por: Private Sub ACBrECF_OnBobinaAdicionaLinhas(ByVal e As ACBrFramework_Net.BobinaAdicionaLinhasEventArgs) -------------- Percebi que várias funções que eu usava estão marcadas como PENDENTES: Exemplo: Private Sub mniAchaAliquotaValor_Click() 'PENDENTE 'Dim Aliquota As Aliquota 'Dim Valor As String ' ' Call ACBrECF.LerTotaisAliquota ' Set Aliquota = ACBrECF.AchaICMSAliquota(Valor, "") 'função que usava em minha aplicação Neste caso específico não preciso mais da função visto que a função de programação de aliquota não cria aliquotas já existentes. Mando programar a aliquota e se ela ja existir nada acontecerá. Não entendi (não encontrei na documentação) porque algumas das propriedades do ACBrECF não existem mais (ou, pelo menos, não funcionam no ACBRFramework). Propriedades inexistentes: ReTentar BloqueiaMouseTeclado ExibeMensagem MsgAguarde MsgTrabalhando Objetos Inexistentes: ACBrRFD Metodos Inexistentes: ACBrECF.CarregarMemoParams Algumas das mudanças (incluo em mudanças as pendencias e melhorias em algumas funções) não tiveram grande impacto mas tem uma que está me atrapalhando muito (por enquanto, é a única). No meu aplicativo mostro na tela o retorno do processamento dos comandos em um componente do tipo textbox, utilizando a propriedade Linhas do evento ACBrECF_OnBobinaAdicionaLinhas. Para que saida seja satisfatoria o conteudo da propriedade Linhas deve estar em modo texto (HTML=0, na propriedade MemoParams) e nao HTML (HTML=1, na propriedade MemoParams). Com o ACBrX eu carregava esta informação de um arquivo .INI e atualizava a propriedade MemoParams. Agora não consigo fazer o mesmo com o ACBrFramework e o retorno da propriedade Linhas está cheio de tags HTML. Eu preciso realmente resolver este problema. Irei fazer a migração do aplicativo para C# (tenho outros ja rodando) mas não tenho tempo para fazer isso agora. Tecnicamente falando. O objeto ACBrECF tem uma propriedade que é um array de string (Propriedade MemoParams) e que não ser alterada mesmo tendo o método SET no ACBrFramework.Net.dll. Ela pode ser lida (GET) mas não pode ser alterada. A mensagem que retorna é a seguinte: Function or interface marked as restricted, or the function uses an Automation Type not supported in Visual Basic. Acredito que o problema não seja "restricted" visto que a propriedade é publica e outras propriedades da mesma classe são acessadas e alteradas normalmente. O problema deve ser o "Automation Type not supported in Visual Basic". Vocês já tentaram alterar a propriedade MemoParams dentro do VB6? Façam este teste no Aplicativo ECFTeste.vbp. Substituam o inicio do codigo da procedure CarregarACBrECF por Private Sub CarregarACBrECF() Set ACBrECF = New ACBrECF Dim memoparams As Variant 'Atribuo tranquilamente sem erros memoparams = ACBrECF.memoparams 'Altero a variavel local memoparams(1) = "LIN000=<center><b>RARARARRARAR</b></center>" memoparams(22) = "HTML=0" 'Trecho de codigo que da erro de compilação ACBrECF.memoparams = memoparams 'Utilizar o AAC 'Set ACBrAAC = New ACBrAAC 'ACBrAAC.NomeArquivoAuxiliar = "C:\teste.txt" 'Set ACBrECF.AAC = ACBrAAC Desde já agradeço muito a atenção. Ficarei feliz se puder ajudar no projeto também.
  6. Caro EasyTEF, ja tinha visto o trabalho de voces. No entanto, no seu site não existe telefone, email de contato, etc. Como faço para entrar em contato como você?
  7. Estou com problemas ao criar o activex do ACBR para utiliza-lo no visual basic 6. O exemplo que tem no projeto esta bastante incompleto e comecei, entao, a ampliá-lo. No entanto estou com problemas com relação as funções que passam "estruturas" de dados por parâmetro, conforme levantei neste post. http://www.forumweb.com.br/foruns/topic ... ge__st__60 . Nao estou consiguindo carregar as aliquotas corretamente. Ainda faltam as formas de pagamento e outros. Como alternativa a sugestao do post, tentei usar outra funcao:GetAliquotaSStr . Ao usar a funcao ECF_GetAliquotaSStr percebi que nao tinha na versão da ACBr32.dll (922KB) da pasta C:\SVN\ACBR\Projetos\ACBr32_DLL\ACBr_ActiveX. Usei a outra dll que estava na pasta C:\SVN\ACBR\Projetos\ACBr32_DLL\ACBr32 (1608 kb) mas ai surgiu outro erro "BAD DLL calling convention." Pesquisei e se refere a questoes de compilacao encontradas no mesmo post. http://support.microsoft.com/kb/153586 http://www.codeguru.com/forum/showthread.php?t=373600 Check these threads: http://www.codeguru.com/forum/showthread.php?t=356338 http://www.codeguru.com/forum/showthread.php?t=352701 http://www.codeguru.com/forum/showthread.php?t=371639 __________________ A sugestao seria recompilar utilizando a diretiva "STDCALL". Baixei o Delphi 2010 e tentei recompilar. Nao consegui. Ocorreu o seguinte erro: [DCC Error] ACBrPAFClass.pas(496): E2010 Incompatible types: 'TListSortCompare' and 'Pointer' O que eu faço? TFA.
×
×
  • Create New...