Jump to content

Embarcadero Conference 2019

22/10 - Visite o Stand do ACBr
Saiba mais

Nova Loja Oficial
loja.projetoacbr.com.br
Ajude o projeto a crescer, com estilo

Comprar

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Fabio Alves

arquivo SEF pernambuco.

Recommended Posts

Quando utilizo o programa analisador de arquivo texto (SEF2/SEFAZ-PE) ele dar um erro:

 

Cannot open file "c:\configuracao.xml". O sistema não pode encontrar  o arquivo especificado.

 

Já mudei para pasta onde está instalado o programa, mas continua o erro.

 

Como resolvo isso? Obrigado.

Edited by krammers

Share this post


Link to post
Share on other sites

Boa tarde.

 

Você instalou o SefazNet tb?

 

Att.


Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Share this post


Link to post
Share on other sites

Estou tendo problemas com o acbrSEFII alguém consegui validar? 

 

No Bloco_0 Registro_030 as Propriedades que deveriam conter valores inteiros estão sendo convertidas com valores errados acredito que seja na conversão dos tipos enumerados em alguns casos funciona em outros não!

Edited by edvaniojancy

Share this post


Link to post
Share on other sites

Boa tarde.

 

Quais parâmetros e quais valores foram informados ao componente ?

 

Att.


Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Share this post


Link to post
Share on other sites

Todos do Registro_030 onde temos que informar Sim ou Não tipo PRF_LMC, PRF_RV, PRF_RI, IND_RT quando coloco exNao os valores ficam errados!

Por favor, dê um exemplo de valor errado como a Juliana pediu acima para que possamos reproduzir.


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

With Registro0030New do

begin

   PRF_LMC := exNao;

    PRF_RV := exNao;

    PRF_RI := exNao;

    IND_RT := exNao;

end;

 

Resultado no Arquivo:

|0030|0|0|0|0||1|31121899|31121899|31121899|0|1|31121899|0|1|1|1|1|

Share this post


Link to post
Share on other sites

Subi uma correção para o SVN na Revisão  5899.
Pelo que vi está tudo certo.
Poderia testar e reportar qualquer problema?
Obrigado.


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Subi uma correção para o SVN na Revisão  5899.

Pelo que vi está tudo certo.

Poderia testar e reportar qualquer problema?

Obrigado.

Boa tarde, em primeiro lugar abrigado com essa atualização foi corrigido mas apos o teste o problema também está ocorrendo no registro E025 na propriedade IND_PETR.

 

Exemplo:

RegistroE025 := nil;
wRegistroE025 := wRegistroE020.RegistroE025.New(wRegistroE020);


with wRegistroE025 do
begin
  IND_PETR     := 1;
end;

 |E025|8158,74|0,00|1652|0,00||0,00|0,00|0,00|0,00|8158,74|0,00|0,00|0,00||31121899||

 

Arquivo em Anexo:

SEF.txt

Edited by edvaniojancy

Share this post


Link to post
Share on other sites

Boa tarde, em primeiro lugar abrigado com essa atualização foi corrigido mas apos o teste o problema também está ocorrendo no registro E025 na propriedade IND_PETR.

 

Exemplo:

RegistroE025 := nil;
wRegistroE025 := wRegistroE020.RegistroE025.New(wRegistroE020);


with wRegistroE025 do
begin
  IND_PETR     := 1;
end;

 |E025|8158,74|0,00|1652|0,00||0,00|0,00|0,00|0,00|8158,74|0,00|0,00|0,00||31121899||

 

 

Subi uma correção para o SVN na Revisão  5906. Aproveitei para corrigir o campo seguinte também.

Pelo que vi está tudo certo.

Favor testar e reportar qualquer problema.

Obrigado.


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Subi uma correção para o SVN na Revisão  5906. Aproveitei para corrigir o campo seguinte também.

Pelo que vi está tudo certo.

Favor testar e reportar qualquer problema.

Obrigado.

 

Boa tarde, esses erros foram corrigidos mas encontrei mais dois erros nas propriedades:

With RegistroE080New do
begin
   IND_TOT = 0;
   NUM_MR = 2;
end;

|E080||2D|02011900|03082013|2501,00|152,50|0,00|0,00|0,00|SP10|0|2348,50|0,00|0,00|0,00|2348,50||

 

A propriedade IND_TOT esta em braco e a NUM_MR esta com valor incorreto era pra ser 2.

Share this post


Link to post
Share on other sites

olá edvaniojancy,

 

Subi suas alterações para o SVN na Revisão  5913.

Pelo que vi está tudo certo.

Favor testar e reportar qualquer problema.

Obrigado.

 

   Mas vou lhe explicar qual é o problema, e talvez você mesmo possa me ajudar nas próximas correções.

   O que acontece é que o método LFill é sobrecarregado (overloaded) para vários tipos de parâmetros. O compilador então fica confuso quando encontra um parâmetro inteiro e acaba chamando o método para data.

   Para corrigir basta que nós acabemos com a ambiguidade no método. No caso do LFill isso é facilmente corrigido passando o segundo parâmetro para o método.

   Como fazer isso no caso dos registros do SEF2? Veja como exemplo o caso acima onde corrigi o registro E080.

 

   Primeiro você precisa localizar o método que escreve o registro que é geralmente chamado WriteRegistroXXXX. No nosso caso o método é o WriteRegistroE080, que se encontra na unit ACBrSEF2_BlocoE_1.pas linhas a partir da 1052 na revisão atual. Veja a parte importante dele abaixo:

procedure TBloco_E.WriteRegistroE080(RegE001: TRegistroSEFE001);
var
  intFor : Integer;
  RegE080: TRegistroSEFE080;
begin
   for intFor := 0 to RegE001.RegistroE080.Count - 1 do
   begin
      RegE080 := TRegistroSEFE080(RegE001.RegistroE080.Items[intFor]);
      with RegE080 do
      begin
         Add( LFill('E080')         +
              LFill(IND_TOT)        +
              LFill(COD_MOD)        +
              LFill(NUM_MR)         +
              LFill(DT_DOC)         +
              LFill(VL_BRT,2)       +
....
 

   Segundo localize a definição deste registro no manual do SEF2 e veja o tamanho do campo analisado. No nosso caso, as definições deste registro se encontram no arquivo SEF II - LFPD 06 - SEF_LA-ICMS.xlsx conforme imagem abaixo e o tamanho do IND_TOT é 1 e o do NUM_MR não está definido.

post-196-0-24907100-1380056411_thumb.jpg

   Terceiro, de posse dessas informações basta alterar o método WriteRegistroXXXX adicionando à chamada do LFill o parâmetro que estava faltando. Veja abaixo:

 

procedure TBloco_E.WriteRegistroE080(RegE001: TRegistroSEFE001);
var
  intFor : Integer;
  RegE080: TRegistroSEFE080;
begin
   for intFor := 0 to RegE001.RegistroE080.Count - 1 do
   begin
      RegE080 := TRegistroSEFE080(RegE001.RegistroE080.Items[intFor]);
      with RegE080 do
      begin
         Add( LFill('E080')         +
              LFill(IND_TOT, 1)     +
              LFill(COD_MOD)        +
              LFill(NUM_MR, Length(inttostr(NUM_MR)) +
              LFill(DT_DOC)         +
              LFill(VL_BRT,2)       +

Note que no caso do NUM_MR eu acabei usando um artifício (Length(inttostr(NUM_MR)) para descobrir em run-time o tamanho do campo visto que o método LFill não aceitaria uma indefinição do tamanho.

Se você, ou qualquer outra pessoa, encontrar mais desses erros, pode corrigir conforme explicado e anexar o arquivo alterado aqui. Isso vai dar mais agilidade para o processo.

  • Like 1

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

olá edvaniojancy,

 

Subi suas alterações para o SVN na Revisão  5913.

Pelo que vi está tudo certo.

Favor testar e reportar qualquer problema.

Obrigado.

 

   Mas vou lhe explicar qual é o problema, e talvez você mesmo possa me ajudar nas próximas correções.

   O que acontece é que o método LFill é sobrecarregado (overloaded) para vários tipos de parâmetros. O compilador então fica confuso quando encontra um parâmetro inteiro e acaba chamando o método para data.

   Para corrigir basta que nós acabemos com a ambiguidade no método. No caso do LFill isso é facilmente corrigido passando o segundo parâmetro para o método.

   Como fazer isso no caso dos registros do SEF2? Veja como exemplo o caso acima onde corrigi o registro E080.

 

   Primeiro você precisa localizar o método que escreve o registro que é geralmente chamado WriteRegistroXXXX. No nosso caso o método é o WriteRegistroE080, que se encontra na unit ACBrSEF2_BlocoE_1.pas linhas a partir da 1052 na revisão atual. Veja a parte importante dele abaixo:

procedure TBloco_E.WriteRegistroE080(RegE001: TRegistroSEFE001);
var
  intFor : Integer;
  RegE080: TRegistroSEFE080;
begin
   for intFor := 0 to RegE001.RegistroE080.Count - 1 do
   begin
      RegE080 := TRegistroSEFE080(RegE001.RegistroE080.Items[intFor]);
      with RegE080 do
      begin
         Add( LFill('E080')         +
              LFill(IND_TOT)        +
              LFill(COD_MOD)        +
              LFill(NUM_MR)         +
              LFill(DT_DOC)         +
              LFill(VL_BRT,2)       +
....
 

   Segundo localize a definição deste registro no manual do SEF2 e veja o tamanho do campo analisado. No nosso caso, as definições deste registro se encontram no arquivo SEF II - LFPD 06 - SEF_LA-ICMS.xlsx conforme imagem abaixo e o tamanho do IND_TOT é 1 e o do NUM_MR não está definido.

attachicon.gifSEF2_E080_tamanhos.jpg

   Terceiro, de posse dessas informações basta alterar o método WriteRegistroXXXX adicionando à chamada do LFill o parâmetro que estava faltando. Veja abaixo:

 

procedure TBloco_E.WriteRegistroE080(RegE001: TRegistroSEFE001);
var
  intFor : Integer;
  RegE080: TRegistroSEFE080;
begin
   for intFor := 0 to RegE001.RegistroE080.Count - 1 do
   begin
      RegE080 := TRegistroSEFE080(RegE001.RegistroE080.Items[intFor]);
      with RegE080 do
      begin
         Add( LFill('E080')         +
              LFill(IND_TOT, 1)     +
              LFill(COD_MOD)        +
              LFill(NUM_MR, Length(inttostr(NUM_MR)) +
              LFill(DT_DOC)         +
              LFill(VL_BRT,2)       +

Note que no caso do NUM_MR eu acabei usando um artifício (Length(inttostr(NUM_MR)) para descobrir em run-time o tamanho do campo visto que o método LFill não aceitaria uma indefinição do tamanho.

Se você, ou qualquer outra pessoa, encontrar mais desses erros, pode corrigir conforme explicado e anexar o arquivo alterado aqui. Isso vai dar mais agilidade para o processo.

 

 

OK,  muito obrigado pela ajuda a partir de agora farei como explicado caso encontre mais algum desses erros e enviarei os arquivos corrigidos para agilizar o processo.

Edited by edvaniojancy

Share this post


Link to post
Share on other sites

OK,  muito obrigado pela ajuda a partir de agora farei como explicado caso encontre mais algum desses erros e enviarei os arquivos corrigidos para agilizar o processo.

Se puder fazê-lo vai ser de muito ajuda. Obrigado pelas contribuições até agora.


[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.

Share this post


Link to post
Share on other sites

Se puder fazê-lo vai ser de muito ajuda. Obrigado pelas contribuições até agora.

Bom dia EMBarbosa, foi encontrado mais alguns erros e a necessidade de fazer uma alteração na na unit de conversão segue arquivo em anexo para analise, também adicionei os arquivos do eDOC e SefII gerados depois das correções. 

 

Foi detectado um erro nos totalizadores das linhas dos registros do bloco 9900 a 9999.

 

SEF 2.rar

Edited by edvaniojancy
  • Like 1

Share this post


Link to post
Share on other sites

Bom dia.

 

As alterações estão no svn.

 

Att.

  • Like 1

Consultora SAC ACBr

Juliana Tamizou
Ajude o Projeto ACBr crescer - Assine o SAC

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

Share this post


Link to post
Share on other sites

Olá Pessoal, sou novato em ACBR, descobri por conta do E-doc

 

estou com o svn na revision 5931, quando vou compilar o projeto exemplo do SEF2 (EDOC), esta dando erro em fDT_DOC      : TDate; o erro é ACBrSEF2_BlocoE.pas(248): Undeclared identifier: 'TDate'

 

Onde se encontra esta classe TDate? como resolvo esta dependencia?

Share this post


Link to post
Share on other sites

Olá JulioMar e outros

 

O erro que comentei acima ocorre no arquivo \ACBr\Fontes\ACBrSEF2\ACBrSEF2_BlocoE.pas, o que fiz para corrigir foi acrescentar nesta classe a uses Controls. e o arquivo compilou tranquilamente

 

Há alguns erros nos arquivo de exemplo do SEF2, na maioria dos casos são erro de conversões de tipo. Mais comentando as variáveis que estão com esses erros o exemplo compila e roda de boa

 

Não sei como funciona as alterações no SVN, mais quem puder colocar a uses Controls, no Arquivo já ajudaria bastante, principalmente para alguém que esta começando como eu

Share this post


Link to post
Share on other sites

Amigo este erro com perfil, é porque o sistema não consegue obter os dados da empresa em questão (Mercantil Santana), atualize a versão do SEF 2012, já esta na 1.0.8.xx (não me lembro o final) e acredito que você vai conseguir obter o perfil da referida empresa.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...