-
Total de ítens
2.547 -
Registro em
-
Última visita
-
Days Won
39
Tudo que Isaque Pinheiro postou
-
DT_FIN Diferente do informado
Isaque Pinheiro replied to evertonbuenolima's tópico in ACBrSPEDPisCofins
Exatamente onde ou qual registro ele não ta gravando essa data informada por vc? -
Preciso de uma Atualização do ACBrSPEDPisCofins
Isaque Pinheiro replied to antoniojr's tópico in ACBrSPEDPisCofins
Nesse caso o ultimo parâmetro deve estar True. -
Preciso de uma Atualização do ACBrSPEDPisCofins
Isaque Pinheiro replied to antoniojr's tópico in ACBrSPEDPisCofins
Blz Elton. -
Preciso de uma Atualização do ACBrSPEDPisCofins
Isaque Pinheiro replied to antoniojr's tópico in ACBrSPEDPisCofins
Faça a alteração do CurMask para '#0.00##' Olhe no manual quantas casas decimais é pedido para esses campos e mude, no componente, se pede três mude para 3, se pede 4 muda para quatro, as casas decimais tem que estar conforme é pedido no manual. Abraço -
-
Amigo, Try Except não é, e nunca foi amador, estude sobre ele, e verá que poderá fazer coisas bem bacana para mostrar para seus clientes a mensagem que quiser, mas veja só quem tem que dizer qual a mensagem deve aparecer é VOCÊ, não o delphi e nem o try except, por isso tem o nome "tratamento de exceção" Abraço
-
versão suportada pelo ACBRSped
Isaque Pinheiro replied to Humberto S. Reis Jr's tópico in ACBrSPEDFiscal
pode ir implementando e anexando aqui, assim posso fazer o merge e subir para o svn. -
Muito obrigado Elton, por sua ajuda.
-
versão suportada pelo ACBRSped
Isaque Pinheiro replied to Humberto S. Reis Jr's tópico in ACBrSPEDFiscal
vou dar uma olhada, add a versão na lista de versão é fácil, mas tem vários campos que podem ter tido alteração ou foram adicionados, essa irá aos poucos com a colaboração de todos. -
Infelizmente não tem como, o equipamento não nos permite esse recurso, nesse caso terá que emitir uma NF de devolução das mercadorias.
-
Se o validador reclamou, vc fez a alteração corretamente no componente. Elton, vc pode subir essa alteração para nós? Obrigado.
-
Crie eventos para atender Blocos e Registros tipo: OnBeforeWriteRegistro0600 OnAfterWriteRegistro0600 No evento OnAfterWriteRegistro0600, você pode criar todo o bloco A, e Before ou After de cada registro, você pode escrever outros registros que não existe no SPED. Assim que tiver sucesso me avise que farei o Merge e subirei os eventos para o componente. Exemplo: type TBeforeWriteRegistro0600Event = procedure(Object: TObject) of object; TAfterWriteRegistro0600Event = procedure(Object: TObject) of object; ... procedure TBloco_0.WriteRegistro0600(Reg0001: TRegistro0001) ; var intFor: integer; strLinha : AnsiString; begin // Before // if Assigned( FOnBeforeWriteRegistro0600 ) then FOnBeforeWriteRegistro0600(Self); if Assigned( Reg0001.Registro0600 ) then begin for intFor := 0 to Reg0001.Registro0600.Count - 1 do begin with Reg0001.Registro0600.Items[intFor] do begin strLinha := LFill( '0600' ) + LFill( DT_ALT ) + LFill( COD_CCUS ) + LFill( CCUS ); if Assigned( FOnWriteRegistro0600 ) then FOnWriteRegistro0600( strLinha ); Add( strLinha ); end; Registro0990.QTD_LIN_0 := Registro0990.QTD_LIN_0 + 1; end; /// Variavél para armazenar a quantidade de registro do tipo. FRegistro0600Count := FRegistro0600Count + Reg0001.Registro0600.Count; end; // After // if Assigned( FOnAfterWriteRegistro0600 ) then FOnAfterWriteRegistro0600(Self); end; [/code]
-
Segue a implementação do Evnto no registro 0200, para vc saber como foi feito, agora é implementar no demais registros que precisam. ACBrSpedFiscal.pas TACBrSPEDFiscal = class(TComponent) private ... FOnRegistro0200: TEvent0200; // ... function GetOnRegistro0200: TEvent0200; // procedure SetOnRegistro0200(const Value: TEvent0200); // protected ... public ... property OnRegistro0200: TEvent0200 read GetOnRegistro0200 write SetOnRegistro0200; // end; ... function TACBrSPEDFiscal.GetOnRegistro0200: TEvent0200; begin Result := FOnRegistro0200; end; procedure TACBrSPEDFiscal.SetOnRegistro0200(const Value: TEvent0200); begin FOnRegistro0200 := Value; FBloco_0.OnRegistro0200 := Value; end; [/code] ACBrEFDBloco_0_CLass.pas [code] type TEvent0200 = procedure(var ALinha: AnsiString) of object; // /// TBLOCO_0 - Abertura, Identificação e Referências { TBloco_0 } TBloco_0 = class(TACBrSPED) private FOnRegistro0200: TEvent0200; // ... function GetOnRegistro0200: TEvent0200; // procedure SetOnRegistro0200(const Value: TEvent0200); // public ... property OnRegistro0200: TEvent0200 read GetOnRegistro0200 write SetOnRegistro0200; // ... function TBloco_0.GetOnRegistro0200: TEvent0200; begin Result := FOnRegistro0200; end; procedure TBloco_0.SetOnRegistro0200(const Value: TEvent0200); begin FOnRegistro0200 := Value; end; ... procedure TBloco_0.WriteRegistro0200(Reg0001: TRegistro0001) ; var intFor: integer; strTIPO_ITEM: AnsiString; strLinha: AnsiString; // begin if Assigned( Reg0001.Registro0200 ) then begin strLinha := ''; // for intFor := 0 to Reg0001.Registro0200.Count - 1 do begin with Reg0001.Registro0200.Items[intFor] do begin case TIPO_ITEM of tiMercadoriaRevenda : strTIPO_ITEM := '00'; tiMateriaPrima : strTIPO_ITEM := '01'; tiEmbalagem : strTIPO_ITEM := '02'; tiProdutoProcesso : strTIPO_ITEM := '03'; tiProdutoAcabado : strTIPO_ITEM := '04'; tiSubproduto : strTIPO_ITEM := '05'; tiProdutoIntermediario : strTIPO_ITEM := '06'; tiMaterialConsumo : strTIPO_ITEM := '07'; tiAtivoImobilizado : strTIPO_ITEM := '08'; tiServicos : strTIPO_ITEM := '09'; tiOutrosInsumos : strTIPO_ITEM := '10'; tiOutras : strTIPO_ITEM := '99'; end; if COD_GEN EmptyStr then begin COD_GEN := funStrZero(COD_GEN, 2); Check(funChecaGENERO(COD_GEN), '(0-0200) O código do gênero "%s" digitado é inválido! ' + 'Produto %s %s', [COD_GEN, COD_BARRA, DESCR_ITEM]); end; // strLinha := strLinha + // LFill('0200') + LFill( COD_ITEM ) + LFill( DESCR_ITEM ) + LFill( COD_BARRA ) + LFill( COD_ANT_ITEM ) + LFill( UNID_INV ) + LFill( strTIPO_ITEM ) + LFill( COD_NCM ) + LFill( EX_IPI ) + LFill( COD_GEN, 2 ) + LFill( COD_LST ) + LFill( ALIQ_ICMS,0,2 ) ; if Assigned(FOnRegistro0200) then // FOnRegistro0200(strLinha); // Add( strLinha ); // end; /// Registros FILHOS WriteRegistro0205( Reg0001.Registro0200.Items[intFor] ) ; WriteRegistro0206( Reg0001.Registro0200.Items[intFor] ) ; WriteRegistro0220( Reg0001.Registro0200.Items[intFor] ); Registro0990.QTD_LIN_0 := Registro0990.QTD_LIN_0 + 1; end; /// Variavél para armazenar a quantidade de registro do tipo. FRegistro0200Count := FRegistro0200Count + Reg0001.Registro0200.Count; end; end; Agora aqui, dentro desse evento você faz o que quiser com essa variável antes dela ser escrita no arquivo TXT. if Assigned(FOnRegistro0200) then FOnRegistro0200(strLinha); [/code] Obs: Você precisará do código do produto para encontrar o produto no seu DB e implementar o restante das informações, então ao receber o parâmetro no evento, veja a posição que se encontra o código e todas as informações que você precisar para localizar o registro no seu DB e implementar a VAR como as informações dele. Faça uns testes, veja se funciona e nos depois nos relate. Abs ACBrSPEDFiscal.zip
-
Com os eventos, tb da para gerar os dois, para isso basta fazer a checagem que vc fez dentro do componente, fazer dentro do evento. Exemplo: procedure onRegistro0200(var strLinhaArquivo) begin if LayoutContmatic then // LayoutContmatic, deve ser uma VAR, definida por vc dentro do seu código, ai quando chega no evento ele verifica o status dessa var, para saber qual leiaute, ve escolheu. begin strLinhaArquivo := strLinhaArquivo + LFill( COD_GRUPO ) + LFill( DESC_GRUPO ) + LFill( COD_SEFAZ ) + LFill( CSOSN ) + LFill( CST_ICMS ) + LFill( PER_RED_BC_ICMS , 6 , 2 ) + LFill( BC_ICMS_ST , 6 , 2 ) + LFill( CST_IPI_ENTRADA ) + LFill( CST_IPI_SAIDA ) + LFill( ALIQ_IPI , 6 , 2 ) + LFill( CST_PIS_ENTRADA ) + LFill( CST_PIS_SAIDA ) + LFill( NAT_REC_PIS ) + LFill( ALIQ_PIS , 6 , 2 ) + LFill( CST_COFINS_ENTRADA ) + LFill( CST_COFINS_SAIDA) + LFill( NAT_REC_COFINS ) + LFill( ALIQ_COFINS , 6 , 2 ) + LFill( ALIQ_ISS , 6 , 2 ) + LFill( CC ) + LFill( OBSERVACAO ); end; end; [/code] Caso dentro do seu código não atenda a essa var "LayoutContmatic", a var strLinhaArquivo retorna do jeito que ela veio de dentro do ACBrSPED, com isso atende aos dois leiautes.
-
Ai nesse caso complica, pois se tiver que somar os registros desse Bloco A no Bloco 9 ? Ai tem que analisar melhor esse caso como deve ser feito: Se deve somar no Bloco 9 Se deve sair na ordem de blocos São várias situações, a serem analisadas, e a solução seria eventos.
-
wrgoncalves2008 Não consegui visualizar esta propriedade neste componente ! *** teria como me passar , como vc faz para localizar esta propriedade ? Obrigado pelas informações. Essa propriedade só exite no fonte que ele anexou aqui nos post, não exite no fonte do SVN.
-
Desculpe, mas discordo de você, se tiver os eventos, você pode substituir o que o ACBrSPED gera, valendo assim o leiaute que você escreveu, e isso não te daria manutenção alguma, pois o código seria seu, e estaria dentro do evento e o ACBrSPED só iria la se você usasse o evento, esses eventos sim poderiam fazer parte interna do ACBrSPED, assim eles estariam la para quem quisesse usar sempre. Dai seria 1o O ACBrSPED iria vê se você esta usando o evento do registro assim: if Assigned(FOnRegistro???) then FOnRegistro???(strLinhaArquivo); 2o No evento, você poderá implementar essa VAR recebida como parâmetro, ou até mesmo limpa-la e recria-la assim: strLinhaArquivo := strLinhaArquivo + "Implementação"; strLinhaArquivo := "Novo conteúdo"; Implemente os evento nos registros que você precisa, depois anexe aqui que eu subo as implementações somente desses eventos para o SVN,
-
Esse sistema G5, TODOS os contadores usam o mesmo? Esse sistema é livre? É do governo? Olhei o site do G5, ele não é livre é um sistema particular, então o componente ACBr não poderá ter embutido nativamente nele, esse tipo de implementação, pois existem no mercado vários sistemas concorrentes do G5, e não tem como o ACBr, atender a todos o leiautes, nesse caso vocês terão que fazer essas implementações só na versões de vocês, como já estão fazendo. Uma solução que vejo, é criar um evento para cada registro, passando como parâmetro "var strLinhaArquivo", e no evento fazer o restante da implementação. Dessa forma atendemos o leiaute padrão do SPED, e no evento cada um implementa as informações necessárias para o leiaute do sistema fiscal utilizado. Abs
-
Esse sistema G5, TODOS os contadores usam o mesmo? Esse sistema é livre? É do governo?
-
C170 valor nulo nos campos 26, 27, 32 e 33
Isaque Pinheiro replied to EMBarbosa's tópico in ACBrSPEDPisCofins
O componente atualmente não permite isso. Apenas atualizando o parâmetro Nulo da função LFill resolveria o problema. Mas será que satisfaria os outros casos desse registro. Será que não daria conflito em nenhum outro caso onde fosse necessário informar |0| ou |0,00| para algum desses campos? Sinceramente não sei, eu vou deixar ZERO, se o PVA reclamar na hora de validar eu mudo, senão reclamar deixo zero mesmo. -
Tente mudar o tipo do retorno para AnsiString assim: function TACBrTXTClass.DFill(Value: Double; Decimal: Integer = 2; Nulo: Boolean = false): AnsiString; ... function TACBrTXTClass.DFill(Value: Double; Decimal: Integer = 2; Nulo: Boolean = false): AnsiString; begin ... end; [/code] E nos de um retorno se funcionou ou não.
-
Olá, é oficial sim veja no link http://www.spedbrasil.net/forum/topics/efd-pis-cofins-postergacao-e-outras-novidades-in-1218-11
-
A isso me referi como bug. Até então o componente não deixava esse campo ser "anulado". Nesse caso terá que ser criado um tipo = ' ', e ativar o parâmetro "NULO", desse campo "NAT_BC_CRED" na unit ACBrEPCBloco_A_Class.pas
-
Juliana, observe o que no guia prático diz: Texto Copiado do guia prático: Desta forma, não precisam ser informados na EFD-PIS/Cofins, documentos que não se refiram a operações geradoras de receitas ou de créditos de PIS/Pasep e de Cofins.As informações deverão ser prestadas sob o enfoque da pessoa jurídica que procede a escrituração. Neste sentido, deve a pessoa jurídica atentar que pode a escrituração conter registros de documentos fiscais com informações diferentes das constantes no próprio documento fiscal, como por exemplo, no caso da escrituração de itens de notas fiscais eletrônicas (NF-e, código 55) referentes a aquisições de bens para revenda ou de insumos, a serem informadas no registro C170 (visão documental) ou nos registros C191/C195 (visão consolidada), em que o conteúdo dos campos de CFOP, CST-PIS e CST-Cofins a serem informados na escrituração não devem ser os constantes no documento fiscal (enfoque do emitente) e sim, os códigos que representem a natureza fiscal da operação para a pessoa jurídica adquirente, titular da escrituração. Obs: Deve-se atentar para a premissa de que a informação deve ser prestada pelo enfoque do informante da operação, ou seja, nas operações de entradas de mercadorias os códigos informados devem ser os definidos pelo próprio informante, e não aqueles onstantes do documento fiscal de aquisição. Abraço
-
Referente os campos "imposto"_quant e aliq_"imposto"_quant, no Guia Prático diz "Tipo = "N", Tam = "-", Dec = "2" ou "3", Obrig = "N", mas não vi onde diz que deve sair em branco, só diz obrigatório ou não, procure com o contador qual o trecho que diz que deve ser em branco, e não pode ser "0,00" Ficamos no aguardo.