Jump to content

dev botao

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


  • Este tópico foi criado há 4832 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

  • 2 weeks later...

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 to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.