Ir para conteúdo
  • Cadastre-se

dev botao

Conversão de String para Enum


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

Recommended Posts

Boa tarde,

Como faço para converter o CST PIS que esta em string para o ENUM? No Sped Fiscal ou no NFE lembro que tem uma função de string para enumerator mas não encontrei no Sped Pis Cofins.

Tentei utilizar TACBrSituacaoTribPIS(GetEnumValue(TypeInfo(TACBrSituacaoTribPIS),'49')); mas não retorna nada.

Preciso para os casos de CST, CST PIS e CST COFINS

Link para o comentário
Compartilhar em outros sites

  • Consultores

O Isaque está trabalhando em algo assim, mas ainda não existe esse tipo de função no ACBrSPEDPisCofins.

Acho que será útil se você entender o objetivo dessa função que você estava tentando usar. Veja esse tópico:

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Bom, resumindo a única solução atual é criar uma função com case para testar cada tipo? Pois guardo todo CST como string porém apenas o seu código, também acho inviável guardar de outra forma.

Vou disponibilizar aqui o que comecei, se alguém se propor a ajudar, agradeço.

Observem a unit "ACBrEPCBlocos.pas", como foi feito.

Uma observação, estou mudando o nome dos tipo para o mesmo nome da propriedade, assim não temos que ficar invetando nome e nem colocando nomes enormes, fiquem atentos nesse detalhe.

Se alguém se propor a ajudar a terminar os que restam depois anexe aqui que vou pegar e fazer um merge geral, com a versão da pasta trunk.

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

Olhando os fontes descobri o arquivo PCNConversao que tem a função "StrToCSTCOFINS" porém os enum estão em outro padrão :(.

function StrToCSTCOFINS(var ok: boolean; const s: string): TpcnCstCOFINS;

begin

  result := StrToEnumerado(ok, s, ['01', '02', '03', '04', '05', '06', '07', '08', '09', '49', '50', '51', '52', '53', '54', '55', '56', '60', '61', '62', '63', '64', '65', '66', '67', '70', '71', '72', '73', '74', '75', '98', '99'],

    [cof01, cof02, cof03, cof04, cof05, cof06, cof07, cof08, cof09, cof49, cof50, cof51, cof52, cof53, cof54, cof55, cof56, cof60, cof61, cof62, cof63, cof64, cof65, cof66, cof67, cof70, cof71, cof72, cof73, cof74, cof75, cof98, cof99]);

end;
Eu reescrevi a do icms usando os ENUM do Sped Pis Cofins porém ficou enorme.
function TFMovSpedPisCofins.StrToCstIcmsEnum(const s: string): TACBrSituacaoTribICMS;

var

   ok : boolean;

begin

  result := StrToEnumerado(ok, s, [ '000',

                                    '010',

                                    '020',

                                    '030',

                                    '040',

                                    '041',

                                    '050',

                                    '051',

                                    '060',

                                    '070',

                                    '090',

                                    '100',

                                    '110',

                                    '120',

                                    '130',

                                    '140',

                                    '141',

                                    '150',

                                    '151',

                                    '160',

                                    '170',

                                    '190',

                                    '200',

                                    '210',

                                    '220',

                                    '230',

                                    '240',

                                    '241',

                                    '250',

                                    '251',

                                    '260',

                                    '270',

                                    '290',

                                    '101',

                                    '102',

                                    '103',

                                    '201',

                                    '202',

                                    '203',

                                    '300',

                                    '400',

                                    '500',

                                    '900'],

                                 [  sticmsTributadaIntegralmente,

                                    sticmsTributadaComCobracaPorST,

                                    sticmsComReducao,

                                    sticmsIsentaComCobracaPorST,

                                    sticmsIsenta,

                                    sticmsNaoTributada,

                                    sticmsSuspensao,

                                    sticmsDiferimento,

                                    sticmsCobradoAnteriormentePorST,

                                    sticmsComReducaoPorST,

                                    sticmsOutros,

                                    sticmsEstrangeiraImportacaoDiretaTributadaIntegralmente,

                                    sticmsEstrangeiraImportacaoDiretaTributadaComCobracaPorST,

                                    sticmsEstrangeiraImportacaoDiretaComReducao,

                                    sticmsEstrangeiraImportacaoDiretaIsentaComCobracaPorST,

                                    sticmsEstrangeiraImportacaoDiretaIsenta,

                                    sticmsEstrangeiraImportacaoDiretaNaoTributada,

                                    sticmsEstrangeiraImportacaoDiretaSuspensao,

                                    sticmsEstrangeiraImportacaoDiretaDiferimento,

                                    sticmsEstrangeiraImportacaoDiretaCobradoAnteriormentePorST,

                                    sticmsEstrangeiraImportacaoDiretaComReducaoPorST,

                                    sticmsEstrangeiraImportacaoDiretaOutros,

                                    sticmsEstrangeiraAdqMercIntTributadaIntegralmente,

                                    sticmsEstrangeiraAdqMercIntTributadaComCobracaPorST,

                                    sticmsEstrangeiraAdqMercIntComReducao,

                                    sticmsEstrangeiraAdqMercIntIsentaComCobracaPorST,

                                    sticmsEstrangeiraAdqMercIntIsenta,

                                    sticmsEstrangeiraAdqMercIntNaoTributada,

                                    sticmsEstrangeiraAdqMercIntSuspensao,

                                    sticmsEstrangeiraAdqMercIntDiferimento,

                                    sticmsEstrangeiraAdqMercIntCobradoAnteriormentePorST,

                                    sticmsEstrangeiraAdqMercIntComReducaoPorST,

                                    sticmsEstrangeiraAdqMercIntOutros,

                                    sticmsSimplesNacionalTributadaComPermissaoCredito,

                                    sticmsSimplesNacionalTributadaSemPermissaoCredito,

                                    sticmsSimplesNacionalIsencaoPorFaixaReceitaBruta,

                                    sticmsSimplesNacionalTributadaComPermissaoCreditoComST,

                                    sticmsSimplesNacionalTributadaSemPermissaoCreditoComST,

                                    sticmsSimplesNacionalIsencaoPorFaixaReceitaBrutaComST,

                                    sticmsSimplesNacionalImune,

                                    sticmsSimplesNacionalNaoTributada,

                                    sticmsSimplesNacionalCobradoAnteriormentePorST,

                                    sticmsSimplesNacionalOutros]);

end;

Link para o comentário
Compartilhar em outros sites

  • Consultores

A melhor saída mesmo seria armazenar um string com o tipo enumerado ao invés do valor do tipo ou do valor da ordenação. Por Exemplo: armazenar para o campo CST_PIS do registro C170 'stpisOutrasOperacoesSaida' ao invés de '49' ou '10'. Isso porque infelizmente a legislação já alterou antes os valores de campos e nada pode garantir que não venha a fazer isso outra vez; além disso, os tipos podem sofrer alterações devido a alguma necessidade (incluir uma enumeração nova por exemplo).

Mas eu concordo que é a maneira mais difícil de implementar. Eu mesmo não a estou utilizando no momento, pois não achamos que passaríamos por esses tipos de problemas no início do projeto. :|

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Mais o custo esse tanto de manutenção como para desempenho do banco ficaria horrível, sem contar que para fazer consultas agrupadas por CST ia precisar de uma função para fazer essa "tradução".

Acredito que a forma do pcn é a melhor com as enum com nome pequenos ou então deixar o campo aberto como string que é oque ocorre no Sped Fiscal.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Mais o custo esse tanto de manutenção como para desempenho do banco ficaria horrível, sem contar que para fazer consultas agrupadas por CST ia precisar de uma função para fazer essa "tradução".

Não precisaria de função alguma. O Delphi já faz isso por meio da RTTI.

Com respeito ao banco, acredito que não seja uma perda tão grande como parece. Pelo menos nos BD que eu utilizei, não vi perda tão significativa. Qualquer outra solução esbarra nos problemas que apresentei no post anterior.

EDIT: A propósito, exceto se você for utilizar RTTI, tipos enumerados não precisam ter nomes pequenos. Não faz diferença pois internamente o compilador trata eles como valor inteiro que é, em geral, de no máximo 256 valores (SmallInt).

O que o Isaque fez foi diminuir o tamanho dos tipos com o objetivo principal de facilitar aos novos usuários do ACBr detectarem qual é o tipo específico para o campo que eles estão procurando.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Falo por exemplo se vou precisar fazer uma consulta pegando os CST 060 e CST 010. Teria que procura a "string" stimpostosubstuicao e a outra, ou algo assim, e em lugares que o usuário digita o código real do CST e não a posição ia precisar da função de todo jeito para descobrir qual enum correto. Não consigo imaginar nenhum beneficio utilizando desta forma, de todo jeito ja criei as funções aqui de StrToEnum para CST, CST PIS, CST Cofins.

Muito obrigado.

Link para o comentário
Compartilhar em outros sites

Olhando os fontes descobri o arquivo PCNConversao que tem a função "StrToCSTCOFINS" porém os enum estão em outro padrão :(.

function StrToCSTCOFINS(var ok: boolean; const s: string): TpcnCstCOFINS;
begin
result := StrToEnumerado(ok, s, ['01', '02', '03', '04', '05', '06', '07', '08', '09', '49', '50', '51', '52', '53', '54', '55', '56', '60', '61', '62', '63', '64', '65', '66', '67', '70', '71', '72', '73', '74', '75', '98', '99'],
[cof01, cof02, cof03, cof04, cof05, cof06, cof07, cof08, cof09, cof49, cof50, cof51, cof52, cof53, cof54, cof55, cof56, cof60, cof61, cof62, cof63, cof64, cof65, cof66, cof67, cof70, cof71, cof72, cof73, cof74, cof75, cof98, cof99]);
end;[/code]

Eu reescrevi a do icms usando os ENUM do Sped Pis Cofins porém ficou enorme.

Mude para o padrão PCN

icms000

icms100

icms200

icms060

icms160

icms260

concordo que esses nomes enormes são difíceis de controlar entender e dar manutenção no código, pretendo mudar tudo

pis???, cof???, ipi??? etc...

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

  • Consultores

Falo por exemplo se vou precisar fazer uma consulta pegando os CST 060 e CST 010. Teria que procura a "string" stimpostosubstuicao e a outra, ou algo assim, e em lugares que o usuário digita o código real do CST e não a posição ia precisar da função de todo jeito para descobrir qual enum correto. Não consigo imaginar nenhum beneficio utilizando desta forma, de todo jeito ja criei as funções aqui de StrToEnum para CST, CST PIS, CST Cofins.

Muito obrigado.

Sim, teria que fazer a procura por string, mas o uso de RTTI resolveria todo esse problema para você (ou pra mim...)

Agora acho que você não entendeu o problema que eu citei. Vou tentar dar um exemplo: Hoje, o cst icms para Outros é 090. Se a legislação mudar por algum motivo obscuro para 099 todo o seu banco de dados vai estar errado. Não vai mais conseguir gerar os arquivos corretamente. Acha isso estranho? Eu também acho. Impossível? Não mesmo. Veja o caso do campo IND_PGTO do registro C100 no SPED Fiscal ou o campo IND_FRT no registro C100 do SPED PisCofins.

Além disso, veja o caso desse tópico viewtopic.php?f=22&t=4448

Como mencionei antes, concordo que não é fácil alterar isso depois do projeto já em execução. Talvez pareça deselegante também. Eu mesmo admiti que não tenho feito assim. Mas parece ser o melhor método de resolver os problemas citados sem dores de cabeça futuras.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...

Olá,

será que isso pode ajudar?

adicionai a conversão no ACBrEPCBlocos.pas.

talvez poderia melhorar passando a StrToEnumerado que hj esta no Monitor para o Comuns, mas daí teria mais manutenção.

se for necessário posso gerar o código que faz o inverso.


...


  function StrToSituacaoTribICMS(var ok: boolean; const s: string): TACBrSituacaoTribICMS;

  function StrToSituacaoTribIPI(var ok: boolean; const s: string): TACBrSituacaoTribIPI;

  function StrToSituacaoTribPIS(var ok: boolean; const s: string): TACBrSituacaoTribPIS;

  function StrToSituacaoTribCOFINS(var ok: boolean; const s: string): TACBrSituacaoTribCOFINS;


implementation


uses Windows;


{ TOpenBlocos }


function StrToEnumerado(var ok: boolean; const s: string; const AString:

  array of string; const AEnumerados: array of variant): variant;

var

  i: integer;

begin

  result := -1;

  for i := Low(AString) to High(AString) do

    if AnsiSameText(s, AString[i]) then

      result := AEnumerados[i];

  ok := result <> -1;

  if not ok then

    result := AEnumerados[0];

end;


function StrToSituacaoTribICMS(var ok: boolean; const s: string): TACBrSituacaoTribICMS;

begin

  result := StrToEnumerado(ok, s, ['000', '010', '020', '030', '040', '041', '050', '051', '060', '070', '090', '100', '110', '120',

                                   '130', '140', '141', '150', '151', '160', '170', '190', '200', '210', '220', '230', '240', '241',

                                   '250', '251', '260', '270', '290', '101', '102', '103', '201', '202', '203', '300', '400', '500', '900'],

    [sticmsTributadaIntegralmente,sticmsTributadaComCobracaPorST,sticmsComReducao,sticmsIsentaComCobracaPorST ,sticmsIsenta,

     sticmsNaoTributada,sticmsSuspensao ,sticmsDiferimento ,sticmsCobradoAnteriormentePorST ,sticmsComReducaoPorST ,sticmsOutros,

     sticmsEstrangeiraImportacaoDiretaTributadaIntegralmente ,sticmsEstrangeiraImportacaoDiretaTributadaComCobracaPorST ,

     sticmsEstrangeiraImportacaoDiretaComReducao ,sticmsEstrangeiraImportacaoDiretaIsentaComCobracaPorST,sticmsEstrangeiraImportacaoDiretaIsenta ,

     sticmsEstrangeiraImportacaoDiretaNaoTributada ,sticmsEstrangeiraImportacaoDiretaSuspensao,sticmsEstrangeiraImportacaoDiretaDiferimento,

     sticmsEstrangeiraImportacaoDiretaCobradoAnteriormentePorST,sticmsEstrangeiraImportacaoDiretaComReducaoPorST,

     sticmsEstrangeiraImportacaoDiretaOutros ,sticmsEstrangeiraAdqMercIntTributadaIntegralmente ,sticmsEstrangeiraAdqMercIntTributadaComCobracaPorST ,

     sticmsEstrangeiraAdqMercIntComReducao ,sticmsEstrangeiraAdqMercIntIsentaComCobracaPorST,sticmsEstrangeiraAdqMercIntIsenta ,

     sticmsEstrangeiraAdqMercIntNaoTributada ,sticmsEstrangeiraAdqMercIntSuspensao,sticmsEstrangeiraAdqMercIntDiferimento,

     sticmsEstrangeiraAdqMercIntCobradoAnteriormentePorST,sticmsEstrangeiraAdqMercIntComReducaoPorST,sticmsEstrangeiraAdqMercIntOutros ,

     sticmsSimplesNacionalTributadaComPermissaoCredito ,sticmsSimplesNacionalTributadaSemPermissaoCredito ,

     sticmsSimplesNacionalIsencaoPorFaixaReceitaBruta,sticmsSimplesNacionalTributadaComPermissaoCreditoComST,

     sticmsSimplesNacionalTributadaSemPermissaoCreditoComST,sticmsSimplesNacionalIsencaoPorFaixaReceitaBrutaComST ,

     sticmsSimplesNacionalImune,sticmsSimplesNacionalNaoTributada ,sticmsSimplesNacionalCobradoAnteriormentePorST ,sticmsSimplesNacionalOutros]);

end;



function StrToSituacaoTribIPI(var ok: boolean; const s: string): TACBrSituacaoTribIPI;

begin

  result := StrToEnumerado(ok, s, ['00', '01', '02', '03', '04', '05', '49', '50', '51', '52', '53', '54', '55', '99'],

    [stipiEntradaRecuperacaoCredito, stipiEntradaTributradaZero, stipiEntradaIsenta, stipiEntradaNaoTributada, stipiEntradaImune,

     stipiEntradaComSuspensao, stipiOutrasEntradas, stipiSaidaTributada, stipiSaidaTributadaZero, stipiSaidaIsenta, stipiSaidaNaoTributada,

     stipiSaidaImune, stipiSaidaComSuspensao, stipiOutrasSaidas]);

end;


function StrToSituacaoTribPIS(var ok: boolean; const s: string): TACBrSituacaoTribPIS;

begin

  result := StrToEnumerado(ok, s, ['01', '02', '03', '04', '05', '06', '07', '08',

                                   '09', '49', '50', '51', '52', '53', '54', '55',

                                   '56', '60', '61', '62', '63', '64', '65', '66',

                                   '67', '70', '71', '72', '73', '74', '75', '98', '99'],

    [stpisValorAliquotaNormal, stpisValorAliquotaDiferenciada, stpisQtdeAliquotaUnidade,

     stpisMonofaticaAliquotaZero, stpisValorAliquotaPorST, stpisAliquotaZero, stpisIsentaContribuicao,

     stpisSemIncidenciaContribuicao, stpisSuspensaoContribuicao, stpisOutrasOperacoesSaida,

     stpisOperCredExcRecTribMercInt, stpisOperCredExcRecNaoTribMercInt, stpisOperCredExcRecExportacao,

     stpisOperCredRecTribNaoTribMercInt, stpisOperCredRecTribMercIntEExportacao,

     stpisOperCredRecNaoTribMercIntEExportacao, stpisOperCredRecTribENaoTribMercIntEExportacao,

     stpisCredPresAquiExcRecTribMercInt, stpisCredPresAquiExcRecNaoTribMercInt,

     stpisCredPresAquiExcExcRecExportacao, stpisCredPresAquiRecTribNaoTribMercInt,

     stpisCredPresAquiRecTribMercIntEExportacao, stpisCredPresAquiRecNaoTribMercIntEExportacao,

     stpisCredPresAquiRecTribENaoTribMercIntEExportacao, stpisOutrasOperacoes_CredPresumido,

     stpisOperAquiSemDirCredito, stpisOperAquiComIsensao, stpisOperAquiComSuspensao,

     stpisOperAquiAliquotaZero, stpisOperAqui_SemIncidenciaContribuicao, stpisOperAquiPorST,

     stpisOutrasOperacoesEntrada, stpisOutrasOperacoes]);

end;


function StrToSituacaoTribCOFINS(var ok: boolean; const s: string): TACBrSituacaoTribCOFINS;

begin

  result := StrToEnumerado(ok, s, ['01', '02', '03', '04', '05', '06', '07', '08',

                                   '09', '49', '50', '51', '52', '53', '54', '55',

                                   '56', '60', '61', '62', '63', '64', '65', '66',

                                   '67', '70', '71', '72', '73', '74', '75', '98', '99'],

    [stcofinsValorAliquotaNormal, stcofinsValorAliquotaDiferenciada, stcofinsQtdeAliquotaUnidade,

     stcofinsMonofaticaAliquotaZero, stcofinsValorAliquotaPorST, stcofinsAliquotaZero, stcofinsIsentaContribuicao,

     stcofinsSemIncidenciaContribuicao, stcofinsSuspensaoContribuicao, stcofinsOutrasOperacoesSaida,

     stcofinsOperCredExcRecTribMercInt, stcofinsOperCredExcRecNaoTribMercInt, stcofinsOperCredExcRecExportacao,

     stcofinsOperCredRecTribNaoTribMercInt, stcofinsOperCredRecTribMercIntEExportacao,

     stcofinsOperCredRecNaoTribMercIntEExportacao, stcofinsOperCredRecTribENaoTribMercIntEExportacao,

     stcofinsCredPresAquiExcRecTribMercInt, stcofinsCredPresAquiExcRecNaoTribMercInt,

     stcofinsCredPresAquiExcExcRecExportacao, stcofinsCredPresAquiRecTribNaoTribMercInt,

     stcofinsCredPresAquiRecTribMercIntEExportacao, stcofinsCredPresAquiRecNaoTribMercIntEExportacao,

     stcofinsCredPresAquiRecTribENaoTribMercIntEExportacao, stcofinsOutrasOperacoes_CredPresumido,

     stcofinsOperAquiSemDirCredito, stcofinsOperAquiComIsensao, stcofinsOperAquiComSuspensao,

     stcofinsOperAquiAliquotaZero, stcofinsOperAqui_SemIncidenciaContribuicao, stcofinsOperAquiPorST,

     stcofinsOutrasOperacoesEntrada, stcofinsOutrasOperacoes]);

end;

....

Ai ele seria usado similar como é no NFe StrToSituacaoTribCOFINS(lok, QAux.FieldByName('cst').AsString) ;

Até mais.

Carlos H. Marian

Analista de Sistemas

|/-\|

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Tem esta tb que está faltando

function StrToTipoItem(var ok: boolean; const s: string): TACBrTipoItem;

...................

function StrToTipoItem(var ok: boolean; const s: string): TACBrTipoItem;

begin

result := StrToEnumerado(ok, s, ['00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '99'],

[tiMercadoriaRevenda, tiMateriaPrima, tiEmbalagem, tiProdutoProcesso, tiProdutoAcabado,

tiSubproduto, tiProdutoIntermediario, tiMaterialConsumo, tiAtivoImobilizado,

tiServicos, tiOutrosInsumos, tiOutras ]);

end;

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois ...

Outra conversão:

interface

function StrToIndCredOri(var ok: boolean; const s: string): TACBrIndCredOri;

function StrToBaseCalculoCredito(var ok: boolean; const s: string): TACBrBaseCalculoCredito;

implementation

function StrToBaseCalculoCredito(var ok: boolean; const s: string): TACBrBaseCalculoCredito;

begin

result := StrToEnumerado(ok, s, ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18'],

[bccVazio, bccAqBensRevenda, bccAqBensUtiComoInsumo, bccAqServUtiComoInsumo, bccEnergiaEletricaTermica,

bccAluguelPredios, bccAluguelMaqEquipamentos, bccArmazenagemMercadoria, bccConArrendamentoMercantil,

bccMaqCredDepreciacao, bccMaqCredAquisicao, bccAmortizacaoDepreciacaoImoveis, bccDevolucaoSujeita,

bccOutrasOpeComDirCredito, bccAtTransporteSubcontratacao, bccAtImobCustoIncorrido,

bccAtImobCustoOrcado, bccAtPresServ, bccEstoqueAberturaBens]);

end;

function StrToIndCredOri(var ok: boolean; const s: string): TACBrIndCredOri;

begin

result := StrToEnumerado(ok, s, ['0', '1'],

[TACBrIndCredOri.icoOperProprias, TACBrIndCredOri.icoEvenFusaoCisao]);

end;

Carlos H. Marian

Analista de Sistemas

|/-\|

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois ...

Outra conversão:

interface

function StrToCodIndIncTributaria(var ok: boolean; const s: string): TACBrCodIndIncTributaria;

function StrToIndAproCred(var ok: boolean; const s: string): TACBrIndAproCred;

function StrToCodIndTipoCon(var ok: boolean; const s: string): TACBrCodIndTipoCon;

implementation

//Codigo indicador da incidencia tributária no período (0110)

function StrToCodIndIncTributaria(var ok: boolean; const s: string): TACBrCodIndIncTributaria;

begin

result := StrToEnumerado(ok, s, ['1', '2', '3'],

[codEscrOpIncNaoCumulativo, codEscrOpIncCumulativo, codEscrOpIncAmbos ]);

end;

//Código indicador de método de apropriação de créditos comuns, no caso de incidencia no regime não cumulativo(COD_INC_TRIB = 1 ou 3)(0110)

function StrToIndAproCred(var ok: boolean; const s: string): TACBrIndAproCred;

begin

result := StrToEnumerado(ok, s, ['1', '2'],

[indMetodoApropriacaoDireta, indMetodoDeRateioProporcional ]);

end;

//Código indicador do Tipo de Contribuição Apurada no Período(0110)

function StrToCodIndTipoCon(var ok: boolean; const s: string): TACBrCodIndTipoCon;

begin

result := StrToEnumerado(ok, s, ['1', '2'],

[codIndTipoConExclAliqBasica, codIndTipoAliqEspecificas ]);

end;

Carlos H. Marian

Analista de Sistemas

|/-\|

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...

Outra conversão:

interface

function StrToCodIndIncTributaria(var ok: boolean; const s: string): TACBrCodIndIncTributaria;

function StrToIndAproCred(var ok: boolean; const s: string): TACBrIndAproCred;

function StrToCodIndTipoCon(var ok: boolean; const s: string): TACBrCodIndTipoCon;

implementation

//Codigo indicador da incidencia tributária no período (0110)

function StrToCodIndIncTributaria(var ok: boolean; const s: string): TACBrCodIndIncTributaria;

begin

result := StrToEnumerado(ok, s, ['1', '2', '3'],

[codEscrOpIncNaoCumulativo, codEscrOpIncCumulativo, codEscrOpIncAmbos ]);

end;

//Código indicador de método de apropriação de créditos comuns, no caso de incidencia no regime não cumulativo(COD_INC_TRIB = 1 ou 3)(0110)

function StrToIndAproCred(var ok: boolean; const s: string): TACBrIndAproCred;

begin

result := StrToEnumerado(ok, s, ['1', '2'],

[indMetodoApropriacaoDireta, indMetodoDeRateioProporcional ]);

end;

//Código indicador do Tipo de Contribuição Apurada no Período(0110)

function StrToCodIndTipoCon(var ok: boolean; const s: string): TACBrCodIndTipoCon;

begin

result := StrToEnumerado(ok, s, ['1', '2'],

[codIndTipoConExclAliqBasica, codIndTipoAliqEspecificas ]);

end;

Boa noite pessoal, estas funções de conversão já foram adicionadas em alguma unit do projeto ACBr ?

Link para o comentário
Compartilhar em outros sites

Pessoal, essas funções são uteis, a acho que devamos fazer funções de conversão para todos os tipo, gostaria vocês fizessem as funções e fosse anexando as units alteradas aqui para que eu possa fazer os merges.

Vamos seguir as seguintes regras:

1o) Crie as funções no ACBrEPCBlocos.pas

2o) Faça a chamada da função nos metodos "WriteRegistro???" das classes

3o) anexe para mim "ACBrEPCBlocos.pas" e "ACBrEPCBloco_?_Class.pas" da(s) classes alteradas

Após isso eu baixarei e farei os merges em seguida subirei para o SVN.

Obrigado a todos.

--
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, essas funções são uteis, a acho que devamos fazer funções de conversão para todos os tipo, gostaria vocês fizessem as funções e fosse anexando as units alteradas aqui para que eu possa fazer os merges.

Vamos seguir as seguintes regras:

1o) Crie as funções no ACBrEPCBlocos.pas

2o) Faça a chamada da função nos metodos "WriteRegistro???" das classes

3o) anexe para mim "ACBrEPCBlocos.pas" e "ACBrEPCBloco_?_Class.pas" da(s) classes alteradas

Após isso eu baixarei e farei os merges em seguida subirei para o SVN.

Obrigado a todos.

Olá bom dia Isaque...

na minha opinião estes campos deveriam ser informativos, com apenas uma função para validar o seu conteúdo, da maneira que esta é muito complexa pra dar manutenção no código. Minha sugestão é, vou tomar como exemplo o campo IND_PGTO.

Atualmente temos que informar assim:

IND_PGTO := tpVista;

IND_PGTO := tpPrazo;

IND_PGTO := tpNenhum;

isso se resume no final na instrução abaixo;

case IND_PGTO of

tpVista : strIND_PGTO := '0';

tpPrazo : strIND_PGTO := '1';

tpSemPagamento :

begin

if DT_INI >= EncodeDate(2012,07,01) then

strIND_PGTO := '2'

else

strIND_PGTO := '9';

end;

tpNenhum : strIND_PGTO := '';

end;

Minha ideia é que IND_PGTO receba diretamente os valores '0', '1', '2' ou '9', bastando apenas um função para validar o conteúdo pertinente a este campo. Isso vai diminuir muito o código do componente.

Link para o comentário
Compartilhar em outros sites

Vilmar, concordo com você, na época inclusive comecei a fazer desse jeito, mas por sugestão do projeto ACBr tipei esses campos outro exemplo que acho que deveria ser string é a CST, todos conhemos e guardamos em nossos DB o CST assim "000", "020", "100"..., então não sei para que tipar...

Vamos colocar isso em discussão, se tivermos um bom numero de usuário a favor, podemos mudar, mas lembre-se se essas muda,ças forem feitas mudará o código de muitos tb que já usam como esta hj.

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

Então Isaque..., além da CST_ICMS tem as do PIS, COFINS, IPI e muitos outros casos semelhantes, quanto aos que já utilizam do jeito que esta, minha ideia seria criar uma propriedade no componente onde cada desenvolvedor escolha o que quer usar. Tipo criar a propriedade TIPOCONVERSAO := [tipado,direto], algo deste tipo. Onde [tipado] mantém o que esta e [direto] passando de forma direta o conteúdo. Q que você e os demais colegas acham, será que é possível ?

Link para o comentário
Compartilhar em outros sites

Então Isaque..., além da CST_ICMS tem as do PIS, COFINS, IPI e muitos outros casos semelhantes, quanto aos que já utilizam do jeito que esta, minha ideia seria criar uma propriedade no componente onde cada desenvolvedor escolha o que quer usar. Tipo criar a propriedade TIPOCONVERSAO := [tipado,direto], algo deste tipo. Onde [tipado] mantém o que esta e [direto] passando de forma direta o conteúdo. Q que você e os demais colegas acham, será que é possível ?

Vamos aguardar sugestões...

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

  • Consultores

Acho que o CST tem mesmo que ser STRING, conforme proposto nesse seguinte tópico

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

Na minha opinião, não só os campos CSTs, mas todos os que tiverem valores definidos por tabelas que o governo disponibiliza.

Compartilho da mesma opinião sua, vamos ouvir os demais.

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

Boa tarde,

Isaque... fiz algumas mudanças no componente como já conversamos em post anteriores;

As mudanças que fiz foi como você sugeriu, mantendo a compatibilidade do que já tem, criei uma nova propriedade para este fim. A propriedade é CAMPOENUM do tipo Boolean, por padrão é FALSE para manter a compatibilidade do componente com os campos TIPADOS, quando esta propriedade recebe TRUE, é possível passar de forma direta os valores para estes campos. Eu por enquanto fiz os testes nos seguintes campos: IND_PGTO, CST_ICMS, CST_IPI, CST_PIS E CST_COFINS.

TRegistroC100 = class

fIND_PGTO : TACBrTipoPagamento; /// Indicador do tipo de pagamento:

//Vilmar Diogo em 02/10/2012

fIND_PGTO_2 : String; /// Indicador do tipo de pagamento:

property IND_PGTO : TACBrTipoPagamento read FIND_PGTO write FIND_PGTO;

//Alterado por Vilmar Diogo em 02/10/2012

property IND_PGTO_2 : String read FIND_PGTO_2 write FIND_PGTO_2;

TRegistroC170 = class

fCST_ICMS : TACBrSituacaoTribICMS;

//Vilmar Diogo em 03/10/2012

fCST_ICMS_2 : String;

fCST_IPI : TACBrSituacaoTribIPI;

//Vilmar Diogo em 03/10/2012

fCST_IPI_2 : String;

fCST_PIS : TACBrSituacaoTribPIS;

//Vilmar Digoo em 03/10/2012

fCST_PIS_2 : String;

fCST_COFINS : TACBrSituacaoTribCOFINS;

//Vilmar Diogo em 03/10/2012

fCST_COFINS_2 : String;

property CST_ICMS : TACBrSituacaoTribICMS read FCST_ICMS write FCST_ICMS;

//Vilmar Diogo em 03/10/2012

property CST_ICMS_2 : String read FCST_ICMS_2 write FCST_ICMS_2;

fCST_PIS : TACBrSituacaoTribPIS; /// Código da Situação Tributária referente ao PIS.

//Vilmar Digoo em 03/10/2012

fCST_PIS_2 : String; /// Código da Situação Tributária referente ao PIS.

fCST_COFINS : TACBrSituacaoTribCOFINS; /// Código da Situação Tributária referente ao COFINS.

//Vilmar Diogo em 03/10/2012

fCST_COFINS_2 : String; /// Código da Situação Tributária referente ao COFINS.

como podem perceber criei mais uma propriedade para cada campo com final "_2" e do tipo String, esta foi a forma que eu fiz com o objetivo de facilitar o trabalho ao passar as informações nos campos. O exemplo abaixo mostra esta facilidade.

with RegistroC100New do

begin

// da forma TIPADO temos que seguir como abaixo

{

case dmPisCof.cdsC100IND_PAGTO.Value of

0: IND_PGTO := tpVista;

1: IND_PGTO := tpPrazo;

2: IND_PGTO := tpNenhum; //Ver isso conforme 01/07/2012 manual EFD

end;

}

// da forma DIRETA passo como abaixo bem mais simples

IND_PGTO_2 := dmPisCof.cdsC100IND_PAGTO.AsString;

end;

with RegistroC170New do //Inicio Adicionar os Itens:

begin

//da forma TIPADO

{

Case dmPisCof.cdsC170CST_ICMS.AsString of

'000': CST_ICMS := sticmsTributadaIntegralmente;

'???': CST_ICMS := ????

//Aqui temos que tratar todas as variações da CST em fim, bem trabalhoso

end;

}

//da forma DIRETA

CST_ICMS_2 := dmPisCof.cdsC170CST_ICMS.AsString;

end;

Fiz as alterações somente nos registros RegistroC100 e RegistroC170 para testar

Segue em anexo as uints que fiz estas alterações para que os colegas possam compartilhar da ideia se é válida ou não, apos baixar e salvando nas devidas pastas é só recompilar a BPL ACBr_SPED.bpl.

ACBrSpedPisCofins.pas

ACBrEPCBloco_C.pas

ACBrEPCBloco_C_Class.pas

post-1119-13548988190506.jpg

Link para o comentário
Compartilhar em outros sites

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