Ir para conteúdo
  • Cadastre-se

viniciusraduy

Membros
  • Total de ítens

    24
  • Registro em

  • Última visita

Tudo que viniciusraduy postou

  1. Alguem tem componente, ou rotinas para importação de inventário da ANVISA? desde já agradeço toda e qualquer ajudar.
  2. Sim, foi ligado la, e estao mais perdidos que cego em tiroteio, apos ligar 3a vez .. que um dos atendentes comentou que ta tudo fora.
  3. Esta fora só para variar.. se fosse privatizado, a historia seria outra, pois cabeças rolariam.
  4. Bom dia.. faça o seguinte.. crie um while por exemplo de 5 tentativas com um delay de uns 2 segundos.... isso vai resolver.. adaptacao tecnica
  5. Eduardo.. problemas no WebService infelizmente. o DNS antigo ainda esta no ar.. pelo jeito é usa-lo até estabilizar o novo.
  6. Problemas por aqui tambem... basicamente erros de "nivel superior" e "nao pode ser estabelecida"
  7. Felipe. estou postando um teste.pas unit Teste; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Soap.InvokeRegistry, Soap.Rio, Soap.SOAPHTTPClient, Soap.xsbuiltins; type TForm6 = class(TForm) Button1: TButton; HTTPRIO: THTTPRIO; procedure Button1Click(Sender: TObject); private { Private declarations } public Function GetDosOutput(const CommandLine:string): string; function GeraLiberacao(cpf,cnpj,crm,ufcrm:string;data:TDate):string; end; var Form6: TForm6; implementation uses ServicoSolicitacaoWS1quente; {$R *.dfm} function PegaSolicitacao(cCNPJ, cCPJ, cCRM, cUFCRM, cDataEmissao: PAnsichar): PAnsiChar; cdecl; external 'gbasmsb_library.dll'; function IdentificaEstacao: PAnsiChar; cdecl; external 'gbasmsb_library.dll'; procedure TForm6.Button1Click(Sender: TObject); var Usuario: UsuarioFarmaciaDTO; wsFarmaciaPopular : ServicoSolicitacaoWS; Medicamentos : ArrayOfMedicamentoDTO; sUrl : string; Solicitacao : SolicitacaoDTO; Autorizacao : AutorizacaoDTO; Item : integer; i : integer; WFormatoBR: TFormatSettings; nuAutorizacao : string; datahora : TDateTime; datahora2 : TDateTime; dna : string; dna2: string; comando : string; begin // datahora := StrToDateTime( FormatDateTime('DD/MM/YYYY',Now)); datahora := StrToDateTime( FormatDateTime('DD/MM/YYYY HH:MM:SS',Now)); datahora2 := datahora;//StrToDateTime( '03/12/2018 00:00:00');//'FormatDateTime('DD/MM/YYYY HH:MM:SS',Now)); // datahora2 := StrToDateTime( '04/12/2018 00:00:00'); // HTTPRIO.URL := 'https://farmaciapopular-autorizador-homologacao.saude.gov.br/farmaciapopular-autorizador/services/ServicoSolicitacaoWS'; /// HTTPRIO.WSDLLocation := 'https://farmaciapopular-autorizador-homologacao.saude.gov.br/farmaciapopular-autorizador/services/ServicoSolicitacaoWS?wsdl'; sUrl := 'https://farmaciapopular-autorizador-homologacao.saude.gov.br/farmaciapopular-autorizador/services/ServicoSolicitacaoWS?wsdl'; // sUrl := 'https://farmaciapopular-autorizador.saude.gov.br/farmaciapopular-autorizador/services/ServicoSolicitacaoWS?wsdl'; // HTTPRIO.Service := 'ServicoSolicitacaoWSService'; // HTTPRIO.Port := 'ServicoSolicitacaoWS'; // wsFarmaciaPopular := HTTPRIO as ServicoSolicitacaoWS; wsFarmaciaPopular := GetServicoSolicitacaoWS(False, sUrl, nil); //Definindo usuário de acesso à farmacia popular// Usuario := UsuarioFarmaciaDTO.Create; // Usuario.usuarioFarmacia := LerRegistroConfiguracoes('UsuarioEmpresaFarmaciaPopular');// '75948066'; // Usuario.senhaFarmacia := LerRegistroConfiguracoes('SenhaEmpresaFarmaciaPopular');//'ec964885'; Usuario.usuarioFarmacia := '3423423'; acertar usuario Usuario.senhaFarmacia := '2342423'; acertar senha Usuario.usuarioVendedor := '34234234'; acertar Usuario.senhaVendedor := '12345678'; acertar //Passando Items// Item := 0; SetLength(Medicamentos, 1); Medicamentos[Item] := MedicamentoDTO.Create; Medicamentos[Item].coCodigoBarra := '7898372705721'; Medicamentos[Item].dsUnidApresentacao := '30'; Medicamentos[Item].qtPrescrita := 1; Medicamentos[Item].qtSolicitada := 30; Medicamentos[Item].vlPrecoVenda := 3.6; Medicamentos[Item].inAutorizacaoEstorno := ''; Medicamentos[Item].inAutorizacaoMedicamento := ''; Medicamentos[Item].qtAutorizada := 0; Medicamentos[Item].qtDevolvida := 0; Medicamentos[Item].qtEstornada := 0; Medicamentos[Item].statusTransacao := ''; Medicamentos[Item].vlPrecoSubsidiadoMS := 0; Medicamentos[Item].vlPrecoSubsidiadoPaciente := 0; Medicamentos[Item].vlPrecoSubsidiadoPacientePosEstorno := 0; Medicamentos[Item].vlrSubsidiadoMSPosEstorno := 0; Medicamentos[Item].vlrTotalVendaPosEstorno := 0; //Preparando solicitação// Solicitacao := SolicitacaoDTO.Create; Solicitacao.arrMedicamentoDTO := Medicamentos; Solicitacao.coSolicitacaoFarmacia := IntToStr( 1 ); Solicitacao.nuCnpj := '34523452345234'; acertar cnpj Solicitacao.nuCpf := '88888888101'; Solicitacao.nuCrm := '23140'; Solicitacao.sgUfCrm := 'PR'; Solicitacao.dtEmissaoReceita := TXSDateTime.Create; Solicitacao.dtEmissaoReceita.AsDateTime := datahora; Solicitacao.dnaEstacao := GeraLiberacao(solicitacao.nuCpf,solicitacao.nuCnpj,solicitacao.nuCrm,solicitacao.sgUfCrm,Now); { dna := IdentificaEstacao; ShowMessage(dna); } { Solicitacao.dnaEstacao := trim(PegaSolicitacao(PAnsiChar(AnsiString(Solicitacao.nuCnpj)), //cnpj// PAnsiChar(AnsiString(Solicitacao.nuCpf)), //cpf// PAnsiChar(AnsiString(Solicitacao.nuCrm)), //crm// PAnsiChar(AnsiString(Solicitacao.sgUfCrm)), // PAnsiChar(AnsiString('04/12/2018')) // PAnsiChar(AnsiString('04/12/2018 15:22:00')) PAnsiChar(AnsiString(DateToStr( datahora2))) ) ); } //Preparando Autorizacao// Solicitacao.dnaEstacao := GeraLiberacao(solicitacao.nuCpf,solicitacao.nuCnpj,solicitacao.nuCrm,solicitacao.sgUfCrm,Now); Autorizacao := AutorizacaoDTO.Create; Autorizacao := wsFarmaciaPopular.executarSolicitacao(Solicitacao, Usuario); ShowMessage(autorizacao.descMensagemErro); { if Autorizacao.nuAutorizacao <> '' then begin nuAutorizacao := Autorizacao.nuAutorizacao; //Atualizando grid com o retorno// for i := 0 to item - 1 do begin if CD_Items.Locate('codbarras', Autorizacao.arrMedicamentoDTO[i].coCodigoBarra, [loCaseInsensitive]) then begin //Atualiza Preços// if CD_Itemsvalorfpopular.AsFloat <> Autorizacao.arrMedicamentoDTO[i].vlPrecoSubsidiadoMS then begin if not Assigned(tAreaTrabalho) then tAreaTrabalho := TEdicaoTabela.Create; tAreaTrabalho.edit('pruprodutos'); tAreaTrabalho.setfield('pru_fpopular',Autorizacao.arrMedicamentoDTO[i].vlPrecoVenda); tAreaTrabalho.post('emp_codigo = ' + IntToStr(USUARIOEMPRESA) + ' and pro_codigo='+CD_Itemsproduto.AsString ); FreeAndNil(tAreaTrabalho); end; //////////////////// CD_Items.Edit; CD_Itemsqtdeaprovada.AsFloat := Autorizacao.arrMedicamentoDTO[i].qtAutorizada; CD_Itemsvalorcliente.AsFloat := Autorizacao.arrMedicamentoDTO[i].vlPrecoSubsidiadoPaciente; CD_Itemsvalorfpopular.AsFloat := Autorizacao.arrMedicamentoDTO[i].vlPrecoVenda; // CD_Itemsvalorsistema.AsFloat := Autorizacao.arrMedicamentoDTO[i].vlPrecoVenda * CD_Itemsqtde.AsInteger; CD_Itemsstatus.AsString := Copy(Autorizacao.arrMedicamentoDTO[i].inAutorizacaoMedicamento,1,4); if Copy(trim(Autorizacao.arrMedicamentoDTO[i].inAutorizacaoMedicamento),1,4)<> '00SM' then CD_Itemssituacao.AsString := Copy(trim(Autorizacao.arrMedicamentoDTO[i].inAutorizacaoMedicamento),1,100); if (CD_Itemsqtdeaprovada.AsFloat <> CD_Itemsqtdesolicitada.AsFloat) then begin CD_Itemssituacao.AsString := CD_Itemssituacao.AsString+' Quantidade Aprovada diferente da solicitada...'; erros := true; end; CD_Items.Post; //atualiza valor// end; end; MessageBoxInformation('Pré-autorização aprovada'+IIf(erros,' parcialmente, corrija antes de exportar','')); end else begin MessageBoxError(Autorizacao.descMensagemErro); } end; function TForm6.GeraLiberacao(cpf,cnpj,crm,ufcrm:string;data:TDate):string; var bat : TextFile; cmd : string; lStartUpInfo: TStartUpInfo; lProcesso: TProcessInformation; arquivobat : string; diretorio_exe : string; resultado : tStringList; begin diretorio_exe := ExtractFilePath(application.ExeName); arquivobat := diretorio_exe+'\arquivo.bat'; AssignFile(bat, arquivobat); ReWrite(bat); writeln(bat, '@echo off'); writeln(bat, format('"%s" %s %s %s %s %s %s >%s', [diretorio_exe+'\gbasmsb.exe','--solicitacao' , cpf, cnpj,crm,ufcrm,DateToStr(data),diretorio_exe+'\resultado.txt'])); CloseFile(bat); cmd := format('cmd /c "%s"', [arquivobat]); lStartUpInfo.cb := 2048; lStartUpInfo.lpReserved := NIL; lStartUpInfo.lpDesktop := NIL; lStartUpInfo.lpTitle := NIL; lStartUpInfo.dwFlags := STARTF_USESHOWWINDOW; lStartUpInfo.wShowWindow := SW_HIDE; lStartUpInfo.cbReserved2 := 0; lStartUpInfo.lpReserved2 := NIL; if not CreateProcess(NIL, pchar(cmd), NIL, NIL, False, 0, NIL, pchar(diretorio_exe), lStartUpInfo, lProcesso) then begin ShowMessage('ERRO '); DeleteFile(arquivobat); result := ''; exit; end else WaitForSingleObject(lProcesso.hProcess, INFINITE); resultado := TStringList.Create(); resultado.LoadFromFile(diretorio_exe+'\resultado.txt'); result := resultado.Text; FreeAndNil(resultado); DeleteFile(arquivobat); DeleteFile(diretorio_exe+'\resultado.txt'); end; function TForm6.GetDosOutput(const CommandLine: string): string; var SA: TSecurityAttributes; SI: TStartupInfo; PI: TProcessInformation; StdOutPipeRead, StdOutPipeWrite: THandle; WasOK: Boolean; Buffer: array[0..255] of Char; BytesRead: Cardinal; WorkDir, Line: String; begin Application.ProcessMessages; with SA do begin nLength := SizeOf(SA); bInheritHandle := True; lpSecurityDescriptor := nil; end; // create pipe for standard output redirection CreatePipe(StdOutPipeRead, // read handle StdOutPipeWrite, // write handle @SA, // security attributes 0 // number of bytes reserved for pipe - 0 default ); try // Make child process use StdOutPipeWrite as standard out, // and make sure it does not show on screen. with SI do begin FillChar(SI, SizeOf(SI), 0); cb := SizeOf(SI); dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow := SW_HIDE; hStdInput := GetStdHandle(STD_INPUT_HANDLE); // don't redirect std input hStdOutput := StdOutPipeWrite; hStdError := StdOutPipeWrite; end; // launch the command line compiler WorkDir := ExtractFilePath(CommandLine); WasOK := CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, PChar(WorkDir), SI, PI); // Now that the handle has been inherited, close write to be safe. // We don't want to read or write to it accidentally. CloseHandle(StdOutPipeWrite); // if process could be created then handle its output if not WasOK then raise Exception.Create('Could not execute command line!') else try // get all output until dos app finishes Line := ''; repeat // read block of characters (might contain carriage returns and line feeds) WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil); // has anything been read? if BytesRead > 0 then begin // finish buffer to PChar Buffer[BytesRead] := #0; // combine the buffer with the rest of the last run Line := Line + Buffer; end; until not WasOK or (BytesRead = 0); // wait for console app to finish (should be already at this point) WaitForSingleObject(PI.hProcess, INFINITE); finally // Close all remaining handles CloseHandle(PI.hThread); CloseHandle(PI.hProcess); end; finally result:=Line; CloseHandle(StdOutPipeRead); end; end; end.
  8. entao assim, fiz teste usando a dll function IdentificaEstacao: PAnsiChar; cdecl; external 'gbasmsb_library.dll'; dna := IdentificaEstacao; so que esta retornando DNA antigo.. entao nao esta confiavel a dll (por enquanto)
  9. Esta muito estranho, as vezes da erro, dai manda denovo passa.. coisas do além.
  10. opa. legal.. wallyson conseguiu resolver seu problema? felipe, um pouco acima coloquei uma funcao.. veja se lhe serve..
  11. Resumindo: fiz uma funcao para buscar o resultado pelo gbasmdb.exe, pois se buscar pela dll esta retornando o dna antigo.. Solicitacao.dnaEstacao := GeraLiberacao(solicitacao.nuCpf,solicitacao.nuCnpj,solicitacao.nuCrm,solicitacao.sgUfCrm,Now); Autorizacao := AutorizacaoDTO.Create; Autorizacao := wsFarmaciaPopular.executarSolicitacao(Solicitacao, Usuario); function TForm6.GeraLiberacao(cpf,cnpj,crm,ufcrm:string;data:TDate):string; var bat : TextFile; cmd : string; lStartUpInfo: TStartUpInfo; lProcesso: TProcessInformation; arquivobat : string; diretorio_exe : string; resultado : tStringList; begin diretorio_exe := ExtractFilePath(application.ExeName); arquivobat := diretorio_exe+'\arquivo.bat'; AssignFile(bat, arquivobat); ReWrite(bat); writeln(bat, '@echo off'); writeln(bat, format('"%s" %s %s %s %s %s %s >%s', [diretorio_exe+'\gbasmsb.exe','--solicitacao' , cpf, cnpj,crm,ufcrm,DateToStr(data),diretorio_exe+'\resultado.txt'])); CloseFile(bat); cmd := format('cmd /c "%s"', [arquivobat]); lStartUpInfo.cb := 2048; lStartUpInfo.lpReserved := NIL; lStartUpInfo.lpDesktop := NIL; lStartUpInfo.lpTitle := NIL; lStartUpInfo.dwFlags := STARTF_USESHOWWINDOW; lStartUpInfo.wShowWindow := SW_HIDE; lStartUpInfo.cbReserved2 := 0; lStartUpInfo.lpReserved2 := NIL; if not CreateProcess(NIL, pchar(cmd), NIL, NIL, False, 0, NIL, pchar(diretorio_exe), lStartUpInfo, lProcesso) then begin ShowMessage('ERRO '); DeleteFile(arquivobat); result := ''; exit; end else WaitForSingleObject(lProcesso.hProcess, INFINITE); resultado := TStringList.Create(); resultado.LoadFromFile(diretorio_exe+'\resultado.txt'); result := resultado.Text; FreeAndNil(resultado); DeleteFile(arquivobat); DeleteFile(diretorio_exe+'\resultado.txt'); end;
  12. Agora tenho mensagem de data invalida... estou usando assim function PegaSolicitacao(cCNPJ, cCPJ, cCRM, cUFCRM, cDataEmissao: PAnsichar): PAnsiChar; cdecl; external 'gbasmsb_library.dll'; Solicitacao.dnaEstacao := trim(PegaSolicitacao(PAnsiChar(AnsiString(Solicitacao.nuCnpj)), //cnpj// PAnsiChar(AnsiString(Solicitacao.nuCpf)), //cpf// PAnsiChar(AnsiString(Solicitacao.nuCrm)), //crm// PAnsiChar(AnsiString(Solicitacao.sgUfCrm)), PAnsiChar(AnsiString('04/12/2018')) // PAnsiChar(AnsiString('04/12/2018 15:22:00')) // PAnsiChar(AnsiString(DateToStr( datahora2))) ) ); tentei tanto com data e data+time e nada poderiam me dizer como fizeram?
  13. Por favor, pode me dizer as 2 primeiras iniciais do DNA gerado? pois no meu formato antigo começa com "Vj" e o novo "W1"
  14. Se eu pegar o identificacao_terminal.exe (novo) e cadastrar no site da farmacia popular. ele só me retorna assim. mas, utilizando o identificacao de terminal antigo. e cadastrar no site da farmacia popular ele passa. isso trabalhando em uma maquina limpa com todos as dll e executavel locais.
  15. ola, esta usando a identificacao de terminal nova? novo dna? ou o dna antigo? cadastrou no site da farmarcia popular o dna novo?
  16. Ola wallyson, use o fonte que adicionei .. e faça um teste... alterando os dados de cnpj e usuario...
  17. criei uma vm em branco... e deixei localmente tudo.. sem registro e com registros.. para testes.
  18. Bom dia Amarildo.. agradeço toda atençao que esta dando. PS.: retorna como autorizada. se utilizar o dna antigo no cadastro de computadores no site da farmacia popular**
  19. Bom dia.. infelizmente oque acontece é assim: montei uma rotina, mas, ele so autentica a maquina com o dna antigo, mesmo usando toda biblioteca nova dll, etc.. Estou encaminhando em anexo. ps: mesmo passando data + hora.. como no outro post.. nao resolveu... e sempre da impressao que o retorno que vem do webservice é o dna antigo. desde ja agradeço toda ajuda e cooperação.. farmaciapopular.pas
  20. Ola. Alguem conseguiu fazer funcionar o novo modelo de webservice do Farmacia Popular GBAS 2.0?
×
×
  • 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.