Ir para conteúdo
  • Cadastre-se

dev botao

Dúvida registros c181/c185/c191/c195 (implementação no acbr)


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

Recommended Posts

  • Membros Pro

Boa tarde. Alguns dias atrás estava com uma dúvida em relação a utilização do acbr e foi respondida minha dúvida nesse link: viewtopic.php?f=12&t=2162

Hoje porém estou vendo que isto não é uma solução correta pra muitos casos. Por exemplo os campos CST_PIS e CST_COFINS não tem os códigos numerados a partir do zero em sequência (0, 1, 2, 3, etc) portanto se eu utilizar

CST_COFINS := TAcbrSituacaoTribCofins(sp_c185.FieldByName('CST_COFINS').AsInteger)

pra puxar o valor do baco de dados não vai funcionar. Quando o BD retornar "01" que é alíquota normal o acbr vai retornar "02" que é alíquota diferenciada.

Perguntas:

Por que criar um tipo específico (ex. TACBrSituacaoTribCOFINS) ao invés de simplesmente ler o valor que o banco de dados retorna? Não seria muito mais fácil?

Qual a solução pra isso? Abrir cada classe a ser utilizada e fazer um "case" ou "if" gigante pra converter os valores em tipos do acbr?

case CST_COFINS of

stcofinsValorAliquotaNormal : strCST_COFINS := '01';

stcofinsValorAliquotaDiferenciada : strCST_COFINS := '02';

stcofinsQtdeAliquotaUnidade : strCST_COFINS := '03';

stcofinsMonofaticaAliquotaZero : strCST_COFINS := '04';

stcofinsValorAliquotaPorST : strCST_COFINS := '05';

stcofinsAliquotaZero : strCST_COFINS := '06';

stcofinsIsentaContribuicao : strCST_COFINS := '07';

stcofinsSemIncidenciaContribuicao : strCST_COFINS := '08';

stcofinsSuspensaoContribuicao : strCST_COFINS := '09';

stcofinsOutrasOperacoesSaida : strCST_COFINS := '49';

stcofinsOperCredExcRecTribMercInt : strCST_COFINS := '50';

stcofinsOperCredExcRecNaoTribMercInt : strCST_COFINS := '51';

stcofinsOperCredExcRecExportacao : strCST_COFINS := '52';

stcofinsOperCredRecTribNaoTribMercInt : strCST_COFINS := '53';

stcofinsOperCredRecTribMercIntEExportacao : strCST_COFINS := '54';

stcofinsOperCredRecNaoTribMercIntEExportacao : strCST_COFINS := '55';

stcofinsOperCredRecTribENaoTribMercIntEExportacao : strCST_COFINS := '56';

stcofinsCredPresAquiExcRecTribMercInt : strCST_COFINS := '60';

stcofinsCredPresAquiExcRecNaoTribMercInt : strCST_COFINS := '61';

stcofinsCredPresAquiExcExcRecExportacao : strCST_COFINS := '62';

stcofinsCredPresAquiRecTribNaoTribMercInt : strCST_COFINS := '63';

stcofinsCredPresAquiRecTribMercIntEExportacao : strCST_COFINS := '64';

stcofinsCredPresAquiRecNaoTribMercIntEExportacao : strCST_COFINS := '65';

stcofinsCredPresAquiRecTribENaoTribMercIntEExportacao : strCST_COFINS := '66';

stcofinsOutrasOperacoes_CredPresumido : strCST_COFINS := '67';

stcofinsOperAquiSemDirCredito : strCST_COFINS := '70';

stcofinsOperAquiComIsensao : strCST_COFINS := '71';

stcofinsOperAquiComSuspensao : strCST_COFINS := '72';

stcofinsOperAquiAliquotaZero : strCST_COFINS := '73';

stcofinsOperAqui_SemIncidenciaContribuicao : strCST_COFINS := '74';

stcofinsOperAquiPorST : strCST_COFINS := '75';

stcofinsOutrasOperacoesEntrada : strCST_COFINS := '98';

stcofinsOutrasOperacoes : strCST_COFINS := '99';

end;

Link para o comentário
Compartilhar em outros sites

Existem duas soluções:

a primeira seria alterar os tipos enumerando-os, assim como já é feito em outros, a segunda seria fazer um switch(case) para retornar a opção correta, eu optei pela segunda.

abraços.

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Link para o comentário
Compartilhar em outros sites

Boa tarde. Alguns dias atrás estava com uma dúvida em relação a utilização do acbr e foi respondida minha dúvida nesse link: viewtopic.php?f=12&t=2162

Hoje porém estou vendo que isto não é uma solução correta pra muitos casos. Por exemplo os campos CST_PIS e CST_COFINS não tem os códigos numerados a partir do zero em sequência (0, 1, 2, 3, etc) portanto se eu utilizar

CST_COFINS := TAcbrSituacaoTribCofins(sp_c185.FieldByName('CST_COFINS').AsInteger)

pra puxar o valor do baco de dados não vai funcionar. Quando o BD retornar "01" que é alíquota normal o acbr vai retornar "02" que é alíquota diferenciada.

Perguntas:

Por que criar um tipo específico (ex. TACBrSituacaoTribCOFINS) ao invés de simplesmente ler o valor que o banco de dados retorna? Não seria muito mais fácil?

Qual a solução pra isso? Abrir cada classe a ser utilizada e fazer um "case" ou "if" gigante pra converter os valores em tipos do acbr?

case CST_COFINS of

stcofinsValorAliquotaNormal : strCST_COFINS := '01';

stcofinsValorAliquotaDiferenciada : strCST_COFINS := '02';

stcofinsQtdeAliquotaUnidade : strCST_COFINS := '03';

stcofinsMonofaticaAliquotaZero : strCST_COFINS := '04';

stcofinsValorAliquotaPorST : strCST_COFINS := '05';

stcofinsAliquotaZero : strCST_COFINS := '06';

stcofinsIsentaContribuicao : strCST_COFINS := '07';

stcofinsSemIncidenciaContribuicao : strCST_COFINS := '08';

stcofinsSuspensaoContribuicao : strCST_COFINS := '09';

stcofinsOutrasOperacoesSaida : strCST_COFINS := '49';

stcofinsOperCredExcRecTribMercInt : strCST_COFINS := '50';

stcofinsOperCredExcRecNaoTribMercInt : strCST_COFINS := '51';

stcofinsOperCredExcRecExportacao : strCST_COFINS := '52';

stcofinsOperCredRecTribNaoTribMercInt : strCST_COFINS := '53';

stcofinsOperCredRecTribMercIntEExportacao : strCST_COFINS := '54';

stcofinsOperCredRecNaoTribMercIntEExportacao : strCST_COFINS := '55';

stcofinsOperCredRecTribENaoTribMercIntEExportacao : strCST_COFINS := '56';

stcofinsCredPresAquiExcRecTribMercInt : strCST_COFINS := '60';

stcofinsCredPresAquiExcRecNaoTribMercInt : strCST_COFINS := '61';

stcofinsCredPresAquiExcExcRecExportacao : strCST_COFINS := '62';

stcofinsCredPresAquiRecTribNaoTribMercInt : strCST_COFINS := '63';

stcofinsCredPresAquiRecTribMercIntEExportacao : strCST_COFINS := '64';

stcofinsCredPresAquiRecNaoTribMercIntEExportacao : strCST_COFINS := '65';

stcofinsCredPresAquiRecTribENaoTribMercIntEExportacao : strCST_COFINS := '66';

stcofinsOutrasOperacoes_CredPresumido : strCST_COFINS := '67';

stcofinsOperAquiSemDirCredito : strCST_COFINS := '70';

stcofinsOperAquiComIsensao : strCST_COFINS := '71';

stcofinsOperAquiComSuspensao : strCST_COFINS := '72';

stcofinsOperAquiAliquotaZero : strCST_COFINS := '73';

stcofinsOperAqui_SemIncidenciaContribuicao : strCST_COFINS := '74';

stcofinsOperAquiPorST : strCST_COFINS := '75';

stcofinsOutrasOperacoesEntrada : strCST_COFINS := '98';

stcofinsOutrasOperacoes : strCST_COFINS := '99';

end;

Eu concordo com vc, acho melhor tb, simplesmente alimentar com a informação que esta no DB, vamos vê o que os demais acham, se mais alguns concordar, podemos mudar, pois essa informação já temos pronta no DB, basta traze-la como vc propos.

Abs

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

Isaque, não seria interessante (apesar de trabalhoso) criar uma função no ACBr em que fosse passado um parâmetro inteiro, ou string e a mesma retornasse o tipo equivalente?

algo do tipo:

function TFrmSPED.IntToNaturezaFrtContratado(Tipo:integer): TACBrNaturezaFrtContratado;

begin

  case Tipo of

    0 : IntToNaturezaFrtContratado  :=  nfcVendaOnusEstVendedor;    //0 - Operações de vendas, com ônus suportado pelo estabelecimento vendedor

    1 : IntToNaturezaFrtContratado  :=  nfcVendaOnusAdquirente;     //1 - Operações de vendas, com ônus suportado pelo adquirente

    2 : IntToNaturezaFrtContratado  :=  nfcCompraGeraCred;          //2 - Operações de compras (bens para revenda, matériasprima e outros produtos, geradores de crédito)

    3 : IntToNaturezaFrtContratado  :=  nfcCompraNaoGeraCred;       //3 - Operações de compras (bens para revenda, matériasprima e outros produtos, não geradores de crédito)

    4 : IntToNaturezaFrtContratado  :=  nfcTransfAcabadosPJ;        //4 - Transferência de produtos acabados entre estabelecimentos da pessoa jurídica

    5 : IntToNaturezaFrtContratado  :=  nfcTransfNaoAcabadosPJ;     //5 - Transferência de produtos em elaboração entre estabelecimentos da pessoa jurídica

    9 : IntToNaturezaFrtContratado  :=  nfcOutras;                  //9 - Outras.

  end;

end;


ou ainda atualizarmos os tipos para que fiquem desta forma:
//INDICADOR DE NATUREZA DE FRETE CONTRATADO

  TACBrNaturezaFrtContratado = (

                                 nfcVendaOnusEstVendedor = 0,    //0 - Operações de vendas, com ônus suportado pelo estabelecimento vendedor

                                 nfcVendaOnusAdquirente = 1,     //1 - Operações de vendas, com ônus suportado pelo adquirente

                                 nfcCompraGeraCred = 2,          //2 - Operações de compras (bens para revenda, matériasprima e outros produtos, geradores de crédito)

                                 nfcCompraNaoGeraCred = 3,       //3 - Operações de compras (bens para revenda, matériasprima e outros produtos, não geradores de crédito)

                                 nfcTransfAcabadosPJ = 4,        //4 - Transferência de produtos acabados entre estabelecimentos da pessoa jurídica

                                 nfcTransfNaoAcabadosPJ = 5,     //5 - Transferência de produtos em elaboração entre estabelecimentos da pessoa jurídica

                                 nfcOutras = 9                   //9 - Outras.

                                );
Desta última forma poderíamos receber o tipo utilizando-se desta forma:
IND_NAT_FRT := TACBrNaturezaFrtContratado(sp_d101.FieldByName('IND_NAT_FRT').AsInteger)

Gosto da tipificação para evitar erros, pois evitaria que alguém passe um código não definido ainda.

- Sou desenvolvedor.

- De que linguagem, delphi? .NET? Java?

- Qualquer uma, sou desenvolvedor.

Link para o comentário
Compartilhar em outros sites

Isaque, não seria interessante (apesar de trabalhoso) criar uma função no ACBr em que fosse passado um parâmetro inteiro, ou string e a mesma retornasse o tipo equivalente?

algo do tipo:

function TFrmSPED.IntToNaturezaFrtContratado(Tipo:integer): TACBrNaturezaFrtContratado;
begin
case Tipo of
0 : IntToNaturezaFrtContratado := nfcVendaOnusEstVendedor; //0 - Operações de vendas, com ônus suportado pelo estabelecimento vendedor
1 : IntToNaturezaFrtContratado := nfcVendaOnusAdquirente; //1 - Operações de vendas, com ônus suportado pelo adquirente
2 : IntToNaturezaFrtContratado := nfcCompraGeraCred; //2 - Operações de compras (bens para revenda, matériasprima e outros produtos, geradores de crédito)
3 : IntToNaturezaFrtContratado := nfcCompraNaoGeraCred; //3 - Operações de compras (bens para revenda, matériasprima e outros produtos, não geradores de crédito)
4 : IntToNaturezaFrtContratado := nfcTransfAcabadosPJ; //4 - Transferência de produtos acabados entre estabelecimentos da pessoa jurídica
5 : IntToNaturezaFrtContratado := nfcTransfNaoAcabadosPJ; //5 - Transferência de produtos em elaboração entre estabelecimentos da pessoa jurídica
9 : IntToNaturezaFrtContratado := nfcOutras; //9 - Outras.
end;
end;

[/code] ou ainda atualizarmos os tipos para que fiquem desta forma:
[code]//INDICADOR DE NATUREZA DE FRETE CONTRATADO
TACBrNaturezaFrtContratado = (
nfcVendaOnusEstVendedor = 0, //0 - Operações de vendas, com ônus suportado pelo estabelecimento vendedor
nfcVendaOnusAdquirente = 1, //1 - Operações de vendas, com ônus suportado pelo adquirente
nfcCompraGeraCred = 2, //2 - Operações de compras (bens para revenda, matériasprima e outros produtos, geradores de crédito)
nfcCompraNaoGeraCred = 3, //3 - Operações de compras (bens para revenda, matériasprima e outros produtos, não geradores de crédito)
nfcTransfAcabadosPJ = 4, //4 - Transferência de produtos acabados entre estabelecimentos da pessoa jurídica
nfcTransfNaoAcabadosPJ = 5, //5 - Transferência de produtos em elaboração entre estabelecimentos da pessoa jurídica
nfcOutras = 9 //9 - Outras.
);
Desta última forma poderíamos receber o tipo utilizando-se desta forma:
IND_NAT_FRT := TACBrNaturezaFrtContratado(sp_d101.FieldByName('IND_NAT_FRT').AsInteger)

Gosto da tipificação para evitar erros, pois evitaria que alguém passe um código não definido ainda.

Bom dia, olhando aqui já existe duas funções da qual podemos fazer essa chacagem, só estão desatualizadas com os código dos CSTs

funChecaCSTCOFINS

funChecaCSTPIS

inclusive tem até a função funChecaCST, que não esta sendo usada no SPEDFiscal, como esses valores já são definidos, poderiamos somente checa-los se o que foi passado esta correto ou não.

A Mesma idéia de chegar se um CPF, CNPJ, IE, CFOP, esta certo ou não, nesse caso não precisa tipar, só checar.

Abs

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

Alguma posição a respeito disso ?

Pode fazer, depois anexe aqui que subi pro SVN

Abs

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

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