Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2297 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Boa tarde Daniel,

Os fontes a seguir foram implementados no Delphi XE6, não sei se vai funcionar em versões anteriores.

Precisa declarar a unit System.Zip

Segue:

interface

/// <summary>Comprimir um arquivo em Zip</summary>
/// <param name="pFileToZip">Caminho do arquivo que será comprimido</param>
/// <returns>Retorna o caminho do arquivo Zip</returns>
/// <remarks>O arquivo Zip ficará na mesma pasta do arquivo de origem</remarks>
class function ZipFile(pFileToZip: String): String;

implementation

uses
System.Zip

class function TFuncao.ZipFile(pFileToZip: String): String;
var
  vZip: TZipFile;
begin
  vZip := TZipFile.Create;
  try
    // Definir o nome do arquivo Zip
    Result := ChangeFileExt(pFileToZip, '.zip');
    // Preparar para geração do arquivo
    vZip.Open(Result, zmWrite);
    // Incluir arquivo que será comprimido
    vZip.Add(pFileToZip);
    // Comprimir o arquivo
    vZip.Close;
  finally
    vZip.Free;
  end;
end;

Utilização do método acima

// Obter o nome do arquivo XML
vNomeArqXML := 'C:\teste.xml';
// Salvar o arquivo XML
ACBrBlocoX.ReducoesZ.SaveToFile(vNomeArqXML);
// Comprimir o arquivo XML em ZIP
vNomeArqZIP := TFuncao.ZipFile(vNomeArqXML);
try
  vStream := TMemoryStream.Create;
  try
    // Carregar o stream do arquivo Zip
    vStream.LoadFromFile(vNomeArqZIP);
    // Codificar o stream para Base64
    WebServices.EnviarReducaoZ.XML := EncodeBase64(vStream.Memory, vStream.Size);
  finally
    vStream.Free;
  end;
finally
  DeleteFile(PChar(vNomeArqZIP));
end;

Att

 

  • Curtir 1
  • Fundadores
Postado

Com a ajuda do @EliasCesar, efetuamos um refactoring nos fontes do componente ACBrBlocoX, removendo propriedades desnecessárias, e separando as classes em Units corretas

O suporte nativo a compactação com FileZIP, está presente, porém só compatível com Lazarus ou Delphi XE2 ou superior...

Para Delphis inferiores ao XE2, cabe ao programador, efetuar o Zip e encode 64 do XML, e informá-lo na propriedade "XMLZipado"

 

Citar

22/12/2016

-- ACBrBlocoX, ACBrBlocoX_WebServices --
[*] Separação das classes de ACBrBlocoX relacionadas a WebServices para
    ACBrBlocoX_WebServices

-- ACBrBlocoX_WebServices --
[-] Corrigido o Suporte a Zip Nativo, (disponível apenas para Lazarus ou DelphiXE2
    ou superior).
[*] Remoção de TWebServices.EnviarBlocoX, use:
    TACBrBlocoX_WebServices.EnviarReducaoZ ou TACBrBlocoX_WebServices.EnviarEstoque
[*] Remoção de TWebServices.ValidarBlocoX, use:
    TACBrBlocoX_WebServices.ValidarReducaoZ ou TACBrBlocoX_WebServices.ValidarEstoque
[+] Adicionada a propriedade "TEnviarBlocoX.XMLZipado", para permitir ao
    programador, informar diretamente o seu XML com Zip e Enconde64. Nesse caso
    o mesmo não será calculado por "TEnviarBlocoX.GetXMLZipado"
    (por: DSA)  

 

  • Curtir 2
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • 2 semanas depois ...
Postado

Boa tarde, ao enviar o XML de estoque está retornando a mensagem:

"Erro: CNPJ do estabelecimento inválido ou em branco"

Avaliando os fontes percebi que o CNPJ estava sendo definido incorretamente no método TEnviarEstoque.DefinirDadosMsg.

O campo CnpjEstabelecimento não existe no XML, dessa forma a informação deve ser obtida a partir da tag Cnpj, da mesma forma como foi feito para o XML da Redução Z.

Segue alteração em anexo.

Att

ACBrBlocoX_WebServices.pas

  • Curtir 1
  • Moderadores
Postado
28 minutos atrás, Augusto Fontana disse:

Boa tarde, ao enviar o XML de estoque está retornando a mensagem:

"Erro: CNPJ do estabelecimento inválido ou em branco"

Avaliando os fontes percebi que o CNPJ estava sendo definido incorretamente no método TEnviarEstoque.DefinirDadosMsg.

O campo CnpjEstabelecimento não existe no XML, dessa forma a informação deve ser obtida a partir da tag Cnpj, da mesma forma como foi feito para o XML da Redução Z.

Segue alteração em anexo.

Att

ACBrBlocoX_WebServices.pas

Tens razão

está no svn a mudança

favor testar

Obrigado

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado

Boa tarde Juliomar, realizei os testes, e agora está funcionando.

Aproveito também para informar que até o momento não tive nenhum arquivo processado com sucesso.

No momento estou obtendo a seguinte mensagem de erro:

"Erro: ORA-14400: inserted partition key does not map to any partition ORA-06512: at "USR_SAT_STORAGE.PKG_FWK_STO_CATALOG", line 267 ORA-06512: at line 1"

Mas como é problema na SEFAZ não há nada que possamos fazer, a não ser aguardar a correção.

Obrigado pela atenção.

  • 5 semanas depois ...
Postado

Boa tarde, também estou tendo problemas ao validar o xml da Redução Z com a seguinte mensagem:

XML inválido: 
Schema inválido: 
O elemento 'CRZ' é inválido - O valor '1' é inválido dependendo do tipo de dados 'Numero4Type' - Falha na restrição Pattern.
O elemento 'COO' é inválido - O valor '7' é inválido dependendo do tipo de dados 'Numero6ou9Type' - Falha na restrição Pattern.
O elemento 'CRO' é inválido - O valor '1' é inválido dependendo do tipo de dados 'Numero3Type' - Falha na restrição Pattern.
O elemento 'VendaBrutaDiaria' é inválido - O valor '539,40' é inválido dependendo do tipo de dados 'Numero14Type' - Falha na restrição Pattern.
O elemento 'GT' é inválido - O valor '539,40' é inválido dependendo do tipo de dados 'Numero18Type' - Falha na restrição Pattern.

Ao que pude observar, segundo o último documento de requisitos do SAT SC (https://docs.google.com/document/d/1yez14gry9Mi4rTpwDRDf--bR-SLzijD81OPeJzh9FqE/edit) esses campos tem um valor definido e este se não estiver preenchido, deve ser completado com zeros. Alguém está passando ou já passou por essa dificuldade também?

Segue o arquivo xml gerado para validação (ReducaoZ.xml).

Att.

ReducaoZ.xml

  • Consultores
Postado

Foram efetuadas correções para atender as alterações nos tamanhos dos campos.

Disponível no SVN, Rev: 12883.

  • Curtir 2
Consultor SAC ACBr

Elias César Vieira
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Assine o
SAC

 
Postado

Obrigado Elias,

eu testei aqui e não apresentou mais mensagens de erro com relação aos tipos dos campos.

No entanto percebi um problema na formatação dos valores nos campos "VendaBrutaDiaria" e "GT".

O meu GT é 6617472,06 mas no xml está aparecendo 000000000661747205,

o valor dos centavos foi alterado incorretamente, devido a utilização do Trunc, que faz isso ao passar

como parametro a expressão GT*100. Dessa forma utilizei o método TruncFix do ACBrUtil e o valor foi

gerado corretamente no XML.

Seguem alterações em anexo

Att

ACBrBlocoX_ReducaoZ.pas

Postado
Em 06/02/2017 at 17:47, EliasCesar disse:

Foram efetuadas correções para atender as alterações nos tamanhos dos campos.

Disponível no SVN, Rev: 12883.

Elias, efetuei os testes com as alterações feitas e continua a rejeição.

Fiz alteração manualmente no arquivo para teste e reenviei, sendo assim validou.
Deixo aqui como enviei e como está gerando:

* Xml gerado pelo Acbr (Não validado):

<CRZ>1</CRZ>

<COO>8</COO>

<CRO>1</CRO>

<VendaBrutaDiaria>539,60</VendaBrutaDiaria>

<GT>539,60</GT>

* Xml ajustado manualmente (Validado):

<CRZ>0001</CRZ>

<COO>000008</COO>

<CRO>001</CRO>

<VendaBrutaDiaria>00000000035960</VendaBrutaDiaria>

<GT>000000000000035960</GT>

 

  • Consultores
Postado

Olá @Augusto Fontana

A alteração está disponível no SVN, Rev: 12898.
Obrigado pela contribuição!

-- ACBrBlocoX_ReducaoZ --
[-] Correção de problema ao truncar valores. Passado a utilizar TruncFix.
    (por: Augusto Fontana)

Olá @Eduardo Muller

Confirme se seus fontes realmente estão atualizados, pois o ACBr foi modificado para gerar conforme seu exemplo de "Xml ajustado".
 

  • Curtir 1
Consultor SAC ACBr

Elias César Vieira
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Assine o
SAC

 
Postado

Boa tarde pessoal,

só para disseminar a informação, recebi e-mail da homologadora (TECPAR) com todos os links relacionados a geração do Bloco X,

segue:

Xsd Redução Z
 
Xsd Estoque
 
Página para validação dos XMLs
 
Webservice para validação dos XMLs
 
Bloco X atualizado
Postado

Bom dia Juliomar,

Sim, não é oficial, e provavelmente terão outras alterações ao longo do tempo. O problema é que as homologadoras, pelo menos aqui de SC, estão cobrando no mínimo a validação dos arquivos XML.

Após as alterações liberadas pelo Elias já está funcionando de acordo com as novas modificações.

Não fui contactado para participar dos testes.

Postado
Em 22/12/2016 at 12:38, Daniel Simoes disse:

Com a ajuda do @EliasCesar, efetuamos um refactoring nos fontes do componente ACBrBlocoX, removendo propriedades desnecessárias, e separando as classes em Units corretas

O suporte nativo a compactação com FileZIP, está presente, porém só compatível com Lazarus ou Delphi XE2 ou superior...

Para Delphis inferiores ao XE2, cabe ao programador, efetuar o Zip e encode 64 do XML, e informá-lo na propriedade "XMLZipado"

 

 

Bom dia, pessoal!

Estou desenvolvendo o Bloco X com o Delphi 7 e entendo que tenho que zipar o arquivo e informar na propriedade XMLZipado. O que eu não entendi é como eu tenho que fazer isso. Eu gero o xml, zipo e gero a Base64 do arquivo.zip? Ou eu gero a Base64 do arquivo.xml e depois zipo?

Resumindo, devo informar XMLZipado := arquivo.zip, XMLZipado := arquivo.xml, XMLZipado := EncodeBase64(arquivo.xml) ou XMLZipado := EncodeBase64(arquivo.zip)??

Em todos os casos que tentei o evento ACBrBlocoX1.WebServices.EnviarReducaoZ.Executar está retornando FALSE.

Obrigado.

Postado

Consegui.

Além de enviar o XMLZipado := EncodeBase64(arquivo.zip) tenho que informar o XML := arquivo.xml também.

Meu retorno foi esse:
 

<?xml version="1.0" encoding="utf-8"?>
<Resposta>
    <Recibo>0452bdc8-bba3-41f7-9d03-fcfbaecfcc48</Recibo>
    <Tipo>Redução Z</Tipo>
    <DataReferencia>2017-02-13</DataReferencia>
    <EstadoProcessamentoCodigo>0</EstadoProcessamentoCodigo>
    <EstadoProcessamentoDescricao>Aguardando</EstadoProcessamentoDescricao>
    <Mensagem />
</Resposta>

 

Gerou um número de recibo mas esta com este ProcessamentoCodigo = 0 e ProcessamentoDescricao = Aguardando. O que isso quer dizer?

Obrigado.

Postado
7 minutos atrás, Maurício Blasque disse:

Consegui.

Além de enviar o XMLZipado := EncodeBase64(arquivo.zip) tenho que informar o XML := arquivo.xml também.

Meu retorno foi esse:

 

<?xml version="1.0" encoding="utf-8"?>
<Resposta>
    <Recibo>0452bdc8-bba3-41f7-9d03-fcfbaecfcc48</Recibo>
    <Tipo>Redução Z</Tipo>
    <DataReferencia>2017-02-13</DataReferencia>
    <EstadoProcessamentoCodigo>0</EstadoProcessamentoCodigo>
    <EstadoProcessamentoDescricao>Aguardando</EstadoProcessamentoDescricao>
    <Mensagem />
</Resposta>


 

Gerou um número de recibo mas esta com este ProcessamentoCodigo = 0 e ProcessamentoDescricao = Aguardando. O que isso quer dizer?

Obrigado.

Quer dizer que seu arquivo foi recebido pelo webservice, mais ainda não foi processado. Isso pode levar, minutos, horas ou dias, depende de como for configurado o webservice.

O Sefaz ainda não divulgou nada oficial, mais provavelmente de tempo em tempo vai ter que ficar consultando o recibo para ver se foi aceito ou se teve erro nas informações do XML. Pelo menos eu acho que vai ser assim.
 

Postado
18 minutos atrás, Maurício Blasque disse:

É nativa.

Apenas coloque synacode nas suas Uses.

Obrigado Mauricio.

Só mais uma coisa, até era tua duvida. Usamos essa função no conteudo do xml? 

Como foi a sequencia que tu fez? Zipo e depois fez o encode?

 

Postado
1 minuto atrás, antonio.rosa disse:

Obrigado Mauricio.

Só mais uma coisa, até era tua duvida. Usamos essa função no conteudo do xml? 

Como foi a sequencia que tu fez? Zipo e depois fez o encode?

 

Na propriedade XML você informa o conteúdo do XML gerado e na propriedade XMLZipado você pega o XML gerado, zipa ele e gera o Base64 do arquivo zipado.

  • Este tópico foi criado há 2297 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.