Ir para conteúdo
  • Cadastre-se

dev botao

Farmácia Popular novo DNS do webservice


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

Recommended Posts

Boa tarde a todos,

Sei que existe um outro tópico semelhante a este porem esta fechado.

Não sei se alguém ainda permanece com erro da DNA inválido, más abaixo deixo uma resposta que recebi do Ministério da Saúde com relação ao problema.

Ainda não implementei a solução proposta por eles, mas assim que conseguir realizar os testes irei postar aqui o meu resultado.

Segue resposta do Ministério da Saúde:

Citar

PREZADO(A),

         ESTE PROBLEMA JÁ FOI REPASSADO AO DATASUS PARA QUE POSSAM VERIFICAR O MOTIVO, DIANTE DA NECESSITADE DA NORMALIZAÇÃO DAS VENDAS PELOS ESTABELECIMENTOS, ORIENTAMOS QUE PASSE A UTILIZAR O COMPONENTE GBASMSB.EXE AO INVÉS DA DLL.

         INFORMAMOS QUE O NOVO DNS ENCONTRA-SE ESTÁVEL, CASO O ERRO SEJA DE CONEXÃO, SOLICITE AOS RESPONSÁVEIS PELO SISTEMA INTERNO PARA VERIFICAR O LINK UTILIZADO.      

          ALGUNS ESTABELECIMENTOS VEM ENFRENTANDO ERRO DE DNA INVÁLIDO EM SEU SISTEMA DE AUTOMAÇÃO E DIANTE DE ALGUMAS ANÁLISE FOI IDENTIFICADO OS POSSIVEIS ERROS  QUE DEVE SER VERIFICADO PELO SUPORTE TÉCNICO DO SISTEMA DE AUTOMAÇÃO:

Ø  VERIFICAR SE O COMPONENTE DE SEGURANÇA UTILIZADO PELO SISTEMA DE AUTOMAÇÃO É GBASMSB_LIBRARY.DLL OU GBASMSB.EXE;

·         CASO APLICAÇÃO ESTEJA UTILIZANDO O COMPONENTE GBASMSB_LIBRARY.DLL, TENTE MODIFICAR PARA O ARQUIVO EXECUTÁVEL PARA TENTAR SOLUCIONAR O PROBLEMA, O HASH GERADO DEVE SER COM AS INICIAIS W1|.

·         CASO ESTEJA UTILIZANDO O ARQUIVO EXECUTÁVEL GBASMSB.EXE, VERIFIQUE SE NÃO EXISTE NENHUM  OUTRO ARQUIVO DO COMPONENTE ANTIGO E SE POSSIVEL VERIFIQUE O HASH GERADO PELO SISTEMA DE AUTOMAÇÃO SE ESTÁ INICIANDO COM W1|.

·         SE FAZ NECESSÁRIO QUE TODOS OS ARQUIVOS EXISTENTE NO ARQUIVO ZIP DO COMPONENTE DE SEGURANÇA NOVO PARA A SUA PLATAFORMA ESTEJA NA MESMA PASTA;

         OBS: JÁ FOI REPASSADO AO DATASUS PARA VERIFICAR SE EXISTE ALGUM ERRO SENDO OCASIONADO NA DLL, PORÉM NÃO TEMOS PREVISÃO DE RESPOSTA.

DÚVIDAS REFERENTE A VERIFICAÇÃO, ENTRE EM CONTATO COM O SUPORTE TÉCNICO DO ESTABELECIMENTO.

Um abraço

 

Link para o comentário
Compartilhar em outros sites

Boa tarde!

Vou relatar minha experiencia com a comunicação com WebService da Farmacia Popular nestes ultimos dias .

Eu já havia preparado o meu sistema para funcionar com ambos WebService ( DNS antigo e DNS NOVO) isso lá no inicio de Dez/2018.

E estava funcionando, em diversos clientes, com o NOVO DNS+GBAS ATUALIZADO, até dia 25/Fev/2019 próximo das 16Hrs....

Depois só passou a retornar a mensagem:

"  Solicitação não autorizada. DNA da transação gerado pelo GBAS é inválido."

Porem constatei que algumas operações eram concluídas sem qualquer problema.

Ainda NÃO RESOLVI mas detectei o "porque" determinada OPERAÇÃO retorna o erro acima e outras não.

Caso esteja com o mesmo problema, faça este TESTE:

informe para a DATA DA RECEITA e siga com a opração, caso retorne a mensagem citada:

    informe uma data que seja UM DIA ANTERIOR em relação a DATA ATUAL (data do sistema).

    Persistindo a mensagem, vou sucessivamente DECREMENTADO a data até  que a operação ocorra sem restrições.

Um absurdo, não é?   mas só dessa maneira a operação é executada sem qualquer problema!!

Acredito que seja algo teria que que ser resolvido no servidor do DATASUS/FARMACIA POPULAR.

E desde ontem (01-Março-2019) finalzinho da tarde (16:30hrs aprox) a "coisa" normalizou, ou seja, todas as operações são validadas sem fazer qualquer tipo de manobra.

Infelizmente é um absurdo, visto que nós desenvolvedores NÃO TINHAMOS o que fazer, pois o problema era GERADO pelo servidor do DATATSUS/Farm.Popular

Mas aproveitei e gastei mais um tempinho e fiz um LOOP até que a operação não seja negada pelo errro = 51S,  DECREMENTANDO a data oficial da receita.

Funcionará perfeitamente caso a data oficial da receita apresente  o erro = 51S, do contrario  da data da receita permanecerá informada pelo usuário.

Espero que meus cometários sejam uteis 

Abç, t+

 

Link para o comentário
Compartilhar em outros sites

Bom dia Ronaldo,

 

Realmente é complicado pois não temos como falar diretamente com um suporte mais especializado e eles ficam informando que está funcionando corretamente. Quando consegui uma resposta por e-mail informando que o problema era lá tratei de postar aqui no fórum de divulgar para os meus clientes.

O pior é que com isso já é a terceira atualização que faço nos meus clientes desde 10 de dezembro de 2018 quando iam colocar este novo DNS no ar, e ainda terei que fazer mais uma quando eles resolverem o problema da DLL pois ficar usando o GBASMSB.EXE não tem como.

 

Abraços,

Link para o comentário
Compartilhar em outros sites

Boa tarde Pessoal, 

    Gostaria de Compartilhar com vocês a minha solução, sempre utilizei a DLL, porém a partir do dia 25/02/19, meus clientes começaram a obter o erro de DNA inválido, entrei em contato com o pessoal da Farmácia Popular e obtive esse mesmo e-mail. Portanto resolvi implementar a solução utilizando gbasmsb.exe, até então conseguimos estabilizar a comunicação.

   A forma como estou fazendo é criar um arquivo .bat, com o seguinte parametro " --identificacao ", para obter a identificação do terminal. E para obter o DNA da solicitação " --solicitacao ", desta forma ficou bem parecido como se eu estivesse utilizando a DLL. Porque salvo um .txt com as informações ao executar o .bat e depois só efetuo a leitura do .txt.

LogoACBr_02.png.d3c72a4756f896a387e063fd64ed6646.png Frederico Westphalen - RS
pbnew.com.br  
[email protected]  
55 3744 - 3880  
Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Bom dia Pessoal!

Alguém passando uns problemas com a Popular aí?

Instabilidade gigante no servidor.

Recebi um e-mail deles:

PREZADO(A),

       TIVEMOS RELATOS DE INDISPONIBILIDADE DO SERVIDOR DO PROGRAMA FARMÁCIA POPULAR, PORÉM JÁ SOLICITAMOS AO DATASUS PARA VERIFICAR OS SERVIDORES.

 

Ocorreu um erro ao se conectar ao webservice A conexão com o servidor foi reconfigurada - URL:https://farmaciapopular-autorizador.saude.gov.br/farmaciapopular-autorizador/services/ServicoSolicitacaoWS - SOAPAction:""
Ocorreu um erro ao se conectar ao webservice Operation aborted
Ocorreu um erro ao se conectar ao webservice A conexão com o servidor foi reconfigurada - URL:https://farmaciapopular-autorizador.saude.gov.br/farmaciapopular-autorizador/services/ServicoSolicitacaoWS - SOAPAction:""
Ocorreu um erro ao se conectar ao webservice Operation aborted
Ocorreu um erro ao se conectar ao webservice Operation aborted
Ocorreu um erro ao se conectar ao webservice Operation aborted

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • Membros Pro

Estou tendo vários casos de clientes que não estão conseguindo passar vendas no Farmácia Popular. Será novamente instabilidade no servidor ? 

O erro que aparece pra mim é que o documento xml deve ter um elemento de nível superior.

Alguém esta conseguindo passar vendas sem problemas ? 

 

 

Link para o comentário
Compartilhar em outros sites

O meu passa a venda tive problemas maiores por conta de versão do ie, ai atualizei para versões acima da 11.0.100 e habilitei no opções de internet aba avançados o Tls 1.0 , 1.1 e 1.2 porem ele na hora da solicitação da venda ele me retorna um erro ai na segunda tentativa passa no processo ao finalizar a venda ele diz que a conexão caiu se desejo tenta novamente nessa nova tentativa passa normal

IMG-20190328-WA0004.jpg

IMG-20190312-WA0015.jpg

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Boa tarde

"Por enquanto" parece que conseguimos resolver o problema dessa merda dos servidores da farmacia popular

o problema era falha na comunicação com o webservice deles, e mudamos o codigo para fazer varias tentativas

No nosso caso não precisamos alterar nenhuma configuração no windows 

Segue um fragmento do código que resolveu o problema

      ConfirmacaoAutorizacao := nil;
      A := 0;
      try
        repeat
          Inc(A);
          try
            ConfirmacaoAutorizacao := WS.confirmarAutorizacao(Confirmacao, Usuario);
          except
          end;
          Sleep(3000);
          if A = 30 then Break;
        until ConfirmacaoAutorizacao <> nil;
      finally
        if ConfirmacaoAutorizacao <> nil then
          CodigoRetorno := ConfirmacaoAutorizacao.inAutorizacaoSolicitacao
        else
          CodigoRetorno := '';
      end;

 

Link para o comentário
Compartilhar em outros sites

Bom dia Matheusrmos,

 

Ontem não observamos problemas com as autorizações da Farmácia Popular.

Estamos utilizando o gbasmsb.exe no lugar de utilizar a DLL conforme orientação do DATASUS que pode ser vista no inicio deste post.

Desde que começamos a utilizar o gbasmsb.exe não tivemos mais problemas como dificuldades de gerar as atualizações, embora seja muito ruim trabalhar dessa forma.

Esperamos que o DATASUS consiga resolver os problemas com a DLL logo para que possamos voltar a trabalhar com ela.

Talvez o seu problema possa ser a instalação do certificado da Farmácia Popular que esteja faltando no seu computador ou seja necessário reinstalar.

 

Atenciosamente,

 

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

  • Membros Pro

Muito obrigado sgeinformatica. Salvou a patria. Fiz a alteração e os clientes já estão conseguindo passar vendas.

 "...dessa merda dos servidores da farmacia popular" - faço minhas as suas palavras - nunca vi uma coisa mais mal feita e sem suporte nenhum. Enviei e-mail ontem questionando e até o momento nem resposta.

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

  • 2 semanas depois ...

Bom dia!

Nao estou conseguindo efetuar nenhuma venda de farmacia popular. A funcao confirmarAutorizacao()  nao esta retornando nada, coloquei um loop infinito esperando algum retorno e nunca vem. Alguem passando por esse problema?

          vConfirmacaoAutorizacaoDTO := nil;
          while vConfirmacaoAutorizacaoDTO=nil do
          begin
            Application.ProcessMessages;
            try
              vConfirmacaoAutorizacaoDTO := vWSDL.confirmarAutorizacao(vConfirmacaoDTO, vUsuarioFarmaciaDTO);
            except
            end;
          end;

Link para o comentário
Compartilhar em outros sites

Em 10/04/2019 at 08:53, wallyson disse:

Bom dia!

Nao estou conseguindo efetuar nenhuma venda de farmacia popular. A funcao confirmarAutorizacao()  nao esta retornando nada, coloquei um loop infinito esperando algum retorno e nunca vem. Alguem passando por esse problema?

          vConfirmacaoAutorizacaoDTO := nil;
          while vConfirmacaoAutorizacaoDTO=nil do
          begin
            Application.ProcessMessages;
            try
              vConfirmacaoAutorizacaoDTO := vWSDL.confirmarAutorizacao(vConfirmacaoDTO, vUsuarioFarmaciaDTO);
            except
            end;
          end;

Wallyson, Matheus e demais participantes...

Cada um de nós tivemos ou estamos tendo um problema diferente!   GRAÇAS A DEUS e alguns colegas aqui estou a mais de 25 dias sem qualquer problema.

Ocorre que  a maioria dos problemas foram causados pela DEMORA no retorno do SERVIDOR DO DATASUS ao implementar  o "CANAIS SEGUROS"  SSL/TLS .

Ou seja, é nítido que no comentário  do sgeinformatica ao fazer um LOOP ( insistindo até obter o devido retorno ) foi a solução, pois certamente com a implementação  da criptografia ( canais seguros ) o consumo do web service tornou-se no minimo mais lento.   

Talvez lento o suficiente para não obter o retorno logo na Primeira solicitação!

Dai a necessidade de  um LOOP para  "forçar"  a conclusão e sucesso do consumo do serviço em questão.

Enfim,  PARTICULARMENTE e muitos irão concordar comigo que é um LIXO o suporte do DATASUS... 

Lá "segundo ELES"  sempre esta 100% operacional e direcionam para encaminhar e-mail para o dito suporte que não responde em tempo hábil. 

E quando respondem, chega ser um absurdo sugerir usar o GBAS.EXE para gerar o DNA no lugar da DLL fornecidas por eles mesmos.

RESUMINDO:    temos que dar um jeito por nossa conta e  ter como auxilio os colegas da área.

Como considero que RESOLVI a questão e meus clientes PARARAM de me acionar com a questão:  "E ai a Farmacia Popular!  tá travando dinovo? "

Vou repassar um trecho do meu código, que acredito dará uma "LUZ" para alguns que ainda não estão na calmaria pós tesmpestade!

Obs:  em um postagem minha,  mencionei que a questão do DNA absurdamente era RESOLVIDA trocando a DATA DA EMISSÃO DA RECEITA!  

Portanto, alterei meu código para procurar uma "Data" que não retorna-se o erro do DNA INVALIDO.

Nem precisa dizer, que isso é a famosa " G A M B I A R R A ",  né?   mas foi melhor do que ter que usar o GBAS.EXE ! ! ! 

ah!  e só será repassado uma outra  "data de receita"  (Solicitação da Fase 1) caso retornar com o erro do DNA INVALIDO, do contrário a DATA INFORMADA segue normalmente.

Vou repassar "trechos" do meu código  ( o qual está funcionando 100% !!! ), mas ANTES convido a prestar ATENÇÃO nas seguintes variavéis:

Status_Solicitacao_1_Fase

Status_Solicitacao_2_Fase

Status_Solicitacao_3_Fase

Qtde_Tentativas

Time_Tentativa

Erro_DNA

**********  SÃO  ELAS que "insistem"  até  OBTER o correto consumo do serviço do WEBSERVICE do DataSus ***********

Vamos lá ao trecho do código da 1 Fase , que trata do consumo do serviço de PRE-AUTORIZAÇÃO do WebService do DATASUS:

  Procedure Pre_Autorizacao( _CPF: AnsiString; _CRM: AnsiString; _UF: AnsiString; DT_RECEITA: AnsiString; _CUPOM_INTERNO : AnsiString );
  Var
     wDataSUS           : ServicoSolicitacaoWS;
     Ret_Itens          : string[03];
     Data_Receita_Passa : TXSDateTime;
     Erro_DNA           : Boolean;
  begin

     Data_Receita_Passa   := TXSDateTime.Create;

     Data_Rec_Oficial := '';
     Data_Rec_Passa   := '';

     Erro_DNA := False;

     Repeat { ficará em loop até que NÃO de retorno de erro DNA | obsevar que a data variavel Data_Receita_Passa será decrementada até passar sem DNA INVALIDO  }

        ctd_tentativas  := 0;


        Ret_Itens  := '';
        NrAutoriz  := '';

        edtCNPJ.text        := LrTrim( RemoveChars( edtCNPJ.text,['.','/','-', ',', ' ' ] ) );
        edtCPFVendedor.Text := LrTrim( RemoveChars( edtCPFVendedor.Text,['.','/','-', ',', ' ' ] ));
        _CPF                := LrTrim( RemoveChars( _CPF, ['.','/','-', ',',' ']));
        _CRM                := LrTrim( RemoveChars( _CRM, ['.','/','-', ',',' ']));
        _UF                 := LrTrim( RemoveChars( _UF,  ['.','/','-', ',',' ']));

        HTTPRIO1.URL          := edtWebService.Text;
        HTTPRIO1.WSDLLocation := edtWebService.Text + '?wsdl';
        HTTPRIO1.Service      := 'ServicoSolicitacaoWSService';
        HTTPRIO1.Port         := 'ServicoSolicitacaoWS';


        (**  Foi retirado essa  atribuição  e  trocada pela logo abaixo, pois funcionava
             e do nada passou NÃO FUNCIONAR...  assim pesquisando na Net tive que trocar

        wDataSUS := HTTPRIO1 AS ServicoSolicitacaoWS;
        **)

        wDataSUS := GetServicoSolicitacaoWS(false, HTTPRIO1.WSDLLocation, HTTPRIO1);


        Usuario := UsuarioFarmaciaDTO.Create;

        Usuario.usuarioFarmacia := edtUsuario.text;
        Usuario.senhaFarmacia   := edtSenha.text;

        Usuario.usuarioVendedor := edtCPFVendedor.Text;
        Usuario.senhaVendedor   := edtSenhaVendedor.Text;

        Solicitacao := SolicitacaoDTO.Create;

        Solicitacao.coSolicitacaoFarmacia := LrTrim( _CUPOM_INTERNO );

        Solicitacao.dtEmissaoReceita := TXSDateTime.Create;

        Data_Rec_Oficial := DT_RECEITA;

        hora_str := TimeToStr(Time);

        if ( Erro_DNA = True ) then
        begin
          Data_Receita_Passa.AsDateTime           := Data_Receita_Passa.AsDateTime - 1;
          Solicitacao.dtEmissaoReceita.AsDateTime := Data_Receita_Passa.AsDateTime;
        end
        else
        begin
          Solicitacao.dtEmissaoReceita.AsDateTime := strToDate( DT_RECEITA ) + StrToTime(hora_str);
          Data_Receita_Passa.AsDateTime := Solicitacao.dtEmissaoReceita.AsDateTime;
        end;

        data_str  := DateToStr(Solicitacao.dtEmissaoReceita.AsDateTime);

        Data_Rec_Passa := data_str;

        Solicitacao.nuCnpj  := edtCNPJ.text;
        Solicitacao.nuCpf   := _CPF;
        Solicitacao.nuCrm   := _CRM;
        Solicitacao.sgUfCrm := _UF;


        itens  := TStringList.Create;
        itens.LoadFromFile( 'C:\FPopular\TEMP\PRODS.TXT' );

        SetLength(Medicamentos, itens.Count );

        for Item := 0 to (itens.Count-1) do
        begin

          _vlr := Copy( itens.Strings[Item], 17,08 );

          insert( DecimalSeparator, _vlr, 7 );

          MedicamentoS[Item] := MedicamentoDTO.Create;
          MedicamentoS[Item].coCodigoBarra := Copy( itens.Strings[Item], 01,13 );
          MedicamentoS[Item].qtSolicitada  := StrToInt(   Copy( itens.Strings[Item], 14,03 ) );
          MedicamentoS[Item].vlPrecoVenda  := StrToFloat( _vlr );
          MedicamentoS[Item].qtPrescrita   := StrToInt(   Copy( itens.Strings[Item], 25,03 ) );
        end;


        Solicitacao.arrMedicamentoDTO := MedicamentoS;

        Solicitacao.dnaEstacao :=  ObterSolicitacao(
                                     Solicitacao.nuCpf,
                                     Solicitacao.nuCnpj,
                                     Solicitacao.nuCrm,
                                     Solicitacao.sgUfCrm,
                                     data_str );

        Autorizacao := AutorizacaoDTO.Create;

        Status_Solicitacao_1_Fase := false;
        ctd_tentativas     := 0;
        Repeat

          inc( ctd_tentativas );

          try
            Autorizacao := wDataSUS.executarSolicitacao(Solicitacao, Usuario);
            Status_Solicitacao_1_Fase := True;
          except
             on E: Exception do
             begin
                if ( ctd_tentativas = Qtde_Tentativas ) then
                  Showmessage( 'Tentativa nr: ' + IntToStr(ctd_tentativas) + ' || '+ E.Message );
                Sleep( Time_Tentativa )
             end;
          end;

        Until (Status_Solicitacao_1_Fase = True) or (ctd_tentativas = Qtde_Tentativas);

        if ( ctd_tentativas = Qtde_Tentativas ) then
           Showmessage('1.Fase || Ocorreu '+ IntToStr(ctd_tentativas) + ' tentativas ' + 'SEM SUCESSO de retorno do DATASUS' );

          Erro_DNA := ( Autorizacao.inAutorizacaoSolicitacao = '51S' );

    Until ( Erro_DNA = False );


 end;

****************************************************************************************

Trecho do código da 2 Fase , que trata do consumo do serviço de CONFIRMAÇÃO DA PRE-AUTORIZAÇÃO do WebService do DATASUS:

 Procedure Confirma_Pre_Autorizacao( _NumeroCupomECF : String );
  Var
    wDataSUS     : ServicoSolicitacaoWS;
  begin


    if (Status_Solicitacao_1_Fase = True) then
    begin
      HTTPRIO1.URL          := edtWebService.Text;
      HTTPRIO1.WSDLLocation := edtWebService.Text + '?wsdl';
      HTTPRIO1.Service      := 'ServicoSolicitacaoWSService';
      HTTPRIO1.Port         := 'ServicoSolicitacaoWS';

      (**  Foi retirado essa  atribuição e  trocada pela logo abaixo, pois funcionava
          e do nada passou NÃO FUNCIONAR...  assim pesquisando na Net tive que trocar

      wDaTaSUS              := HTTPRIO1 AS ServicoSolicitacaoWS;
      **)

      wDataSUS := GetServicoSolicitacaoWS(false, HTTPRIO1.WSDLLocation, HTTPRIO1);

      confirmacao := ConfirmacaoDTO.Create;

      confirmacao.coSolicitacaoFarmacia := Solicitacao.coSolicitacaoFarmacia;
      confirmacao.nuAutorizacao         := Autorizacao.nuAutorizacao;
      confirmacao.nuCupomFiscal         := _NumeroCupomECF;

      Retorno_Aut := ConfirmacaoAutorizacaoDTO.Create;

      ctd_tentativas     := 0;
      Status_Solicitacao_2_Fase := False;
      Repeat

        inc( ctd_tentativas );

        try
          Retorno_Aut := wDataSUS.confirmarAutorizacao( confirmacao, Usuario);
          Status_Solicitacao_2_Fase := True;
        except
           on E: Exception do
           begin
              if ( ctd_tentativas = Qtde_Tentativas ) then
                Showmessage( 'Tentativa nr: ' + IntToStr(ctd_tentativas) + ' || '+ E.Message );
              Sleep( Time_Tentativa );
           end
           else
              Status_Solicitacao_2_Fase := True;
        end;

      Until (Status_Solicitacao_2_Fase = True) or (ctd_tentativas = Qtde_Tentativas);

      if ( ctd_tentativas = Qtde_Tentativas ) then
        Showmessage('2.Fase || Ocorreu '+ IntToStr(ctd_tentativas) + ' tentativas ' + 'SEM SUCESSO de retorno do DATASUS' );


    end;

  end;

****************************************************************************************

Trecho do código da 3 Fase , que trata do consumo do serviço d GRAVAR A CONFIRMAÇÃO e GERAR O CUPOM DA AUTORIZAÇÃO feita no WebService do DATASUS:

Procedure Recibo_Retorno;
  Var
    wDataSUS               : ServicoSolicitacaoWS;
    Cp_Vinculado           : TextFile;
    ix : Integer;

  begin


    if (Status_Solicitacao_2_Fase = True) then
    begin
      HTTPRIO1.URL          := edtWebService.Text;
      HTTPRIO1.WSDLLocation := edtWebService.Text + '?wsdl';
      HTTPRIO1.Service      := 'ServicoSolicitacaoWSService';
      HTTPRIO1.Port         := 'ServicoSolicitacaoWS';

      (**  
           Foi retirado essa  atribuição  e  trocada pela logo abaixo, pois funcionava
           e do nada passou NÃO FUNCIONAR...  assim pesquisando na Net tive que trocar

      wDaTaSUS              := HTTPRIO1 AS ServicoSolicitacaoWS;

      **)

      wDataSUS := GetServicoSolicitacaoWS(false, HTTPRIO1.WSDLLocation, HTTPRIO1);

      Recebimento := RecebimentoDTO.Create;
      Recebimento.nuAutorizacao     := Retorno_Aut.nuAutorizacao;
      Recebimento.nuCupomFiscal     := Retorno_Aut.nuCupomFiscal;
      Recebimento.arrMedicamentoDTO := Retorno_Aut.arrMedicamentoDTO;

      ctd_tentativas            := 0;
      Status_Solicitacao_3_Fase := False;
      Repeat

        inc( ctd_tentativas );

        try
          Conf_Recbto := wDataSUS.confirmarRecebimento( Recebimento, Usuario);
          Status_Solicitacao_3_Fase := True;
        except
           on E: Exception do
           begin
              if ( ctd_tentativas = Qtde_Tentativas ) then
                Showmessage( 'Tentativa nr: ' + IntToStr(ctd_tentativas) + ' || '+ E.Message );
              Sleep( Time_Tentativa );
           end
           else
              Status_Solicitacao_3_Fase := True;
        end;

      Until (Status_Solicitacao_3_Fase = True) or (ctd_tentativas = Qtde_Tentativas);

      if ( ctd_tentativas = Qtde_Tentativas ) then
         Showmessage('3.Fase || Ocorreu '+ IntToStr(ctd_tentativas) + ' tentativas ' + 'SEM SUCESSO de retorno do DATASUS' );

      if (Status_Solicitacao_3_Fase = True) then
      begin

        {$I-}
        AssignFile(Cp_Vinculado, 'C:\FPopular\VINCULAD.TXT');
        ReWrite(Cp_Vinculado);

        if ( Data_Rec_Oficial <> Data_Rec_Passa) then
          WriteLn( Cp_Vinculado, '---------- rec =  ',Data_Rec_Passa,'  ----------');

        try
          NrAutoriz  := Conf_Recbto.nuAutorizacao;

          For ix := 1 to Length( Conf_Recbto.cupomVinculado ) do
          begin
            if ( Conf_Recbto.cupomVinculado[ix] = '@' ) then
               WriteLn( Cp_Vinculado )
            else
              Write( Cp_Vinculado, Conf_Recbto.cupomVinculado[ix] );
          end;
        finally
          CloseFile(R);
          CloseFile(Cp_Vinculado);
        end;
        {$I+}
      end;

    end

  end;

********************************************************************************************************************************************************************************************************************************************************************************************************************************************************

Bom era isso!   espero que minha postagem,  de alguma forma, esclareça e auxilie alguem.

Caso de duvida e/ou criticas!  fiquem a vontade 

Abçs,

Ronaldo.

 

P.S:   lembrando que são APENAS "trechos" do meu código... Inclusive foi criado para atuar como um "monitor" , onde recebe informações via arquivo TEXTO e tmb. retorna em TEXTO.   

 

 

 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...
  • Este tópico foi criado há 1800 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.