Ir para conteúdo
  • Cadastre-se

dev botao

Sat Rb-1000 Fi - Dúvidas


Ver Solução Respondido por Kelson Palharini,
  • Este tópico foi criado há 2690 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Estou recebendo o seguinte erro:

WindowsApplication1.BEMATECH_SAT::ConsultarSAT' desbalanceou a pilha. Isso ocorreu provavelmente porque a assinatura gerenciada de PInvoke não corresponde à assinatura de destino não gerenciada. Verifique se a convenção e o parâmetro de chamada da assinatura de PInvoke são iguais aos da assinatura não gerenciada de destino.

Alguém teve algo parecido?

Ou conseguiu fazer a função do seu próprio código fonte funcionar?

Link para o comentário
Compartilhar em outros sites

Pessoal... estou com um SAT da Bematech, ativado e associado a AC pelo software de exemplo da própria Bema...

Vendo o layout do software da bematech me parece muito com o exemplo do ACBr e não duvido que seja. No software da bema, consigo conexão, consulto status, teste fim a fim e faço todo que tem no exemplo, no entanto se tento fazer as operações pelo exemplo do ACBr ou pela minha aplicação comercial a função ConsultarSAT retorna SAT em Operação, mais todas as outras funções retornam Erro List Index Of Bounds(2).

Isso que estou apontando para DLL na pasta arquivos de programas da bematech para garantir que eu estava usando a mesma dll e etc...

Alguém tem alguma ideia para onde posso correr nesse caso, pois se

Link para o comentário
Compartilhar em outros sites

Daniel, no ACBR log fica exatamente com o erro que comentei no post:

 

 - 18:35:32:771 - ACBrSAT.Inicializado
 - 18:35:36:125 - -- 18:35:36:125 - numeroSessao: 463883 - Comando: ConsultarStatusOperacional
 - 18:35:36:140 - EStringListError - List index out of bounds (2)

Vou anexar o log todo para ver se ajuda.

fppp09, a dll e o xml tana pasta da aplicação :(

ACBrSAT.zip

Com o TANCA minha aplicação está funcionando perfeitamente, com o Bematech não vai nem por cristo... fica nesse erro.

E como eu disse, nem o exe do exemplo do ACBrSAT funciona nesse bema.

Link para o comentário
Compartilhar em outros sites

Daniel, colocando a dll e o xml junto com o acbrSat agora funcionou (com o sat plugado local), so que em rede nao esta funcionando:

O Cenario é o seguinte, estou em uma estação, o sat esta ligado no servidor, mesmo configurando o ip, tanto com o ip do sat, quanto com o ip do servidor, a estação nao enxerga o SAT, e fica retornando "Erro na abertura da porta de comunicação com o S@T", e o mais curioso de tudo, em nossa aplicacao, que comecamos desenvolver com uso direto com a BEMAFI32.DLL, tudo funciona mesmo estando em rede.

 

Link para o comentário
Compartilhar em outros sites

Pessoal, somente para informar o ocorrido e a solução encontrada.

Meu cenário é o seguinte, fiz um serviço do windows que tem as funções do SAT e o componente do ACBR. Minha aplicação envia comandos por DataSnap para esse serviço e ele executa os comandos no SAT.

Com isso consegui criar um "Servidor SAT" onde as estações do meu sistema se associam ao servidor X e passam a enviar os dados para o determinado SAT configurado nele.

Temos aqui um TANCA que funciona nesse sistema perfeitamente, e posso de várias estações enviar vendas para o mesmo equipamento SAT.

Com o bematech ao executar os comandos eu recebia o retorno "Erro na abertura da porta de comunicação com o S@T" e no log do ACBr "EStringListError - List index out of bounds (2)";

Percebi que a DLL da bematech não estava conseguindo localizar a porta serial (que fica configurada no arquivo bemasat.xml).

Só conseguia conexão com o exemplo do ACBr se o arquivo bemasat.xml estivesse no mesmo diretório do executável da aplicação, mesmo que a DLL estivesse em outro diretório, o bemasat.xml obrigatoriamente deveria estar na pasta do executável.

Coloquei o bemasat.xml no diretório do executável do meu serviço mais isso não resolveu, continuou com problema, tentei espalhar o bemasat.xml no mundo, coloquei na pasta do executavel da minha aplicação, na pasta windows, windows\system32, windows\systemwow64 e assim por diante... mais não resolveu.

Coloquei o componente ACBr eu uma tela na minha aplicação e testei as funções do SAT da bematech e funcionaram normalmente, com isso não consegui fazer o meu "Servidor SAT" funcionar com o RB-1000 FI, somente local.

Conclusão, na minha aplicação ficou no cadastro de equipamento SAT a marca do equipamento e na hora de enviar a venda se for bematech abre os comandos localmente(só funciona 1:1 SAT ligado no PDV que esta vendendo) se for TANCA usa o Servidor SAT (N:1, qualquer PDV que aponte para o Servidor SAT realiza venda no mesmo equipamento). Ainda não fiz testes com outras marcas, apenas Bema e Tanca.

Não sei se estou comendo bronha em alguma coisa, mais não consegui de forma nenhuma fazer o RB-1000 FI funcionar com meu serviço do windows, ele fica como se não localizasse o arquivo bemasat.xml e com isso a DLL não encontra a porta serial. Se alguém tiver uma dica para eu tentar, agradeço.

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Pessoal, somente para informar o ocorrido e a solução encontrada.

Meu cenário é o seguinte, fiz um serviço do windows que tem as funções do SAT e o componente do ACBR. Minha aplicação envia comandos por DataSnap para esse serviço e ele executa os comandos no SAT.

Com isso consegui criar um "Servidor SAT" onde as estações do meu sistema se associam ao servidor X e passam a enviar os dados para o determinado SAT configurado nele.

Temos aqui um TANCA que funciona nesse sistema perfeitamente, e posso de várias estações enviar vendas para o mesmo equipamento SAT.

Com o bematech ao executar os comandos eu recebia o retorno "Erro na abertura da porta de comunicação com o S@T" e no log do ACBr "EStringListError - List index out of bounds (2)";

Percebi que a DLL da bematech não estava conseguindo localizar a porta serial (que fica configurada no arquivo bemasat.xml).

Só conseguia conexão com o exemplo do ACBr se o arquivo bemasat.xml estivesse no mesmo diretório do executável da aplicação, mesmo que a DLL estivesse em outro diretório, o bemasat.xml obrigatoriamente deveria estar na pasta do executável.

Coloquei o bemasat.xml no diretório do executável do meu serviço mais isso não resolveu, continuou com problema, tentei espalhar o bemasat.xml no mundo, coloquei na pasta do executavel da minha aplicação, na pasta windows, windows\system32, windows\systemwow64 e assim por diante... mais não resolveu.

Coloquei o componente ACBr eu uma tela na minha aplicação e testei as funções do SAT da bematech e funcionaram normalmente, com isso não consegui fazer o meu "Servidor SAT" funcionar com o RB-1000 FI, somente local.

Conclusão, na minha aplicação ficou no cadastro de equipamento SAT a marca do equipamento e na hora de enviar a venda se for bematech abre os comandos localmente(só funciona 1:1 SAT ligado no PDV que esta vendendo) se for TANCA usa o Servidor SAT (N:1, qualquer PDV que aponte para o Servidor SAT realiza venda no mesmo equipamento). Ainda não fiz testes com outras marcas, apenas Bema e Tanca.

Não sei se estou comendo bronha em alguma coisa, mais não consegui de forma nenhuma fazer o RB-1000 FI funcionar com meu serviço do windows, ele fica como se não localizasse o arquivo bemasat.xml e com isso a DLL não encontra a porta serial. Se alguém tiver uma dica para eu tentar, agradeço.

 

tente no path do exe... criar uma pasta com nome   Config  e dentro por o bemasat.xml

 

e a conf da serial como 

-<serial>

<port_detect>0</port_detect>

<port_name>\\.\COM3</port_name>

</serial>

 

 

Link para o comentário
Compartilhar em outros sites

Ja coloquei o bemasat.xml na system32 e na wow64 e não resolveu...

o conteúdo do XML que estou usando é o que veio no ativador que baixei no site da Bema:

<?xml version="1.0" encoding="UTF-8" ?>
<bematech>
    <Sistema>
        <LocalizarPorta>0</LocalizarPorta>
        <Porta>COM9</Porta>
        <NivelLog>1</NivelLog>
        <ValidarParametros>1</ValidarParametros>
    </Sistema>
    <Timeouts>
        <ativacao>900000</ativacao>
        <icp_brasil>300000</icp_brasil>
        <consultar_sat>5000</consultar_sat>
        <associar_assinatura>40000</associar_assinatura>
        <consultar_sessao>20000</consultar_sessao>
        <trocar_codigo_ativacao>20000</trocar_codigo_ativacao>
        <bloquear_sat>600000</bloquear_sat>
        <desbloquear_sat>40000</desbloquear_sat>
        <extrair_logs>90000</extrair_logs>
        <atualizar_sat>1800000</atualizar_sat>
        <configurar_rede>60000</configurar_rede>
        <enviar_venda>15000</enviar_venda>
        <cancelar_venda>10000</cancelar_venda>
        <teste_fim_a_fim>20000</teste_fim_a_fim>
        <consultar_status>8000</consultar_status>
    </Timeouts>
</bematech>

Link para o comentário
Compartilhar em outros sites

Ja coloquei o bemasat.xml na system32 e na wow64 e não resolveu...

o conteúdo do XML que estou usando é o que veio no ativador que baixei no site da Bema:

<?xml version="1.0" encoding="UTF-8" ?>
<bematech>
    <Sistema>
        <LocalizarPorta>0</LocalizarPorta>
        <Porta>COM9</Porta>
        <NivelLog>1</NivelLog>
        <ValidarParametros>1</ValidarParametros>
    </Sistema>
    <Timeouts>
        <ativacao>900000</ativacao>
        <icp_brasil>300000</icp_brasil>
        <consultar_sat>5000</consultar_sat>
        <associar_assinatura>40000</associar_assinatura>
        <consultar_sessao>20000</consultar_sessao>
        <trocar_codigo_ativacao>20000</trocar_codigo_ativacao>
        <bloquear_sat>600000</bloquear_sat>
        <desbloquear_sat>40000</desbloquear_sat>
        <extrair_logs>90000</extrair_logs>
        <atualizar_sat>1800000</atualizar_sat>
        <configurar_rede>60000</configurar_rede>
        <enviar_venda>15000</enviar_venda>
        <cancelar_venda>10000</cancelar_venda>
        <teste_fim_a_fim>20000</teste_fim_a_fim>
        <consultar_status>8000</consultar_status>
    </Timeouts>
</bematech>

meu xml esta o seguinte...

<?xml version="1.0" encoding="UTF-8"?>

<BemasatConfig>

<timeouts>

<timeout_ativacao>300000</timeout_ativacao>

<timeout_icp_brasil>300000</timeout_icp_brasil>

<timeout_consultar_sat>2000</timeout_consultar_sat>

<timeout_associar_assinatura>20000</timeout_associar_assinatura>

<timeout_consultar_sessao>20000</timeout_consultar_sessao>

<timeout_trocar_codigo_ativacao>20000</timeout_trocar_codigo_ativacao>

<timeout_bloquear_sat>300000</timeout_bloquear_sat>

<timeout_desbloquear_sat>20000</timeout_desbloquear_sat>

<timeout_extrair_logs>20000</timeout_extrair_logs>

<timeout_atualizar_sat>1800000</timeout_atualizar_sat>

<timeout_configurar_rede>20000</timeout_configurar_rede>

<timeout_enviar_venda>1000</timeout_enviar_venda>

<timeout_cancelar_venda>1000</timeout_cancelar_venda>

<timeout_teste_fim_a_fim>20000</timeout_teste_fim_a_fim>

<timeout_consultar_status>2000</timeout_consultar_status>

</timeouts>


<serial>

<port_detect>0</port_detect>

<port_name>\\.\COM3</port_name>

</serial>


<caminhos>

<log_path>Log\</log_path>

<sessions_path>Sessions\</sessions_path>

<mockup>0</mockup>

</caminhos>

</BemasatConfig>

Link para o comentário
Compartilhar em outros sites

Eu Resolvi a comunicação só colocando o bemasat.xml junto com minha aplicação, na mesma pasta... a dll ficou em outro local e funcionou.

Agora se não tiver o bemasat.xml junto com o exe, da erro e não acha o SAT.

 

Editado por Daniel Carus

Daniel Carus

 

 

Link para o comentário
Compartilhar em outros sites

Eu Resolvi a comunicação só colocando o bemasat.xml junto com minha aplicação, na mesma pasta... a dll ficou em outro local e funcionou.

Agora se não tiver o bemasat.xml junto com o exe, da erro e não acha o SAT.

 

O meu problema é que minha aplicação é um Serviço do Windows, mais precisamente um servidor datasnap como serviço do windows, ele possui um EXE que foi instalado como serviço, esse serviço datasnap é acionado pela minha aplicação, executável que fica local em cada terminal da loja, no entanto ja tentei colocar o bemasat.xml em todos os locais possível, coloquei na System32, na SystemWow64, no diretório do EXE do meu Serviço Datasnap, no diretório do exe da minha aplicação e nenhum deles surtiu resultado utilizando o serviço, então por hora até eu encontrar uma outra solução o RB-1000 só vai rodar na minha aplicação localmente 1x1... mais não vou desistir nunca!!!

Se eu encontrar uma solução posto aqui.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Eu Resolvi a comunicação só colocando o bemasat.xml junto com minha aplicação, na mesma pasta... a dll ficou em outro local e funcionou.

Agora se não tiver o bemasat.xml junto com o exe, da erro e não acha o SAT.

 

O meu problema é que minha aplicação é um Serviço do Windows, mais precisamente um servidor datasnap como serviço do windows, ele possui um EXE que foi instalado como serviço, esse serviço datasnap é acionado pela minha aplicação, executável que fica local em cada terminal da loja, no entanto ja tentei colocar o bemasat.xml em todos os locais possível, coloquei na System32, na SystemWow64, no diretório do EXE do meu Serviço Datasnap, no diretório do exe da minha aplicação e nenhum deles surtiu resultado utilizando o serviço, então por hora até eu encontrar uma outra solução o RB-1000 só vai rodar na minha aplicação localmente 1x1... mais não vou desistir nunca!!!

Se eu encontrar uma solução posto aqui.

Boa tarde a todos.

Eu também desenvolvi um serviço de comunicação com equipamentos SAT. Já fiz para SWEDA e BEMATECH. No SWEDA foi mais tranquilo, tudo funcionou praticamente de primeira. Já com a Bematech, tive vários problemas, tanto para ativar quanto para comunicar com o equipamento através de serviço. Só consegui suporte da Bematech após abrir uma reclamação no ReclameAqui, pois o SAT não ativava de jeito nenhum, igual aos posts anteriores deste mesmo tópico. Praticamente o que resolveu foi colocar o SAT diretamente na conexão da internet, ou seja, sem nenhum proxy ou firewall (mesmo desativado), e principalmente setar um IP fixo para o equipamento, no caso, o mesmo que o DHCP atribuía.

Quanto a comunicação com o SAT Bematech, em aplicativo funciona sem problemas, porém via serviço o erro mera sempre o mesmo: "Erro na abertura da porta de comunicacao com o S@T". Consegui resolver quando coloquei tanto a DLL quanto o XML na pasta SysWOW64 do windows (8 - 64 bits) e EXCLUIR essa DLL de todos os outros lugares, "obrigando" o serviço a utilizar a DLL do sistema, pois se mantenho a DLL no diretório do exe serviço instalado, ele ainda dá esse erro.

Espero ter ajudado!

Abraços,

Júnior Áli

ALITEC Soluções Inteligentes

www.alitecsolucoes.com.br

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Eu Resolvi a comunicação só colocando o bemasat.xml junto com minha aplicação, na mesma pasta... a dll ficou em outro local e funcionou.

Agora se não tiver o bemasat.xml junto com o exe, da erro e não acha o SAT.

 

O meu problema é que minha aplicação é um Serviço do Windows, mais precisamente um servidor datasnap como serviço do windows, ele possui um EXE que foi instalado como serviço, esse serviço datasnap é acionado pela minha aplicação, executável que fica local em cada terminal da loja, no entanto ja tentei colocar o bemasat.xml em todos os locais possível, coloquei na System32, na SystemWow64, no diretório do EXE do meu Serviço Datasnap, no diretório do exe da minha aplicação e nenhum deles surtiu resultado utilizando o serviço, então por hora até eu encontrar uma outra solução o RB-1000 só vai rodar na minha aplicação localmente 1x1... mais não vou desistir nunca!!!

Se eu encontrar uma solução posto aqui.

Boa tarde a todos.

Eu também desenvolvi um serviço de comunicação com equipamentos SAT. Já fiz para SWEDA e BEMATECH. No SWEDA foi mais tranquilo, tudo funcionou praticamente de primeira. Já com a Bematech, tive vários problemas, tanto para ativar quanto para comunicar com o equipamento através de serviço. Só consegui suporte da Bematech após abrir uma reclamação no ReclameAqui, pois o SAT não ativava de jeito nenhum, igual aos posts anteriores deste mesmo tópico. Praticamente o que resolveu foi colocar o SAT diretamente na conexão da internet, ou seja, sem nenhum proxy ou firewall (mesmo desativado), e principalmente setar um IP fixo para o equipamento, no caso, o mesmo que o DHCP atribuía.

Quanto a comunicação com o SAT Bematech, em aplicativo funciona sem problemas, porém via serviço o erro mera sempre o mesmo: "Erro na abertura da porta de comunicacao com o S@T". Consegui resolver quando coloquei tanto a DLL quanto o XML na pasta SysWOW64 do windows (8 - 64 bits) e EXCLUIR essa DLL de todos os outros lugares, "obrigando" o serviço a utilizar a DLL do sistema, pois se mantenho a DLL no diretório do exe serviço instalado, ele ainda dá esse erro.

Espero ter ajudado!

Abraços,

Júnior Áli

ALITEC Soluções Inteligentes

www.alitecsolucoes.com.br

 

Vou fazer o teste aqui... tentei colocar na Syswow64 mais não removi dos outros lugares.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pessoal... excluindo a DLL de todos os lugares na maquina e mantendo ela apenas na SysWOW64 consegui fazer o RB-1000 rodar em rede com meu serviço.

Obrigado pela ajuda.

Ainda não consegui teste algum em rede. Você colocou a bemasat.dll e a bemasat.xml na syswow64? Como configurou a porta COM no XML?

Link para o comentário
Compartilhar em outros sites

Pessoal... excluindo a DLL de todos os lugares na maquina e mantendo ela apenas na SysWOW64 consegui fazer o RB-1000 rodar em rede com meu serviço.

Obrigado pela ajuda.

Ainda não consegui teste algum em rede. Você colocou a bemasat.dll e a bemasat.xml na syswow64? Como configurou a porta COM no XML?

duardomribeiro A minha DLL é a versão 1.0.0.4 datada de 08/06/2015... segue anexo o bemasat.xml e a DLL que usei.

Coloquei os 2 na SysWOW64 pois minha aplicação é um Serviço do windows... caso não seja serviço a DLL e o XML tem que estar na mesma pasta do EXE da aplicação.

No ACBrSAT coloquei o caminho da DLL apontando na SysWOW64 "C:\Windows\SysWOW64\BemaSAT.dll"... A DLL só deve estar em 1 local na maquina, se não o equipamento se perde... então se estiver na SysWOW64 não coloque na pasta da aplicação, se estiver na pasta da aplicação não coloque na SysWOW64.

renan.sanches Não fiz o teste com o executável da aplicação compartilhado em rede, mais acredito que os arquivos estando junto ao executável não terá problema.

 

bemasat.xml

BemaSAT.zip

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

boa noite pessoal estou com um problema para cancelar usando o componente ACBrSAT1.CancelarUltimaVenda( chave, xml )

onde esta gerando esse erro >>>> 21:53:30:334 - NumeroSessao: 216761 - Resposta:Erro|Erro na leitura da porta de comunicacao com o S@T|Header.

** estou conseguindo enviar os cupons normalmente.. somente o cancelamento que esta com problema.

Alguem ja passou por esse problema.?

Obrigado 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2690 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.