Sistema comercial levando um minuto para emitir o cupom fiscal

Um minuto depois da transação estar concluída, com caixa e comprador olhando um para a cara do outro. Muitos compradores desistiam de esperar e saiam sem o cupom.

Essa máquina, com Windows 7, vinha há algum tempo apresentando problemas relacionados com o HDD. Fui lá duas vezes para repor um backup do arquivo c:\windows\system32\config\SYSTEM que estava corrompido e encontrei diversas menções a problemas de disco no log do sistema, por isso recomendara a troca preventiva do HDD. Quando o cliente me chamou para fazer a troca mencionou esse problema do sistema que começara recentemente e me avisou que o suporte queria falar comigo. Por telefone me pediram para que instalasse o Service Pack 1. Eu fiquei surpreso porque até então não havia notado que o sistema operacional estava tão desatualizado assim.

Eu achei pouco provável que a falta do SP1 fosse responsável pelo problema, já que este surgira recentemente. Mas em um dos eventos relacionados com o HDD algum arquivo necessário pode ter sido perdido ou corrompido, então quem sabe a instalação do SP1 não resolveria indiretamente o problema? E que escolha eu tinha, de qualquer forma, já que quando o suporte do sistema começa a chutar, se você não sabe como resolver sozinho o problema é melhor fazer o que eles dizem? Então após a troca do HDD eu instalei o SP1.

Mas, como eu esperava, não resolveu nada.

Como eu ouvira a moça do suporte mencionar o IE11 e ainda estava instalado o IE8 (e faz algum sentido dependendo de que APIs o sistema usa), fiz essa atualização também. Nada mudou.

Nova ligação para o suporte e desta vez a coisa ficou risível. O “técnico” do lado de lá botou a culpa no acesso à internet do cliente, que estava instável.

De fato, estava. Durante as minhas visitas de vez em quando o ícone de rede do Windows mostrava o triângulo amarelo. Mas isso não parecia causar nenhum transtorno no uso regular da internet e o cliente conseguia ler email, navegar na internet normalmente e eu baixei o SP1 de 500MB a 10Mbps sem interrupções. Eu até entenderia se num grande volume de operações de cupom de vez em quando uma levasse uma eternidade. Mas todas as operações, que eram bem espaçadas (algo como 5, 10 ou 20 minutos entre compradores), levando um minuto? Como uma operação que não deveria levar mais que 2s sempre consegue ocorrer justamente durante uma interrupção aleatória de acesso? A afirmação do suporte não fazia qualquer sentido e eu expliquei isso ao cliente.

Eu até tentei localizar o problema sozinho. Ativei o Process Monitor (PM) durante uma operação de emissão de cupom e tentei localizar a razão para a pausa mas não consegui. A quantidade de informação que o PM coleta em um minuto é absurda e mesmo depois de um tempão analisando e excluindo o que parecia ser irrelevante eu ainda fiquei com 1500 eventos (comecei com mais de 350mil) e nenhuma razão clara para a pausa, como um erro de aceso a arquivo ou tentativa de acessar um servidor inexistente. O sistema simplesmente começava e terminava esse minuto de pausa se comunicando com um servidor de nfce lá no Rio Grande do Sul, mas fazia um monte de outras coisas espaçadas nesse meio tempo. A única coisa que eu pude determinar com certeza é que não era um problema com a impressão, porque o PM mostrava o sistema comercial emitindo as primeiras atividades com relação a impressão apenas no final desse minuto. Somente o desenvolvedor tinha condições de interpretar o log do PM corretamente.

Como no mesmo serviço onde instalei o SP1 eu aproveitei para criar uma nova partição e instalar uma cópia limpa do Windows, também com SP1, porque eu já esperava que ia ser mais rápido reinstalar todo o sistema comercial do que esperar que o suporte descobrisse onde estava o problema, eu instruí ao cliente que pedisse que reinstalassem o sistema na partição nova apenas para tirar a dúvida, porque se funcionasse certamente não era problema com a internet. Disse também que meu “plano B” era tentar conseguir um roteador com suporte a modem 3G só para satisfazer o suporte do sistema. Mas nesse meio tempo o cliente, que provavelmente concordou comigo que isso não era culpa da internet, encontrou outro técnico do suporte que tinha outra opinião e o guiou a fazer o resto das atualizações do Windows 7 na instalação velha mesmo. O cliente disse que o computador “passou a noite atualizando”.

E depois disso o problema foi resolvido.

É importante frisar que o problema certamente não era causado por falta de atualizações porque o problema não existia mesmo antes do SP1 estar instalado. O suporte pode ter feito alguma mudança no sistema que passou a exigir uma atualização específica do Windows? Claro! Mas nesse caso é também clara a obrigação do desenvolvedor de fazer a conexão entre uma ação sua e o surgimento do problema, reverter, notar que o problema some e a partir daí investigar a causa para ter uma solução pronta. E não empurrar o problema para cada um dos clientes onde este surgir.

11 comentários
  • Alex - 15 Comentários

    * Muito “técnico” de suporte claramente só tem conhecimentos superficiais. Acho que geralmente são novatos (para que a empresa gaste menos com salário, e também para que o produto tenha um custo de venda menor).
    * Eu “adoro” essas atualizações automáticas feitas para “melhorar” minha vida. E como isso já virou regra, vai ser super-fácil para a skynet dominar geral.

  • Alex - 15 Comentários

    Ótimo também é o programa de um banco: De vez em quando informa que “não foi possível concluir a operação” e não informa o motivo. Entrando em contato o “suporte”, falam que lá está tudo ok, o problema é na maquina do cliente e que eu tenho que entrar em contato com o técnico da máquina. Maaasss não falam de jeito nenhum o que é para resolver. Depois de um tempo (1 ou 2 dias), sem alterar nada e máquina com atualizações desativadas, volta a funcionar. Ah! E o tom/atitude do “suporte” muda para pior se eu falar que sou técnico.

    • Jefferson - 6.606 Comentários

      Eu nem tento falar mais com suporte bancário, principalmente, mas não apenas, se for um banco público. Qualquer pergunta mais difícil que onde clicar para fazer uma determinada operação está acima do nível deles.

  • Jefferson - 6.606 Comentários

    Me ocorreu agora que eu poderia ter colocado múltiplos comandos ping em loop durante a operação de cupom e mostrado para o suporte que a conexão com a internet estava presente durante a pausa. Caramba, eu poderia até ter usado o mesmo servidor de nfce que eu observei o sistema contactando através do Process Monitor. É claro que isso não convence quem não quer ser convencido, mas reforça a sua posição diante do cliente.

  • Snow_man - 311 Comentários

    Jeff, fui num cliente hoje a tarde, usa sistema Linx; problema começou a ocorrer após uma atualização do sistema. Obs.: fazem 10 dias mas só me chamaram hoje.

    Defeito: frente de caixa faz venda, recebe pagamento, é emitida a solicitação ao sefaz,
    é gerado o danfe, a impressora imprime o cupom e abre a gaveta do caixa MAS
    passou a demorar 5 minutos para fechar o processo e retornar para a tela inicial do frente de caixa para realizar a próxima venda.

    Só me chamaram hoje porque o suporte botou a culpa na memória RAM, e pediu que um técnico local fosse verificar. Fiz limpeza do Windows 10, e desliguei tudo que roda em 2o. plano nele (muito lixo) e desinstalei programas (tive que deixar o warsaw :huh: )

    Após isso, o desempenho melhorou, inclusive constatado pelo suporte ao fazer acesso remoto MAS o erro persistiu; ele desconfiou de banco de dados corrompido e ficou de testar com uma base limpa. Amanhã vou saber o resultado.

    • Jefferson - 6.606 Comentários

      Só me chamaram hoje porque o suporte botou a culpa na memória RAM,

      Nem é preciso verificar, né? Os sintomas apresentados não dão suporte a essa hipótese.

      ele desconfiou de banco de dados corrompido

      Depende de como o mecanismo de banco de dados usado se comporta ao esbarrar em um problema (dá “timeout” sem dar nenhum erro? As mensagens de erro estão sendo redirecionadas para algum lugar pelo sistema?). É MUITO mais provável que RAM mas ainda assim eu não apostaria em ser essa a razão. O Process Monitor pode ajudar nisso, mas o desenvolvedor tem MUITO mais chances de fazer um diagnóstico preciso porque ele pode olhar no código fonte e ver o que existe entre a abertura de gaveta e a finalização do processo. Nós do suporte “genérico” ficamos tateando no escuro.

      • Richard - 21 Comentários

        Um sistema que eu desenvolvi passou por um problema desse tipo com o SQLite. No caso era uma operação INSERT simples, rápida e de rotina, que do nada passou a demorar mais de 5 minutos, até no meu PC com Core i7 recente e SSD. A solução (mais simples) foi gerar um backup do banco de dados em arquivo .sql e restaurar esse backup em um novo banco. Nunca mais aconteceu de novo.

        • Snow_man - 311 Comentários

          Muito bom, Richard, obrigado. Caso o aumento de RAM não resolva, vou procurar passar essa informação pro suporte e solicitar fazer isso pra ver o resultado.

      • Snow_man - 311 Comentários

        Bom, recomendei a aquisição de nova cpu, mas não aprovaram.

        Ao iniciar o sistema, o mesmo exibiu uma mensagem informando atuais/requisitos mínimos do computador para uso do sistema.

        CPU 2.1 / 3.0
        RAM 4 / 6

        Então foi autorizado aumento de ram para 8gb; após isso, está em teste, vamos ver se essa semana vão reclamar de algo.

        • Jefferson - 6.606 Comentários

          Ooooopss…

          Quando você falou

          o suporte botou a culpa na memória RAM,

          Eu só entendi de uma maneira: defeito na RAM :dashhead1:

          Falta de RAM não é uma possibilidade absurda, apesar de ser pouco provável dependendo do comportamento geral da máquina. Se esta se comporta razoavelmente bem e só nessa operação empaca, levando cinco minutos para concluir, mesmo que colocar mais RAM resolva ainda é defeito na programação. Na minha opinião programador de sistema comercial deveria ter apenas 2GB na máquina para evitar fazer m**da e transferir o problema para os clientes. É sempre bom lembrar que o bom desenvolvedor não assume que a RAM inteira da máquina é território do seu programa.

Deixe um comentário para Richard Cancelar resposta

Você pode usar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

  

  

  

:) :( ;) O_o B) :lol: :huh: :S :D :-P 8-O :yahoo: :rtfm: :dashhead1: :clapping: more »