Selecao DevMedia QUERO SER PRIME

Fórum Alguem esta criando o arquivo de remessa para SNGPC #344959

24/08/2007

0

Alguem esta criando o arquivo de remessa

para a Anvisa referente a movimentação de farmacia para o SNGPC.

Alguma dica de como gerar o arquivo?

Agradeço desde ja.


Edmarfrazao

Edmarfrazao

Responder

Posts

24/08/2007

Marcosrocha

Qual componente você está usando?


Responder

Gostei + 0

25/08/2007

Edmarfrazao

Consegui fazer o xml funciona.

Descobri um componente do delphi o


Abra um projeto.

va em file,new,other,xml(so aparece com um projeto aberto)
e escolha
XML Data Binding ( e um winzard).
sera solicitador o arquivo

sngpc200707v1_0.xsd ( esta no site da aniva)

com isto ele ira criar uma unit com toda a implementação do arquivo XML.

Se estiver no delphi 2006, depois que criar a unit, aproveite para usar o Model view e criar a UML(e automatico), da classe.


depois coloque um componente xmldocument

e implemente as chamadas as funções que forem necessario
e o xmldocumento irar gerar o arquivo xml

com pouco esforço.


Responder

Gostei + 0

27/08/2007

Randall

Ola colega, estou fazendo este programa tambem, mas o fiz todo como se fosse txt, fica igual ao exemplo deles mas na hora que vou enviar o arquivo de teste ele da um erro falando ´Arquivo XML não aderente ao Schema SNGPC. Consulte
http://www.anvisa.gov.br/sngpc/esquemas.asp´ se puder me ajudar com mais detalhes sobre a maneira que vc fez ficarei grato.


Responder

Gostei + 0

28/08/2007

Edmarfrazao

Não estou usando o TXT.

Estou usando como escrevi na mensagens anterior.

Copia os esquemas do site da anvisa.

cria um projeto.
VA em File,New,Other,XML, e o winzard vai pedir os arquivos dos esquemas e vai criar uma unit.

esta unit tem tudo o que precisa para gerar o xml.

Depois coloca-se no formulario um componente XMLDocumento e o configura.
depois e fazer a chamada a usa unit um exemplo de como fazer no site.

http://www.drbob42.com/examine/examin23.htm

http://www.drbob42.com/examines/examin25.htm


Site

http://www.anvisa.gov.br/hotsite/sngpc/index.asp


Responder

Gostei + 0

28/08/2007

Randall

ja entendi legal a forma de se fazer, mas nao estou conseguindo extrair o arquivo sngpc200707v1_0.xsd os links existentes nao apontam este arquivo ou estou dizendo uma grande besteira ?!?!?!! Nunca fiz nada em xml.
Grato.


Responder

Gostei + 0

28/08/2007

Edmarfrazao

Tambem nunca tinha usado XML

estamaos apanhando.

fizemos o seguinte
copiamos os esquemas do site
http://www.anvisa.gov.br/hotsite/sngpc/esquemas.asp

renomeamos os .xml para .sxd

e mandamos o delphi ler o 1o

sngpc200707v1_0.xml para
sngpc200707v1_0.xsd

e pínga o delphi gera a unit.

Se tiver o 2006 tera ate o uml.


Responder

Gostei + 0

28/08/2007

Sergiokawahara

procedure TfEnviarAnvisa.BitBtn1Click(Sender: TObject);
var
NodeCorpo, NodeMedicamentos, Node1 : IXMLNode;
begin
with XML do
begin
Active := True;
Version := ´1.0´;
Encoding := ´ISO-8859-1´;
AddChild(´mensagemSNGPC´,´urn:sngpc-schema´);
DocumentElement.AddChild(´cabecalho´);

DocumentElement.ChildNodes.Last.AddChild(´cnpjEmissor´).NodeValue := LimpaStr(qryEmpresa.FieldByName(´CNPJ´).AsString);
DocumentElement.ChildNodes.Last.AddChild (´cpfTransmissor´).NodeValue := LimpaStr(qryEmpresa.FieldByName(´CPF_RESP_TECNICO´).AsString);
DocumentElement.ChildNodes.Last.AddChild(´dataInicio´).NodeValue := FormatDateTime(´yyyy-mm-dd´,Date);
DocumentElement.ChildNodes.Last.AddChild(´dataFim´).NodeValue := FormatDateTime(´yyyy-mm-dd´,Date);

NodeCorpo := DocumentElement.AddChild(´corpo´);
NodeMedicamentos := NodeCorpo.AddChild(´medicamentos´);

// Entrada de medicamentos
qryEntradas.Active := True;
qryEntradas.First;

While not qryEntradas.Eof do
begin
Node1:=NodeMedicamentos.AddChild(´entradaMedicamentos´);

Node1.ChildNodes[´notaFiscalEntradaMedicamento´].ChildNodes[´numeroNotaFiscal´].NodeValue := qryEntradas.FieldByName(´NOTA_FISCAL´).AsString;
Node1.ChildNodes[´notaFiscalEntradaMedicamento´].ChildNodes[´tipoOperacaoNotaFiscal´].NodeValue := ´1´;
Node1.ChildNodes[´notaFiscalEntradaMedicamento´].ChildNodes[´dataNotaFiscal´].NodeValue := FormatDateTime(´yyyy-mm-dd´,qryEntradas.FieldByName(´EMISSAO_NF´).AsDateTime);
Node1.ChildNodes[´notaFiscalEntradaMedicamento´].ChildNodes[´cnpjOrigem´].NodeValue := LimpaStr(qryEntradas.FieldByName(´CNPJ_FORNECEDOR´).AsString);
Node1.ChildNodes[´notaFiscalEntradaMedicamento´].ChildNodes[´cnpjDestino´].NodeValue := LimpaStr(qryEmpresa.FieldByName(´CNPJ´).AsString);

Node1.ChildNodes[´medicamentoEntrada´].ChildNodes[´registroMSMedicamento´].NodeValue := LimpaStr(qryEntradas.FieldByName(´NRM´).AsString);
Node1.ChildNodes[´medicamentoEntrada´].ChildNodes[´numeroLoteMedicamento´].NodeValue := qryEntradas.FieldByName(´LOTE´).AsString;
Node1.ChildNodes[´medicamentoEntrada´].ChildNodes[´quantidadeMedicamento´].NodeValue := qryEntradas.FieldByName(´QUANTIDADE´).AsString;

Node1.ChildNodes[´dataRecebimentoMedicamento´].NodeValue := FormatDateTime(´yyyy-mm-dd´,qryEntradas.FieldByName(´RECEBIDO´).AsDateTime);

qryEntradas.Next;
end;

// Saidas de Medicamentos
qryVendas.Active := True;
qryVendas.First;
while not qryVendas.Eof do
begin
Node1 := NodeMedicamentos.AddChild(´saidaMedicamentoVendaAoConsumidor´);

Node1.ChildNodes[´tipoReceituarioMedicamento´].NodeValue := qryVendas.FieldByName(´TIPO_RECEITUARIO´).AsString;
Node1.ChildNodes[´numeroNotificacaoMedicamento´].NodeValue := qryVendas.FieldByName(´NRO_NOTIFICACAO´).AsString;
Node1.ChildNodes[´dataPrescricaoMedicamento´].NodeValue := FormatDateTime(´yyyy-mm-dd´,qryVendas.FieldByName(´DATA_PRESCRICAO´).AsDateTime);

Node1.ChildNodes[´prescritorMedicamento´].ChildNodes[´nomePrescritor´].NodeValue := qryVendas.FieldByName(´NOME_PRESCRITOR´).AsString;
Node1.ChildNodes[´prescritorMedicamento´].ChildNodes[´numeroRegistroProfissional´].NodeValue := LimpaStr(qryVendas.FieldByName(´NRO_REG_PROFISSIONAL´).AsString);
Node1.ChildNodes[´prescritorMedicamento´].ChildNodes[´conselhoProfissional´].NodeValue := qryVendas.FieldByName(´CONSELHO_PROFISSIONAL´).AsString;
Node1.ChildNodes[´prescritorMedicamento´].ChildNodes[´UFConselho´].NodeValue := qryVendas.FieldByName(´UF_CONSELHO´).AsString;

Node1.ChildNodes[´usoMedicamento´].NodeValue := ´1´;

Node1.ChildNodes[´compradorMedicamento´].ChildNodes[´nomeComprador´].NodeValue := qryVendas.FieldByName(´NOME_COMPRADOR´).AsString;
Node1.ChildNodes[´compradorMedicamento´].ChildNodes[´tipoDocumento´].NodeValue := qryVendas.FieldByName(´TIPO_DOC_COMPRADOR´).AsString;
Node1.ChildNodes[´compradorMedicamento´].ChildNodes[´numeroDocumento´].NodeValue := LimpaStr(qryVendas.FieldByName(´NRO_DOC_COMPRADOR´).AsString);
Node1.ChildNodes[´compradorMedicamento´].ChildNodes[´orgaoExpedidor´].NodeValue := qryVendas.FieldByName(´ORGAO_EXP_DOCTO´).AsString;
Node1.ChildNodes[´compradorMedicamento´].ChildNodes[´UFEmissaoDocumento´].NodeValue := qryVendas.FieldByName(´UF_EMISSAO_DOCTO´).AsString;

Node1.ChildNodes[´medicamentoVenda´].ChildNodes[´registroMSMedicamento´].NodeValue := LimpaStr(qryVendas.FieldByName(´NRM´).AsString);
Node1.ChildNodes[´medicamentoVenda´].ChildNodes[´numeroLoteMedicamento´].NodeValue := qryVendas.FieldByName(´LOTE´).AsString;
Node1.ChildNodes[´medicamentoVenda´].ChildNodes[´quantidadeMedicamento´].NodeValue := qryVendas.FieldByName(´QUANTIDADE´).AsString;

Node1.ChildNodes[´dataVendaMedicamento´].NodeValue := FormatDateTime(´yyyy-mm-dd´,qryVendas.FieldByName(´DATA_VENDA´).AsDateTime);
qryVendas.Next;
end;

// Saidas por Transferencia
qryTransferencia.Active := True;
qryTransferencia.First;
while not qryTransferencia.Eof do
begin
Node1 := NodeMedicamentos.AddChild(´saidaMedicamentoTransferencia´);

Node1.ChildNodes[´notaFiscalTransferenciaMedicamento´].ChildNodes[´numeroNotaFiscal´].NodeValue := qryTransferencia.FieldByName(´NOTA_FISCAL´).AsString;
Node1.ChildNodes[´notaFiscalTransferenciaMedicamento´].ChildNodes[´tipoOperacaoNotaFiscal´].NodeValue := ´2´;
Node1.ChildNodes[´notaFiscalTransferenciaMedicamento´].ChildNodes[´dataNotaFiscal´].NodeValue := FormatDateTime(´yyyy-mm-dd´,qryTransferencia.FieldByName(´DATA_EMISSAO´).AsDateTime);
Node1.ChildNodes[´notaFiscalTransferenciaMedicamento´].ChildNodes[´cnpjOrigem´].NodeValue := qryTransferencia.FieldByName(´CNPJ_ORIGEM´).AsString;
Node1.ChildNodes[´notaFiscalTransferenciaMedicamento´].ChildNodes[´cnpjDestino´].NodeValue := qryTransferencia.FieldByName(´CNPJ_DESTINO´).AsString;

Node1.ChildNodes[´medicamentoTransferencia´].ChildNodes[´registroMSMedicamento´].NodeValue := LimpaStr(qryTransferencia.FieldByName(´NRM´).AsString); Node1.ChildNodes[´medicamentoTransferencia´].ChildNodes[´numeroLoteMedicamento´].NodeValue := qryTransferencia.FieldByName(´LOTE´).AsString;
Node1.ChildNodes[´medicamentoTransferencia´].ChildNodes[´quantidadeMedicamento´].NodeValue := qryTransferencia.FieldByName(´QUANTIDADE´).AsString;

Node1.ChildNodes[´dataTransferenciaMedicamento´].NodeValue := FormatDateTime(´yyyy-mm-dd´,qryTransferencia.FieldByName(´DATA_TRANSFERENCIA´).AsDateTime);
qryTransferencia.Next;

end;

// Perdas
qryPerdas.Active := True;
qryPerdas.First;
while not qryPerdas.Eof do
begin
Node1 := NodeMedicamentos.AddChild(´saidaMedicamentoPerda´);

Node1.ChildNodes[´motivoPerdaMedicamento´].NodeValue := qryPerdas.FieldByName(´MOTIVO_PERDA´).AsString;

Node1.ChildNodes[´medicamentoPerda´].ChildNodes[´registroMSMedicamento´].NodeValue := LimpaStr(qryPerdas.FieldByName(´NRM´).AsString);
Node1.ChildNodes[´medicamentoPerda´].ChildNodes[´numeroLoteMedicamento´].NodeValue := qryPerdas.FieldByName(´LOTE´).AsString;
Node1.ChildNodes[´medicamentoPerda´].ChildNodes[´quantidadeMedicamento´].NodeValue := qryPerdas.FieldByName(´QUANTIDADE´).AsString;

Node1.ChildNodes[´dataPerdaMedicamento´].NodeValue := FormatDateTime(´yyyy-mm-dd´,qryPerdas.FieldByName(´DATA_PERDA´).AsDateTime);
qryPerdas.Next;

end;


NodeMedicamentos := NodeCorpo.AddChild(´insumos´);
Node1 := NodeMedicamentos.AddChild(´entradaInsumos´);

Node1.ChildNodes[´notaFiscalEntradaInsumo´].ChildNodes[´numeroNotaFiscal´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalEntradaInsumo´].ChildNodes[´tipoOperacaoNotaFiscal´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalEntradaInsumo´].ChildNodes[´dataNotaFiscal´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalEntradaInsumo´].ChildNodes[´cnpjOrigem´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalEntradaInsumo´].ChildNodes[´cnpjDestino´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoEntrada´].ChildNodes[´insumoEntrada´].ChildNodes[´codigoInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoEntrada´].ChildNodes[´insumoEntrada´].ChildNodes[´numeroLoteInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoEntrada´].ChildNodes[´insumoEntrada´].ChildNodes[´insumoCNPJFornecedor´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoEntrada´].ChildNodes[´quantidadeInsumoEntrada´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoEntrada´].ChildNodes[´tipoUnidadeEntrada´].NodeValue := ´´;

Node1.ChildNodes[´dataRecebimentoInsumo´].NodeValue := ´´;


Node1 := NodeMedicamentos.AddChild(´saidaInsumoVendaAoConsumidor´);

Node1.ChildNodes[´tipoReceituarioInsumo´].NodeValue := ´´;
Node1.ChildNodes[´numeroNotificacaoInsumo´].NodeValue := ´´;
Node1.ChildNodes[´dataPrescricaoInsumo´].NodeValue := ´´;

Node1.ChildNodes[´prescritorInsumo´].ChildNodes[´nomePrescritor´].NodeValue := ´´;
Node1.ChildNodes[´prescritorInsumo´].ChildNodes[´numeroRegistroProfissional´].NodeValue := ´´;
Node1.ChildNodes[´prescritorInsumo´].ChildNodes[´conselhoProfissional´].NodeValue := ´´;
Node1.ChildNodes[´prescritorInsumo´].ChildNodes[´UFConselho´].NodeValue := ´´;

Node1.ChildNodes[´usoInsumo´].NodeValue := ´´;

Node1.ChildNodes[´compradorInsumo´].ChildNodes[´nomeComprador´].NodeValue := ´´;
Node1.ChildNodes[´compradorInsumo´].ChildNodes[´tipoDocumento´].NodeValue := ´´;
Node1.ChildNodes[´compradorInsumo´].ChildNodes[´numeroDocumento´].NodeValue := ´´;
Node1.ChildNodes[´compradorInsumo´].ChildNodes[´orgaoExpedidor´].NodeValue := ´´;
Node1.ChildNodes[´compradorInsumo´].ChildNodes[´UFEmissaoDocumento´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´insumoVendaAoConsumidor´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´insumoVendaAoConsumidor´].ChildNodes[´codigoInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´insumoVendaAoConsumidor´].ChildNodes[´numeroLoteInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´insumoVendaAoConsumidor´].ChildNodes[´insumoCNPJFornecedor´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´quantidadeDeInsumoPorUnidadeFarmacotecnica´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´unidadeDeMedidaDoInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´unidadeFarmacotecnica´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoVendaAoConsumidor´].ChildNodes[´quantidadeDeUnidadesFarmacotecnicas´].NodeValue := ´´;

Node1.ChildNodes[´dataVendaInsumo´].NodeValue := ´´;




Node1 := NodeMedicamentos.AddChild(´saidaInsumoTransferencia´);

Node1.ChildNodes[´notaFiscalTransferenciaInsumo´].ChildNodes[´numeroNotaFiscal´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalTransferenciaInsumo´].ChildNodes[´tipoOperacaoNotaFiscal´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalTransferenciaInsumo´].ChildNodes[´dataNotaFiscal´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalTransferenciaInsumo´].ChildNodes[´cnpjOrigem´].NodeValue := ´´;
Node1.ChildNodes[´notaFiscalTransferenciaInsumo´].ChildNodes[´cnpjDestino´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoTransferencia´].ChildNodes[´insumoTransferencia´].ChildNodes[´codigoInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoTransferencia´].ChildNodes[´insumoTransferencia´].ChildNodes[´numeroLoteInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoTransferencia´].ChildNodes[´insumoTransferencia´].ChildNodes[´insumoCNPJFornecedor´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoTransferencia´].ChildNodes[´quantidadeInsumoTransferencia´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoTransferencia´].ChildNodes[´tipoUnidadeTransferencia´].NodeValue := ´´;

Node1.ChildNodes[´dataTransferenciaInsumo´].NodeValue := ´´;


Node1 := NodeMedicamentos.AddChild(´saidaInsumoPerda´);

Node1.ChildNodes[´motivoPerdaInsumo´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoPerda´].ChildNodes[´insumoPerda´].ChildNodes[´codigoInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoPerda´].ChildNodes[´insumoPerda´].ChildNodes[´numeroLoteInsumo´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoPerda´].ChildNodes[´insumoPerda´].ChildNodes[´insumoCNPJFornecedor´].NodeValue := ´´;

Node1.ChildNodes[´substanciaInsumoPerda´].ChildNodes[´quantidadeInsumoPerda´].NodeValue := ´´;
Node1.ChildNodes[´substanciaInsumoPerda´].ChildNodes[´tipoUnidadePerda´].NodeValue := ´´;

Node1.ChildNodes[´dataPerdaInsumo´].NodeValue := ´´;
Node1.ChildNodes[´cnpjFornecedorInsumo´].NodeValue := ´´;


SaveToFile(Pchar(´teste.xml´));

end;
XML.Active := False;
XML.Free;
end;


Sergio Kawahara


Responder

Gostei + 0

28/08/2007

Sergiokawahara

Mas o problema que estou encontrando é que quando envio o arquivo gerado pela rotina acima da uma msg : Arquivo XML não aderente ao Schema SNGPC´, a única coisa que notei que ficou diferente no arquivo para com o exemplo da anvisa, é que quando abro ele no NOTEPAD o no meu arquivo todas a tags aparecem na mesma linha o que naum acontece com o arquivo da anvisa, talvez seja esse o problema naum sei...

Obrigado

Sergio Kawahara


Responder

Gostei + 0

28/08/2007

Edmarfrazao

ainda não cheguei a geração do sistema

Creio que na semana que vem vou chegar a este ponto.

o que eu disse e se você ja alterou as propriedade do xmldocument para

nodeident para <tab>

e options
donodeautoindente para true

o meu xml fica identado assim

agora com relaçao a mensagem.

Hoje recebi a senha.
fiz um pequeno exemplo basico so o cadastro.
e deu a mesma mensagem

gera apenas o basico e confira com o exemplo da anvisa.


Responder

Gostei + 0

28/08/2007

Aldus

Olá amigos,
Também estou no mesmo dilema, a falta de informação por parte da Anvisa.

Sergio, vc usa apenas o código citado sem fazer a importação do esquema do sngpc?

Mario


Responder

Gostei + 0

28/08/2007

Sergiokawahara

Já consegui resolver o que faltava era a tag do insumos coloquem assim: <insumos /> e pronto já vai passar.

Agora quero saber como posso enviar direto pelo programa sem ter que fazer upload pelo site.

Valeu abraços.


Responder

Gostei + 0

28/08/2007

Sergiokawahara

Mario é isso ai esse rotina que passei faz tudo naum precisa do esquema, basta ajustar para o seu banco de dados e pronto, vai gerar o arquivo igualzinho o exemplo valeu abraços...


Responder

Gostei + 0

29/08/2007

Edmarfrazao

Alguem poderia posta um exemplo de um arquivo .xml

correto que passou na validação.


tentei o meu, nada, o da rotina acima também nada o exemplo do site da aniva.

Gostaria de um arquivo xml que esta correto para validação.


Responder

Gostei + 0

29/08/2007

Edmarfrazao

exemplo no link

http://www.anvisa.gov.br/hotsite/sngpc/schemas/sngpc200608v1_0.xml


com o exemplo

a validaçao mostra outras informações.

1o tem que cadastrar um inventario no site
http://homologacao.anvisa.gov.br/sngpc

depois pode validar o arquivo, mas somente 01 dia apos o cadastro do inventario e sua finalização.

Fiz o cadastro do inventario lancei um produto que tem que ter o codigo correto

exemplo medicamento 1018002790058
insumo 00000001

finalizar o inventario

agora a validação ira passar , mas como diz que so apos 01 dias amanha terei mais informações.


Responder

Gostei + 0

29/08/2007

Pedrodkp

---------------------------
Error
---------------------------
System error: -2146697210.

Line: 0

---------------------------
OK
---------------------------

* Acho que é pau no arquivo, estou usando o Delphi 7.
Alguém pode mandar o sngpc200707v1_0.xsd válido?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar