-
Total de ítens
89 -
Registro em
-
Última visita
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Data Lider postou
-
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.
-
Prezado, ACBrSpedUtils esse arquivo em nenhum momento é mencionado nas uses do projeto de importação, lembrando que o projeto de importação está para ser adicionado ainda na acbr, claro que isso não impede você de utilizar, tem como você ser mais específico quando a mensagem de erro ? Acabei de fazer uma pesquisa minuciosa aqui na minha máquina, esse arquivo não existe na minha pasta de códigos fontes, como também não existe na pasta do projeto ACBr.
-
Não, somente isso mesmo.
-
Na verdade, não tem, eu criei uma aplicação de teste, que gerava apenas o bloco F525, ai todos os campos strings eu coloquei mais de 200 caracteres, ai como estava com o manual aberto, acabei inserindo como no manual. Mas por exemplo, o arquivo ACBrEPCBloco_C_Class.pas na linha 868 referente ao procedimento WRITE do registro C010 no campo cnpj consta com o mesmo 14 de tamanho. Aproveitei a deixa e acertei. .
-
Sim, eu verifiquei e realmente as conversões dos tipos não foram enviadas, vou tentar explicar os motivos. Algumas funções que existem ACBrEPCBlocos fazem a conversão do tipo "TACBrX" para string, porém não existe a função inversa, que converte string para "TACBrX". Algumas funções são tratadas como índice durante a conversão, porém quando é realizada a leitura diretamente do arquivo texto, e tento converter para a classe "TACBrX" a informação vem com um índice incorreto. Agora, como exemplo para o item 2º temos o seguinte código: var Tipo: TACBrIndNatPJ; Tipo2: TACBrIndNatPJ; const IndNat = '04'; //Sociedade Cooperativa Participante SCP begin Tipo := StrToIndNatPJ(IndNat); //Retorno: Geral participante de SCP (03) Tipo2 := StrToIndNatPJImporta(IndNat); // Retorno: Sociedade Cooperativa Participante SCP (04) end; A função StrToIndNatPJImporta é uma do conjunto novo de funções de conversões que foram criadas, nem todas funções estão preparadas para trazer a informação do arquivo texto. Set de funções novas para as situações acima: function StrToIndCodIncidencia(const AValue: string): TACBrIndCodIncidencia; function StrToIndMov(const AValue: string): TACBrIndMov; function StrToNaturezaConta(const AValue: string): TACBrNaturezaConta; function StrToIndCTA(const AValue: string): TACBrIndCTA; function StrToOrigemProcesso(const AValue: string): TACBrOrigemProcesso; function StrToLocalExecServico(const AValue: string): TACBrLocalExecServico; function StrToIndEscrituracao(const AValue: string): TACBrIndEscrituracao; function StrToEmitente(const AValue: string): TACBrEmitente; function StrToDoctoImporta(const AValue: string): TACBrDoctoImporta; function StrToApuracaoIPI(const AValue: string): TACBrApuracaoIPI; function StrToNaturezaFrtContratado(const AValue: string): TACBrNaturezaFrtContratado; function StrToIndRec(const AValue: string): TACBrIndRec; function StrToIndTpOperacaoReceita(const AValue: string): TACBrIndTpOperacaoReceita; function StrToInd_Rec(const AValue: string):TACBrInd_Rec; function StrToIndNatRetFonte(const AValue: string):TACBrIndNatRetFonte; function StrToIndNatRec(const AValue: string):TACBrIndNatRec; function StrToIndOrigemDiversas(const AValue: string):TACBrIndOrigemDiversas; function StrToIndNatDeducao(const AValue: string):TACBrIndNatDeducao; function StrToCodCred(const AValue: string): TACBrCodCred; function StrToIndAJ(const AValue: string):TACBrIndAJ; function StrToCodAj(const AValue: string): TACBrCodAj; function StrToCodCont(const AValue: string): TACBrCodCont; function StrToIndTipCoop(const AValue: string): TACBrIndTipCoop; function StrToNatCredDesc(const AValue: string): TACBrNatCredDesc; function StrToIndCredOri(const AValue: string):TACBrIndCredOri; function StrToIndDescCred(const AValue: string):TACBrIndDescCred; function StrToIndNatPJImporta(const AValue: string): TACBrIndNatPJ; Talvez seja mais interessante remover elas desse arquivo, e adicionar em um novo arquivo no componente de importação, ou não, a decisão é de vocês.
-
Acho que faltou somente a delimitação do tamanho dos campos, caso contrário irá dar rejeição pelo validador.
-
A correção foi basicamente alterar o tipo do campo FNUM_DOC no bloco F525. (ACBrPCBloco_F.pas) e o procedimento WriteRegistroF525 no bloco ACBrEPCBloco_F_Class. Mas foi falha minha não mencionar que o arquivo anexado, contem outras alterações (aquelas presentes no componente de importação que vocês irão subir futuramente). Estarei postando diretamente para nós não tenhamos que reverter. procedure TBloco_F.WriteRegistroF525(RegF010: TRegistroF010); var intFor : integer; strIND_REC : AnsiString; begin //(*) Os registros referentes à escrituração do PIS/Pasep e da Cofins das pessoas jurídicas sujeitas ao regime de tributação //com base no lucro presumido, aplicável para os fatos geradores a ocorrer a partir de 01 de janeiro de 2012, serão //disponibilizados pelo Programa Validador e Assinador (PVA) da EFD-PIS/Cofins, versão 1.05, com previsão de //disponibilização pela Receita Federal em janeiro/2012. if DT_INI >= EncodeDate(2012,01,01) then begin if Assigned(RegF010.RegistroF525) then begin for intFor := 0 to RegF010.RegistroF525.Count - 1 do begin with RegF010.RegistroF525.Items[intFor] do begin case IND_REC of crCliente : strIND_REC:='01'; crAdministradora : strIND_REC:='02'; crTituloDeCredito : strIND_REC:='03'; crDocumentoFiscal : strIND_REC:='04'; crItemVendido : strIND_REC:='05'; crOutros : strIND_REC:='99'; end; Add( LFill('F525') + LFill( VL_REC,0,2 ) + LFill( strIND_REC ) + LFill( CNPJ_CPF, 14) + LFill( NUM_DOC, 60) + LFill( COD_ITEM, 60) + LFill( VL_REC_DET,0,2 ) + LFill( CstPisToStr(CST_PIS) ) + LFill( CstCofinsToStr(CST_COFINS)) + LFill( INFO_COMPL) + LFill( COD_CTA, 60) ) ; end; /// RegistroF990.QTD_LIN_F := RegistroF990.QTD_LIN_F + 1; end; /// Variavél para armazenar a quantidade de registro do tipo. FRegistroF525Count := FRegistroF525Count + RegF010.RegistroF525.Count; end; end; end; TRegistroF525 = class private FVL_REC : Currency; FIND_REC : TACBrIndicadorDaComposicaoDaReceitaRecebida; FCNPJ_CPF : string; FNUM_DOC : string; FCOD_ITEM : string; FVL_REC_DET : Currency; FCST_PIS : TACBrCstPis; FCST_COFINS : TACBrSituacaoTribCOFINS; FINFO_COMPL : string; FCOD_CTA : string; public property VL_REC : Currency read FVL_REC write FVL_REC ; property IND_REC : TACBrInd_Rec read FIND_REC write FIND_REC ; property CNPJ_CPF : string read FCNPJ_CPF write FCNPJ_CPF ; property NUM_DOC : string read FNUM_DOC write FNUM_DOC ; property COD_ITEM : string read FCOD_ITEM write FCOD_ITEM ; property VL_REC_DET : Currency read FVL_REC_DET write FVL_REC_DET ; property CST_PIS : TACBrCstPis read FCST_PIS write FCST_PIS ; property CST_COFINS : TACBrCstCofins read FCST_COFINS write FCST_COFINS ; property INFO_COMPL : string read FINFO_COMPL write FINFO_COMPL ; property COD_CTA : string read FCOD_CTA write FCOD_CTA ; end;
-
Nós realizamos a correção informada acima, segue os arquivos em anexo. ACBrEPCBloco_F.pas ACBrEPCBloco_F_Class.pas
-
Se precisar de alguma alteração e não dispor de tempo, estamos a disposição.
-
Componente Finalizado.
-
Prezados, gostaria de pedir a ajuda de vocês, poderiam encaminhar algum arquivo do SPED Contribuições que utilizem blocos menos usados, ou de situações muito específicas, o arquivo será utilizado para o teste de consistência de alguns registros. Quando as informações dos clientes, acredito que apenas o bloco de identificação da empresa (Reg0100) e contador (Reg0140) e todos os registros "?010" que identifica o CNPJ da empresa seja necessário alterar, caso isso seja um problema para quem tiver o arquivo. O teste é realizado da seguinte forma, importamos o arquivo, depois pedimos para o componente da ACBr gerar novamente o arquivo, então com o aplicativo "TortoiseMerge.exe" (Esse aplicativo faz parte da instalação do TortoiseSVN) verificamos se houve diferença significativa, assim identificando qualquer erro no código de importação.
-
Adicionado anexo com os blocos C8?? e F509, F519, F559, F569 todos sem o procedimento Write.
-
Prezados, estamos finalizando o código para importação do arquivo do SPED Contribuições para o componente da ACBr, na medida do possível estamos tentando seguir o padrão, mas é claro que algumas adaptações sejam necessárias, além dos testes em outras versões e no Lazarus, estamos abrindo o post para estar enviando futuramente e para informar e tirar algumas dúvidas nossas, além de evitar que alguém inicie esse trabalho agora já que estamos realizado. o arquivo ACBrEPCBloco_C e *_Class receberam os registros 800,810,820,830,860,870,880,890 para que a importação já fique atualizada com o novo padrão (o comando Write não foi elaborado). o arquivo ACBrEPCBlocos.pas recebeu até agora 13 novas funções de conversão de string para outro formato. O motivo do componente é a integração com outros filiais utilizando o componente do SPED PIS COFINS da ACBr, e a possibilidade de somar blocos M etc... sem muito esforço. Aproveitando o tópico gostaria de verificar se esses registros não são necessários pois não encontrei no bloco F da ACBr: F559, F519, F509, F569. Obrigado. ToDoList: Implementar base da biblioteca Implementar rotina de leitura do arquivo Implementar Bloco 0 Implementar Bloco A Adicionar Blocos C8XX na ACBr (sem write) Implementar Bloco C Implementar Bloco D Adicionar Blocos FXXX9 na ACBr (sem write) Implementar Bloco F Implementar Bloco I Implementar Bloco M Implementar Bloco P Implementar Bloco 1 Adicionar evento para leitura das colunas Adicionar evento para leitura das linhas Gerar estrutura do componente Transferir código para Lazarus e testar compatibilidade. Updates 24-02-2015 - Anexado ao tópico ACBrSPEDPisCofins_24-02-2015_1.Zz - Neste arquivo consta os novos blocos adicionados no C e F como mencionado anteriormente que estavam faltando, porém o procedimento Write não foi criado. 24-02-2015 - Adicionado tarefas pendentes para finalizar componente. 24-02-2015 - Finalizado Bloco M 24-02-2015 - Finalizado Blocos P e 1 24-02-2015 - [Corrigido] Registro 0000 o campo IND_NAT_PJ não deve ser um campo obrigatório, nos arquivos de teste foi identificado essa diferença depois de importado. 24-02-2015 - [Corrigido] Registro 0100 o campo FAX quando preenchido em branco, apresenta valor "0000000000" em vez de "Vazio". 24-02-2015 - [Corrigido] Campo ALIQ_ICMS no Registro 0200 deve ser do tipo "Variant", segundo o manual o campo não deve ser preenchido quando o cadastro do produto for por gênero (ativo imobilizado, por exemplo). 24-02-2015 - Adicionado arquivo com todas as implementações referente ao componente já existente ACBrSpedPisCofins, pronto para analisar e subir (ACBrSPEDPisCofins_24-02-2015_2.7z) 24-02-2015 21:55 - Adicionado evento para interceptar troca de linhas e o processamento de cada coluna, podendo esses valores serem interceptados e alterados antes de serem adicionados no componente ACBrSPEDPisCofins. 25-02-2015 - Componente finalizado (ACBRSpedPCImportar.7z). Arquivo disponibilizado, porém é necessário o arquivo _2 anteriormente enviado. ATENÇÃO ! Não baixe mais esses arquivos, o componente já foi finalizado, subido no repositório do projeto ACBr, além de já ter sofrido alteração e correções como mencionado nas respostas abaixo. ACBrSPEDPisCofins_24-02-2015_2.7z ACBRSpedPCImportar.7z