Ir para conteúdo
  • Cadastre-se

wrgoncalves2008

Membros
  • Total de ítens

    121
  • Registro em

  • Última visita

  • Days Won

    1

Tudo que wrgoncalves2008 postou

  1. Bom vou colocar aqui um exemplo de como é o funcionamento, vou utilizar o registro C170 como base, pois os demais registros são a mesma coisa, somente vai mudar para os blocos A e F, vou mostrar como implementei no meu sistema, nada impede que desenvolvam de outra forma. Primeiro: Crio um TStringlist que ira armazenar as informações que o G5 pede. var FrmSPEDFiscal: TFrmSPEDFiscal; vDadosProdutosG5 : TStringList; //Aqui vou armazenar os dados dos produtos para o G5 Segundo: Gero o registro C170 pelo componente normalmente, e depois do ultimo campos adiciono as informações do G5 no TStringlist. with RegistroC170New do begin NUM_ITEM := FormatFloat('000', IItens); COD_ITEM := FormatFloat('000000', StrToInt(NUM_ITEM)); DESCR_COMPL := FormatFloat('11000000', INotas) + ' -> ITEM '+ COD_ITEM; QTD := 1; UNID := 'UN'; //demais campos do layout original //aqui verifico se estou gerando para o G5, está será a unica alteração na rotina de geração do registroC170 if ckbContmatic.Checked then begin vDadosProdutosG5.Add( {Aqui dentro vão os campos adicionados pela contmatic...... }) end; end; //Depois de informadas todas as informações necessárias e registros necessários mando gravar os dados do bloco C ACBrSPEDFiscal1.WriteBloco_C(True); // True, fecha o Bloco Durante a execução do comando anterior ( ACBrSPEDFiscal1.WriteBloco_C(True); ) o evento OnWriteRegistroC170 do componente será disparado para cada produto que for gravado no arquivo, nesse evento coloquei o seguinte código: procedure TFrmSPEDFiscal.ACBrSPEDFiscal1WriteRegistroC170( var ALinha: String); begin {Verifico pois independente se estou gerando para G5 ou não o evento é disparado} if ckbContmatic.Checked then begin { A variavel a linha já virá com os dados do layout original, apenas adiciono os dados da linha 0 do StringList } ALinha := ALinha + vDadosProdutosG5.Strings[0]; {Deleto a informação da linha 0 pois ela já foi utilizada} vDadosProdutosG5.Delete(0); end; end; Bom a implementaçao para os demais registro segue a mesma regra. Bom agora para gerar o bloco Bloco A, você poderá utilizar dois eventos dos componentes o AfterWriteRegistro0990 ou o BeforeWriteRegistroC001, mas o segundo ainda não foi implementado, de momento só resta a primeira opção. O evento AfterWriteRegistro0990 é disparado logo após o Registro0990 ser adicionado no arquivo, e através desse evento você poderá adicionar informações entre o Registro0990 e o RegistroC001, e é ai que entra o o Bloco A. Aqui deixei da seguinte forma: procedure TfrmPisCofins.ACBrSPEDFiscalEventsBloco_0AfterWriteRegistro0990( var ALinha: AnsiString); begin if ckbContmatic.Checked then begin MensagemBarra := 'Gerando Bloco A...'; vDados := TStringList.Create; vDados.Clear; vDados.Clear; vDados.Add('|A001|0|'); vDados.Add('|A100|0|'); vDados.Add('|A100|...|'); vDados.Add('|A170|...|'); //........ vDados.Add('|A990|...|'); ALinha := vDados.Text; //O Código abaixo não é obrigatório, apenas coloquei para ficar mais completo, mas G5 não verifica estas informações ACBrSPEDFiscal.Bloco_9.Registro9999.QTD_LIN := ACBrSPEDFiscal.Bloco_9.Registro9999.QTD_LIN + vDados.Count; vDados.Free; With ACBrSPEDFiscal.Bloco_9.Registro9900 do begin With New do begin REG_BLC := 'A001'; QTD_REG_BLC := 1; end; With New do begin REG_BLC := 'A990'; QTD_REG_BLC := 1; end; end; end; end; Lógico que pode ser implementado de outra forma, fiz assim por opção própria. Ali dentro tem um TStringlist que pode ser alimentado fora dessa rotina do jeito que achar melhor. Para a implementação do Bloco F vai seguir a mesma coisa não muda nada e de momento deverá ser feita no evento AfterWriteRegistroE990. Vou pegar o demo do componente e implementar a alguns eventos para verem como ficará, mas devido ai tempo creio que só conseguirei fazer no final de semana. As verificações que faço no código ( if ckbContmatic.Checked then ), é um checkbox que tenho na tela para identificar se estou gerando no layout original ou no layout do G5, faço as verificações no eventos porque ele estando implementado sempre será disparado. Bom pessoal é isso. Desculpe por não ter o demo ainda e os erros de digitação...rsrs... Qualquer dúvida estarei a disposição. At.
  2. Pessoal que acompanha o tópico, as alterações ja estão disponiveis no svn, existem algumas pequenas alterações na forma de implementação dos eventos, mas é pouca coisa, qualquer duvida estarei a disposição!!!!!!!!!!! Até....
  3. Fiz apenas minha a parte! Agradeço a sua paciência e empenho em nos ajudar nessa empreitada, para que pudéssemos adicionar essas rotinas ao componente e facilitar a vida muitos programadores por ai....rsrs...inclusive a minha. Vou continuar com a implementação dos eventos para os demais registros na medida do possível, de momento já resolvemos o problema, mas futuramente pode haver mais alterações e assim ja estaremos previnidos. Mais uma vez obrigado pela atenção e paciência. Até. Abraço.
  4. Olá Isaque, Bom Dia! Acabei de verificar as alterações e ficaram perfeitas, tive somente que reajustar umas coisas no meu programa devido a forma como ficaram os eventos. Fiz alguns ajustes no componente pois faltaram dois eventos que eu preciso, AfterWriteRegistro0990 e o AfterWriteRegistroE990, que eu utilizo para gerar o Bloco A e o Bloco F, já criei o trio de eventos para manter o padrão e adicionei uma nova unit a "ACBrEFDBloco_E_Events.pas". Estou anexando aqui as alterações que fiz. Obrigado. Até. ACBrSPEDFiscal.rar
  5. O que o pessoal utiliza por aqui, ele importa também o layout da receita, só que é apenas o SPED FISCAL, e os contadores tem que add as info de pis e cofins na mão, ai tiveram a "brilhante idéia" de alterar o layout do SPED FISCAL para incluir informações do pis cofins nele, ai ele fica completo tendo informações de ICMS, IPI, PIS e COFINS Esse programa que você citou importa o arquivo do SPED FISCAL e SPED PIS COFINS ou somente SPED FISCAL?? Gera o arquivo do SPED?
  6. Isaque estou anexando as alterações. Fico no aguardo da versão atualizado do componente, vou dar uma olhada no bloco 0 pra confirmar e já vou preparando os demais eventos, na medida do possível. Obrigado. Até. ACBrSPEDFiscal.rar
  7. Ah sim entendi, e acabei de descobrir uma coisa, na realidade eu nem tinha percebido o método "SaveFileTXT", aqui eu gero o arquivo utilizando os métodos WriteBloco? e no final eu chamo eu chamo o SaveFileTXT, agora estive olhando e percebi que eu gero o arquivo duas vezes...rsrs.... , fazer as coisas meio correndo é complicado...hein...rs Bom então pelo jeito vai ter ser pelos Before e After mesmo, o jeito é começar a trabalhar então, pelo que vi você já implementou alguns eventos no bloco 0. Vou terminar algumas coisas aqui no sistema que estou mexendo e dar andamento as demais alterações. Teria como você já liberar no SVN as outras as alterações para os bloco e registros que já fiz? É que la já tem os eventos onWriteRegistro e Alguns After/Before de todos os que precisamos no momento assim já facilitaria aqui, pois eu atualizo o meu componente, meu sistema continua funcionando atualizado, e ai eu trabalho em cima de uma versão atualizada, ai conforme eu for ajustando te passo para ir adicionando ao projeto e também quem está utilizando o componente alterado já poderia atualizar o componente, pois tirando estes eventos que foram criados já tem vários ajustes no componente, pelo que percebi aqui.. Até.
  8. Realmente Isaque, é que eu estava pensando em uma forma de simplificar toda a manutenção. O evento OnWriteRegistro, esse não tenho o que falar, ele está perfeito!! Meu pensamento é referente a os outros eventos, porque criar o evento OnBeforeWrite e o OnAfterWrite é fácil, vamos abrir novas possibilidades com esses eventos, só acho que não ficaria legal criar apenas para o registros e blocos que a Contmatic alterou, e criar esses eventos para todos os registros e blocos do arquivos vai ser um pouco trabalhoso. Por isso o que eu queria sugerir no post anterior era uma forma para que conseguissemos realizar estas alterações no layout, sem alterar muita coisa dentro do componenente, mas sem não tiver outra possibilidade vamos ao Before e After. Analisando o código que você colocou abaixo, que você enviou: Percebi que eu poderia fazer o seguinte (Não testei apenas imaginei): ACBrSpedFiscal.WriteBloco_0; ACBrSpedFiscal.Bloco_0.Add('|A100|0|'); ACBrSpedFiscal.Bloco_0.Add('|A100|...|'); ACBrSpedFiscal.Bloco_0.Add('|A170|...|'); ACBrSpedFiscal.Bloco_0.Add('|A990|...|'); Se isso funcionar, e acredito que funcione, eu já não precisaria utilizar o evento Before e After, o que você acha? Lembrando que são apenas idéias para diminuir a quantidade de alterações dentro do componentes, mas se não tiver como fugir, vamos colocar a mão na massa. Att.
  9. Olá Isaque Baixei as alterações, mas ainda não cheguei a ver e testá-las. Hoje me veio um idéia e gostaria de saber o que você acha, acho que ficaria mais simples de se implementar, e eu vou ficaria com bastante raiva de só ter pensado nisso agora. Bom no nosso caso aqui, temos registro com campos adicionados e Blocos criados, para os registros que precisamos add informaçoes teriamos um eventos OnWriteRegistroXXXX(...), como ja foi feito e para as informações que serão adicionadas no arquivos como o Bloco A por exemplo teríamos uma rotina chamado WriteLinhaArquivo( ... ), a função dessa rotina seria apenas adicionar uma linha arquivo independente do bloco, ai para adicionar o Bloco A fariamos o seguinte: ACBrSpedFiscal.WriteLinhaArquivo('|A100|0|'); ACBrSpedFiscal.WriteLinhaArquivo('|A100|...|'); ACBrSpedFiscal.WriteLinhaArquivo('|A170|...|'); ACBrSpedFiscal.WriteLinhaArquivo('|A990|...|'); Pelo menos até onde pensei aqui, essa rotina atende as nossas necessidades e até mais, gostaria de saber a sua opinião e a do pessoal sobre isso, esta seria uma forma que resolve nosso problema e fica mais simples de se implementar. Até.
  10. Olá Pessoal estou de volta, tirei umas férias afinal ninguém é de ferro e precisava de um tempo longe do SPED....rsrs, Isaque gostaria de saber como está o andamento das alterações no componente? Baixei o ACBr hoje pelo svn, e percebi que já tem algumas alterações na unit bloco 0, estas já são definitivas? Obrigado. Até.
  11. Michel eu fiz da seguinte forma criei a function abaixo e não tive problemas, na geração do arquivo apenas quando a pessoa informa o CST errado. function TfrmPisCofins.DefinirCST_PIS( cstPIS : integer ) : TACBrSituacaoTribPIS; begin Case cstPIS of 01: Result := stpisValorAliquotaNormal; 02: Result := stpisValorAliquotaDiferenciada; 03: Result := stpisQtdeAliquotaUnidade; 04: Result := stpisMonofaticaAliquotaZero; 05: Result := stpisValorAliquotaPorST; 06: Result := stpisAliquotaZero; 07: Result := stpisIsentaContribuicao; 08: Result := stpisSemIncidenciaContribuicao; 09: Result := stpisSuspensaoContribuicao; 49: Result := stpisOutrasOperacoesSaida; 50: Result := stpisOperCredExcRecTribMercInt; 51: Result := stpisOperCredExcRecNaoTribMercInt; 52: Result := stpisOperCredExcRecExportacao; 53: Result := stpisOperCredRecTribNaoTribMercInt; 54: Result := stpisOperCredRecTribMercIntEExportacao; 55: Result := stpisOperCredRecNaoTribMercIntEExportacao; 56: Result := stpisOperCredRecTribENaoTribMercIntEExportacao; 60: Result := stpisCredPresAquiExcRecTribMercInt; 61: Result := stpisCredPresAquiExcRecNaoTribMercInt; 62: Result := stpisCredPresAquiExcExcRecExportacao; 63: Result := stpisCredPresAquiRecTribNaoTribMercInt; 64: Result := stpisCredPresAquiRecTribMercIntEExportacao; 65: Result := stpisCredPresAquiRecNaoTribMercIntEExportacao; 66: Result := stpisCredPresAquiRecTribENaoTribMercIntEExportacao; 67: Result := stpisOutrasOperacoes_CredPresumido; 70: Result := stpisOperAquiSemDirCredito; 71: Result := stpisOperAquiComIsensao; 72: Result := stpisOperAquiComSuspensao; 73: Result := stpisOperAquiAliquotaZero; 74: Result := stpisOperAqui_SemIncidenciaContribuicao; 75: Result := stpisOperAquiPorST; 98: Result := stpisOutrasOperacoesEntrada; else Result := stpisOutrasOperacoes; end; end; Não sei se resolve o seu problema, pelo menos aqui pra mim atendeu perfeitamente. A verificação se o CST é de saida ou entrada eu já faço no sistema na entrada/saída por isso na geração apenas passo o CST que foi informado. Att.
  12. Ok Isaque, ficarei no aguardo, ou melhor ficaremos no aguardo, pois pelo que vi tem bastante gente esperando está alteração..rs. Agradeço mais uma vez pela atenção e ajuda que tem nos dado para resolvermos esse nosso probleminha... . Obrigado. Até.
  13. Isaque estive analisando aqui os fontes que você disponibilizou e percebi o seguinte, me corrija se estiver errado. Você implementou eventos After e Before para a minhas alterações, onde o evento OnAfterWriteRegistro0200 vai substituir o meu eventro OnWriteRegistro0200 assim como nas demais alterações, porém o eventro OnBeforeWriteRegistro0200, na minha opinião não seria utilizado , pelo menos até o momento, pois para este evento ocorrer antes de adicionar o linha do 0200 no arquivo isso seria para, por exemplo, adicionar um registro XXXX antes do 0200 ou complementar o registro XXXX anterior ao 0200, o que imagino eu também poderia ser feito em um eventro OnAfterWriteRegistro????. Realmente eu havia pensado nesses eventos mas devido ao fato de pensar na não utilização dos mesmos fiz a alteração conforme você já verificou. Pode ser feito conforme você fez no arquivo irá funciona do mesmo jeito, ficaria até mais completo afinal em outros componentes onde tem um After sempre tem um Before, mas pra mim é indiferente pois a minha preocupação é com o arquivo final, a gente conseguindo adicionar as informações complementares ao arquivo, está excelente. Posso implementar os eventos sem problema, atendendo as exigências para que seja adicionado ao projeto principal. Referente a minha ultima alteração eu removi a rotina WriteBloco_A e WriteBloco_F que eu havia criado, você chegou a ver pode ser da maneira como ficou ou precisaria de mais alguma alteração. Até.
  14. Isaque, dei uma matada no tempo aqui e fiz alguns ajustes aqui no componente. Poderia verificar, por favor. Até. ACBrSPEDFiscal.rar
  15. Ok, Isaque vou analisar aqui e ver o que consigo fazer também, infelizmente meu conhecimento sobre criação de componente é meio limitado, então teve alguns casos que não achei outra opção, mas vou analisar aqui. Obrigado pela a atenção e pelas dicas. Até.
  16. Luciano eu também já verifiquei e percebi que tem varias alterações no componente original, até umas delas que percebi foi a questão das alíquotas de pis e cofins antes estavam saindo somente com duas casas decimais, mas tirando isso ja tenho dois cliente que entregaram o arquivos e amanhã querendo ou não tenho mais dois que vão entregar, e os unicos problemas que estamos tendo é referente aos dados mesmo, pois colocaram CSTs errados, alíquotas erradas ai já viu né, mas de resto pra gente aqui está funcionando perfeitamente. Até.
  17. Como eu disse no post anterior " apenas no registro A170 do pis/cofins que está como duas casas decimais.", não ficou muito claro, mas era pra dizer que no registro A170 esta especificado que as alíquotas deveriam ser com duas casas decimais.
  18. Isaque No manual SPED Fiscal e do PIS/COFINS consta como 4 casas decimais, apenas no registro A170 do pis/cofins que está como duas casas decimais. Até.
  19. Pessoal tive um problema aqui e creio que vocês também dependendo da situação. Tenho um cliente que utiliza alíquotas diferenciadas do PIS/COFINS que utilizam 3 casas decimais, mas o componente formata as aliquotas para duas casas, isso não gerou erro na validação, porém o valor da aliquota saiu arredondado. Esse problema identifiquei tanto no componente ACBrPisCofins e o ACBrSpedFiscal, vou verificar meus ajustes aqui e se possível estarei disponibilizando aqui. Até.
  20. Olá Isaque, Você já chegou a analisar as alterações? Se precisa mexer em algo mais, ou já daria pra incorporar ao projeto. Obrigado
  21. Olá Michel, vamos as suas respostas É isso mesmo você deverá substituir a pasta do ACBrSpedFiscal por esta que está anexada no meu ultimo post, e toda vez que for atualizar o componente deverá fazer esta substituição. Eu fiz as alterações seguindo as orientações do Isaque Pinheiro, para que estas possam ser incluídas no projeto oficial e não precisemos ficar fazer essa substituição todas vez que atualizar, estou aguardando uma resposta do pessoal do ACBr. Você não precisa configurar nada apenas seguir as instruções conforme coloquei em um post anterior. Bom eu já estou utilizando a geração do Sped para o G5 já tenho três clientes que já fizeram a entrega do arquivo. A contmatic criou os blocos A, F e 1 e alterou os blocos C e D, acredito eu que estes blocos sejam importantes para ele, mas em todo o caso eu gero ele completo. Espero ter respondido suas duvidas. At.
  22. Bom pessoal estou anexando aqui aqui novamente o componente, pois havia esquecido de adicionar a quantidade de linhas do Bloco A e F ao total do arquivo. Pelo que percebi o isso nao influencia para o G5, mas para que fique igual aos demais fiz a alterações. At.. ACBrSPEDFiscal.rar
  23. Bom pessoal sei que se tivesse um exemplo seria mais fácil, mas o tempo está escasso e ainda mais com alguns contadores querendo entregar os arquivos...esse primeiro é uma tristeza, porque sempre fica alguns ajustes, mas vamos ao que interessa. Bom vou colocar aqui um exemplo de como é o funcionamento, vou utilizar o registro C170 como base, pois os demais registros são a mesma coisa, somente vai mudar para os blocos A e F, vou mostrar como implementei no meu sistema, nada impede que desenvolvam de outra forma. Primeiro: Crio um TStringlist que ira armazenar as informações que o G5 pede. var FrmSPEDFiscal: TFrmSPEDFiscal; vDadosProdutosG5 : TStringList; //Aqui vou armazenar os dados dos produtos para o G5 implementation segundo: Gero o registro C170 pelo componente normalmente, e depois do ultimo campos adiciono as informações do G5 no TStringlist. with RegistroC170New do begin NUM_ITEM := FormatFloat('000', IItens); COD_ITEM := FormatFloat('000000', StrToInt(NUM_ITEM)); DESCR_COMPL := FormatFloat('11000000', INotas) + ' -> ITEM '+ COD_ITEM; QTD := 1; UNID := 'UN'; //demais campos do layout original //aqui verifico se estou gerando para o G5, está será a unica alteração na rotina de geração do registroC170 if ckbContmatic.Checked then begin vDadosProdutosG5.Add( {Aqui dentro vão os campos adicionados pela contmatic...... }) end; end; Depois de informadas todas as informações necessárias, mando gravar os dados do bloco C ACBrSPEDFiscal1.WriteBloco_C(True); // True, fecha o Bloco Durante a execução do comando anterior o evento OnWriteRegistroC170 do componente será disparado para cada produto que for gravado no arquivo, nesse evento coloquei o seguinte código: procedure TFrmSPEDFiscal.ACBrSPEDFiscal1WriteRegistroC170( var ALinha: String); begin {Verifico pois independente se estou gerando para G5 ou não o evento é disparado} if ckbContmatic.Checked then begin { A variavel a linha já virá com os dados do layout original, apenas adiciono os dados da linha 0 do StringList } ALinha := ALinha + vDadosProdutosG5.Strings[0]; {Deleto a informação da linha 0 pois ela já foi utilizada} vDadosProdutosG5.Delete(0); end; end; Bom a implementaçao para os demais registro segue a mesma regra. Bom agora para o Bloco A, criei um evento chamado OnAfterWriteBloco0, este evento é disparado imediatamente apos a chamada do evento ACBrSPEDFiscal1.WriteBloco_0, ou seja ele irá gravar os dados do bloco 0 no arquivo e chamar o evento. A implementação dele você pode colocar dentro do evento, ou como eu to utilizando aqui antes de chamar o WriteBloco_0 já tenho esse registro montado, mas isso é indiferente, aqui no exemplo vou implementar direto no evento. O evento OnAfterWriteBloco0 tem um parametro o do tipo TStringList, é neste parametro que deverá ser informado todo o conteúdo do bloco apenas a ultimo linha com a quantidade de registros tem o bloco não é necessária, pois ele gera sozinho. procedure TFrmSPEDFiscal.ACBrSPEDFiscal1AfterWriteBloco0( var ADados: TStringList); begin {Verifico pois independente se estou gerando para G5 ou não o evento é disparado} if ckbContmatic.Checked then begin ADados.Clear //no meu caso como não informo nenhum info neste bloco passo ele como sem dados ADados.Add('|A001|1|'); //Pra quem tem informações para este registro informaria assim ADados.Add('|A001|0|'); ADados.Add({aqui vao os registro e informações do bloco}); ADados.Add({aqui vao os registro e informações do bloco}); ADados.Add({aqui vao os registro e informações do bloco}); end; end; Referente ao bloco F é a mesma coisa do bloco A, ele será gerado no evento OnAfterWriteBlocoE que é disparado imediatamente apos a chamado do método ACBrSPEDFiscal1.WriteBloco_E, de resto segue o mesmo procedimento. Bom pessoal é isso. Desculpe por não ter o demo e os erros de digitação...rsrs... Qualquer dúvida estarei a disposição. At.
  24. Olá a Todos! Estou anexando uma nova alteração que fiz no componente conforme as informações que me foram passadas pelo Isaque Pinheiro. Removi os eventos WriteBloco_A( ALinha: TStringList ) e WriteBloco_F( ALinha: TStringList ), e adicionei dois novos eventos chamados OnAfterWriteBloco0(var ADados: TStringList) e OnAfterWriteBlocoE(var ADados: TStringList). Este eventos serão disparados após a chamada dos eventos WriteBloco_C e WriteBloco_E, respectivamente. Eles terão seu funcionamento da mesma forma dos demais eventos criados, onde se deve passar o conteúdo do bloco para o parâmetro ADados do evento. Isaque poderia verificar se ficou de acordo com as exigências para a integração ao componente, por favor, aos demais desculpem a demora para realizar as alterações, mas ando meio sem tempo. Sugestões e opiniões serão bem-vindas. Até. ACBrSPEDFiscal.rar
  25. Entendi Isaque, vou ver o que consigo e faço os ajustes necessários. Obrigado.
×
×
  • 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.