Ir para conteúdo
  • Cadastre-se

dev botao

Importação Do Arquivo Gerado


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

Recommended Posts

Bom dia,

 

Alguma novidade sobre a correção dos problemas?

 

Qual o problema que você encontrou ? agora que o componente foi enviado, estou com ele pelo repositório do SVN da ACBr, e aqui para mim está compilando normalmente.

 

Gostaria de pedir para removerem o procedimento inicializa, pois quando foi criado, não era utilizada a herança do procedimento base, agora ele não é mais necessário.

 

[dcc32 Hint] ACBrSpedPCImportar_Base.pas(58): H2219 Private symbol 'Inicializa' declared but never used

 

Depois quando estiver com mais tempo, vou tentar fazer uma demo e anexar aqui no tópico, eu estava testando o componente lendo um arquivo e pedindo para a acbr gerar o arquivo que foi lido, e então dar diff no tortoise para conferir as diferenças.

 

Eu ainda não estou utilizando o componente porque estamos com outros projetos em andamento, mas é provável que alguns eventos novos sejam interessantes para o agrupamento dos blocos que não são de correspondência das filiais.

Editado por Data Lider

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

O problema que relatei no post acima

 

 

Ok, obrigado Isaque.

 

A instalação funcionou perfeitamente agora. Mas tem um problema. Eu instalei o pacote de importação manualmente (já que o instalador não tem ele). A instalação do pacote ocorreu tudo certo (tirando os milhares de warning que tem). 

Ai então criei uma aplicação para testar a leitura do arquivo e quando vou compilar dá os seguintes erros:

 

[dcc32 Hint] ACBrSpedPCImportar_Base.pas(58): H2219 Private symbol 'Inicializa' declared but never used
[dcc32 Error] ACBrSpedPCImportar_BlocoC.pas(876): E2010 Incompatible types: 'Integer' and 'string'
[dcc32 Error] ACBrSpedPCImportar_BlocoC.pas(879): E2003 Undeclared identifier: 'DOC_FIN'
[dcc32 Fatal Error] ACBrSpedPCImportar.pas(55): F2063 Could not compile used unit 'ACBrSpedPCImportar_BlocoC.pas'
 
O estranho que na instalação do pacote isso não ocorre. Será que é alguma coisa com as referências na Library do Delphi?
 
Sabes o que pode ser

 

Este problema.

Link para o comentário
Compartilhar em outros sites

Faça uma atualização Units e Pacotes foram renomeados, e o pacote já está no ACBrInstall

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

Pode sim, contamos com sua colaboração, se baseando no código desse que importa o Contribuição, para fazer para o Fiscal.

  • Curtir 1

--
Isaque Pinheiro
Aracruz/ES - Brasil
___________________________________________________________________________
Site Oficial: www.isaquepinheiro.com.br 
Youtube: youtube.com/isaquepinheirooficialbr
Facebook: facebook.com.br/isaquepinheirooficialbr
Instagram: instagram.com/isaquepinheirooficialbr
Linkdin: https://www.linkedin.com/in/isaquepinheirooficialbr

Conheça o Projeto ORMBr Framework for Delphi - https://www.ormbr.com.br

 

Link para o comentário
Compartilhar em outros sites

Bom dia,
 
Agora consegui compilar tudo certinho, mas ainda há um problema ao importar o arquivo do SPED. No registro 0000 tem os campos de data. No meu arquivo SPED o formato deste campo está assim: '28022014' (data final no caso) e o método para conversão de data está tratando como se o ano fosse o primeiro campo da data. Veja:
 
function TACBrSpedPCImportar_Base.ValorD: TDateTime;
var
  S: string;
begin
  S := Valor;
  if S <> EmptyStr then
    Result := EncodeDate(StrToInt(Copy(S, 1, 4)), StrToInt(Copy(S, 5, 2)),StrToInt(Copy(S, 7, 2)))
  else
    Result := 0;
end;

 

Veja que o primeiro campo o metodo está associando ao ano, mas no meu arquivo deveria ser o dia.

 

O padrão do SPED é anomesdia, ou diamesano. Porque no arquivo que meu cliente me passou está diamesano.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pois é, eu usei um arquivo que peguei no 4Shared, olhando aqui no manual, o padrão é DDMMYYYY. A informação pode ser confirmada na página 18 do manual que contem a seguinte informação

 

 

 

3.2 Regras de preenchimento de campos numéricos (N) cujo conteúdo representa data:
Devem ser informados conforme o padrão "diamêsano" (ddmmaaaa), excluindo-se quaisquer caracteres de separação (tais
como: ".", "/", "-", etc);
Exemplos (data):
01 de Janeiro de 2011 ? |01012011|
11.11.2011 ? |11112011|
21-03-2010 ? |21032010|
09/08/11 ? |09082011|
campo vazio ? ||

 

Correção:

Result := EncodeDate(StrToInt(Copy(S, 5, 4)), StrToInt(Copy(S, 3, 2)),StrToInt(Copy(S, 1, 2)))

 

Obrigado pela colaboração Rodrigo.

Editado por Data Lider

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

Acabo de terminar os meus testes aqui. E o problema acima é o único que encontrei. Fiz a alteração dele para que possa fazer a importação das datas conforme os meus arquivos.

 

Ficou assim.

 

function TACBrSpedPCImportar_Base.ValorD: TDateTime;
var
  S: string;
begin
  S := Valor;
  if S <> EmptyStr then
//    Result := EncodeDate(StrToInt(Copy(S, 1, 4)), StrToInt(Copy(S, 5, 2)),StrToInt(Copy(S, 7, 2)))
    Result := EncodeDate(StrToInt(Copy(S, 5, 4)), StrToInt(Copy(S, 3, 2)), StrToInt(Copy(S, 1, 2)))
  else
    Result := 0;
end;
 
Se estiver correto posso subir ele para o SVN. Claro que dai vou retirar o comentário.
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Além da correção de conversão de data eu fiz um correção na leitura do registro C501 que não estava lendo o valor do PIS corretamente.

 

procedure TACBrSpedPCImportar_BlocoC.RegC501;
begin
  with ACBrSpedPisCofins.Bloco_C.RegistroC501New do
  begin
    CST_PIS := StrToCstPis(Valor);
    VL_ITEM := ValorF;
    NAT_BC_CRED := StrToNatBcCred(Valor);
    VL_BC_PIS := ValorF;
    ALIQ_PIS := ValorF;
    VL_PIS  := ValorF; <-- Está faltando essa linha
    COD_CTA := Valor;
  end;
end;
 

Gostaria que o responsável fizesse essas alterações e fizesse o post no SVN

Link para o comentário
Compartilhar em outros sites

  • Consultores

Por favor, anexe a unit alterada.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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.
Link para o comentário
Compartilhar em outros sites

Após a última atualização do ACBrEPCImportar.pas a importação passou a não funcionar mais no XE5. Verifiquei através de debug que o problema estava já na leitura do primeiro registro (0000). Na variável Delimiter o nome da empresa estava cada palavra em uma coluna diferente, ou seja, ele estava considerando os espaços como separador. Identifiquei que isso se deve a ter tirado a linha

Delimitador.StrictDelimiter := True;

Que como diz no SVN "foi retirado pois essa propriedade não existe no Delphi 7". Porém retirando ela causou problema no XE5. Então fiz uma alteração.

Delimitador.Delimiter := '|';
{$IFNDEF VER150}
Delimitador.StrictDelimiter := True;
{$ENDIF}
Usei diretiva de compilação para testar. Se for qualquer outra versão, que não a 7, o Delphi vai compilar essa linha. É preciso testar no 7, pois não tenho ele aqui.
Segue em anexo a unit alterada.

ACBrEPCImportar.pas

ACBrEPCImportar.pas

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Rodrigo, verifica se você está de acordo com o código abaixo na imagem acredito essa ser a solução mais simples possível

 

dq8PsS.png

 

Porém não sei se o Lazarus tem a constante "sLineBreak", mas se não tiver é só utilizar uma própria que já existe nos arquivos da acbr que não lembro o nome do arquivo. (LineBreak = '#10#13');

 

Arquivo em anexo.

ACBrEPCImportar.pas

Editado por Data Lider

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

Se o funcionamento for o mesmo que usando o StrictDelimeter, pode ser. Só não entendo por que não usar as diretivas de compilação do Delphi mesmo, assim como postei anteriormente. O Lazarus não suporta isso?

O código acima é suportado tanto pelo delphi 7, quanto pelo Lazarus ou superior, sem necessidade de diretiva de compilação, o que o torna melhor. E a diretiva de compilação no Delphi 7 ele consideraria os espaços, o que tornaria uma solução para todos menos para o Delphi 7.

Editado por Data Lider

 www.datalider.com.br - [email protected] - Macgayver Armini

 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...

Jadson, este é o problema que estamos discutindo aqui. Foi retirada a instrução "Delimitador.StrictDelimiter := True;" por problemas no Delphi 7, mas nos demais não funciona. Então sugeri fazer a mudança necessária que até agora não foi postada no SVN. Então corrigi eu mesmo, como solução provisória.

 

Basta abrir a função "importar" do ACBrSpedPCImportar.pas e retirar do comentário o comando citado acima.

 

Valeu.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...