Ir para conteúdo
  • Cadastre-se

dev botao

ABCrSPED com G5 da contmatic


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

Recommended Posts

Outra coisa que vai complicar é que os registros desse layout da contmatic usam vários campos que não estão definidos no SPED Fiscal.

Exemplo o registro 0200 tem um campo CST_COFINS_ENTRADA e outro CST_COFINS_SAIDA.

Então EMBarbosa, nosso problema até o momento são estes campos que a contmatic adicionou no layout da receita, ai o Isaque deu a idéia de criar os eventos onde estas informações serão adicionadas ao arquivo, o arquivo gerado obviamente não será validado pelo PVA.

Eu aqui gero no layout da receita se estiver OK, ou gero novamente utilizando o da contmatic depois disso os contadores importaram os arquivo no G5, adicionarão / alterarão o que precisam e irão gerar um arquivo definitivo do SPED PIS COFINS e SPED FISCAL.

Obrigado.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

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.

--
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

Outra coisa que vai complicar é que os registros desse layout da contmatic usam vários campos que não estão definidos no SPED Fiscal.

Exemplo o registro 0200 tem um campo CST_COFINS_ENTRADA e outro CST_COFINS_SAIDA.

Então EMBarbosa, nosso problema até o momento são estes campos que a contmatic adicionou no layout da receita, ai o Isaque deu a idéia de criar os eventos onde estas informações serão adicionadas ao arquivo, o arquivo gerado obviamente não será validado pelo PVA.

Eu aqui gero no layout da receita se estiver OK, ou gero novamente utilizando o da contmatic depois disso os contadores importaram os arquivo no G5, adicionarão / alterarão o que precisam e irão gerar um arquivo definitivo do SPED PIS COFINS e SPED FISCAL.

Obrigado.

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.

Bom vou colocar a cabeça pra funcionar aqui e implementar estes eventos, apesar de já fazer um bom tempo que não mexo com componentes vou tentar :ugeek: , mas antes vou dar uma estudada na estrutura do componente pra fazer uma coisa bem feita...rsrs... :D

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

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

--
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

Pessoal realizei algumas alteração no componente ACBrSpedFiscal, conforme a idéia do companheiro Isaque Pinheiro de criar eventos onde será possivel adicionar as informações para o G5, rotinas estas que poderão ser adicionadas oficialmente ao componentes e facilitará no caso de atualizações do componente, vou realizar os testes agora e estou disponibilizando aqui os fontes caso alguém tenha o interesse em me ajudar a testar fiquem a vontade, desculpe não colocar já testado, mas é que meu tempo está meio apertado aqui e estou fazendo várias coisas ao mesmo tempo... :roll:

Segue algumas informações referentes as alterações:

Alterações Bloco 0:

-> 0200: Implementado

-> 0208: Não existe no layout original

-> 0500: Implementado

-> 0600: Implementado

Alterações Bloco A:

Não existe Bloco A no layout do SPED.

Alterações Bloco C:

-> C111: Implementado

-> C120: Implementado

-> C170: Implementado

-> C470: Implementado

-> C509: Não existe no layout original

-> C510: Implementado

Alterações Bloco C:

-> D101: Não existe no layout original

-> D111: Não existe no layout original

-> D509: Não existe no layout original

-> D510: Implementado

Alterações Bloco F:

Não existe Bloco F no layout do SPED.

Alterações Bloco 1:

-> 1010: Implementado (Layout contmatic é diferente do layout original)

-> 1020: Não existe no layout original

-> 1100: Implementado (Layout contmatic é diferente do layout original)

-> 1101: G5 irá gerar

-> 1102: G5 irá gerar

-> 1200: Implementado

-> 1210: G5 irá gerar

-> 1220: Não existe no layout original

-> 1500: Implementado (Layout contmatic é diferente do layout original)

-> 1501: G5 irá gerar

-> 1502: G5 irá gerar

-> 1600: Implementado (Layout contmatic é diferente do layout original)

-> 1610: G5 irá gerar

-> 1620: G5 irá gerar

Agora fica faltando os blocos e registros que não existem no layout original.

Desde já agradeço a ajuda de todos! ;)

ACBrSPEDFiscal.rar

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

Agora fica faltando os blocos e registros que não existem no layout original.

Desde já agradeço a ajuda de todos! ;)

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]

--
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

  • 2 semanas depois ...

Olá walter faria,

O que falta ainda são registros e blocos que não fazem fazem parte do SPED FISCAL que a contmatic, adicionou no seu layout, referentes as alterações nos registros e blocos que ja existem foram implementados e pelos meus testes aqui estão funcionando :D , não seu alguém mais realizou testes das alterações.

Gostaria de pedir desculpas aos demais, devido a alguns imprevistos aqui dei uma parada, mas pretendo na semana que vem já retornar as implementações e finalizá-las.

O que falta fazer é o seguinte:

Bloco 0:

-> 0208: Não existe no layout original

Alterações Bloco A:

Não existe Bloco A no layout do SPED.

Bloco C:

-> C509: Não existe no layout original

Bloco C:

-> D101: Não existe no layout original

-> D111: Não existe no layout original

-> D509: Não existe no layout original

Alterações Bloco F:

Não existe Bloco F no layout do SPED.

Alterações Bloco 1:

-> 1020: Não existe no layout original

-> 1220: Não existe no layout original

Em um post anterior eu passei toda a relação dos blocos e registros do layout do G5.

Se estiver alguém interessado em me ajudar nessa tarefa fico grato.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

Bom nos testes eu preencho os dados normalmente como se estivesse gerando o arquivo para a receita, e as informações que faltam, para o G5, eu informo utilizando os eventos que foram criados, mas como estes evento só são disparados quando chamamos o ACbrSpedFiscal.WriteBloco... , as informações que tenho que adicionar para o G5 eu armazeno em um StringList e quando o evento é disparado eu adiciono as informações do Stringlist as informações que já estão no componente para geração do registro.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

Bom dia pessoal.

Se eu estiver enganado me corrijam.

Mas pelo material que recebi da Contmatic as implementações são para o SPED PIS/COFINS e não para o SPED Fiscal.

Conforme o material abaixo, gostaria de uma opinião e se esse assunto é sobre o SPED PIS/COFINS ou se alguém sabe que gerarmos o SPED Fiscal o G5 vai importar normalmente.

Ou as implementações realizadas são mesmo para o SPED PIS/COFINS?

Email Recebido da ContMatic

A importação do faturamento para o G5 Phoenix, tem como base o layout do SPED Fiscal (ICMS/IPI).

Porém se você for gerar arquivo futuramente para o sistema SPED PIS/COFINS (empresas lucro real e presumido), será preciso importar também os dados ref. ao pis e cofins sobre as mercadorias.

A Contmatic no intuito de auxiliar seus clientes desenvolveu uma forma de importar estas informações usando o layout icms/ipi mas somou a este layout os campos importantes para a importação do Sped Pis/Cofins, ou seja implementou o layout do Sped Icms/IPI com os dados adicionais ref. ao Sped Pis/Cofins.

Foi criado um layout complementar, que está disponível na pasta Phoenix, arquivo PIS-COFINS X MIMPSPED.doc. Este documento tem todas as informações detalhadas para a geração dos registros.

Com isso o sistema terá todas as informações necessárias para a geração dos arquivos do EFD ICMS/IPI e EFD PIS/COFINS.

FISCAL X NOVO - MIMPSPED.rar

PIS-COFINS X MIMPSPED.rar

Link para o comentário
Compartilhar em outros sites

Olá mhpmario, as informações que tenho referente ao G5 são as seguintes:

Até o momento o G5 não importa o arquivo da EFD PIS/COFINS somente o a EFD do Sped Fiscal, o qual não contem todas as informações necessárias para geração do PIS/COFINS, e no caso os contadores teriam que incluir na mão, essas informações que faltam para poder gerar a EFD PIS/COFINS, imagine um contador fazendo isso para uma empresa que tem umas 200 notas por mês, como o escritório não trabalha apenas com uma empresa só, a coisa fica complicada.

Então a contmatic pegou o layout do Sped Fiscal que o G5 já importava e alterou ele adicionando as informações que ele precisa para gerar o PIS/COFINS, isso esta informado no inicio do arquivo de layout que voce anexou:"O G5 Phoenix, importa o arquivo no formato do SPED EFD ICMS/IPI (layout do ATO COTEPE/ICMS Nº 9, DE 18 DE ABRIL DE 2008). Para atender ao EFD PIS/COFINS, efetuamos adaptações de alguns registros visando importar as informações de PIS e COFINS, e acrescentamos os registros dos Blocos A, F e 1.

Neste manual indicaremos somente os registros e campos adicionados. Os demais deverão ser gerados de acordo com as especificações técnicas do arquivo do SPED EFD ICMS/IPI."

Na realidade estamos falando do PIS/COFINS embutido no layout do SPED FISCAL, por isso as alterações que estou realizando são no componente ACBrSpedFiscal.

Se for gerar o PIS/COFINS e entregar direto pra receita, não precisa disso é apenas gerar, validar e enviar para a receita :!: ...

Os dois arquivos que você anexou pelo que vi são a mesma coisa, apenas um está mais organizado e detalhado que o outro.

Espero que teha conseguido explica... :D

Att.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

wrgoncalves2008,

Eu acreditava que as informações que o G5 necessita estavam no SPED PIS/COFINS e nele seriam realizadas as implementações, com sua explicação entendi que na verdade vamos gerar o SPED Fiscal e adicionar informações para que o G5 possa importar também as informações PIS/COFINS.

Muito obrigado pela reposta.

Att.

Link para o comentário
Compartilhar em outros sites

Boa noite pessoal,

Antes eu havia implementado a alteração nos registros que haviam sidos alterados, agora acabei de terminar as implementações dos registros que não existiam no layout da sefaz, ficou faltando agora o bloco A e F que não existem no layout.

Estou adicionando os arquivos aqui, infelizmente ainda não tive tempo de testar, vou verificar amanhã a noite, mas vou deixar aqui caso queiram me ajudar nessa tarefa.

Isaque Pinheiro se você estiver acompanhando o tópico, gostaria que desse um olhada por favor nas alterações que fiz referente ao Bloco 1, pra ver se podem ser do jeito que está ou você sugere outra forma, pois registros do layout da contmatic tem o mesmo nome porém as informações todas diferentes, por isso implementei um overload em algumas rotinas mudando apenas o parametro que é passado.


    //Rotina alteradas

    procedure WriteRegistro1100(Reg1001: TRegistro1001); overload;

    procedure WriteRegistro1200(Reg1001: TRegistro1001); overload;

    procedure WriteRegistro1500(Reg1001: TRegistro1001); overload;

    procedure WriteRegistro1600(Reg1001: TRegistro1001); overload;


    procedure WriteRegistro1100 ( Alinha : AnsiString ); overload;

    procedure WriteRegistro1200 ( ALinha : AnsiString ); overload;

     procedure WriteRegistro1500 ( ALinha : AnsiString ); overload;

    procedure WriteRegistro1600 ( ALinha : AnsiString ); overload;


    //Rotina adicionadas

    procedure WriteRegistro1010 ( ALinha : AnsiString );

    procedure WriteRegistro1020 ( ALinha : AnsiString );

    procedure WriteRegistro1220 ( ALinha : AnsiString );   

    procedure WriteRegistro1620 ( ALinha : AnsiString );

Obrigado...

Att. :roll:

ACBrSPEDFiscal.rar

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

Boa noite a todos ...

wrgoncalves2008, sem querer te acelerar ai com suas implementações para G5, gostaria de saber se vc esta desenvolvendo o layouts que ainda esta faltando?, e se vc vai disponibilizar isto em conjunto com o demo ?

Obrigado, fico no aguardo.

Walter Faria, acabei de disponibilizar as ultimas alterações que fiz, e pretendo agora fazer o Bloco A e F que não consta no layout da receita.

Referente ao demo vou ver se consigo providenciar, mas meu tempo anda bem escasso.

vou tentar explicar aqui +- como funciona:

Os registro onde foram adicionados campos foi criado no componente um evento chamado OnWriteRegistro????( var Alinha : AnsiString ), esse parametro quando o evento for disparado ja conterá as informações referente aos campos do layout original e você irá adicionar as informações complementares a este parametro e será gerado o registro no arquivo conforme o layout da contmatic, se você não acrescentar nada ao paramentro ficará no layout da receita.

Para os registros que não existiam no layout vai funcionar da mesma maneira, você deve apenas informar os dados no parametro Alinha.

Referente ao bloco 1 onde tive um pouco mais de dificuldades, adicionei eventos com o mesmo parametro para que possam ser adicionados ao arquivos, para utilizar basta fazer o seguinte: ACBrSpedFiscal.WriteRegistro1020( '|1020|..|..|...|');

É isso espero que tenha conseguido explicar mais ou menos como funciona,mas assim que tiver um tempo vou tentar gerar um demo.

Quem tive interesse pode entrar em contato comigo, pelo email/msn abaixo, mas vou continuar postando aqui todo o andamento das alterações.

Obrigado.

att.

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

Pessoal, Bom Dia!

Acho que terminei tudo agora...rsrs ontem a noite postei aqui alterações referentes ao blocos que não existiam no layout, ficando faltando os blocos que foram adicionados.

Hoje tive uma idéia e funcionou, estou anexando novamente os fontes agora com todas a implementações realizadas, lembrando que ainda não testei tudo por falta de tempo... :roll:

Em um post anterior expliquei mais ou menos como iria funcionar as alterações que fiz, agora vou passar como fiz para adicionar os blocos A e F ao layout.

Criei duas procedures chamadas 'WriteBloco_A' e 'WriteBloco_F':


   procedure WriteBloco_A( ALinha: TStringList );

   procedure WriteBloco_F( ALinha: TStringList );


   //para utiliza-las fazer assim:

   ACBrSpedFiscal.WriteBloco_A( SeuStringList  );

   ACBrSpedFiscal.WriteBloco_F( SeuStringList );


   //Utilizei assim

   if ckbContmatic.Checked then

   begin

     Try

       ADados := TStringList.Create;

       ADados.Clear;

       ADados.Add('|A001|1|');  //Não informo o Bloco A por isso envio como 1 ( Sem Dados Informados ), a ultima linha do Bloco, que seria a qtde. de linhas a rotina faz.

       ACBrSPEDFiscal.WriteBloco_A( ADados );

     finally

       ADados.Free;

     End;

   end;

Minha ideia é a seguinte você cria um TStringlist, onde vai ficar os registros do bloco, e depois chama a rotina e passa este StringList, ou seja, quem monta o registro e formata de acordo com o Layout somos nós, a rotina do componente vai apenas adicionar as informações ao arquivo, essa foi a melhor forma que encontrei para não modificar muito o componente.

Bom é isso, caso tenham sugestões, opiniões estou a disposição, se quiserem alterar também sem problemas, apenas gostaria que compartilhassem com todos.

Obrigado.

Att.

ACBrSPEDFiscal.rar

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

Bom pessoal, já que ninguém responde ou dá uma opinião, pelos meus testes aqui está funcionando, já poderia incluir no projeto!

Ai poderei atualizar o ACBr aqui...rsrs :D

Bom dia Willians.

Antes de mais nada gostaria de parabeniza-lo pelo excelente trabalho.

Colaboradores como você merecem todo mérito e parabenização.

Eu ainda não tive tempo para testar, mas vou fazer os testes em breve e postar minhas experiências.

Meus parabéns e forte abraço.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Obrigado mhpmario, tento apenas ajudar aos demais quando posso! :D

Pessoal do ACBr, teria como adicionar as alterações para o projeto? Fiz o possivel para manter as caracteristicas original do projeto.

Obrigado.

PS: Os fontes anexos, estão utilizando uma versão um pouco mais antiga com componente, não é a ultima versão liberada, porque são varias alterações e até o momento não tive tempo de adicionar a ultima versão do componente, se não tiver forma de mesclar as alterações vou tentar dar um jeito aqui, para ajustar. E eu só estou atualizando os demais componentes.

ACBrSPEDFiscal.rar

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

Pessoal, Bom Dia!

Acho que terminei tudo agora...rsrs ontem a noite postei aqui alterações referentes ao blocos que não existiam no layout, ficando faltando os blocos que foram adicionados.

Hoje tive uma idéia e funcionou, estou anexando novamente os fontes agora com todas a implementações realizadas, lembrando que ainda não testei tudo por falta de tempo... :roll:

Em um post anterior expliquei mais ou menos como iria funcionar as alterações que fiz, agora vou passar como fiz para adicionar os blocos A e F ao layout.

Criei duas procedures chamadas 'WriteBloco_A' e 'WriteBloco_F':


procedure WriteBloco_A( ALinha: TStringList );
procedure WriteBloco_F( ALinha: TStringList );

//para utiliza-las fazer assim:
ACBrSpedFiscal.WriteBloco_A( SeuStringList );
ACBrSpedFiscal.WriteBloco_F( SeuStringList );

//Utilizei assim
if ckbContmatic.Checked then
begin
Try
ADados := TStringList.Create;
ADados.Clear;
ADados.Add('|A001|1|'); //Não informo o Bloco A por isso envio como 1 ( Sem Dados Informados ), a ultima linha do Bloco, que seria a qtde. de linhas a rotina faz.
ACBrSPEDFiscal.WriteBloco_A( ADados );
finally
ADados.Free;
End;
end;
[/code]

Minha ideia é a seguinte você cria um TStringlist, onde vai ficar os registros do bloco, e depois chama a rotina e passa este StringList, ou seja, quem monta o registro e formata de acordo com o Layout somos nós, a rotina do componente vai apenas adicionar as informações ao arquivo, essa foi a melhor forma que encontrei para não modificar muito o componente.

Bom é isso, caso tenham sugestões, opiniões estou a disposição, se quiserem alterar também sem problemas, apenas gostaria que compartilhassem com todos.

Obrigado.

Att.

Olá Willians, bom trabalho, mas você fez alterações na estrutura no componente, criando novos métodos como :

WriteBloco_A( ALinha : TStringList );

WriteBloco_F( ALinha : TStringList );

Isso viola o que eu tinha te falado antes sobre criar leiaute para vários sistemas, e os eventos continuam sendo a solução, como você precisa ter esses métodos eles devem ser criados dentro do seu código e não do componente e serem chamados através dos eventos do componente exemplo:

Crie um evento AfterWriteBloco_0, e nesse evento você dispara o método WriteBloco_A( ALinha : TStringList ); que deve estar dentro do seu código, depois AfterWriteBloco_E para disparar WriteBloco_F( ALinha : TStringList );

Podemos ter eventos [b]Before[/b] e [b]After[/b] para cada método, disponibilizando assim opção para ser escrito algo antes ou depois de cada bloco, até mesmo outro bloco como foi necessário, resumindo a unica coisa que pode entrar no código do componente são os eventos.

Abraço.

--
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

  • 2 semanas depois ...

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

Willians R. Gonçalves

[email protected]

"Sou louco porque vivo em um mundo que não merece minha lucidez" (Bob Marley)

Link para o comentário
Compartilhar em outros sites

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