Ir para conteúdo
  • Cadastre-se

dev botao

Dúvidas de Iniciante


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

Recommended Posts

Olá Pessoal...

Sou iniciante no CT-e e também nos componentes da ACBr. Preciso criar uma aplicação para gerar CT-e.

Já estou com os componentes ACBr Instalados em meu Delphi até agora ocorreu tudo bem. Mas tenho muitas

dúvidas, pra mim esta um tanto confuso tudo isso. Andei verificando os fragmentos de fontes que encontrei na

pasta exemplos/CT-e... Minha maior dúvida é em relação a estrutura do banco de dados... pretendo criar um

arquivo INI para as configurações gerais bem como já existe na aplicação demo, e o restante das informações

Notas, Lotes, etc... pretendo criar tabelas no firebird. Provavelmente alguém aqui no forum já desenvolveu o CT-e

por completo. Gostaria de saber quais são as informações que se faz necessário grava em banco e quais não...

Outra dúvida também... estou tentando usar o ifDef em OpenSSL, dai nesse caso não consigo informar o caminho do

Certificado, pretendo usar A1 de inicio para os testes...

Pessoal desde já obrigado a todos pela atenção... grande abraço

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Maiko,

Qual é o motivo de usar o OpenSSL?

Caso haja necessidade do uso do OpenSSL, temos que realizar uma alteração no arquivo ACBr.inc que encontra-se na pasta ...\fontes\ACBrComum.

Padrão:


//{$DEFINE ACBrNFeOpenSSL}  // Para Usar OpenSSL no ACBrNFe em Delphi, descomente essa linha

//{$DEFINE ACBrCTeOpenSSL}

//{$DEFINE CLX}             // Para usar CLX no Windows / Delphi descomente essa linha

Alterado para usar o OpenSSL:

//{$DEFINE ACBrNFeOpenSSL}  // Para Usar OpenSSL no ACBrNFe em Delphi, descomente essa linha

{$DEFINE ACBrCTeOpenSSL}

//{$DEFINE CLX}             // Para usar CLX no Windows / Delphi descomente essa linha

Quanto as tabelas e respectivos campos que você deve criar no banco de dados, uma dica é o proprio MOC - Manual de Orientação do Contribuinte disponibilizado junto com o programa exemplo (Manual_CTe_v1.04b.PDF). Outra é através do fragmento de código Alimentarcomponente.txt disponibilizado junto com o programa exemplo, nele você encontra os acessos ao banco de dados "Select ...." veja este exemplo:

     DM_CTA.PessoaFJ.Close;

     DM_CTA.PessoaFJ.SQL.Clear;

     DM_CTA.PessoaFJ.SQL.Add('Select * From Sis_PessoaFJ');

     DM_CTA.PessoaFJ.SQL.Add('Where CGC = :xCGC');

     DM_CTA.PessoaFJ.Params[0].AsString := DM_CNT.Conhec2Remetente.AsString;

     DM_CTA.PessoaFJ.Active := True;

     DM_CTA.PessoaFJ.Open;


     Rem.xNome             := DM_CTA.PessoaFJRSocial.AsString;

     Rem.xFant             := DM_CTA.PessoaFJFantasia.AsString;

     Rem.EnderReme.xLgr    := DM_CTA.PessoaFJEndereco.AsString;

     Rem.EnderReme.nro     := DM_CTA.PessoaFJNumero.AsString;

     Rem.EnderReme.xCpl    := DM_CTA.PessoaFJComplemento.AsString;

     Rem.EnderReme.xBairro := DM_CTA.PessoaFJBairro.AsString;

     CodigoMunicipio       := DM_CTA.PessoaFJCodigoEstado.AsInteger * 100000 +

                              DM_CTA.PessoaFJCodigoMunicipio.AsInteger;

     Rem.EnderReme.cMun    := CodigoMunicipio;

     Rem.EnderReme.xMun    := DM_CTA.PessoaFJCidade.AsString;

     Rem.EnderReme.CEP     := StrToIntDef(DM_CTA.PessoaFJCEP.AsString, 0);

     Rem.EnderReme.UF      := DM_CTA.PessoaFJEstado.AsString;

     Rem.EnderReme.cPais   := DM_CTA.PessoaFJCodigoPais.AsInteger;

     Rem.EnderReme.xPais   := DM_CTA.PessoaFJPais.AsString;


     if copy(DM_CTA.PessoaFJCGC.AsString,10,4) <> '0000'

      then begin

       Rem.CNPJCPF := Copy(DM_CTA.PessoaFJCGC.AsString, 2, 14);

       IE          := DM_CTA.PessoaFJIEstadual.AsString;

      end

      else begin

       Rem.CNPJCPF := Copy(DM_CTA.PessoaFJCGC.AsString, 1, 9) +

                      Copy(DM_CTA.PessoaFJCGC.AsString, 14, 2);

       IE          := 'ISENTO';

      end;


     Rem.IE   := IE;

     Rem.fone := DM_CTA.PessoaFJTelefone.AsString;

No exemplo acima estou acessando a tabela Sis_PessoaFJ para ler os dados do Remetente, para alimentar o componente. Rem.xNome := DM_CTA.PessoaFJRSocial.AsString; Note que estou pegando o conteudo do campo RSocial (tabela Sis_PessoaFJ) e atribuindo a propriedade xNome do Remetente. Outra coisa importante é quanto a nova versão 1.04, que devemos habilitar através da diretiva de compilação que tambem encontra-se no arquivo ACBr.inc Padrão:

//------------------------------------------------------------------------------

// Definições para o compomente ACBrCTe

//------------------------------------------------------------------------------

// Define o Pacote de Liberação / Descomente o pacote a ser utilizado 

// Atenção não comente ou descomente as duas definições

{$DEFINE PL_103}

//{$DEFINE PL_104}

Alterar para:

//------------------------------------------------------------------------------

// Definições para o compomente ACBrCTe

//------------------------------------------------------------------------------

// Define o Pacote de Liberação / Descomente o pacote a ser utilizado 

// Atenção não comente ou descomente as duas definições

//{$DEFINE PL_103}

{$DEFINE PL_104}

Espero ter ajudado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

UBERLÂNDIA-MG, 19 de janeiro de 2012.

Prezado Maiko,

Os exemplos do Italo te fornecem todo o suporte para seu algorítmo. Uma sugestão é baixar o

Visualizador-6.1.5-Windows-Setup

no link Visualizador.win.x86

http://www.cte.fazenda.gov.br/visualizador.aspx

e importar alguns XML, ( NFe e/ou CTe ).

Estudando a estrutura deste Aplicativo, sua implementação em ABAS, o detalhe da possibilidade de quatro "pessoas" e respectivos endereços, envolvidas em um CTe ( Remetente, Destinatário, Expedidor, Recebedor ) - sem contar o próprio Emitente - a Transportadora (RNTRC), você poderá determinar os campos obrigatórios em suas Tabelas, e os demais para seus controles.

Utilizamos várias Tabelas auxiliares, dentre elas o Cadastro de Municípios com o respectivo Código do IBGE. O Componente traz uma forma interessante de resolver isso, com os dados em arquivos, no formato txt.

De forma similar, pode-se analisar também pelos dados apresentados no site Portal CTe, durante uma consulta a um CTe:

https://www.cte.fazenda.gov.br//Formula ... a=completa

Ex:

31120106982760000128570000000990300000990308

E vamos ao CTe de número 100.000, neste CNPJ. Hoje ainda!

Atenciosamente,

Janis Peters Grants.

Link para o comentário
Compartilhar em outros sites

Olá Pessoal...

Primeiro gostaria de agradecer a todos pela atenção, e pelas respostas

que me ajudaram muito...

Já iniciei meu projeto estou escrevendo as rotinas para configuração do componentes...

não pude deixar de perceber que na aplicação do italojjr, as configurações vem todas

do banco de dados.. é isso mesmo? não tem arquivo .ini para as configurações igual

ao padrão da aplicação demo? pra ser sincero segui um pouco de cada exemplo

um tanto da aplicação demo, e um tanto dos fontes do italojjr....

Encontrei no caminho o tal dos Schemas, andei lendo algo sobre mas não entendi muito bem

alguém pode me explicar meio por alto o que seria isso, uma definição rápida deles?

Outra coisa... posso usar Capicom com certificado A1?

o certificado que tenho para testes é A1, então minha dúvida é como informo o caminho do

arquivo do certificado? nos fontes da pasta exemplo que são da aplicação do italojjr não

encontrei o local onde informa o caminho do certificado... na aplicação Demo tem uma parte

que informa o caminho do arquivo de certificado mas é voltado para compilação usando OpenSSL

tentei compilar usando IFDef OpenSSL mas deu erro na linha onde informo o caminho do certificado

para o componente... alguém pode me ajudar nesta questão? Fico grato pela atenção de todos...

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Maiko,

Vamos as respostas:

Sim, tenho no banco de dados uma tabela que contem os dados para a configuração do componente, logo não utilizo neste caso o arquivo .INI

A minha aplicação roda com o Capicom.

Durante 1 ano o meu cliente usou o certificado A1 e depois mudou para o A3 (Cartão + Leitora) sem nenhum problema.

O nosso colega Janis utiliza o certificado A3 (Tokem) também sem nenhum problema e como mencionado no post dele já chegou a casa dos 100 mil CTe emitidos.

Quanto a configuração do componente com relação ao certificado, devemos informar somente o numero de serie do mesmo.

Existe uma propriedade no componente para informar a senha, no caso do A1 não devemos informa-la, recentemente foi realizada uma alteração no componente para que esta propriedade receba a senha (PIN) do certificado A3, caso você não informe, ao ocorrece o primeiro acesso ao WebServices ela sera solicitada.

Portanto não há necessidade de informar o caminho onde encontra-se o certificado.

Com relação aos arquivos Schemas:

A secretaria da fazenda disponibiliza esses arquivos, no decorrer do tempo, a medida que vai surgindo necessidades ou proplemas são detectados a SEFAZ faz as alterações e disponibiliza uma nova versão dos Schemas, atualmente estamos na versão 1.04 do CTe.

Qual é a finalidade desses arquivos?

Esses arquivos contem a estrutura de cada elemento, grupo que compõem o arquivo XML do CT-e.

O componente por sua vez realiza uma "comparação" entre o XML gerado com o Schema.

Se um elemente tem um tamanho máximo de 40 caracteres (por exemplo) e ao gerar o o XML você passa uma string com 50, ao executar a rotina de validação (comparação entre o XML com o schema) o componente vai parar a sua aplicação e apontar o problema, informando que o referido elemente esta com um tamanho maior do que o permitido.

Espero ter ajudado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Boa tarde Italo, muito obrigado pelas respostas agora posso prosseguir hehe...

Apenas aproveitando que você está online... estou acompanhando o AlimentaComponente.txt Logo no inicio tem um campo lá, CCT com um comentário

Informando que se trata de um código aleatório... este código ou chave, tem alguma exigência tipo número mínimo ou Maximo de casas, não se se é o mesmo que andei lendo que deve conter o prefixo cte no inicio, esta chave deve conter alguma informação? Ou posso simplesmente gerar ela aleatoriamente sem me preocupar com nada disso?

Também mais a diante lá em informações complementares... estas informações devo realmente preenchelas ou é meio que opcional?

Não consegui compreender o significado das propriedades do componente na seguinte parte do fonte:

compl.fluxo.xOrig := Trim(DM_CNT.Conhec2FluxoOrigem.AsString);

if Trim(DM_CNT.Conhec2FluxoPassagem.AsString) <> ''

then begin

with compl.fluxo.pass.Add do

begin

xPass := Trim(DM_CNT.Conhec2FluxoPassagem.AsString);

end;

end;

compl.fluxo.xDest := Trim(DM_CNT.Conhec2FluxoDestino.AsString);

compl.fluxo.xRota := Trim(DM_CNT.Conhec2FluxoRota.AsString);

essa propriedade fluxo o que devo informar nela...

muito obrigado pela atenção... grande abraço...

Link para o comentário
Compartilhar em outros sites

  • Consultores

Maiko,

Uma dica, no MOC - Manual de Orientação do Contribuinte versão 1.04b você encontra as respostas para as suas perguntas, principalmente no que diz respeito o que é obrigatório e opcional.

Inclusive sobre a chave do CTe que é composta por 44 digitos.

Note que temos 2 campos um chamado nCT e o outro cCT.

O nCT se refere ao numero do conhecimento que deve ser sequencial (1, 2, 3, ...) e o cCT se refere ao código do conhecimento que pode ser um numero aleatório ou pode ser igual ao nCT.

Na versão 1.04 do CTe o nCT contém 9 digitos e o cCT contém 8 digitos.

Como eu implementei?

Quando o usuário lança os dados pertinentes ao transporte da carga, ao clicar no botão para salvar os dados no banco de dados, gero o cCT usando a função Random do Delphi para gerar um numero aleatório com no máximo 8 digitos e salvo tambem no banco de dados (campo: CTChave).


   Randomize;

   codigoNumerico := Random(99999999);

E ao alimentar o componente passo essa informação:

   Ide.cCT   := DM_CNT.Conhec2CTChave.AsInteger;  // Código Aleatório


(...)


   Ide.modelo := '57';

   Ide.serie  := DM_CNT.Conhec2Serie.AsInteger; 

   Ide.nCT    := DM_CNT.Conhec2Numero.AsInteger; // Numero sequencial

Espero ter ajudado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Boa noite a todos...

Italo, tudo tranquilo fera?

Assim eu to avançando, to conseguindo faze tudo certo até agora... consegui um certificado A1 e fiz da maneira que me falo apenas com número de serie e senha funcionou 100% pelomenos a conexão pra verificação de status de serviço e tals funcionou tudo certinho...

Avançando no Txt fiz até uma boa parte e me deparei com algumas tabelas sabe... são da sua aplicação tabelas de CST, uma query TabelasCST

que no TXT alimenta componente apenas pego valor desta query mas não sei em que momento ela é aberta e quais são os parametros para ela?

essa CST vem ser do proprio cte? ou das notas odo cte?

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Maiko,

Vamos ao fragmento de código:


   DM_CNT.Tabelas.Close;

   DM_CNT.Tabelas.SQL.Clear;

   DM_CNT.Tabelas.SQL.Add('Select * From Cnt_Tabelas');

   DM_CNT.Tabelas.SQL.Add('Where Codigo = :xTabela');

   DM_CNT.Tabelas.Params[0].AsString := DM_CNT.Conhec2Tabela.AsString;

   DM_CNT.Tabelas.Active := True;

   DM_CNT.Tabelas.Open;


   if DM_CNT.TabelasCST.AsInteger = 41

    then compl.xObs := compl.xObs +

           ';Documento emitido por ME ou EPP optante pelo Simples Nacional' +

           ';Nao gera direito a credito fiscal de ICMS';


Note que tenho no banco de dados a tabela: Cnt_Tabelas, a minha aplicação permite que seja criada N tabelas para calcular o valor do frete.

O código dessa tabela armazeno na tabela Cnt_Conhecimentos, campo Tabela.

Voltando a Tabela Cnt_Tabelas tenho um campo chamado CST que contem o código da Classificação Tributária do Serviço.

O contator me pediu para que quando CST = 41 (ICMS não tributada) era para constar na observação o seguinte texto: "Documento emitido por ME ou EPP optante pelo Simples Nacional Nao gera direito a credito fiscal de ICMS"

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Bom dia a todos...

Outra dúvida simples Italo... assim, no AlimentarComponente.txt

tem lá da sua aplicação uma tabela chamada Cnt_Componentes, nessa tabela seria assim os itens da nota fiscal, o que vai na carga no caso?

outra coisa rapida... estou vendo o seu projeto da seguinte forma, veja se estou certo, quem sabe estou acompanhando da forma errada... veja:

todo tipo de pessoa envolvida no CTe, Notas, etc vai na tabela PessoaFJ...

todas as notas fiscais que serão utilizadas nos CTe's e lotes estão na tabela Cnt_Notas...

quando gerado um novo CTe vai criar um novo registro na tabela Cnt_Conhecimento

cada item da Cnt_Conhecimento é atrelado a 1 documento, NF, NFe, etc... que vem da Cnt_Notas...

depois é possível enviar apenas 1 Conhecimento ou então como mostra o EnviarLote.txt posso

selecionar vários itens da tabela Cnt_Conhecimento e gerar um lote, com tanto que as notas atreladas a estes

conhecimentos sejam do mesmo remetente e para o mesmo destinatário... e por fim enviar o lote...

por alto seria assim a rotina?

outra coisa, sabe la nas informações complementares tem uma parte que você informa umas paradas de Fluxo...eu não sei como isso funciona

ao meu ver deve ser detalhamento da rota? seria isso mesmo? encontrei la FluxoOrigem, FluxoPassagem, FluxoDestino, FluxoRota...

Desde já agradeço a atenção... e me desculpe pelo incomodo de tantas perguntas...

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde Maiko,

Vamos as respostas:


tem lá da sua aplicação uma tabela chamada Cnt_Componentes, nessa tabela seria assim os itens da nota fiscal, o que vai na carga no caso?

Não, essa tabela contem as descrições e valores dos componentes do frete, ou seja frete valor, seguro, pedagio, ...

todo tipo de pessoa envolvida no CTe, Notas, etc vai na tabela PessoaFJ...

Sim

todas as notas fiscais que serão utilizadas nos CTe's e lotes estão na tabela Cnt_Notas...

sim

quando gerado um novo CTe vai criar um novo registro na tabela Cnt_Conhecimento

cada item da Cnt_Conhecimento é atrelado a 1 documento, NF, NFe, etc... que vem da Cnt_Notas...

Não, ao contrario cada registro na tabela Cnt_Conhecimento é que vai gerar o CTe (XML). e a tabela Cnt_Notas podera ter 1 ou mais registros para o mesmo Cnt_Conhecimento, logo um conhecimento podera ter 1 ou mais NF ou NFe. Lembre-se que podemos ter mais de um documento originário (NF, NFe) para o mesmo conhecimento, mas o tipo do doc. originário tem que ser o mesmo bem como o emitente e destinatário, exemplo: 1 conhecimento com 3 NF (papel) ou 1 conhecimento com 4 NFe.

depois é possível enviar apenas 1 Conhecimento ou então como mostra o EnviarLote.txt posso

selecionar vários itens da tabela Cnt_Conhecimento e gerar um lote, com tanto que as notas atreladas a estes

conhecimentos sejam do mesmo remetente e para o mesmo destinatário... e por fim enviar o lote...

por alto seria assim a rotina?

No que diz respeito ao envio, podemos gerar um lote de envio com 1 ou mais conhecimentos, idependente da quantidade de documentos originarios que cada um possui, e pode ser de remetente e destinatirios diferentes. O importante é que o lote tem um limite de 50 conhecimentos e tamanho máximo de 500 kbytes (estipulado pela SEFAZ).

outra coisa, sabe la nas informações complementares tem uma parte que você informa umas paradas de Fluxo...eu não sei como isso funciona ao meu ver deve ser detalhamento da rota? seria isso mesmo? encontrei la FluxoOrigem, FluxoPassagem, FluxoDestino, FluxoRota...

Sim, e essas informações são opcionais.

Espero ter ajudado.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • 1 ano depois...

Ola Não estou conseguindo fazer com que apareça a rntrc nos dados "IDENTIFICAÇÃO DO CONJUNTO TRANSPORTADOR" do dacte estou passando por parâmetro os dados da seguinte forma

 

Prop.RNTRC     := qryAuxiliar.fieldbyname('rntrc').AsString;

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia EFV,

 

Você esta passando errado, pois dessa forma você esta informando o RNTRC do proprietario do veiculo quando o mesmo não é da transportadora.

 

No quadro IDENTIFICAÇÃO DO CONJUNTO TRANSPORTADOR devemos informar o RNTRC da transportadora e a forma correta é:

 

rodo.RNTRC := qryAuxiliar.fieldbyname('rntrc').AsString;
 

Outra coisa, o DACTE que você se refere é o que foi feito em Quick Report ou Fast Report?

 

A carga é fracionado ou lotação?

 

O DACTE feito em Quick Report, muda a sua aparencia quando mudamos de carga fracionada para lotação.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Bom dia EFV,

 

Você esta passando errado, pois dessa forma você esta informando o RNTRC do proprietario do veiculo quando o mesmo não é da transportadora.

 

No quadro IDENTIFICAÇÃO DO CONJUNTO TRANSPORTADOR devemos informar o RNTRC da transportadora e a forma correta é:

 

rodo.RNTRC := qryAuxiliar.fieldbyname('rntrc').AsString;

 

Outra coisa, o DACTE que você se refere é o que foi feito em Quick Report ou Fast Report?

 

A carga é fracionado ou lotação?

 

O DACTE feito em Quick Report, muda a sua aparencia quando mudamos de carga fracionada para lotação.

Obrigado Iltalo era isso mesmo estou usando o FastReport

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...