Jump to content


Nota Fiscal De Serviço Eletrônica










927 respostas a este tópico

#161 ALA

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 133 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 02:45 PM

View PostAndersongs, on 21 September 2009 - 02:19 PM, said:

Para utilizar o processo do site vc deve gerar o RPS. No site vc só tem a opcao de envio de rps. Pelo WebServices vc pode enviar uma NFS-e apenas(layout nfse) ou o Rps(Layout Lote RPS). Em Todos os dois vc deve imprimir a nota.
Anderson, blz, agora entendi. Será que vc tem alguma função para validar/assinar xml, as que baixe e testei não estão funcionando.
Estou tentando usar a declaração
var
Schema : XMLSchemaCache;
mas da erro, sera que tenho que delcarar alguma coisa no uses.

Obrigado

Editado por ALA, 21 September 2009 - 02:51 PM.


#162 haroldorg

    Membro

  • Membros
  • PipPip
  • 65 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 03:30 PM

Pessoal,

Consegui consumir os webservices. Recebi um XML com o mensagem de erro informando que o meu lote está com algum erro de formatação. Agora só tenho que acertar o arquivo.

Seguem anexos os fontes e executável.

Se você não precisar autenticar em um proxy, limpe o conteúdo da propriedade "proxy_server" no arquivo "testews.exe.config".

Deve ficar assim:
<setting name="proxy_server" serializeAs="String">
<value></value>
</setting>


Qualquer dúvida, estamos aí.

Arquivo(s) anexo(s)



#163 Andersongs

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 131 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 04:16 PM

haroldorg,

Testei seu executavel com meu xml e deu o seguinte erro: "Arquivo enviado com erro na assinatura." Vc conseguiu enviar o arquivo já assinado?
Enviei esse mesmo xml pelo site da pbh e funcionou.
Tem como vc disponibilizar a parte de assinatura?

Obrigado,

Anderson


[quote name='haroldorg' date='21 September 2009 - 04:30 PM' timestamp='1253561451' post='326454']
Pessoal,

Consegui consumir os webservices. Recebi um XML com o mensagem de erro informando que o meu lote está com algum erro de formatação. Agora só tenho que acertar o arquivo.

Seguem anexos os fontes e executável.

Se você não precisar autenticar em um proxy, limpe o conteúdo da propriedade "proxy_server" no arquivo "testews.exe.config".

Deve ficar assim:
<setting name="proxy_server" serializeAs="String">
<value></value>
</setting>


Qualquer dúvida, estamos aí.
[/quote]

#164 ALA

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 133 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 04:36 PM

View PostAndersongs, on 21 September 2009 - 02:19 PM, said:

Para utilizar o processo do site vc deve gerar o RPS. No site vc só tem a opcao de envio de rps. Pelo WebServices vc pode enviar uma NFS-e apenas(layout nfse) ou o Rps(Layout Lote RPS). Em Todos os dois vc deve imprimir a nota.
Anderson, baixei a função postada aqui no forum que valida o xml, mas quando tento validar o aquivo anexo ocorre o seguinte erro 'Validate failed because the document does not contain exactly one root node.'
Validar falhou porque o documento não contém exatamente um nó de raiz.
Alguma ideia ?

Arquivo(s) anexo(s)


Editado por ALA, 21 September 2009 - 04:45 PM.


#165 Andersongs

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 131 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 04:41 PM

ALA,

Pelo que testei aqui, só consigo passar o validador em um xml já assinado.



View PostALA, on 21 September 2009 - 04:36 PM, said:

Anderson, baixe a função postada aqui no forum que valida o xml, mas quando tento validar o aquivo anexo ocorre o seguinte erro 'Validate failed because the document does not contain exactly one root node.'
Validar falhou porque o documento não contém exatamente um nó de raiz.
Alguma ideia ?


#166 haroldorg

    Membro

  • Membros
  • PipPip
  • 65 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 05:01 PM

Anserson, estou com o mesmo problema. Eu postei o código e executável da minha rotina de assinatura. Acho que está na página 7 (foi na sexta por volta de 20h).

Estou comparando os arquivos pra ver se na minha assinatura exuste algo diferente do que foi especificado.

Se conseguir passar, posto a nova rotina de assinatura aqui.

Tem como vc me enviar o seu "assinador" pra eu ver se está gerando o valor da assinatura assinatura diferente do meu? Eu não tenho o delphi instalado, então, manda o exe mesmo.

Flw

View PostAndersongs, on 21 September 2009 - 04:16 PM, said:

haroldorg,

Testei seu executavel com meu xml e deu o seguinte erro: "Arquivo enviado com erro na assinatura." Vc conseguiu enviar o arquivo já assinado?
Enviei esse mesmo xml pelo site da pbh e funcionou.
Tem como vc disponibilizar a parte de assinatura?

Obrigado,

Anderson

Editado por haroldorg, 21 September 2009 - 05:21 PM.


#167 Andersongs

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 131 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 06:18 PM

O problema que o exe fica maior que 200kb não consigo enviar aqui pelo forum.

View PostAndersongs, on 21 September 2009 - 04:16 PM, said:

haroldorg,

Testei seu executavel com meu xml e deu o seguinte erro: "Arquivo enviado com erro na assinatura." Vc conseguiu enviar o arquivo já assinado?
Enviei esse mesmo xml pelo site da pbh e funcionou.
Tem como vc disponibilizar a parte de assinatura?

Obrigado,

Anderson


#168 haroldorg

    Membro

  • Membros
  • PipPip
  • 65 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 06:44 PM

Anderson,

"Corrigi" minha função de assinatura, consegui enviar e recebi o número do protocolo do lote de RPS.

Minha função estava gerando os nós filhos de <Signature> na ordem <SignatureValue/>, <SignedInfo/> e <KeyInfo/>. No arquivo XML de exemplo da PBH estava <SignedInfo/>, <SignatureValue/> e <KeyInfo/>.

O erro na verdade está na implementação da PBH, pois a ordem dos nós não deveria influenciar na validação da assinatura.

Segue em anexo um "pacotão" para assinar e transmitir.

Atc,
Haroldo

View PostAndersongs, on 21 September 2009 - 04:16 PM, said:

haroldorg,

Testei seu executavel com meu xml e deu o seguinte erro: "Arquivo enviado com erro na assinatura." Vc conseguiu enviar o arquivo já assinado?
Enviei esse mesmo xml pelo site da pbh e funcionou.
Tem como vc disponibilizar a parte de assinatura?

Obrigado,

Anderson

Arquivo(s) anexo(s)



#169 Andresa

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 107 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 08:15 PM

Anderson,

Eu já passei por esse erro. Eu utilizo uma TStringList para montar os meus xml´s (Pode parecer loucura mas achei mais rápido dessa maneira) e o que estava acontecendo é que tinha alguns caracteres de quebra de linha sobrando no meu arquivo. Foi só transformar todo o texto da TStringList em uma string sem as quebras que o arquivo passou. No caso do site acho que ele não verifica essa parte porq assim como vc o meu xml passava pelo site e não passava pelo webservice.


Qualquer coisa tamos ai...


View PostAndersongs, on 21 September 2009 - 04:16 PM, said:

haroldorg,

Testei seu executavel com meu xml e deu o seguinte erro: "Arquivo enviado com erro na assinatura." Vc conseguiu enviar o arquivo já assinado?
Enviei esse mesmo xml pelo site da pbh e funcionou.
Tem como vc disponibilizar a parte de assinatura?

Obrigado,

Anderson


#170 Andersongs

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 131 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 08:23 PM

Oi Andresa,

Teria como vc disponibilizar seu exemplo no delphi 2010? Não consegui fazer aquele exemplo rodar no delphi 2010 ele nao reconhece a uses "JwaWinCrypt"

Obrigado

Anderson

View PostAndresa, on 21 September 2009 - 08:15 PM, said:

Anderson,

Eu já passei por esse erro. Eu utilizo uma TStringList para montar os meus xml´s (Pode parecer loucura mas achei mais rápido dessa maneira) e o que estava acontecendo é que tinha alguns caracteres de quebra de linha sobrando no meu arquivo. Foi só transformar todo o texto da TStringList em uma string sem as quebras que o arquivo passou. No caso do site acho que ele não verifica essa parte porq assim como vc o meu xml passava pelo site e não passava pelo webservice.


Qualquer coisa tamos ai...


#171 Andresa

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 107 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 08:30 PM

ALA,

No seu caso estão faltando algumas coisas no seu xml de Lote RPS:

1º. A Tag <InscricaoMunicipal> não tem um valor definido e se não me engano ela é obrigatória no layout. Quando uma Tag que não é obrigatória não tiver valor vc pode omiti-lá porque senão vc vai invalidar o xml.

2º. Vc tem que colocar as Tag´s de Signature. Coloque assim como descrito abaixo após cada </InfRps> e no final para fechar o lote logo após </LoteRps> tem que ter também. Essas Tag´s <X509Data><X509Certificate> vc não precisa colocar. Quando o seu xml for assinado elas irão aparecer.

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#3107382854000129000000200900000000038">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue></DigestValue>
</Reference>
</SignedInfo>
<SignatureValue></SignatureValue>
<KeyInfo>
</KeyInfo>
</Signature>



As duas funções postadas aqui nesse fórum tanto a de Assinatura postada pelo Fabrício quando a de validação estão funcionando. Vc pode tomá-las como exemplo.

View PostALA, on 21 September 2009 - 04:36 PM, said:

Anderson, baixei a função postada aqui no forum que valida o xml, mas quando tento validar o aquivo anexo ocorre o seguinte erro 'Validate failed because the document does not contain exactly one root node.'
Validar falhou porque o documento não contém exatamente um nó de raiz.
Alguma ideia ?


#172 Andresa

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 107 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 08:34 PM

Anderson,

No exemplo que te mandei foi uma pasta junto "win32api" é só vc colocar no Library Path o caminho dessa pasta que o delphi vai reconhecer a "JwaWinCrypt".



View PostAndersongs, on 21 September 2009 - 08:23 PM, said:

Oi Andresa,

Teria como vc disponibilizar seu exemplo no delphi 2010? Não consegui fazer aquele exemplo rodar no delphi 2010 ele nao reconhece a uses "JwaWinCrypt"

Obrigado

Anderson


#173 Andersongs

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 131 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 08:39 PM

View PostAndresa, on 21 September 2009 - 08:34 PM, said:

Anderson,

No exemplo que te mandei foi uma pasta junto "win32api" é só vc colocar no Library Path o caminho dessa pasta que o delphi vai reconhecer a "JwaWinCrypt".

Editado por Andersongs, 21 September 2009 - 08:44 PM.


#174 Andresa

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 107 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 08:44 PM

Anderson,

Coloquei no rapidshare baixa daqui. http://rapidshare.co...1/NFSe.rar.html

View PostAndersongs, on 21 September 2009 - 08:39 PM, said:

Andresa,

Conferi no seu exemplo e não tem essa pasta!!!
No exemplo WebService.zip so tem a pasta WSDL

Descarta o comentario acima!!

Anderson


#175 Andersongs

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 131 posts
  • Estado:Minas Gerais

Adicionado 21 September 2009 - 08:46 PM

Andresa,

Desculpa, mas tinha a pasta sim. Pensei que vc estava falando de outro exemplo do delphi 7.
Obrigado, vou testar e te falo.

Abraços

Anderson

View PostAndresa, on 21 September 2009 - 08:44 PM, said:

Anderson,

Coloquei no rapidshare baixa daqui. http://rapidshare.co...1/NFSe.rar.html


#176 ALA

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 133 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 22 September 2009 - 04:17 PM

View PostAndresa, on 21 September 2009 - 08:30 PM, said:

ALA,

No seu caso estão faltando algumas coisas no seu xml de Lote RPS:

1º. A Tag <InscricaoMunicipal> não tem um valor definido e se não me engano ela é obrigatória no layout. Quando uma Tag que não é obrigatória não tiver valor vc pode omiti-lá porque senão vc vai invalidar o xml.

2º. Vc tem que colocar as Tag´s de Signature. Coloque assim como descrito abaixo após cada </InfRps> e no final para fechar o lote logo após </LoteRps> tem que ter também. Essas Tag´s <X509Data><X509Certificate> vc não precisa colocar. Quando o seu xml for assinado elas irão aparecer.

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#3107382854000129000000200900000000038">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue></DigestValue>
</Reference>
</SignedInfo>
<SignatureValue></SignatureValue>
<KeyInfo>
</KeyInfo>
</Signature>

As duas funções postadas aqui nesse fórum tanto a de Assinatura postada pelo Fabrício quando a de validação estão funcionando. Vc pode tomá-las como exemplo.
Andresa, obrigado por responder, vcs do forum estao me ajudando muuuuuuuuuuuuito...... Trabalho com delphi a varios anos mas sempre desenvolvendo programas de ECF-TEF e retaguarda, geração de XML e comunicação com webservice e a primeira vez, qualque ajuda e super importante. Principalmente pq o meu prazo ja esta acambando e o meu chefe esta no meu pé. Se alguem tiver um exemplo de como gerar xml e consumir webserver
favor me enviar, estou gerando xml igual se gera um txt.
1º Sera que vc tem o link, das duas funções, validar e assinar xml que o pessoal postou aqui no forum.
2º A sequencia correta e gerar xml, assinar xml, validar xml, enviar por webserver ou importar no site da pbh, imprimir a nota, ler o xml retornado pela ph e gravar o numero da nota gerado por eles junto com a minha nota no meu banco de dados ?
3º Inclui o codigo que vc indicou, mas continua dando erro 'Validate failed because the document does not contain exactly one root node', anexo o xml, o erro da tag eu ja ajustei
4º A função que estou utilizando para validar e esta
function Validar_XML( XML: AnsiString; SchemaPath : String ): Boolean;
var
DOMDocument : IXMLDOMDocument3;
ParseError : IXMLDOMParseError;
Schema : msXMLSchemaCache;
begin
DOMDocument:=CoDOMDocument50.Create;

DOMdocument.Async := False;
DOMdocument.ResolveExternals := False;
DOMdocument.ValidateOnParse := True;

DOMdocument.LoadXML(XML);

Schema := CoXMLSchemaCache50.Create;

Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_simples.xsd', SchemaPath + '\Tipos_Simples.xsd' );
Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd', SchemaPath + '\Tipos_Complexos.xsd' );
Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/servico_enviar_lote_rps_envio.xsd', SchemaPath + '\servico_enviar_lote_rps_envio.xsd' );

DOMdocument.Schemas := Schema;

ParseError:=DOMdocument.validate;
Result:=(ParseError.errorCode = 0);

if ParseError.errorCode <> S_OK then
raise Exception.Create(IntTostr(ParseError.errorCode)+' - '+ParseError.reason);

DOMDocument:=Nil;
ParseError:=Nil;
Schema:=Nil;
end;

Arquivo(s) anexo(s)


Editado por ALA, 22 September 2009 - 04:39 PM.


#177 Andresa

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 107 posts
  • Estado:Minas Gerais

Adicionado 22 September 2009 - 04:29 PM

ALA, nessa linha WriteLn( TXT_Exportacao,'Signature xmlns="http://www.w3.org/2000/09/xmldsig#">' );

esta faltando "<" antes de signature.

O correto seria WriteLn( TXT_Exportacao,'<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">' );

não se se tem mais alguma coisa.

View PostALA, on 22 September 2009 - 04:17 PM, said:

Andresa, obrigado por responder, vcs do forum estao me ajudando muuuuuuuuuuuuito...... Trabalho com delphi a varios anos mas sempre desenvolvendo programas de ECF-TEF e retaguarda, geração de XML e comunicação com webservice e a primeira vez, qualque ajuda e super importante. Principalmente pq o meu prazo ja esta acambando e o meu chefe esta no meu pé. Se alguem tiver um exemplo de como gerar xml e consumir webserver
favor me enviar, estou gerando xml igual se gera um txt.
1º Sera que vc tem o link, das duas funções, validar e assinar xml que o pessoal postou aqui no forum.
2º A sequencia correta e gerar xml, assinar xml, validar xml, enviar por webserver ou importar no site da pbh, imprimir a nota, ler o xml retornado pela ph e gravar o numero da nota gerado por eles junto com a minha nota no meu banco de dados ?
3º Quando inclui o codigo que vc indicou e tento abrir o xml no internet explorer
ocorre o seguinte erro, o xml esta anexo
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A página XML não pode ser exibida
Não é possível exibir a entrada XML usando a folha de estilos XSL. Corrija o erro e clique no botão Atualizar ou tente novamente mais tarde.
--------------------------------------------------------------------------------
A marca de fim' Signature' não coincide com a marca de início 'Rps'. Erro ao processar o recurso 'file:///C:/MULT/NFE/ALIPI...
</Signature>
--^
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alguma ideia do que pode ser ?
abaixo o meu codigo que gera o xml:
WriteLn( TXT_Exportacao,'<?xml version="1.0"?>' );
WriteLn( TXT_Exportacao,'<EnviarLoteRpsEnvio xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/servico_enviar_lote_rps_envio.xsd">' );
WriteLn( TXT_Exportacao,'<LoteRps xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/servico_enviar_lote_rps_envio.xsd" Id="loteRPS">' );
WriteLn( TXT_Exportacao,'<NumeroLote xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd">' + IntToStr( StrToInt( lcst_NumeroRPS )) + '</NumeroLote>' );
WriteLn( TXT_Exportacao,'<Cnpj xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd">' + lcst_CNPJ + '</Cnpj>' );
if Trim( lcst_InscricaoMunicipal ) <> EmptyStr then
WriteLn( TXT_Exportacao,'<InscricaoMunicipal xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd">' + lcst_InscricaoMunicipal + '</InscricaoMunicipal>' );
WriteLn( TXT_Exportacao,'<QuantidadeRps xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd">' + lcst_QuantidadeRPS + '</QuantidadeRps>' );
WriteLn( TXT_Exportacao,'<ListaRps xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd">' );
WriteLn( TXT_Exportacao,'<Rps xmlns="http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd">' );
// INICIO DADOS DO RPS //
WriteLn( TXT_Exportacao,'<InfRps Id="' + lcst_NumeroURI + '">' );
WriteLn( TXT_Exportacao,'<IdentificacaoRps>' );
WriteLn( TXT_Exportacao,'<Numero>' + lcst_NumeroURI + '</Numero>' );
WriteLn( TXT_Exportacao,'<Serie>' + lcst_SerieRPS + '</Serie>' );
WriteLn( TXT_Exportacao,'<Tipo>' + lcst_TipoRPS + '</Tipo>' );
WriteLn( TXT_Exportacao,'</IdentificacaoRps>' );
WriteLn( TXT_Exportacao,'<DataEmissao>' + FormatDateTime('yyyy-mm-dd',NFE.FieldByName( 'NFS_DT_EMISSAO' ).AsDateTime ) + 'T' +
FormatDateTime('hh:mm:ss', NFE.FieldByName( 'NFS_HR_EMISSAO' ).AsDateTime ) + '</DataEmissao>' );
WriteLn( TXT_Exportacao,'<NaturezaOperacao>' + lcst_NaturezaOperacao + '</NaturezaOperacao>' );
WriteLn( TXT_Exportacao,'<OptanteSimplesNacional>' + lcst_OptanteSimples + '</OptanteSimplesNacional>' );
WriteLn( TXT_Exportacao,'<IncentivadorCultural>' + lcst_IncentivadorCultural + '</IncentivadorCultural>' );
WriteLn( TXT_Exportacao,'<Status>' + lcst_StatusRPS + '</Status>' );

// *** INICIO SERVIÇO //
WriteLn( TXT_Exportacao,'<Servico>' );
// INICIO - VALORES //
WriteLn( TXT_Exportacao,'<Valores>');
WriteLn( TXT_Exportacao,'<ValorServicos>' + FormataValor( FormatCurr( '##############0.00', NFE.FieldByName( 'NFS_VLR_SERVICO' ).AsCurrency )) + '</ValorServicos>');
WriteLn( TXT_Exportacao,'<IssRetido>' + lcst_IssRetido + '</IssRetido>' );
WriteLn( TXT_Exportacao,'<BaseCalculo>' + FormataValor( FormatCurr( '##############0.00', NFE.FieldByName( 'NFS_VLR_BASE_ISS' ).AsCurrency )) + '</BaseCalculo>' );
WriteLn( TXT_Exportacao,'<Aliquota>' + FormataValor( FormatCurr( '####0.0000', (NFE.FieldByName( 'NFS_PERC_ISS' ).AsCurrency/100) )) + '</Aliquota>' );
WriteLn( TXT_Exportacao,'<ValorLiquidoNfse>' + FormataValor( FormatCurr( '##############0.00', NFE.FieldByName( 'NFS_VLR_TOTAL_NOTA' ).AsCurrency )) + '</ValorLiquidoNfse>');
WriteLn( TXT_Exportacao,'</Valores>');
// FIM - VALORES //
WriteLn( TXT_Exportacao,'<ItemListaServico>' + lcst_CodigoServico + '</ItemListaServico>' );
//WriteLn( TXT_Exportacao,'<CodigoCnae>6201500</CodigoCnae>'); Não e obrigatorio
WriteLn( TXT_Exportacao,'<CodigoTributacaoMunicipio>' + lcst_CodigoTributacaoMunicipio + '</CodigoTributacaoMunicipio>' );
WriteLn( TXT_Exportacao,'<Discriminacao>' + Remove_Acento_Da_String( ITEMNFe.FieldByName( 'INS_DESCRICAO_SERVICO' ).AsString )+ '</Discriminacao>' );
WriteLn( TXT_Exportacao,'<CodigoMunicipio>' + NFe.FieldByName( 'NFS_CODIGO_CIDADE_IBGE' ).AsString + '</CodigoMunicipio>' );
WriteLn( TXT_Exportacao,'</Servico>' );
// *** FIM SERVIÇO //

// *** INICO - DADOS DO PRESTADO //
WriteLn( TXT_Exportacao,'<Prestador>' );
WriteLn( TXT_Exportacao,'<Cnpj>' + lcst_CNPJ + '</Cnpj>' );
if Trim( lcst_InscricaoMunicipal ) <> EmptyStr then
WriteLn( TXT_Exportacao,'<InscricaoMunicipal>' + lcst_InscricaoMunicipal + '</InscricaoMunicipal>' );
WriteLn( TXT_Exportacao,'</Prestador>' );
// *** FIM - DADOS DO PRESTADO //

// *** INICO - DADOS DO TOMADOR //
WriteLn( TXT_Exportacao,'<Tomador>' );
// Identificacao do Tomador //
WriteLn( TXT_Exportacao,'<IdentificacaoTomador>' );
// CPFCNPJ //
WriteLn( TXT_Exportacao,'<CpfCnpj>' );
if Length( lcst_CPFCNPJTomador ) = 11 then // CPF
WriteLn( TXT_Exportacao,'<Cpf>' + lcst_CPFCNPJTomador + '</Cpf>' )
else // CNPJ
WriteLn( TXT_Exportacao,'<Cnpj>' + lcst_CPFCNPJTomador + '</Cnpj>' );
WriteLn( TXT_Exportacao,'</CpfCnpj>' );
WriteLn( TXT_Exportacao,'</IdentificacaoTomador>' );
// Fim //

// Razao Social //
WriteLn( TXT_Exportacao,'<RazaoSocial>' + NFe.FieldByName( 'NFS_CLIENTE_NOME' ).AsString + '</RazaoSocial>' );
// Endereço //
WriteLn( TXT_Exportacao,'<Endereco>' );
WriteLn( TXT_Exportacao,'<Endereco>' + NFe.FieldByName( 'NFS_CLIENTE_ENDERECO' ).AsString + '</Endereco>' );
WriteLn( TXT_Exportacao,'<Numero>' + NFe.FieldByName( 'NFS_CLIENTE_NUMERO' ).AsString + '</Numero>' );
//WriteLn( TXT_Exportacao,'<Complemento>' + NFe.FieldByName( '' ).AsString + '</Complemento>' ); // nao exite
WriteLn( TXT_Exportacao,'<Bairro>' + NFe.FieldByName( 'NFS_CLIENTE_BAIRRO' ).AsString + '</Bairro>' );
WriteLn( TXT_Exportacao,'<CodigoMunicipio>' + NFe.FieldByName( 'NFS_CODIGO_CIDADE_IBGE' ).AsString + '</CodigoMunicipio>' );
WriteLn( TXT_Exportacao,'<Uf>' + NFe.FieldByName( 'NFS_CLIENTE_UF' ).AsString + '</Uf>' );
WriteLn( TXT_Exportacao,'<Cep>' + NFe.FieldByName( 'NFS_CLIENTE_CEP' ).AsString + '</Cep>' );
WriteLn( TXT_Exportacao,'</Endereco>' );
// Fim //
WriteLn( TXT_Exportacao,'</Tomador>' );
// *** FIM - DADOS DO TOMADOR //
WriteLn( TXT_Exportacao,'</InfRps>' );
// Fim InfRPS //
// ASSINAR O RPS SIGNATURE - ULTIMA VERSÃO - INICO //
// Inicio Singnature //
WriteLn( TXT_Exportacao,'Signature xmlns="http://www.w3.org/2000/09/xmldsig#">' );
WriteLn( TXT_Exportacao,'<SignedInfo>' );
WriteLn( TXT_Exportacao,'<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>' );
WriteLn( TXT_Exportacao,'<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>' );
WriteLn( TXT_Exportacao,'<Reference URI="' + lcst_NumeroURI + '">' );
WriteLn( TXT_Exportacao,'<Transforms>' );
WriteLn( TXT_Exportacao,'<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>' );
WriteLn( TXT_Exportacao,'<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>' );
WriteLn( TXT_Exportacao,'</Transforms>' );
WriteLn( TXT_Exportacao,'<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>' );
WriteLn( TXT_Exportacao,'<DigestValue></DigestValue>' );
WriteLn( TXT_Exportacao,'</Reference>' );
WriteLn( TXT_Exportacao,'</SignedInfo>' );
WriteLn( TXT_Exportacao,'<SignatureValue></SignatureValue>' );
WriteLn( TXT_Exportacao,'<KeyInfo>' );
WriteLn( TXT_Exportacao,'</KeyInfo>' );
WriteLn( TXT_Exportacao,'</Signature>' );
// ULTIMA VERSÃO - FIM //
WriteLn( TXT_Exportacao,'</Rps>' );
// Fim RPS //
WriteLn( TXT_Exportacao,'</ListaRps>' ); // Fim //
WriteLn( TXT_Exportacao,'</LoteRps>' ); // Fim //
// ASSINAR O LOTE SIGNATURE - ULTIMA VERSÃO - INICO //
WriteLn( TXT_Exportacao,'Signature xmlns="http://www.w3.org/2000/09/xmldsig#">' );
WriteLn( TXT_Exportacao,'<SignedInfo>' );
WriteLn( TXT_Exportacao,'<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>' );
WriteLn( TXT_Exportacao,'<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>' );
WriteLn( TXT_Exportacao,'<Reference URI="' + lcst_NumeroURI + '">' );
WriteLn( TXT_Exportacao,'<Transforms>' );
WriteLn( TXT_Exportacao,'<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>' );
WriteLn( TXT_Exportacao,'<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>' );
WriteLn( TXT_Exportacao,'</Transforms>' );
WriteLn( TXT_Exportacao,'<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>' );
WriteLn( TXT_Exportacao,'<DigestValue></DigestValue>' );
WriteLn( TXT_Exportacao,'</Reference>' );
WriteLn( TXT_Exportacao,'</SignedInfo>' );
WriteLn( TXT_Exportacao,'<SignatureValue></SignatureValue>' );
WriteLn( TXT_Exportacao,'<KeyInfo>' );
WriteLn( TXT_Exportacao,'</KeyInfo>' );
WriteLn( TXT_Exportacao,'</Signature>' );
// ULTIMA VERSÃO - FIM //
WriteLn( TXT_Exportacao,'</EnviarLoteRpsEnvio>' ); // Fim

// FIM INFORMAÇÕES //
// ***** FECHA O TXT ***** //
Close(TXT_Exportacao);


#178 ALA

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 133 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 23 September 2009 - 07:59 AM

View PostAndresa, on 22 September 2009 - 04:29 PM, said:

ALA, nessa linha WriteLn( TXT_Exportacao,'Signature xmlns="http://www.w3.org/2000/09/xmldsig#">' );

esta faltando "<" antes de signature.

O correto seria WriteLn( TXT_Exportacao,'<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">' );

não se se tem mais alguma coisa.
1º Sera que vc tem o link, das duas funções, validar e assinar xml que o pessoal postou aqui no forum.
2º A sequencia correta e gerar xml, assinar xml, validar xml, enviar por webserver ou importar no site da pbh, imprimir a nota, ler o xml retornado pela ph e gravar o numero da nota gerado por eles junto com a minha nota no meu banco de dados ?
3º Inclui o codigo que vc indicou, mas continua dando erro 'Validate failed because the document does not contain exactly one root node', anexo o xml, o erro da tag eu ja ajustei
4º A função que estou utilizando para validar e esta
function Validar_XML( XML: AnsiString; SchemaPath : String ): Boolean;
var
DOMDocument : IXMLDOMDocument3;
ParseError : IXMLDOMParseError;
Schema : msXMLSchemaCache;
begin
DOMDocument:=CoDOMDocument50.Create;

DOMdocument.Async := False;
DOMdocument.ResolveExternals := False;
DOMdocument.ValidateOnParse := True;

DOMdocument.LoadXML(XML);

Schema := CoXMLSchemaCache50.Create;

Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_simples.xsd', SchemaPath + '\Tipos_Simples.xsd' );
Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd', SchemaPath + '\Tipos_Complexos.xsd' );
Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/servico_enviar_lote_rps_envio.xsd', SchemaPath + '\servico_enviar_lote_rps_envio.xsd' );

DOMdocument.Schemas := Schema;

ParseError:=DOMdocument.validate;
Result:=(ParseError.errorCode = 0);

if ParseError.errorCode <> S_OK then
raise Exception.Create(IntTostr(ParseError.errorCode)+' - '+ParseError.reason);

DOMDocument:=Nil;
ParseError:=Nil;
Schema:=Nil;
end;

Editado por ALA, 23 September 2009 - 08:08 AM.


#179 ALA

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 133 posts
  • Sexo:Masculino
  • Estado:Minas Gerais

Adicionado 23 September 2009 - 08:52 AM

[quote name='Andresa' date='02 September 2009 - 03:46 PM' timestamp='1251917194' post='325017']
Fabrício, vou postar o meu código pra vc ver o que estou tentando fazer com o seu código.
[/quote
Andresa, será que da para enviar o exemplo que vc postou sobre assinatura digital aqui no forum para alaoi@ig.com.br, não estou conseguindo baixar

Editado por ALA, 23 September 2009 - 08:53 AM.


#180 Andersongs

    Membro - Junior 3

  • Membros
  • PipPipPip
  • 131 posts
  • Estado:Minas Gerais

Adicionado 23 September 2009 - 09:00 AM

View PostALA, on 23 September 2009 - 07:59 AM, said:

1º Sera que vc tem o link, das duas funções, validar e assinar xml que o pessoal postou aqui no forum.
Infelizmente não tenho, mas dá uma procurada no forum que vc encontra.
2º A sequencia correta e gerar xml, assinar xml, validar xml, enviar por webserver ou importar no site da pbh, imprimir a nota, ler o xml retornado pela ph e gravar o numero da nota gerado por eles junto com a minha nota no meu banco de dados ?
Sua sequencia está correta apenas trocando a opção ler xml retornado pela ph e imprimir a nota
3º Inclui o codigo que vc indicou, mas continua dando erro 'Validate failed because the document does not contain exactly one root node', anexo o xml, o erro da tag eu ja ajustei
Faz o seguinte: Abra o xml em um editor de xml(XMLwriter por exemplo) e confere cada tags com um exemplo correto de arquivo xml. A função está correta o problema é seu xml.
4º A função que estou utilizando para validar e esta
function Validar_XML( XML: AnsiString; SchemaPath : String ): Boolean;
var
DOMDocument : IXMLDOMDocument3;
ParseError : IXMLDOMParseError;
Schema : msXMLSchemaCache;
begin
DOMDocument:=CoDOMDocument50.Create;

DOMdocument.Async := False;
DOMdocument.ResolveExternals := False;
DOMdocument.ValidateOnParse := True;

DOMdocument.LoadXML(XML);

Schema := CoXMLSchemaCache50.Create;

Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_simples.xsd', SchemaPath + '\Tipos_Simples.xsd' );
Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/tipos_complexos.xsd', SchemaPath + '\Tipos_Complexos.xsd' );
Schema.add('http://bhissdigital.pbh.gov.br/bhiss-ws/schemas/servico_enviar_lote_rps_envio.xsd', SchemaPath + '\servico_enviar_lote_rps_envio.xsd' );

DOMdocument.Schemas := Schema;

ParseError:=DOMdocument.validate;
Result:=(ParseError.errorCode = 0);

if ParseError.errorCode <> S_OK then
raise Exception.Create(IntTostr(ParseError.errorCode)+' - '+ParseError.reason);

DOMDocument:=Nil;
ParseError:=Nil;
Schema:=Nil;
end;






1 usuário(s) esta(ão) lendo este tópico

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)