Ir para conteúdo
  • Cadastre-se

edvilson.chaves

Membros
  • Total de ítens

    53
  • Registro em

  • Última visita

Tudo que edvilson.chaves postou

  1. Pergunta idiota: Após essas alterações devo recompilar o ACBr?
  2. Olá Pessoal, Poderiam informar se tem uma solução para esse problema?
  3. Olá Pessoal! Alguém conseguiu resolver o problema da assinatura?
  4. Olá! Alguém saberia me informar como corrigir o problema da assinatura para Caxias do Sul/RS ?
  5. Lendo melhor outras situações do tópico comentei os Filtros que falavam de D:\Backup\FlexSistemas 2015\Fontes\Componentes\ACBR\Fontes\ACBrNFe2\ACBrDANFCeFortesFr.pas(725) Error: E2003 Undeclared identifier: 'SetVersion' D:\Backup\FlexSistemas 2015\Fontes\Componentes\ACBR\Fontes\ACBrNFe2\ACBrDANFCeFortesFr.pas(725) Error: E2003 Undeclared identifier: 'CommercialVersion' D:\Backup\FlexSistemas 2015\Fontes\Componentes\ACBR\Fontes\ACBrNFe2\ACBrDANFCeFortesFr.pas(725) Error: E2003 Undeclared identifier: 'ReleaseVersion' D:\Backup\FlexSistemas 2015\Fontes\Componentes\ACBR\Fontes\ACBrNFe2\ACBrDANFCeFortesFr.pas(725) Error: E2003 Undeclared identifier: 'CommentVersion' Comentei somente a linha 725 da unit ACBrDANFCeFortesFr.pas
  6. Olá a todos! Preciso testar o exemplo do ACBRNFe e não estou conseguindo por não ter instalado os componentes RaveReports e FortesReport. Então resolvi editar o exemplo. O RaveReports não baixei nem instalei pois vou substituir pelo FastReport. Baixei o FortesReport no GitHub. Instalei o FortesReport e fiz a primeira instalação do ACBRInstall deu erro dizendo que o FortesReport não existia "RLibWinDXE6" então abri meu Delphi e mudei o nome do pacote para RLibWinDXE6.bpl... A Instalação foi bem até a parte de compilar o ACBrNFeDanfeRLpkg.dpk aí deu erro na unit ACBrDANFCeFortesFr.pas (Segue log em anexo). Como corrigir esse problema? log_Delphi_XE6.txt
  7. hum...então pode ser isso existe algum tópico que fala disso? Duplicidade de Delphis? tenho hoje o 2007 e estou testando o XE2.
  8. Obrigado pela resposta pessoal, desculpe se a minha educação não foi das melhores...hehehe.... Então, ainda não resolvi o meu problema mas estou tentando, quando procuro vou direto no google munido do código que o delphi retorna para mim, neste caso foi o erro E2225 never-build...então apresentou esse tópico. 1. tentei fazer o que foi dito no outro tópico, depois da orientação de vocês, onde fala que era para remover os requires do pacote DANFE que no meu caso e QR e executar o build. Pois tentei fazer isso e nada. 2. Outra opção que tentei também explicada em outro tópico foi a de retirar o rebuild as needed também não funcionou. Mais alguma dica? Sou usuário do 2007 e estou migrando para XE2. É a primeira vez que estou utilizando o AcbrInstall que facilita e muito a vida!
  9. Desculpe amigo, Como é um fórum as respostas para uma pergunta em um tópico devem ser respondidas no mesmo tópico e não em outros, e a tua resposta foi muito explicativa tanto que o que você respondeu o lógico melhor se respondesse: "também não sei!". Conseguiu resolver o teu problema? o meu não continuo sem respostas...
  10. Olá Amigo, Estou enfrentando o mesmo problema. Você poderia dizer se conseguiu resolver o problema?
  11. Dae Serjão blza?? Cara qto tempo!! Feliz Natal pra ti e pra todos ae... Lembra dessa classe que vc tinha criado, peguei ela e fiz uma geral e implementei bastante coisa. Então resolvi tentar fazer ela funcionar novamente, uma vez que meus conhecimentos em tributação são muito poucos e estou me quebrando agora que tenho que implementar algumas funcionalidades para empresas do lucro presumido e real. No simples não calculo nada só mando a nota. Cara, acho que se o pessoal colaborar conosco essa classe vai render. Tá afim de encarar?? Eu sou parceiro!! Olha os últimos posts que ela está atualizada. Só estou acabando de fazer uma tela com campos para o cara ir interagindo e visualizar o resultado dos cálculos. A funcionalidade é incluir valores que serão rateados como por exemplo decsontos, frete, etc... incluir os itens e depois ir pegando os totalizadores como valor dos produtos, valor do icms ipi...etc... aquele abraço.
  12. Obrigado pela ajuda, Criei minha rotina de cancelamento tal qual o Demo e o resultado é o mesmo: o ACBrNFe1.WebServices.Cancelamento.RetWS ainda volta vazio. Coloquei a chamada dentro de um try...finally pode ser isso?
  13. Na consulta resolvi o problema informando ao invés de lACBrNFe.WebServices.Retorno troquei por lACBrNFe.WebServices.Consulta Agora o cancelamento continua, não adianta trocar lACBrNFe.WebServices.Retorno por lACBrNFe.WebServices.Cancelamento RetWS sempre retorna em branco.
  14. Olá, por que o conteúdo de ACBrNFe.WebServices.Retorno.RetWS está em branco depois de uma consulta ou de um cancelamento? function TFrm_NotasFiscais.ImprimirNFe: Boolean; var lNotasFiscais: TNotasFiscais; lACBrNFe: TACBrNFe; lNotaFiscal: NotaFiscal; lNomeArquivo: String; lMemoDados: TStrings; lAmbiente: Integer; begin Result := Dtm_NotasFiscais.TemRegistros; if Result then begin TFrm_EsperaProcesso.MostraMensagemEspera; try lACBrNFe := Frm_Principal.ACBrNFe(True); if not Assigned(lACBrNFe) then begin TFrm_EsperaProcesso.DestroiMensagemEspera; raise Exception.Create('ATENÇÃO:'+#13#10+'Operação de envio de NF-e não disponível.'); end; if not TSistema.DiretorioExiste(lACBrNFe.Configuracoes.Arquivos.GetPathNFe) then begin TFrm_EsperaProcesso.DestroiMensagemEspera; raise Exception.Create('ATENÇÃO:'+#13#10+'Diretório para salvar arquivos XML não existe.'+#13#10+'DIRETÓRIO: '+lACBrNFe.Configuracoes.Arquivos.GetPathNFe); end; if not TSistema.ValorVazio(Dtm_NotasFiscais.ClientDataSetARQUIVOS_ID) then begin Dtm_Arquivos.AcionaFiltro(Dtm_NotasFiscais.ClientDataSetARQUIVOS_ID.AsInteger); if Dtm_Arquivos.TemRegistros then begin if not TSistema.DiretorioExiste(lACBrNFe.Configuracoes.Geral.PathSalvar+'NFE_TEMP\') then if not TSistema.CriaDiretorio(lACBrNFe.Configuracoes.Geral.PathSalvar+'NFE_TEMP\') then raise Exception.Create('Problema ao criar pasta temporária para reposição de arquivos.'+#13#10+'Não foi possível criar o diretório, Verifique ou entre em contato com o administrador do sitema.'); lNomeArquivo := lACBrNFe.Configuracoes.Geral.PathSalvar+'NFE_TEMP\'+Dtm_NotasFiscais.ClientDataSetEMITENTE_ID.AsString+'_'+Dtm_NotasFiscais.ClientDataSetNRO_NOTA_FISCAL.AsString+'.XML'; Dtm_Arquivos.ClientDataSetARQUIVO.SaveToFile(lNomeArquivo); end else raise Exception.Create('Não foi encontrado arquivo XML da Nota Fiscal.'+#13#10+'Verifique ou entre em contato com o administrador do sitema.'); end else raise Exception.Create('Não foi encontrado arquivo XML da Nota Fiscal.'+#13#10+'Verifique ou entre em contato com o administrador do sitema.'); if not TSistema.ArquivoExiste(lNomeArquivo) then begin TFrm_EsperaProcesso.DestroiMensagemEspera; raise Exception.Create('ATENÇÃO:'+#13#10+'Arquivo XML não foi encontrado!'+#13#10+#13#10+'ARQUIVO: '+Dtm_NotasFiscais.ClientDataSetNOME_ARQUIVO_XML.AsString+#13#10+'DIRETÓRIO: '+lACBrNFe.Configuracoes.Arquivos.GetPathNFe); end; lNotasFiscais := lACBrNFe.NotasFiscais; lNotasFiscais.Clear; try lNotasFiscais.LoadFromFile(lNomeArquivo); except begin TFrm_EsperaProcesso.DestroiMensagemEspera; raise Exception.Create('ERRO:'+#13#10+'O Arquivo XML para envio é inválido.'); end; end; finally TFrm_EsperaProcesso.DestroiMensagemEspera; end; if (TMensagem.Mensagem('PERGUNTA:'+#13#10+'Você deseja consultar essa Nota Fiscal na base de dados da SEFAZ?', mtConfirmation, [mbYes, mbNo], mrYes) = mrYes) then begin TFrm_EsperaProcesso.MostraMensagemEspera; try Result := lACBrNFe.Consultar; finally TFrm_EsperaProcesso.DestroiMensagemEspera; end; if Result then begin TryStrToInt(TpAmbToStr(lACBrNFe.WebServices.Retorno.TpAmb), lAmbiente); Dtm_ProtEnviosXML.AcionaFiltro(lACBrNFe.WebServices.Retorno.Protocolo, lAmbiente); if not Dtm_ProtEnviosXML.TemRegistros then begin Dtm_ProtEnviosXML.InserirRegistro; Dtm_ProtEnviosXML.ClientDataSetAMBIENTE.AsInteger := lAmbiente; Dtm_ProtEnviosXML.ClientDataSetVER_APP.AsString := lACBrNFe.WebServices.Retorno.verAplic; Dtm_ProtEnviosXML.ClientDataSetSTAT.AsInteger := lACBrNFe.WebServices.Retorno.cStat; Dtm_ProtEnviosXML.ClientDataSetUF.AsInteger := lACBrNFe.WebServices.Retorno.cUF; Dtm_ProtEnviosXML.ClientDataSetMOTIVO.AsString := lACBrNFe.WebServices.Retorno.xMotivo; Dtm_ProtEnviosXML.ClientDataSetCMENSAGEM.AsInteger := lACBrNFe.WebServices.Retorno.cMsg; Dtm_ProtEnviosXML.ClientDataSetXMENSAGEM.AsString := lACBrNFe.WebServices.Retorno.xMsg; Dtm_ProtEnviosXML.ClientDataSetRECIBO.AsString := lACBrNFe.WebServices.Retorno.Recibo; Dtm_ProtEnviosXML.ClientDataSetPROTOCOLO.AsString := lACBrNFe.WebServices.Retorno.Protocolo; Dtm_ProtEnviosXML.SalvaRegistro; Dtm_NotasFiscais.EditarRegistro; Dtm_NotasFiscais.ClientDataSetPROTOCOLO_ENVIO_ID.AsInteger := Dtm_ProtEnviosXML.ClientDataSetID.AsInteger; Dtm_NotasFiscais.SalvaRegistro; end; end; lMemoDados := TStringList.Create; try lMemoDados.Clear; lMemoDados.Add('Consulta NF-e'); lMemoDados.Add('tpAmb: '+ TpAmbToStr(lACBrNFe.WebServices.Retorno.TpAmb)); lMemoDados.Add('verAplic: '+ lACBrNFe.WebServices.Retorno.verAplic); lMemoDados.Add('cStat: '+ IntToStr(lACBrNFe.WebServices.Retorno.cStat)); lMemoDados.Add('cUF: '+ IntToStr(lACBrNFe.WebServices.Retorno.cUF)); lMemoDados.Add('xMotivo: '+ lACBrNFe.WebServices.Retorno.xMotivo); lMemoDados.Add('cMsg: '+ IntToStr(lACBrNFe.WebServices.Retorno.cMsg)); lMemoDados.Add('xMsg: '+ lACBrNFe.WebServices.Retorno.xMsg); lMemoDados.Add('Recibo: '+ lACBrNFe.WebServices.Retorno.Recibo); lMemoDados.Add('Protocolo: '+ lACBrNFe.WebServices.Retorno.Protocolo); TFrm_RespostaNFe.ApresentaRetornoNFe(lACBrNFe.WebServices.Retorno.RetWS, 'Resultado da Consulta da NF-e', lMemoDados.Text); finally FreeAndNil(lMemoDados); end; end; lNotasFiscais.Imprimir; end; end; Aí não consigo pegar Nº de protocolo nem nada. Mexi por tudo e não achei solução.
  15. Olá, Gostaria da ajuda do pessoal para fazer esse barco começar a andar! Sei que é possível, já dei o "start" e não vou parar mas preciso da ajuda do pessoal. Para a próxima semana estou colocando aqui, um modelo que irá calcular e também transmitir junto com o ACBr para testar! Valeu até.
  16. Então é bem como estou fazendo: 1. Utiliza como Base o CRT do emissor e do destinatário 2. A UF de emissor e destinatário 3. o CST dos itens da NF A princípio é assim que ele trata.
  17. Coloquei as descrições de algumas CST´s faltaram algumas. Alguém pode completar? UClsCalcNF.pas
  18. Inclui as CST para ICMS - IPI - PIS - COFINS na classe dos TItensNF. Agora começa a parte complicada que o pessoal fala: Tratar nos cálculos cfe. as CST´s....bem mãos-à-obra!!! UClsCalcNF.pas
  19. Pessoal pergunto para vocês: Como é praticado o desconto na Nota Fiscal? Estou criando uma propriedade na Classe TNotaFiscal para alimentar o campo desconto do ACBrNFe. Como é concedido descontos em tributos e impostos? No geral como vocês praticam??
  20. Inclui na classe TPessoaFisJur: property CRT: TCRT read FCRT write FCRT; property ALiqCSOSN: Double read FALiqCSOSN write FALiqCSOSN; Caso for do Simples Nacional não realiza nenhum cálculo. Na próxima versão irei colocar tabela do Simples Nacional e cálculos do SN. Coloquei também o CSOSN e na classe TItemNF: property CSOSN: TCSOSN read FCSOSN write FCSOSN; Quando o CSOSN for 101 ou 201 irá calcular no total da nota o valor de crédito de CSOSN. Não sei se tem mais alguma coisa gostaria de sugestões para avançar. ok irei anexar os arquivos no post da proxima! vlw.
  21. Mais uma atualização da Classe de Cálculo (Divirtam-se!) unit UClsCalcNF; interface uses contnrs, Classes; const // AC AL AM AP BA CE DF ES GO MA MT MS MG PA PB PR PE PI RN RS RJ RO RR SC SP SE TO cAliquotaAC: array[0..26] of Integer = (17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaAL: array[0..26] of Integer = (12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaAM: array[0..26] of Integer = (12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaAP: array[0..26] of Integer = (12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaBA: array[0..26] of Integer = (12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaCE: array[0..26] of Integer = (12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaDF: array[0..26] of Integer = (12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaES: array[0..26] of Integer = (12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaGO: array[0..26] of Integer = (12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMA: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMT: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMS: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMG: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,18,07,07,12,07,07,07,12,12,07,07,12,12,07,07); cAliquotaPA: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaPB: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaPR: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,18,07,07,07,12,12,07,07,12,12,07,07); cAliquotaPE: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12); cAliquotaPI: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12); cAliquotaRN: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12); cAliquotaRS: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,17,12,07,07,12,12,07,07); cAliquotaRJ: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,12,18,07,07,12,12,07,07); cAliquotaRO: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12); cAliquotaRR: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12); cAliquotaSC: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,12,12,07,07,17,12,07,07); cAliquotaSP: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,12,12,07,07,12,18,07,07); cAliquotaSE: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12); cAliquotaTO: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17); type TCST = ( cst00, // Tributada integralmente cst10, // Tributada e com cobrança do ICMS por substituição tributária cst20, // Com redução de base de cálculo cst30, // Isenta ou não tributada e com cobrança do ICMS por substituição tributária cst40, // Isenta cst41, // Não tributada cst50, // Suspensão cst51, // Diferimento cst60, // ICMS cobrado anteriormente por substituição tributária cst70, // Com redução de base de cálculo e cobrança do ICMS por substituição tributária cst90 // Outras ); TCRT = ( // Código do Regime Tributário crtSimplesNacional, crtSimplesExcessoReceita, crtRegimeNormal ); TCSOSN = ( csosn101, csosn102, csosn103, csosn201, csosn202, csosn203, csosn300, csosn400, csosn500, csosn900 ); TNotaFiscal = class; TEstados = class private {private declarations} protected {protected declarations} public {public declarations} class function CodEstado(const pEstado: String): SmallInt; class function CodIBGEEstado(const pEstado: String): SmallInt; class function AliquotaInterEstadual(const pEstadoOrigem: String; const pEstadoDestino: String): Double; overload; class function AliquotaInterEstadual(const pEstadoOrigem: String): Double; overload; end; TPessoaFisJur = class(TComponent) private {private declarations} FNomeRazaoSocial: String; FEstado: String; FCRT: TCRT; FALiqCSOSN: Double; protected {protected declarations} public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pPessoaFisJur: TPessoaFisJur); reintroduce; procedure Inicializar; property NomeRazaoSocial: String read FNomeRazaoSocial write FNomeRazaoSocial; property Estado: String read FEstado write FEstado; property CRT: TCRT read FCRT write FCRT; property ALiqCSOSN: Double read FALiqCSOSN write FALiqCSOSN; end; TDuplicataNF = class(TComponent) private {private declarations} protected {protected declarations} public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pDuplicataNF: TDuplicataNF); reintroduce; procedure Inicializar; virtual; end; TDuplicatasNF = class(TObjectList) protected {protected declarations} function GetDuplicataNF(Index: Integer): TDuplicataNF; procedure SetDuplicataNF(Index: Integer; ADuplicataNF: TDuplicataNF); public {public declarations} function Add(ANotaFiscal: TNotaFiscal; ADuplicataNF: TDuplicataNF): Integer; function Remove(ADuplicataNF: TDuplicataNF): Integer; function IndexOf(ADuplicataNF: TDuplicataNF): Integer; procedure Insert(Index: Integer; ADuplicataNF: TDuplicataNF); property Items[Index]: TDuplicataNF read GetDuplicataNF write SetDuplicataNF; default; end; TItemNF = class(TComponent) private {private declarations} FCodProduto: String; FValorUnitario: Currency; FValorDesconto: Currency; FQuantidade: Double; FDescProduto: String; FItem: Integer; FNCMSH: String; FAliqIPI: Double; FAliqMVA: Double; FPeso: Double; FCST: TCST; FReducaoICMS: Double; FCSOSN: TCSOSN; function GetBC_ICMS_ST: Currency; function GetBC_ICMS_OP: Currency; function GetBC_IPI: Currency; function GetVL_DESPAC_PROP: Currency; function GetVL_FRETE_PROP: Currency; function GetVL_SEGUR_PROP: Currency; function GetPC_PROP_NF: Double; function GetVL_TOTAL_BRT: Currency; function GetVL_ICMS_OP: Currency; function GetVL_IPI: Currency; function GetVL_MVA: Currency; function GetVL_ICMS_ST: Currency; function GetVL_TOTAL_LIQ: Currency; function GetVL_CREDITO_CSOSN: Currency; protected {protected declarations} function NotaFiscal: TNotaFiscal; public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pItemNF: TItemNF); reintroduce; procedure Inicializar; virtual; property Item: Integer read FItem write FItem; property CodProduto: String read FCodProduto write FCodProduto; property DescProduto: String read FDescProduto write FDescProduto; property Quantidade: Double read FQuantidade write FQuantidade; property ValorUnitario: Currency read FValorUnitario write FValorUnitario; property ValorDesconto: Currency read FValorDesconto write FValorDesconto; property NCMSH: String read FNCMSH write FNCMSH; property AliqIPI: Double read FAliqIPI write FAliqIPI; property AliqMVA: Double read FAliqMVA write FAliqMVA; property Peso: Double read FPeso write FPeso; property CST: TCST read FCST write FCST; property CSOSN: TCSOSN read FCSOSN write FCSOSN; property ReducaoICMS: Double read FReducaoICMS write FReducaoICMS; property VL_CREDITO_CSOSN: Currency read GetVL_CREDITO_CSOSN; property VL_TOTAL_LIQ: Currency read GetVL_TOTAL_LIQ; property VL_TOTAL_BRT: Currency read GetVL_TOTAL_BRT; property BC_ICMS_OP: Currency read GetBC_ICMS_OP; property BC_ICMS_ST: Currency read GetBC_ICMS_ST; property VL_ICMS_OP: Currency read GetVL_ICMS_OP; property VL_ICMS_ST: Currency read GetVL_ICMS_ST; property BC_IPI: Currency read GetBC_IPI; property VL_IPI: Currency read GetVL_IPI; property VL_FRETE_PROP: Currency read GetVL_FRETE_PROP; property VL_SEGUR_PROP: Currency read GetVL_SEGUR_PROP; property VL_DESPAC_PROP: Currency read GetVL_DESPAC_PROP; property PC_PROP_NF: Double read GetPC_PROP_NF; property VL_MVA: Currency read GetVL_MVA; end; TEmitenteNF = class(TPessoaFisJur) private {private declarations} protected {protected declarations} public {public declarations} end; TDestinatarioNF = class(TPessoaFisJur) private {private declarations} protected {protected declarations} public {public declarations} end; TTransporteNF = class(TPessoaFisJur) private {private declarations} protected {protected declarations} public {public declarations} end; TItensNF = class(TObjectList) protected {protected declarations} function GetItemNF(Index: Integer): TItemNF; procedure SetItemNF(Index: Integer; AItemNF: TItemNF); public {public declarations} function Add(ANotaFiscal: TNotaFiscal; AItemNF: TItemNF): Integer; function Remove(AItemNF: TItemNF): Integer; function IndexOf(AItemNF: TItemNF): Integer; procedure Insert(Index: Integer; AItemNF: TItemNF); property Items[Index]: TItemNF read GetItemNF write SetItemNF; default; end; TValoresNF = class(TComponent) private {private declarations} FVL_SEGURO: Currency; FVL_FRETE: Currency; FVL_DESPACESS: Currency; function GetVL_TOTAL_PROD: Currency; function GetVL_TOTAL_NF: Currency; function GetBS_ICMS: Currency; function GetVL_ICMS: Currency; function GetBS_ICMS_ST: Currency; function GetVL_ICMS_ST: Currency; function GetVL_CREDITO_CSOSN: Currency; protected {protected declarations} function NotaFiscal: TNotaFiscal; public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pValoresNF: TValoresNF); reintroduce; procedure Inicializar; virtual; property VL_FRETE: Currency read FVL_FRETE write FVL_FRETE; property VL_SEGURO: Currency read FVL_SEGURO write FVL_SEGURO; property VL_DESPACESS: Currency read FVL_DESPACESS write FVL_DESPACESS; property VL_TOTAL_PROD: Currency read GetVL_TOTAL_PROD; property VL_TOTAL_NF: Currency read GetVL_TOTAL_NF; property BS_ICMS: Currency read GetBS_ICMS; property VL_ICMS: Currency read GetVL_ICMS; property BS_ICMS_ST: Currency read GetBS_ICMS_ST; property VL_ICMS_ST: Currency read GetVL_ICMS_ST; property VL_CREDITO_CSOSN: Currency read GetVL_CREDITO_CSOSN; end; TNotaFiscal = class(TComponent) private {private declarations} FItensNF: TItensNF; FDuplicatasNF: TDuplicatasNF; FDestinatarioNF: TDestinatarioNF; FEmitenteNF: TEmitenteNF; FTransporteNF: TTransporteNF; FValoresNF: TValoresNF; FObservacoes: TStrings; function GetPeso: Double; function GetNroItens: Integer; public {public declarations} constructor Create(AOwner: TComponent); override; procedure Inicializar; property EmitenteNF: TEmitenteNF read FEmitenteNF write FEmitenteNF; property DestinatarioNF: TDestinatarioNF read FDestinatarioNF write FDestinatarioNF; property TransporteNF: TTransporteNF read FTransporteNF write FTransporteNF; property ItensNF: TItensNF read FItensNF write FItensNF; property DuplicatasNF: TDuplicatasNF read FDuplicatasNF write FDuplicatasNF; property ValoresNF: TValoresNF read FValoresNF write FValoresNF; property Observacoes: TStrings read FObservacoes write FObservacoes; property Peso: Double read GetPeso; property NroItens: Integer read GetNroItens; end; TFuncoes = class class function Percentual(const pPercentual: Double; const pValor: Currency): Currency; class function RetornaPercentual(const pValorTotal: Currency; const pValor: Currency): Currency; end; implementation uses dialogs, SysUtils; { TNotaFiscal } constructor TNotaFiscal.Create(AOwner: TComponent); begin inherited; FObservacoes := TStringList.Create; ItensNF := TItensNF.Create; DuplicatasNF := TDuplicatasNF.Create; EmitenteNF := TEmitenteNF.Create(Self); DestinatarioNF := TDestinatarioNF.Create(Self); TransporteNF := TTransporteNF.Create(Self); ValoresNF := TValoresNF.Create(Self); end; function TNotaFiscal.GetNroItens: Integer; begin Result := FItensNF.Count; end; function TNotaFiscal.GetPeso: Double; var lItens: SmallInt; begin Result := 0; for lItens := 0 to ItensNF.Count -1 do Result := Result + ItensNF[lItens].Peso; end; procedure TNotaFiscal.Inicializar; begin EmitenteNF.Inicializar; DestinatarioNF.Inicializar; TransporteNF.Inicializar; ValoresNF.Inicializar; ItensNF.Clear; DuplicatasNF.Clear; Observacoes.Clear; end; { TItensNF } function TItensNF.Add(ANotaFiscal: TNotaFiscal; AItemNF: TItemNF): Integer; var lNovoItemNF: TItemNF; begin lNovoItemNF := TItemNF.Create(ANotaFiscal); lNovoItemNF.Assign(AItemNF); Result := inherited Add(lNovoItemNF); end; function TItensNF.GetItemNF(Index: Integer): TItemNF; begin Result := inherited Items[Index] as TItemNF; end; function TItensNF.IndexOf(AItemNF: TItemNF): Integer; begin Result := inherited IndexOf(AItemNF); end; procedure TItensNF.Insert(Index: Integer; AItemNF: TItemNF); begin inherited Insert(Index, AItemNF); end; function TItensNF.Remove(AItemNF: TItemNF): Integer; begin Result := inherited Remove(AItemNF); end; procedure TItensNF.SetItemNF(Index: Integer; AItemNF: TItemNF); begin Items[Index] := AItemNF; end; { TDuplicatasNF } function TDuplicatasNF.Add(ANotaFiscal: TNotaFiscal; ADuplicataNF: TDuplicataNF): Integer; var lNovaDuplicataNF: TDuplicataNF; begin lNovaDuplicataNF := TDuplicataNF.Create(ANotaFiscal); lNovaDuplicataNF.Assign(ADuplicataNF); Result := inherited Add(lNovaDuplicataNF); end; function TDuplicatasNF.GetDuplicataNF(Index: Integer): TDuplicataNF; begin Result := inherited Items[Index] as TDuplicataNF; end; function TDuplicatasNF.IndexOf(ADuplicataNF: TDuplicataNF): Integer; begin Result := inherited IndexOf(ADuplicataNF); end; procedure TDuplicatasNF.Insert(Index: Integer; ADuplicataNF: TDuplicataNF); begin inherited Insert(Index, ADuplicataNF); end; function TDuplicatasNF.Remove(ADuplicataNF: TDuplicataNF): Integer; begin Result := inherited Remove(ADuplicataNF); end; procedure TDuplicatasNF.SetDuplicataNF(Index: Integer; ADuplicataNF: TDuplicataNF); begin Items[Index] := ADuplicataNF; end; { TItemNF } procedure TItemNF.Assign(const pItemNF: TItemNF); begin Inicializar; CodProduto := pItemNF.CodProduto; ValorUnitario := pItemNF.ValorUnitario; ValorDesconto := pItemNF.ValorDesconto; Quantidade := pItemNF.Quantidade; DescProduto := pItemNF.DescProduto; Item := pItemNF.Item; NCMSH := pItemNF.NCMSH; AliqIPI := pItemNF.AliqIPI; AliqMVA := pItemNF.AliqMVA; Peso := pItemNF.Peso; CST := pItemNF.CST; CSOSN := pItemNF.CSOSN; ReducaoICMS := pItemNF.ReducaoICMS; end; constructor TItemNF.Create(AOwner: TComponent); begin inherited; Inicializar; end; function TItemNF.GetBC_ICMS_OP: Currency; begin if not (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin if CST in [cst30, cst40, cst41, cst50, cst60] then Result := 0 else begin Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP; if CST in [cst20, cst51, cst70, cst90] then Result := (Result - TFuncoes.Percentual(ReducaoICMS, Result)); end; end else Result := 0; end; function TItemNF.GetBC_ICMS_ST: Currency; begin if not (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin if CST in [cst00, cst20, cst40, cst41, cst50, cst51] then Result := 0 else Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP + VL_IPI + VL_MVA end else Result := 0; end; function TItemNF.GetBC_IPI: Currency; begin if not (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP else Result := 0; end; function TItemNF.GetVL_CREDITO_CSOSN: Currency; begin if (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin if (CSOSN in [csosn101, csosn201]) then Result := TFuncoes.Percentual(NotaFiscal.FEmitenteNF.ALiqCSOSN, VL_TOTAL_BRT) else Result := 0; end else Result := 0; end; function TItemNF.GetPC_PROP_NF: Double; var lPart: Double; begin Result := 100; if NotaFiscal.NroItens > 1 then begin lPart := TFuncoes.RetornaPercentual(NotaFiscal.ValoresNF.VL_TOTAL_PROD, VL_TOTAL_BRT); Result := TFuncoes.Percentual(lPart, Result); end; end; function TItemNF.GetVL_IPI: Currency; begin if not (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin Result := TFuncoes.Percentual(AliqIPI, BC_IPI); end else Result := 0; end; function TItemNF.GetVL_MVA: Currency; begin if not (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP + VL_IPI; Result := TFuncoes.Percentual(AliqMVA, Result); end else Result := 0; end; function TItemNF.GetVL_DESPAC_PROP: Currency; begin Result := TFuncoes.Percentual(PC_PROP_NF, NotaFiscal.ValoresNF.VL_DESPACESS); end; function TItemNF.GetVL_FRETE_PROP: Currency; begin Result := TFuncoes.Percentual(PC_PROP_NF, NotaFiscal.ValoresNF.VL_FRETE); end; function TItemNF.GetVL_SEGUR_PROP: Currency; begin Result := TFuncoes.Percentual(PC_PROP_NF, NotaFiscal.ValoresNF.VL_SEGURO); end; function TItemNF.GetVL_TOTAL_BRT: Currency; begin Result := Quantidade * ValorUnitario; end; function TItemNF.GetVL_ICMS_OP: Currency; var lAliq: Double; begin if not (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin if CST in [cst30, cst40, cst41, cst50, cst60] then Result := 0 else begin lAliq := TEstados.AliquotaInterEstadual(NotaFiscal.EmitenteNF.Estado, NotaFiscal.DestinatarioNF.Estado); Result := TFuncoes.Percentual(lAliq, BC_ICMS_OP); end; end else Result := 0; end; procedure TItemNF.Inicializar; begin Item := 0; CodProduto := EmptyStr; DescProduto := EmptyStr; Quantidade := 0; ValorUnitario := 0; ValorDesconto := 0; NCMSH := EmptyStr; AliqIPI := 0; Peso := 0; AliqMVA := 0; CST := cst00; CSOSN := csosn900; end; function TItemNF.NotaFiscal: TNotaFiscal; begin Result := (Owner as TNotaFiscal); end; function TItemNF.GetVL_ICMS_ST: Currency; var lAliq: Double; begin if not (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin if CST in [cst00, cst20, cst40, cst41, cst50, cst51] then Result := 0 else begin lAliq := TEstados.AliquotaInterEstadual(NotaFiscal.EmitenteNF.Estado); Result := TFuncoes.Percentual(lAliq, BC_ICMS_ST); Result := Result - VL_ICMS_OP; end; end else Result := 0; end; function TItemNF.GetVL_TOTAL_LIQ: Currency; begin Result := VL_TOTAL_BRT + VL_IPI + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP + VL_ICMS_ST; end; { TDuplicataNF } procedure TDuplicataNF.Assign(const pDuplicataNF: TDuplicataNF); begin end; constructor TDuplicataNF.Create(AOwner: TComponent); begin inherited; Inicializar; end; procedure TDuplicataNF.Inicializar; begin end; { TPessoaFisJur } procedure TPessoaFisJur.Assign(const pPessoaFisJur: TPessoaFisJur); begin Inicializar; NomeRazaoSocial := pPessoaFisJur.NomeRazaoSocial; Estado := pPessoaFisJur.Estado; CRT := pPessoaFisJur.CRT; ALiqCSOSN := pPessoaFisJur.ALiqCSOSN; end; constructor TPessoaFisJur.Create(AOwner: TComponent); begin inherited; Inicializar; end; procedure TPessoaFisJur.Inicializar; begin NomeRazaoSocial := EmptyStr; Estado := EmptyStr; CRT := crtSimplesNacional; ALiqCSOSN := 0; end; { TValoresNF } procedure TValoresNF.Assign(const pValoresNF: TValoresNF); begin end; constructor TValoresNF.Create(AOwner: TComponent); begin inherited; Inicializar; end; function TValoresNF.GetBS_ICMS: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].BC_ICMS_OP; end; function TValoresNF.GetVL_TOTAL_NF: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_TOTAL_LIQ; end; function TValoresNF.GetVL_TOTAL_PROD: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_TOTAL_BRT; end; function TValoresNF.GetVL_CREDITO_CSOSN: Currency; var lItens: SmallInt; begin if (NotaFiscal.EmitenteNF.CRT = crtSimplesNacional) then begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_CREDITO_CSOSN; end else Result := 0; end; function TValoresNF.GetVL_ICMS: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_ICMS_OP; end; procedure TValoresNF.Inicializar; begin VL_FRETE := 0; VL_SEGURO := 0; VL_DESPACESS := 0; end; function TValoresNF.NotaFiscal: TNotaFiscal; begin Result := (Owner as TNotaFiscal); end; function TValoresNF.GetBS_ICMS_ST: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].BC_ICMS_ST; end; function TValoresNF.GetVL_ICMS_ST: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_ICMS_ST; end; { TEstados } class function TEstados.AliquotaInterEstadual(const pEstadoOrigem, pEstadoDestino: String): Double; var lEstadoDestino: SmallInt; begin lEstadoDestino := TEstados.CodEstado(pEstadoDestino); if pEstadoOrigem = 'AC' then Result := cAliquotaAC[lEstadoDestino] else if pEstadoOrigem = 'AL' then Result := cAliquotaAL[lEstadoDestino] else if pEstadoOrigem = 'AM' then Result := cAliquotaAM[lEstadoDestino] else if pEstadoOrigem = 'AP' then Result := cAliquotaAP[lEstadoDestino] else if pEstadoOrigem = 'BA' then Result := cAliquotaBA[lEstadoDestino] else if pEstadoOrigem = 'CE' then Result := cAliquotaCE[lEstadoDestino] else if pEstadoOrigem = 'DF' then Result := cAliquotaDF[lEstadoDestino] else if pEstadoOrigem = 'ES' then Result := cAliquotaES[lEstadoDestino] else if pEstadoOrigem = 'GO' then Result := cAliquotaGO[lEstadoDestino] else if pEstadoOrigem = 'MA' then Result := cAliquotaMA[lEstadoDestino] else if pEstadoOrigem = 'MT' then Result := cAliquotaMT[lEstadoDestino] else if pEstadoOrigem = 'MS' then Result := cAliquotaMS[lEstadoDestino] else if pEstadoOrigem = 'MG' then Result := cAliquotaMG[lEstadoDestino] else if pEstadoOrigem = 'PA' then Result := cAliquotaPA[lEstadoDestino] else if pEstadoOrigem = 'PB' then Result := cAliquotaPB[lEstadoDestino] else if pEstadoOrigem = 'PR' then Result := cAliquotaPR[lEstadoDestino] else if pEstadoOrigem = 'PE' then Result := cAliquotaPE[lEstadoDestino] else if pEstadoOrigem = 'PI' then Result := cAliquotaPI[lEstadoDestino] else if pEstadoOrigem = 'RN' then Result := cAliquotaRN[lEstadoDestino] else if pEstadoOrigem = 'RS' then Result := cAliquotaRS[lEstadoDestino] else if pEstadoOrigem = 'RJ' then Result := cAliquotaRJ[lEstadoDestino] else if pEstadoOrigem = 'RO' then Result := cAliquotaRO[lEstadoDestino] else if pEstadoOrigem = 'RR' then Result := cAliquotaRR[lEstadoDestino] else if pEstadoOrigem = 'SC' then Result := cAliquotaSC[lEstadoDestino] else if pEstadoOrigem = 'SP' then Result := cAliquotaSP[lEstadoDestino] else if pEstadoOrigem = 'SE' then Result := cAliquotaSE[lEstadoDestino] else if pEstadoOrigem = 'TO' then Result := cAliquotaTO[lEstadoDestino] else Result := 0; end; class function TEstados.AliquotaInterEstadual(const pEstadoOrigem: String): Double; begin Result := AliquotaInterEstadual(pEstadoOrigem, pEstadoOrigem); end; class function TEstados.CodEstado(const pEstado: String): SmallInt; begin if pEstado = 'AC' then Result := 00 else if pEstado = 'AL' then Result := 01 else if pEstado = 'AM' then Result := 02 else if pEstado = 'AP' then Result := 03 else if pEstado = 'BA' then Result := 04 else if pEstado = 'CE' then Result := 05 else if pEstado = 'DF' then Result := 06 else if pEstado = 'ES' then Result := 07 else if pEstado = 'GO' then Result := 08 else if pEstado = 'MA' then Result := 09 else if pEstado = 'MT' then Result := 10 else if pEstado = 'MS' then Result := 11 else if pEstado = 'MG' then Result := 12 else if pEstado = 'PA' then Result := 13 else if pEstado = 'PB' then Result := 14 else if pEstado = 'PR' then Result := 15 else if pEstado = 'PE' then Result := 16 else if pEstado = 'PI' then Result := 17 else if pEstado = 'RN' then Result := 18 else if pEstado = 'RS' then Result := 19 else if pEstado = 'RJ' then Result := 20 else if pEstado = 'RO' then Result := 21 else if pEstado = 'RR' then Result := 22 else if pEstado = 'SC' then Result := 23 else if pEstado = 'SP' then Result := 24 else if pEstado = 'SE' then Result := 25 else if pEstado = 'TO' then Result := 26 else Result := 0; end; class function TEstados.CodIBGEEstado(const pEstado: String): SmallInt; begin if pEstado = 'RO' then Result := 11 else if pEstado = 'AC' then Result := 12 else if pEstado = 'AM' then Result := 13 else if pEstado = 'RR' then Result := 14 else if pEstado = 'PA' then Result := 15 else if pEstado = 'AP' then Result := 16 else if pEstado = 'TO' then Result := 17 else if pEstado = 'MA' then Result := 21 else if pEstado = 'PI' then Result := 22 else if pEstado = 'CE' then Result := 23 else if pEstado = 'RN' then Result := 24 else if pEstado = 'PB' then Result := 25 else if pEstado = 'PE' then Result := 26 else if pEstado = 'AL' then Result := 27 else if pEstado = 'SE' then Result := 28 else if pEstado = 'BA' then Result := 29 else if pEstado = 'MG' then Result := 31 else if pEstado = 'ES' then Result := 32 else if pEstado = 'RJ' then Result := 33 else if pEstado = 'SP' then Result := 35 else if pEstado = 'PR' then Result := 41 else if pEstado = 'SC' then Result := 42 else if pEstado = 'RS' then Result := 43 else if pEstado = 'MS' then Result := 50 else if pEstado = 'MT' then Result := 51 else if pEstado = 'GO' then Result := 52 else if pEstado = 'DF' then Result := 53 else Result := 0; end; { TFuncoes } class function TFuncoes.Percentual(const pPercentual: Double; const pValor: Currency): Currency; begin Result := 0; if pValor > 0 then Result := (pValor * pPercentual) / 100; end; class function TFuncoes.RetornaPercentual(const pValorTotal, pValor: Currency): Currency; begin Result := 0; if pValorTotal > 0 then Result := ((pValor / pValorTotal) * 100); end; { var lItemNF: TItemNF; // lDuplicataNF: TDuplicataNF; begin FNotaFiscal := TNotaFiscal.Create(Self); try lItemNF := TItemNF.Create(FNotaFiscal); // lDuplicataNF := TDuplicataNF.Create(FNotaFiscal); FNotaFiscal.Inicializar; FNotaFiscal.ValoresNF.VL_FRETE := 20.00; FNotaFiscal.ValoresNF.VL_SEGURO := 12.00; FNotaFiscal.EmitenteNF.NomeRazaoSocial := 'Empresa Industrial Alpha Ltda'; FNotaFiscal.EmitenteNF.CRT := crtSimplesNacional; FNotaFiscal.EmitenteNF.ALiqCSOSN := 2.2; FNotaFiscal.EmitenteNF.Estado := 'MG'; FNotaFiscal.DestinatarioNF.NomeRazaoSocial := 'Empresa Atacadista Betha Ltda'; FNotaFiscal.DestinatarioNF.CRT := crtSimplesNacional; FNotaFiscal.DestinatarioNF.Estado := 'ES'; FNotaFiscal.Observacoes.Add('operação sujeita ao regime de Substituição Tributária nos termos do Convênio ICMS nº 85/1993.'); lItemNF.Inicializar; lItemNF.Item := 2; lItemNF.CodProduto := 'PR01'; lItemNF.DescProduto := 'PNEUS NOVOS PARA AUTOMOVEL'; lItemNF.NCMSH := '4011.10.00'; lItemNF.AliqMVA := 42.00; lItemNF.AliqIPI := 20; lItemNF.Quantidade := 300; lItemNF.ValorUnitario := 40.00; lItemNF.Peso := 50.00; lItemNF.CST := cst10; lItemNF.CSOSN := csosn201; lItemNF.ReducaoICMS := 0; FNotaFiscal.ItensNF.Add(FNotaFiscal, lItemNF); ShowMessage( 'VL_FRETE ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_FRETE) + #13#10 + 'VL_SEGURO ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_SEGURO) + #13#10 + 'VL_DESPACESS ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_DESPACESS) + #13#10 + 'VL_TOTAL_PROD---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_TOTAL_PROD) + #13#10 + 'VL_TOTAL_NF ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_TOTAL_NF) + #13#10 + 'BS_ICMS ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.BS_ICMS) + #13#10 + 'VL_ICMS ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_ICMS) + #13#10 + 'BS_ICMS_ST ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.BS_ICMS_ST) + #13#10 + 'VL_CREDITO_CSOSN ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_CREDITO_CSOSN) + #13#10 + 'VL_ICMS_ST ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_ICMS_ST) ); finally FreeAndNil(FNotaFiscal); end; } end.
  22. Pois é André entendo bem, pois hoje o ACBr é um componente consolidado no mercado e não quero de forma alguma manchar essa imagem, Mas penso que com o número de programadores que utilizam seria fácil implementar a tal classe. Fiz ela de de uma forma que se alguém trabalhasse em conjunto comigo teríamos sucesso! Outra questão do porque acho válido criar isso é o fato dos contadores não estarem nem aí pro cálculo e ainda se tdo está correto e o erro for deles com toda certeza dirão que a culpa e do sistema como sempre. Se pretendemos fazer algo em conjunto com esses caras temos sempre que tirar grana (e não é pouca) do bolso. Está tudo baseado no emitente, no destinatário e nos itens. Veja: Procedimentos: 1. Criamos a Nota Fiscal (Classe TNotaFiscal) 2. Adiciona-se os valores como frete, acessórias, etc... na nota fiscal (NotaFiscal.ValoresNF) 3. Emitente e destinatário da TNotaFiscal (Aqui quero colocar algumas propriedades que serão utilizadas para o cálculo nos itens como por exemplo CRT, CNAE, CSOSN...e o que mais for necessário). Hoje ele só etá tratando o estado para o cálculo do ICMS (mal e porcamente). 4. Adicionar os items com a classe TItemNF e ir passando as alíquotas conforme o possível cadastro que você tiver (ICMS, IPI, PIS, COFINS...CST...ETC...) Feito isso é só ir pegando os valores disponíveis na TNota_Fiscal que estão disponíveis e a gente pode ir criando. Sei lá o pessoal fala que é complicado mas se trabalharmos juntos poderiamos fazer À ROTINA de cálculo, e aí depois de bem consolidado quem sabe colocar no ACBr como ACBrCalcNFe hein??? Dá uma olhada no segundo post que coloquei exemplifica o que quero...
  23. Este é o exemplo de como usar: Se alguém puder colocar isso no ACBr seria de grande valia para todos!!!! var lItemNF: TItemNF; // lDuplicataNF: TDuplicataNF; begin FNotaFiscal := TNotaFiscal.Create(Self); try lItemNF := TItemNF.Create(FNotaFiscal); // lDuplicataNF := TDuplicataNF.Create(FNotaFiscal); FNotaFiscal.Inicializar; FNotaFiscal.ValoresNF.VL_FRETE := 20.00; FNotaFiscal.ValoresNF.VL_SEGURO := 12.00; FNotaFiscal.EmitenteNF.NomeRazaoSocial := 'Empresa Industrial Alpha Ltda'; FNotaFiscal.EmitenteNF.Estado := 'MG'; FNotaFiscal.DestinatarioNF.NomeRazaoSocial := 'Empresa Atacadista Betha Ltda'; FNotaFiscal.DestinatarioNF.Estado := 'ES'; FNotaFiscal.Observacoes.Add('operação sujeita ao regime de Substituição Tributária nos termos do Convênio ICMS nº 85/1993.'); lItemNF.Inicializar; lItemNF.Item := 2; lItemNF.CodProduto := 'PR01'; lItemNF.DescProduto := 'PNEUS NOVOS PARA AUTOMOVEL'; lItemNF.ClassFiscal := '4011.10.00'; lItemNF.AliqMVA := 42.00; lItemNF.AliqIPI := 20; lItemNF.Quantidade := 300; lItemNF.ValorUnitario := 40.00; lItemNF.Peso := 50.00; lItemNF.ClassTributaria := cst10; lItemNF.ReducaoICMS := 0; FNotaFiscal.ItensNF.Add(FNotaFiscal, lItemNF); ShowMessage( 'VL_FRETE ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_FRETE) + #13#10 + 'VL_SEGURO ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_SEGURO) + #13#10 + 'VL_DESPACESS ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_DESPACESS) + #13#10 + 'VL_TOTAL_PROD---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_TOTAL_PROD) + #13#10 + 'VL_TOTAL_NF ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_TOTAL_NF) + #13#10 + 'BS_ICMS ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.BS_ICMS) + #13#10 + 'VL_ICMS ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_ICMS) + #13#10 + 'BS_ICMS_ST ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.BS_ICMS_ST) + #13#10 + 'VL_ICMS_ST ---> ' + FormatCurr('###,###,##0.00', FNotaFiscal.ValoresNF.VL_ICMS_ST) ); finally FreeAndNil(FNotaFiscal); end;
  24. Olá Pessoal! Vou disponibilizar aqui minha classe para calculo de impotos e tributos na nota fiscal. Sim, sei perfeitamente que exige muito e que são vários pontos, mas se um dia alguém começar e dar seguimento poderemos colocar ela pra funcionar! Segue então o código completo da primeira classe que fiz com a ajuda do nosso companheiro Sergio Guedes. unit UClsCalcNF; interface uses contnrs, Classes; const // AC AL AM AP BA CE DF ES GO MA MT MS MG PA PB PR PE PI RN RS RJ RO RR SC SP SE TO cAliquotaAC: array[0..26] of Integer = (17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaAL: array[0..26] of Integer = (12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaAM: array[0..26] of Integer = (12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaAP: array[0..26] of Integer = (12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaBA: array[0..26] of Integer = (12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaCE: array[0..26] of Integer = (12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaDF: array[0..26] of Integer = (12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaES: array[0..26] of Integer = (12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaGO: array[0..26] of Integer = (12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMA: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMT: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMS: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaMG: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,18,07,07,12,07,07,07,12,12,07,07,12,12,07,07); cAliquotaPA: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaPB: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12,12,12); cAliquotaPR: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,18,07,07,07,12,12,07,07,12,12,07,07); cAliquotaPE: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12,12); cAliquotaPI: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12,12); cAliquotaRN: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12,12,12,12); cAliquotaRS: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,17,12,07,07,12,12,07,07); cAliquotaRJ: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,12,18,07,07,12,12,07,07); cAliquotaRO: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12,12); cAliquotaRR: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12,12,12,12); cAliquotaSC: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,12,12,07,07,17,12,07,07); cAliquotaSP: array[0..26] of Integer = (07,07,07,07,07,07,07,07,07,07,07,07,12,07,07,12,07,07,07,12,12,07,07,12,18,07,07); cAliquotaSE: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17,12); cAliquotaTO: array[0..26] of Integer = (12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,17); type TClassTributaria = ( cst00, // Tributada integralmente cst10, // Tributada e com cobrança do ICMS por substituição tributária cst20, // Com redução de base de cálculo cst30, // Isenta ou não tributada e com cobrança do ICMS por substituição tributária cst40, // Isenta cst41, // Não tributada cst50, // Suspensão cst51, // Diferimento cst60, // ICMS cobrado anteriormente por substituição tributária cst70, // Com redução de base de cálculo e cobrança do ICMS por substituição tributária cst90 // Outras ); TNotaFiscal = class; TEstados = class private {private declarations} protected {protected declarations} public {public declarations} class function CodEstado(const pEstado: String): SmallInt; class function CodIBGEEstado(const pEstado: String): SmallInt; class function AliquotaInterEstadual(const pEstadoOrigem: String; const pEstadoDestino: String): Double; overload; class function AliquotaInterEstadual(const pEstadoOrigem: String): Double; overload; end; TPessoaFisJur = class(TComponent) private {private declarations} FNomeRazaoSocial: String; FEstado: String; protected {protected declarations} public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pPessoaFisJur: TPessoaFisJur); reintroduce; procedure Inicializar; property NomeRazaoSocial: String read FNomeRazaoSocial write FNomeRazaoSocial; property Estado: String read FEstado write FEstado; end; TDuplicataNF = class(TComponent) private {private declarations} protected {protected declarations} public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pDuplicataNF: TDuplicataNF); reintroduce; procedure Inicializar; virtual; end; TDuplicatasNF = class(TObjectList) protected {protected declarations} function GetDuplicataNF(Index: Integer): TDuplicataNF; procedure SetDuplicataNF(Index: Integer; ADuplicataNF: TDuplicataNF); public {public declarations} function Add(ANotaFiscal: TNotaFiscal; ADuplicataNF: TDuplicataNF): Integer; function Remove(ADuplicataNF: TDuplicataNF): Integer; function IndexOf(ADuplicataNF: TDuplicataNF): Integer; procedure Insert(Index: Integer; ADuplicataNF: TDuplicataNF); property Items[Index]: TDuplicataNF read GetDuplicataNF write SetDuplicataNF; default; end; TItemNF = class(TComponent) private {private declarations} FCodProduto: String; FValorUnitario: Currency; FValorDesconto: Currency; FQuantidade: Double; FDescProduto: String; FItem: Integer; FClassFiscal: String; FAliqIPI: Double; FAliqMVA: Double; FPeso: Double; FClassTributaria: TClassTributaria; FReducaoICMS: Double; procedure SetCodProduto(const Value: String); procedure SetDescProduto(const Value: String); procedure SetQuantidade(const Value: Double); procedure SetValorDesconto(const Value: Currency); procedure SetValorUnitario(const Value: Currency); procedure SetItem(const Value: Integer); procedure SetClassFiscal(const Value: String); procedure SetAliqIPI(const Value: Double); procedure SetAliqMVA(const Value: Double); procedure SetPeso(const Value: Double); procedure SetClassTributaria(const Value: TClassTributaria); procedure SetReducaoICMS(const Value: Double); function GetBC_ICMS_ST: Currency; function GetBC_ICMS_OP: Currency; function GetBC_IPI: Currency; function GetVL_DESPAC_PROP: Currency; function GetVL_FRETE_PROP: Currency; function GetVL_SEGUR_PROP: Currency; function GetPC_PROP_NF: Double; function GetVL_TOTAL_BRT: Currency; function GetVL_ICMS_OP: Currency; function GetVL_IPI: Currency; function GetVL_MVA: Currency; function GetVL_ICMS_ST: Currency; function GetVL_TOTAL_LIQ: Currency; protected {protected declarations} function NotaFiscal: TNotaFiscal; public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pItemNF: TItemNF); reintroduce; procedure Inicializar; virtual; property Item: Integer read FItem write SetItem; property CodProduto: String read FCodProduto write SetCodProduto; property DescProduto: String read FDescProduto write SetDescProduto; property Quantidade: Double read FQuantidade write SetQuantidade; property ValorUnitario: Currency read FValorUnitario write SetValorUnitario; property ValorDesconto: Currency read FValorDesconto write SetValorDesconto; property ClassFiscal: String read FClassFiscal write SetClassFiscal; property AliqIPI: Double read FAliqIPI write SetAliqIPI; property AliqMVA: Double read FAliqMVA write SetAliqMVA; property Peso: Double read FPeso write SetPeso; property ClassTributaria: TClassTributaria read FClassTributaria write SetClassTributaria; property ReducaoICMS: Double read FReducaoICMS write SetReducaoICMS; property VL_TOTAL_LIQ: Currency read GetVL_TOTAL_LIQ; property VL_TOTAL_BRT: Currency read GetVL_TOTAL_BRT; property BC_ICMS_OP: Currency read GetBC_ICMS_OP; property BC_ICMS_ST: Currency read GetBC_ICMS_ST; property VL_ICMS_OP: Currency read GetVL_ICMS_OP; property VL_ICMS_ST: Currency read GetVL_ICMS_ST; property BC_IPI: Currency read GetBC_IPI; property VL_IPI: Currency read GetVL_IPI; property VL_FRETE_PROP: Currency read GetVL_FRETE_PROP; property VL_SEGUR_PROP: Currency read GetVL_SEGUR_PROP; property VL_DESPAC_PROP: Currency read GetVL_DESPAC_PROP; property PC_PROP_NF: Double read GetPC_PROP_NF; property VL_MVA: Currency read GetVL_MVA; end; TEmitenteNF = class(TPessoaFisJur) private {private declarations} protected {protected declarations} public {public declarations} end; TDestinatarioNF = class(TPessoaFisJur) private {private declarations} protected {protected declarations} public {public declarations} end; TTransporteNF = class(TPessoaFisJur) private {private declarations} protected {protected declarations} public {public declarations} end; TItensNF = class(TObjectList) protected {protected declarations} function GetItemNF(Index: Integer): TItemNF; procedure SetItemNF(Index: Integer; AItemNF: TItemNF); public {public declarations} function Add(ANotaFiscal: TNotaFiscal; AItemNF: TItemNF): Integer; function Remove(AItemNF: TItemNF): Integer; function IndexOf(AItemNF: TItemNF): Integer; procedure Insert(Index: Integer; AItemNF: TItemNF); property Items[Index]: TItemNF read GetItemNF write SetItemNF; default; end; TValoresNF = class(TComponent) private {private declarations} FVL_SEGURO: Currency; FVL_FRETE: Currency; FVL_DESPACESS: Currency; function GetVL_TOTAL_PROD: Currency; function GetVL_TOTAL_NF: Currency; function GetBS_ICMS: Currency; function GetVL_ICMS: Currency; function GetBS_ICMS_ST: Currency; function GetVL_ICMS_ST: Currency; protected {protected declarations} function NotaFiscal: TNotaFiscal; public {public declarations} constructor Create(AOwner: TComponent); override; procedure Assign(const pValoresNF: TValoresNF); reintroduce; procedure Inicializar; virtual; property VL_FRETE: Currency read FVL_FRETE write FVL_FRETE; property VL_SEGURO: Currency read FVL_SEGURO write FVL_SEGURO; property VL_DESPACESS: Currency read FVL_DESPACESS write FVL_DESPACESS; property VL_TOTAL_PROD: Currency read GetVL_TOTAL_PROD; property VL_TOTAL_NF: Currency read GetVL_TOTAL_NF; property BS_ICMS: Currency read GetBS_ICMS; property VL_ICMS: Currency read GetVL_ICMS; property BS_ICMS_ST: Currency read GetBS_ICMS_ST; property VL_ICMS_ST: Currency read GetVL_ICMS_ST; end; TNotaFiscal = class(TComponent) private {private declarations} FItensNF: TItensNF; FDuplicatasNF: TDuplicatasNF; FDestinatarioNF: TDestinatarioNF; FEmitenteNF: TEmitenteNF; FTransporteNF: TTransporteNF; FValoresNF: TValoresNF; FObservacoes: TStrings; procedure SetObservacoes(const Value: TStrings); function GetPeso: Double; function GetNroItens: Integer; public {public declarations} constructor Create(AOwner: TComponent); override; procedure Inicializar; property EmitenteNF: TEmitenteNF read FEmitenteNF write FEmitenteNF; property DestinatarioNF: TDestinatarioNF read FDestinatarioNF write FDestinatarioNF; property TransporteNF: TTransporteNF read FTransporteNF write FTransporteNF; property ItensNF: TItensNF read FItensNF write FItensNF; property DuplicatasNF: TDuplicatasNF read FDuplicatasNF write FDuplicatasNF; property ValoresNF: TValoresNF read FValoresNF write FValoresNF; property Observacoes: TStrings read FObservacoes write SetObservacoes; property Peso: Double read GetPeso; property NroItens: Integer read GetNroItens; end; TFuncoes = class class function Percentual(const pPercentual: Double; const pValor: Currency): Currency; class function RetornaPercentual(const pValorTotal: Currency; const pValor: Currency): Currency; end; implementation uses dialogs, SysUtils; { TNotaFiscal } constructor TNotaFiscal.Create(AOwner: TComponent); begin inherited; FObservacoes := TStringList.Create; ItensNF := TItensNF.Create; DuplicatasNF := TDuplicatasNF.Create; EmitenteNF := TEmitenteNF.Create(Self); DestinatarioNF := TDestinatarioNF.Create(Self); TransporteNF := TTransporteNF.Create(Self); ValoresNF := TValoresNF.Create(Self); end; function TNotaFiscal.GetNroItens: Integer; begin Result := FItensNF.Count; end; function TNotaFiscal.GetPeso: Double; var lItens: SmallInt; begin Result := 0; for lItens := 0 to ItensNF.Count -1 do Result := Result + ItensNF[lItens].Peso; end; procedure TNotaFiscal.Inicializar; begin EmitenteNF.Inicializar; DestinatarioNF.Inicializar; TransporteNF.Inicializar; ValoresNF.Inicializar; ItensNF.Clear; DuplicatasNF.Clear; Observacoes.Clear; end; procedure TNotaFiscal.SetObservacoes(const Value: TStrings); begin FObservacoes := Value; end; { TItensNF } function TItensNF.Add(ANotaFiscal: TNotaFiscal; AItemNF: TItemNF): Integer; var lNovoItemNF: TItemNF; begin lNovoItemNF := TItemNF.Create(ANotaFiscal); lNovoItemNF.Assign(AItemNF); Result := inherited Add(lNovoItemNF); end; function TItensNF.GetItemNF(Index: Integer): TItemNF; begin Result := inherited Items[Index] as TItemNF; end; function TItensNF.IndexOf(AItemNF: TItemNF): Integer; begin Result := inherited IndexOf(AItemNF); end; procedure TItensNF.Insert(Index: Integer; AItemNF: TItemNF); begin inherited Insert(Index, AItemNF); end; function TItensNF.Remove(AItemNF: TItemNF): Integer; begin Result := inherited Remove(AItemNF); end; procedure TItensNF.SetItemNF(Index: Integer; AItemNF: TItemNF); begin Items[Index] := AItemNF; end; { TDuplicatasNF } function TDuplicatasNF.Add(ANotaFiscal: TNotaFiscal; ADuplicataNF: TDuplicataNF): Integer; var lNovaDuplicataNF: TDuplicataNF; begin lNovaDuplicataNF := TDuplicataNF.Create(ANotaFiscal); lNovaDuplicataNF.Assign(ADuplicataNF); Result := inherited Add(lNovaDuplicataNF); end; function TDuplicatasNF.GetDuplicataNF(Index: Integer): TDuplicataNF; begin Result := inherited Items[Index] as TDuplicataNF; end; function TDuplicatasNF.IndexOf(ADuplicataNF: TDuplicataNF): Integer; begin Result := inherited IndexOf(ADuplicataNF); end; procedure TDuplicatasNF.Insert(Index: Integer; ADuplicataNF: TDuplicataNF); begin inherited Insert(Index, ADuplicataNF); end; function TDuplicatasNF.Remove(ADuplicataNF: TDuplicataNF): Integer; begin Result := inherited Remove(ADuplicataNF); end; procedure TDuplicatasNF.SetDuplicataNF(Index: Integer; ADuplicataNF: TDuplicataNF); begin Items[Index] := ADuplicataNF; end; { TItemNF } procedure TItemNF.Assign(const pItemNF: TItemNF); begin Inicializar; CodProduto := pItemNF.CodProduto; ValorUnitario := pItemNF.ValorUnitario; ValorDesconto := pItemNF.ValorDesconto; Quantidade := pItemNF.Quantidade; DescProduto := pItemNF.DescProduto; Item := pItemNF.Item; ClassFiscal := pItemNF.ClassFiscal; AliqIPI := pItemNF.AliqIPI; AliqMVA := pItemNF.AliqMVA; Peso := pItemNF.Peso; ClassTributaria := pItemNF.ClassTributaria; ReducaoICMS := pItemNF.ReducaoICMS; end; constructor TItemNF.Create(AOwner: TComponent); begin inherited; Inicializar; end; function TItemNF.GetBC_ICMS_OP: Currency; begin if ClassTributaria in [cst30, cst40, cst41, cst50, cst60] then Result := 0 else begin Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP; if ClassTributaria in [cst20, cst51, cst70, cst90] then Result := (Result - TFuncoes.Percentual(ReducaoICMS, Result)); end; end; function TItemNF.GetBC_ICMS_ST: Currency; begin if ClassTributaria in [cst00, cst20, cst40, cst41, cst50, cst51] then Result := 0 else Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP + VL_IPI + VL_MVA; end; function TItemNF.GetBC_IPI: Currency; begin Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP; end; function TItemNF.GetPC_PROP_NF: Double; var lPart: Double; begin Result := 100; if NotaFiscal.NroItens > 1 then begin lPart := TFuncoes.RetornaPercentual(NotaFiscal.ValoresNF.VL_TOTAL_PROD, VL_TOTAL_BRT); Result := TFuncoes.Percentual(lPart, Result); end; end; function TItemNF.GetVL_IPI: Currency; begin Result := TFuncoes.Percentual(AliqIPI, BC_IPI); end; function TItemNF.GetVL_MVA: Currency; begin Result := VL_TOTAL_BRT + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP + VL_IPI; Result := TFuncoes.Percentual(AliqMVA, Result); end; function TItemNF.GetVL_DESPAC_PROP: Currency; begin Result := TFuncoes.Percentual(PC_PROP_NF, NotaFiscal.ValoresNF.VL_DESPACESS); end; function TItemNF.GetVL_FRETE_PROP: Currency; begin Result := TFuncoes.Percentual(PC_PROP_NF, NotaFiscal.ValoresNF.VL_FRETE); end; function TItemNF.GetVL_SEGUR_PROP: Currency; begin Result := TFuncoes.Percentual(PC_PROP_NF, NotaFiscal.ValoresNF.VL_SEGURO); end; function TItemNF.GetVL_TOTAL_BRT: Currency; begin Result := Quantidade * ValorUnitario; end; function TItemNF.GetVL_ICMS_OP: Currency; var lAliq: Double; begin if ClassTributaria in [cst30, cst40, cst41, cst50, cst60] then Result := 0 else begin lAliq := TEstados.AliquotaInterEstadual(NotaFiscal.EmitenteNF.Estado, NotaFiscal.DestinatarioNF.Estado); Result := TFuncoes.Percentual(lAliq, BC_ICMS_OP); end; end; procedure TItemNF.Inicializar; begin Item := 0; CodProduto := EmptyStr; DescProduto := EmptyStr; Quantidade := 0; ValorUnitario := 0; ValorDesconto := 0; ClassFiscal := EmptyStr; AliqIPI := 0; Peso := 0; AliqMVA := 0; ClassTributaria := cst00; end; function TItemNF.NotaFiscal: TNotaFiscal; begin Result := (Owner as TNotaFiscal); end; procedure TItemNF.SetAliqIPI(const Value: Double); begin FAliqIPI := Value; end; procedure TItemNF.SetAliqMVA(const Value: Double); begin FAliqMVA := Value; end; procedure TItemNF.SetClassFiscal(const Value: String); begin FClassFiscal := Value; end; procedure TItemNF.SetCodProduto(const Value: String); begin FCodProduto := Value; end; procedure TItemNF.SetDescProduto(const Value: String); begin FDescProduto := Value; end; procedure TItemNF.SetItem(const Value: Integer); begin FItem := Value; end; procedure TItemNF.SetPeso(const Value: Double); begin FPeso := Value; end; procedure TItemNF.SetQuantidade(const Value: Double); begin FQuantidade := Value; end; procedure TItemNF.SetValorDesconto(const Value: Currency); begin FValorDesconto := Value; end; procedure TItemNF.SetValorUnitario(const Value: Currency); begin FValorUnitario := Value; end; function TItemNF.GetVL_ICMS_ST: Currency; var lAliq: Double; begin if ClassTributaria in [cst00, cst20, cst40, cst41, cst50, cst51] then Result := 0 else begin lAliq := TEstados.AliquotaInterEstadual(NotaFiscal.EmitenteNF.Estado); Result := TFuncoes.Percentual(lAliq, BC_ICMS_ST); Result := Result - VL_ICMS_OP; end; end; function TItemNF.GetVL_TOTAL_LIQ: Currency; begin Result := VL_TOTAL_BRT + VL_IPI + VL_FRETE_PROP + VL_SEGUR_PROP + VL_DESPAC_PROP + VL_ICMS_ST; end; procedure TItemNF.SetClassTributaria(const Value: TClassTributaria); begin FClassTributaria := Value; end; procedure TItemNF.SetReducaoICMS(const Value: Double); begin FReducaoICMS := Value; end; { TDuplicataNF } procedure TDuplicataNF.Assign(const pDuplicataNF: TDuplicataNF); begin end; constructor TDuplicataNF.Create(AOwner: TComponent); begin inherited; Inicializar; end; procedure TDuplicataNF.Inicializar; begin end; { TPessoaFisJur } procedure TPessoaFisJur.Assign(const pPessoaFisJur: TPessoaFisJur); begin Inicializar; NomeRazaoSocial := pPessoaFisJur.NomeRazaoSocial; Estado := pPessoaFisJur.Estado; end; constructor TPessoaFisJur.Create(AOwner: TComponent); begin inherited; Inicializar; end; procedure TPessoaFisJur.Inicializar; begin NomeRazaoSocial := EmptyStr; Estado := EmptyStr; end; { TValoresNF } procedure TValoresNF.Assign(const pValoresNF: TValoresNF); begin end; constructor TValoresNF.Create(AOwner: TComponent); begin inherited; Inicializar; end; function TValoresNF.GetBS_ICMS: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].BC_ICMS_OP; end; function TValoresNF.GetVL_TOTAL_NF: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_TOTAL_LIQ; end; function TValoresNF.GetVL_TOTAL_PROD: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_TOTAL_BRT; end; function TValoresNF.GetVL_ICMS: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_ICMS_OP; end; procedure TValoresNF.Inicializar; begin VL_FRETE := 0; VL_SEGURO := 0; VL_DESPACESS := 0; end; function TValoresNF.NotaFiscal: TNotaFiscal; begin Result := (Owner as TNotaFiscal); end; function TValoresNF.GetBS_ICMS_ST: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].BC_ICMS_ST; end; function TValoresNF.GetVL_ICMS_ST: Currency; var lItens: SmallInt; begin Result := 0; for lItens := 0 to NotaFiscal.ItensNF.Count -1 do Result := Result + NotaFiscal.ItensNF[lItens].VL_ICMS_ST; end; { TEstados } class function TEstados.AliquotaInterEstadual(const pEstadoOrigem, pEstadoDestino: String): Double; var lEstadoDestino: SmallInt; begin lEstadoDestino := TEstados.CodEstado(pEstadoDestino); if pEstadoOrigem = 'AC' then Result := cAliquotaAC[lEstadoDestino] else if pEstadoOrigem = 'AL' then Result := cAliquotaAL[lEstadoDestino] else if pEstadoOrigem = 'AM' then Result := cAliquotaAM[lEstadoDestino] else if pEstadoOrigem = 'AP' then Result := cAliquotaAP[lEstadoDestino] else if pEstadoOrigem = 'BA' then Result := cAliquotaBA[lEstadoDestino] else if pEstadoOrigem = 'CE' then Result := cAliquotaCE[lEstadoDestino] else if pEstadoOrigem = 'DF' then Result := cAliquotaDF[lEstadoDestino] else if pEstadoOrigem = 'ES' then Result := cAliquotaES[lEstadoDestino] else if pEstadoOrigem = 'GO' then Result := cAliquotaGO[lEstadoDestino] else if pEstadoOrigem = 'MA' then Result := cAliquotaMA[lEstadoDestino] else if pEstadoOrigem = 'MT' then Result := cAliquotaMT[lEstadoDestino] else if pEstadoOrigem = 'MS' then Result := cAliquotaMS[lEstadoDestino] else if pEstadoOrigem = 'MG' then Result := cAliquotaMG[lEstadoDestino] else if pEstadoOrigem = 'PA' then Result := cAliquotaPA[lEstadoDestino] else if pEstadoOrigem = 'PB' then Result := cAliquotaPB[lEstadoDestino] else if pEstadoOrigem = 'PR' then Result := cAliquotaPR[lEstadoDestino] else if pEstadoOrigem = 'PE' then Result := cAliquotaPE[lEstadoDestino] else if pEstadoOrigem = 'PI' then Result := cAliquotaPI[lEstadoDestino] else if pEstadoOrigem = 'RN' then Result := cAliquotaRN[lEstadoDestino] else if pEstadoOrigem = 'RS' then Result := cAliquotaRS[lEstadoDestino] else if pEstadoOrigem = 'RJ' then Result := cAliquotaRJ[lEstadoDestino] else if pEstadoOrigem = 'RO' then Result := cAliquotaRO[lEstadoDestino] else if pEstadoOrigem = 'RR' then Result := cAliquotaRR[lEstadoDestino] else if pEstadoOrigem = 'SC' then Result := cAliquotaSC[lEstadoDestino] else if pEstadoOrigem = 'SP' then Result := cAliquotaSP[lEstadoDestino] else if pEstadoOrigem = 'SE' then Result := cAliquotaSE[lEstadoDestino] else if pEstadoOrigem = 'TO' then Result := cAliquotaTO[lEstadoDestino] else Result := 0; end; class function TEstados.AliquotaInterEstadual(const pEstadoOrigem: String): Double; begin Result := AliquotaInterEstadual(pEstadoOrigem, pEstadoOrigem); end; class function TEstados.CodEstado(const pEstado: String): SmallInt; begin if pEstado = 'AC' then Result := 00 else if pEstado = 'AL' then Result := 01 else if pEstado = 'AM' then Result := 02 else if pEstado = 'AP' then Result := 03 else if pEstado = 'BA' then Result := 04 else if pEstado = 'CE' then Result := 05 else if pEstado = 'DF' then Result := 06 else if pEstado = 'ES' then Result := 07 else if pEstado = 'GO' then Result := 08 else if pEstado = 'MA' then Result := 09 else if pEstado = 'MT' then Result := 10 else if pEstado = 'MS' then Result := 11 else if pEstado = 'MG' then Result := 12 else if pEstado = 'PA' then Result := 13 else if pEstado = 'PB' then Result := 14 else if pEstado = 'PR' then Result := 15 else if pEstado = 'PE' then Result := 16 else if pEstado = 'PI' then Result := 17 else if pEstado = 'RN' then Result := 18 else if pEstado = 'RS' then Result := 19 else if pEstado = 'RJ' then Result := 20 else if pEstado = 'RO' then Result := 21 else if pEstado = 'RR' then Result := 22 else if pEstado = 'SC' then Result := 23 else if pEstado = 'SP' then Result := 24 else if pEstado = 'SE' then Result := 25 else if pEstado = 'TO' then Result := 26 else Result := 0; end; class function TEstados.CodIBGEEstado(const pEstado: String): SmallInt; begin if pEstado = 'RO' then Result := 11 else if pEstado = 'AC' then Result := 12 else if pEstado = 'AM' then Result := 13 else if pEstado = 'RR' then Result := 14 else if pEstado = 'PA' then Result := 15 else if pEstado = 'AP' then Result := 16 else if pEstado = 'TO' then Result := 17 else if pEstado = 'MA' then Result := 21 else if pEstado = 'PI' then Result := 22 else if pEstado = 'CE' then Result := 23 else if pEstado = 'RN' then Result := 24 else if pEstado = 'PB' then Result := 25 else if pEstado = 'PE' then Result := 26 else if pEstado = 'AL' then Result := 27 else if pEstado = 'SE' then Result := 28 else if pEstado = 'BA' then Result := 29 else if pEstado = 'MG' then Result := 31 else if pEstado = 'ES' then Result := 32 else if pEstado = 'RJ' then Result := 33 else if pEstado = 'SP' then Result := 35 else if pEstado = 'PR' then Result := 41 else if pEstado = 'SC' then Result := 42 else if pEstado = 'RS' then Result := 43 else if pEstado = 'MS' then Result := 50 else if pEstado = 'MT' then Result := 51 else if pEstado = 'GO' then Result := 52 else if pEstado = 'DF' then Result := 53 else Result := 0; end; { TFuncoes } class function TFuncoes.Percentual(const pPercentual: Double; const pValor: Currency): Currency; begin Result := 0; if pValor > 0 then Result := (pValor * pPercentual) / 100; end; class function TFuncoes.RetornaPercentual(const pValorTotal, pValor: Currency): Currency; begin Result := 0; if pValorTotal > 0 then Result := ((pValor / pValorTotal) * 100); end; end.
×
×
  • 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.