Ir para conteúdo
  • Cadastre-se

Isaque Pinheiro

Membros
  • Total de ítens

    2.547
  • Registro em

  • Última visita

  • Days Won

    39

Tudo que Isaque Pinheiro postou

  1. Exatamente onde ou qual registro ele não ta gravando essa data informada por vc?
  2. Nesse caso o ultimo parâmetro deve estar True.
  3. 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
  4. 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
  5. pode ir implementando e anexando aqui, assim posso fazer o merge e subir para o svn.
  6. Muito obrigado Elton, por sua ajuda.
  7. 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.
  8. 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.
  9. Se o validador reclamou, vc fez a alteração corretamente no componente. Elton, vc pode subir essa alteração para nós? Obrigado.
  10. 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]
  11. 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
  12. 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.
  13. 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.
  14. 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.
  15. 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,
  16. 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
  17. Esse sistema G5, TODOS os contadores usam o mesmo? Esse sistema é livre? É do governo?
  18. 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.
  19. 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.
  20. Olá, é oficial sim veja no link http://www.spedbrasil.net/forum/topics/efd-pis-cofins-postergacao-e-outras-novidades-in-1218-11
  21. 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
  22. 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
  23. 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.
×
×
  • 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.