Guest User

Untitled

a guest
Jun 21st, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.10 KB | None | 0 0
  1. //itens
  2. list_itens := TListNf_itens.Create();
  3. for venda_item in venda_itens do
  4. begin
  5. produto := TProdutoController.getById(venda_item.ID_PRODUTO);
  6. icms := TTributo_icms_ufController.get_by_grupo_uf(produto.ID_GRUPO_TRIBUTARIO, empresa_logado.UF);
  7. ipi := TTributo_ipiController.get_by_grupo(produto.ID_GRUPO_TRIBUTARIO);
  8. pis := TTributo_pisController.get_by_grupo(produto.ID_GRUPO_TRIBUTARIO);
  9. cofins := TTributo_cofinsController.get_by_grupo(produto.ID_GRUPO_TRIBUTARIO);
  10.  
  11. //pegar o icms do destinatario, se ele for de outro estado
  12. if (venda.ID_CLIENTE > 0) and (endereco.UF <> empresa_logado.UF) then
  13. icms_dest := TTributo_icms_ufController.get_by_grupo_uf(produto.ID_GRUPO_TRIBUTARIO, endereco.UF)
  14. else
  15. icms_dest := icms; //se não, pego a do estado, para efeito de calculos
  16.  
  17. nf_item := TNf_itens.Create;
  18. nf_item.CEST := produto.CEST;
  19. nf_item.NUMERO_ITEM := venda_item.ORDEM;
  20. nf_item.CODIGO_PRODUTO := inttostr(venda_item.ID_PRODUTO);
  21. nf_item.GTIN := produto.GTIN;
  22. nf_item.NOME_PRODUTO := produto.NOME;
  23. nf_item.NCM := produto.NCM;
  24. nf_item.CFOP := icms.CFOP;
  25. nf_item.UNIDADE_COMERCIAL := venda_item.UNIDADE_SIGLA;
  26. nf_item.QUANTIDADE_COMERCIAL := venda_item.QUANTIDADE;
  27. nf_item.VALOR_UNITARIO_COMERCIAL := venda_item.VALOR_UNITARIO;
  28. nf_item.VALOR_BRUTO_PRODUTO := venda_item.VALOR_SUBTOTAL;
  29. nf_item.GTIN_UNIDADE_TRIBUTAVEL := produto.GTIN;
  30. nf_item.UNIDADE_TRIBUTAVEL := venda_item.UNIDADE_SIGLA;
  31. nf_item.QUANTIDADE_TRIBUTAVEL := venda_item.QUANTIDADE;
  32. nf_item.VALOR_UNITARIO_TRIBUTAVEL := venda_item.VALOR_UNITARIO;
  33. nf_item.VALOR_DESCONTO := venda_item.VALOR_DESCONTO;
  34. nf_item.CEST := produto.CEST;
  35.  
  36. //Base do IPI = Produto + Frete + Seguro + Outras Despesas Acessórias;
  37. cur_vlrbase_ipi := venda_item.VALOR_SUBTOTAL + nf_item.VALOR_FRETE + nf_item.VALOR_OUTRAS_DESPESAS +
  38. nf_item.VALOR_SEGURO;
  39. if ipi.ALIQUOTA_PORCENTO > 0 then
  40. begin
  41. nf_item.IPI_ALIQUOTA := ipi.ALIQUOTA_PORCENTO;
  42. nf_item.IPI_CST := ipi.CST_IPI;
  43. nf_item.IPI_VALOR_BASE_CALCULO := cur_vlrbase_ipi;
  44. nf_item.IPI_VALOR := (ipi.ALIQUOTA_PORCENTO / 100) * cur_vlrbase_ipi;
  45. end;
  46.  
  47. //Base do PIS e COFINS (falta um teste em relação ao FRETE , se é DESTINATARIO ou EMITENTE)
  48. cur_vlrbase_piscofins := (venda_item.VALOR_SUBTOTAL + nf_item.IPI_VALOR + nf_item.VALOR_FRETE + nf_item.VALOR_OUTRAS_DESPESAS +
  49. nf_item.VALOR_SEGURO)
  50. -
  51. nf_item.VALOR_DESCONTO;
  52.  
  53. //Base do ICMS = Produto + Frete + Seguro + Outras Despesas Acessórias + IPI – Descontos
  54. cur_vlrbase_icms := (venda_item.VALOR_SUBTOTAL + nf_item.IPI_VALOR + nf_item.VALOR_FRETE + nf_item.VALOR_OUTRAS_DESPESAS +
  55. nf_item.VALOR_SEGURO)
  56. -
  57. nf_item.VALOR_DESCONTO;
  58.  
  59. //se o IPI compoe a base do icms
  60. if (empresa_logado.INDUSTRIA = 'S') and (destinatario.INDICADOR_IE = 9) and
  61. (empresa_logado.CRT <> 1) and (nf_item.IPI_VALOR > 0) then
  62. begin
  63. cur_vlrbase_icms := cur_vlrbase_icms + nf_item.IPI_VALOR;
  64. end;
  65.  
  66. //Base do icms st = (produto + Valor do IPI + Frete + Seguro + Outras Despesas Acessórias – Descontos) * (1+(%MVA / 100))
  67. cur_vlrbase_icms_st := cur_vlrbase_icms * (1 + (produto.PERCENTUAL_MVA / 100));
  68.  
  69. //Redução base calculo %
  70. if (AnsiMatchStr(icms.CST_B, ['20', '51', '70'])) or (AnsiMatchStr(icms.CSOSN_B, ['201', '202', '203'])) then
  71. begin
  72. if icms.REDUCAO_BC > 0 then
  73. cur_vlrbase_icms := cur_vlrbase_icms - ((icms.REDUCAO_BC / 100) * cur_vlrbase_icms);
  74.  
  75. if icms.REDUCAO_BC_ST > 0 then
  76. cur_vlrbase_icms_st := cur_vlrbase_icms_st - ((icms.REDUCAO_BC_ST / 100) * cur_vlrbase_icms_st);
  77.  
  78. nf_item.ICMS.PERCENTUAL_REDUCAO_BC_ICMS_ST := icms.REDUCAO_BC_ST;
  79. nf_item.ICMS.TAXA_REDUCAO_BC_ICMS := icms.REDUCAO_BC;
  80. end;
  81.  
  82. //icms
  83. //simples nacional
  84. if emitente.CRT = '1' then
  85. begin
  86. nf_item.ICMS.ORIGEM_MERCADORIA := produto.TRIBUTO.ORIGEM_MERCADORIA;
  87. nf_item.ICMS.CSOSN := icms.CSOSN_B;
  88.  
  89. //CSON (Crédito simples nacional)
  90. if (AnsiMatchStr(icms.CSOSN_B, ['101', '201'])) and (empresa_logado.ALIQUOTA_CREDITO_ICMS > 0) then
  91. begin
  92. nf_item.ICMS.ALIQUOTA_CREDITO_ICMS_SN := empresa_logado.ALIQUOTA_CREDITO_ICMS;
  93. nf_item.ICMS.VALOR_CREDITO_ICMS_SN := (nf_item.ICMS.ALIQUOTA_CREDITO_ICMS_SN / 100) * cur_vlrbase_icms;
  94. end;
  95. end;
  96.  
  97. //Regime normal
  98. if emitente.CRT = '3' then
  99. begin
  100. nf_item.ICMS.CST_ICMS := icms.CST_B;
  101. nf_item.ICMS.MODALIDADE_BC_ICMS := icms.MODALIDADE_BC;
  102. nf_item.ICMS.BASE_CALCULO_ICMS := cur_vlrbase_icms;
  103.  
  104. //aliquotas icms
  105. nf_item.ICMS.ALIQUOTA_ICMS := icms.ALIQUOTA_INTERNA;
  106. if icms.ALIQUOTA > 0 then
  107. nf_item.ICMS.ALIQUOTA_ICMS := icms.ALIQUOTA; //Aliquota diferenciada icms
  108. nf_item.ICMS.VALOR_ICMS := (nf_item.ICMS.ALIQUOTA_ICMS / 100) * cur_vlrbase_icms;
  109.  
  110. //ICMS Diferimento (ICMS 51 - TRIBUTADO COM DIFERIMENTO)
  111. if (nf_item.ICMS.CST_ICMS = '51') and (icms.PERCENTUAL_DIFERIMENTO > 0) then
  112. begin
  113. nf_item.ICMS.PERCENTUAL_DIFERIMENTO := icms.PERCENTUAL_DIFERIMENTO;
  114. nf_item.ICMS.VALOR_ICMS_DIFERIDO := (icms.PERCENTUAL_DIFERIMENTO / 100) * nf_item.ICMS.VALOR_ICMS;
  115. nf_item.ICMS.VALOR_ICMS := nf_item.ICMS.VALOR_ICMS - nf_item.ICMS.VALOR_ICMS_DIFERIDO;
  116. end;
  117.  
  118. //FCP
  119. if AnsiMatchStr(nf_item.ICMS.CST_ICMS, ['00', '10', '20', '51', '70', '90']) then
  120. begin
  121. if AnsiMatchStr(nf_item.ICMS.CST_ICMS, ['10', '20', '51', '70', '90']) then
  122. nf_item.ICMS.VALOR_BC_FPC := cur_vlrbase_icms;
  123. nf_item.ICMS.PERCENTUAL_FPC := icms.FCP;
  124. nf_item.ICMS.VALOR_FPC := (icms.FCP / 100) * cur_vlrbase_icms;
  125. end;
  126. end;
  127.  
  128. //ICMS ST
  129. if (AnsiMatchStr(nf_item.ICMS.CST_ICMS, ['10', '30', '70'])) or
  130. (AnsiMatchStr(nf_item.ICMS.CSOSN, ['201', '202', '203'])) then
  131. begin
  132. nf_item.ICMS.PERCENTUAL_MVA_ICMS_ST := produto.PERCENTUAL_MVA; //MVA %
  133. nf_item.ICMS.MODALIDADE_BC_ICMS_ST := icms.MODALIDADE_BC_ST;
  134.  
  135. //aliquota icms st
  136. nf_item.ICMS.ALIQUOTA_ICMS_ST := icms.ALIQUOTA_INTERNA;
  137. if icms.ALIQUOTA_ICMS_ST > 0 then
  138. nf_item.ICMS.ALIQUOTA_ICMS_ST := icms.ALIQUOTA_ICMS_ST; //Aliquota diferenciada icms st
  139.  
  140. nf_item.ICMS.VALOR_BASE_CALCULO_ICMS_ST := cur_vlrbase_icms_st;
  141. nf_item.ICMS.VALOR_ICMS_ST := (cur_vlrbase_icms_st * (icms_dest.ALIQUOTA_INTERNA / 100)) - nf_item.ICMS.VALOR_ICMS;
  142.  
  143. if nf_item.ICMS.VALOR_ICMS_ST < 0 then
  144. nf_item.ICMS.VALOR_ICMS_ST := 0;
  145. end;
  146.  
  147. //FCP ST
  148. if ((AnsiMatchStr(nf_item.ICMS.CST_ICMS, ['10', '20', '51', '70', '90'])) or
  149. (AnsiMatchStr(nf_item.ICMS.CSOSN, ['201', '202', '203', '900']))) then
  150. begin
  151. if icms.FCP > 0 then
  152. begin
  153. nf_item.ICMS.VALOR_BC_FPC_ST := cur_vlrbase_icms_st;
  154. nf_item.ICMS.PERCENTUAL_BC_FPC_ST := icms.FCP;
  155. nf_item.ICMS.VALOR_FPC_ST := (icms.FCP / 100) * cur_vlrbase_icms_st;
  156. end;
  157. end;
  158.  
  159. //ST
  160. if (c or (nf_item.ICMS.CSOSN = '500')) and (icms.FCP > 0) then
  161. nf_item.ICMS.FPC_CONSUMIDOR_FINAL := icms.ALIQUOTA_INTERNA + icms.FCP; //pST
  162.  
  163. //COFINS
  164. if AnsiMatchStr(cofins.CST_COFINS, ['10', '20']) then
  165. begin
  166. nf_item.CST_COFINS := cofins.CST_COFINS;
  167. nf_item.BASE_CALCULO_COFINS := cur_vlrbase_piscofins;
  168. nf_item.ALIQUOTA_COFINS_PERCENTUAL := empresa_logado.ALIQUOTA_COFINS;
  169. if cofins.ALIQUOTA_PORCENTO > 0 then
  170. nf_item.ALIQUOTA_COFINS_PERCENTUAL := cofins.ALIQUOTA_PORCENTO;
  171. if nf_item.ALIQUOTA_COFINS_PERCENTUAL > 0 then
  172. begin
  173. nf_item.VALOR_COFINS := (nf_item.ALIQUOTA_COFINS_PERCENTUAL / 100) * cur_vlrbase_piscofins;
  174. nf_item.COFINS_QUANTIDADE_VENDIDA := venda_item.QUANTIDADE;
  175. nf_item.ALIQUOTA_COFINS_REAIS := nf_item.ALIQUOTA_COFINS_PERCENTUAL / 100;
  176. end;
  177. end;
  178.  
  179. //PIS
  180. if AnsiMatchStr(pis.CST_PIS, ['10', '20']) then
  181. begin
  182. nf_item.CST_PIS := pis.CST_PIS;
  183. nf_item.VALOR_BASE_CALCULO_PIS := cur_vlrbase_piscofins;
  184. nf_item.ALIQUOTA_PIS_PERCENTUAL := empresa_logado.ALIQUOTA_PIS;
  185. if pis.ALIQUOTA_PORCENTO > 0 then
  186. nf_item.ALIQUOTA_PIS_PERCENTUAL := pis.ALIQUOTA_PORCENTO;
  187. if nf_item.ALIQUOTA_PIS_PERCENTUAL > 0 then
  188. begin
  189. nf_item.PIS_QUANTIDADE_VENDIDA := venda_item.QUANTIDADE;
  190. nf_item.VALOR_PIS := (nf_item.ALIQUOTA_PIS_PERCENTUAL / 100) * cur_vlrbase_piscofins;
  191. nf_item.ALIQUOTA_PIS_REAIS := nf_item.ALIQUOTA_PIS_PERCENTUAL / 100;
  192. end;
  193. end;
  194.  
  195. //operação interestadual
  196. if (venda.ID_CLIENTE > 0) and (endereco.UF <> empresa_logado.UF) then
  197. begin
  198. cur_difal := cur_vlrbase_icms * ((icms.ALIQUOTA_INTERNA - icms.ALIQUOTA_INTERESTADUAL) / 100);
  199.  
  200. nf_item.ICMS.VALOR_BC_ICMS_UF_DESTINO := cur_vlrbase_icms; //vBCUFDest
  201. nf_item.ICMS.PERCENTUAL_FPC_UF_DESTINO := icms_dest.FCP; //pFCPUFDest
  202. nf_item.ICMS.ALIQUOTA_INTERNA_UF_DESTINO := icms_dest.ALIQUOTA_INTERNA; //pICMSUFDest
  203. nf_item.ICMS.ALIQUOTA_INTERESTADUAL_UFS := icms.ALIQUOTA_INTERESTADUAL; //pICMSInter
  204.  
  205. case YearOf(now) of
  206. 2018: begin
  207. nf_item.ICMS.PERCENTUAL_PROVISORIO_PARTILHA := 80; //pICMSInterPart
  208. nf_item.ICMS.VALOR_ICMS_FPC_UF_DESTINO := nf_item.ICMS.VALOR_FPC; //vFCPUFDest
  209. nf_item.ICMS.VALOR_ICMS_INTER_UF_DESTINO := cur_difal * (80 / 100); //vICMSUFDest
  210. nf_item.ICMS.VALOR_ICMS_INTER_UF_REMETENTE := cur_difal * (20 / 100); //vICMSUFRemet
  211. end;
  212. 2019: begin
  213. nf_item.ICMS.PERCENTUAL_PROVISORIO_PARTILHA := 100; //pICMSInterPart
  214. nf_item.ICMS.VALOR_ICMS_FPC_UF_DESTINO := nf_item.ICMS.VALOR_FPC; //vFCPUFDest
  215. nf_item.ICMS.VALOR_ICMS_INTER_UF_DESTINO := cur_difal; //vICMSUFDest
  216. nf_item.ICMS.VALOR_ICMS_INTER_UF_REMETENTE := 0; //vICMSUFRemet
  217. end;
  218. else
  219. begin
  220. nf_item.ICMS.PERCENTUAL_PROVISORIO_PARTILHA := 100; //pICMSInterPart
  221. nf_item.ICMS.VALOR_ICMS_FPC_UF_DESTINO := nf_item.ICMS.VALOR_FPC; //vFCPUFDest
  222. nf_item.ICMS.VALOR_ICMS_INTER_UF_DESTINO := cur_difal; //vICMSUFDest
  223. nf_item.ICMS.VALOR_ICMS_INTER_UF_REMETENTE := 0; //vICMSUFRemet
  224. end;
  225. end;
  226. end;
  227.  
  228. //fazer a leitura da tabela ibpt para poder pegar os tributos
  229. nf_item.valor_total_tributos := 0;
  230. ncm := TNcmController.get_by_codigo(produto.NCM);
  231. if ncm <> nil then
  232. begin
  233. nf_item.valor_total_tributos := (
  234. (nf_item.VALOR_BRUTO_PRODUTO - nf_item.VALOR_DESCONTO) *
  235. ((ncm.ALIQUOTA_ESTADUAL + ncm.ALIQUOTA_NACIONAL + ncm.ALIQUOTA_MUNICIPAL) / 100)
  236. );
  237. end;
  238.  
  239. //totais
  240. nf.VALOR_SEGURO := nf.VALOR_SEGURO + nf_item.VALOR_SEGURO;
  241. nf.VALOR_DESCONTO := nf.VALOR_DESCONTO + nf_item.VALOR_DESCONTO;
  242. nf.VALOR_TOTAL_PRODUTO := nf.VALOR_TOTAL_PRODUTO + nf_item.VALOR_BRUTO_PRODUTO;
  243. nf.base_calculo_icms := nf.base_calculo_icms + cur_vlrbase_icms; //vBC - Base de Calculo do ICMS
  244. nf.valor_fpc := nf.valor_fpc + nf_item.ICMS.VALOR_FPC; //vFCP - Valor Total do FCP (Fundo de Combate a Pobreza)
  245. nf.valor_fpc_st := nf.valor_fpc_st + nf_item.ICMS.VALOR_FPC_ST; //vFCPST - Valor Total do FCP (Fundo de Combate a Pobreza) retido por substituicao tributaria
  246. nf.valor_icms := nf.valor_icms + nf_item.ICMS.VALOR_ICMS; //vICMS - Valor Total do ICMS
  247. nf.base_calculo_icms_st := nf.base_calculo_icms_st + cur_vlrbase_icms_st; //vBCST - Base de Calculo do ICMS ST
  248. nf.valor_icms_st := nf.valor_icms_st + nf_item.ICMS.VALOR_ICMS_ST; //vST - Valor Total do ICMS ST
  249. nf.valor_frete := nf.valor_frete + nf_item.VALOR_FRETE; //vFrete - Valor Total do Frete
  250. nf.valor_ipi := nf.valor_ipi + nf_item.IPI_VALOR; //vIPI - Valor Total do IPI
  251. nf.valor_pis := nf.valor_pis + nf_item.VALOR_PIS; //vPIS - Valor do PIS
  252. nf.valor_cofins := nf.valor_cofins + nf_item.VALOR_COFINS; //vCOFINS - Valor do COFINS - Valor do COFINS
  253. nf.valor_despesas_acessorias := nf.valor_despesas_acessorias + nf_item.VALOR_OUTRAS_DESPESAS; //vOutro - Outras Despesas acessorias
  254. nf.valor_icms_fpc_uf_destino := nf.valor_icms_fpc_uf_destino + nf_item.ICMS.VALOR_ICMS_FPC_UF_DESTINO; //vFCPUFDest - Valor total do ICMS relativo ao Fundo de Combate a Pobreza (FCP) para a UF de destino.
  255. nf.valor_icms_inter_uf_destino := nf.valor_icms_inter_uf_destino + nf_item.ICMS.VALOR_ICMS_INTER_UF_DESTINO; //vICMSUFDest - Valor total do ICMS Interestadual para a UF de destino (sem o valor do ICMS relativo ao FCP).
  256. nf.valor_icms_inter_uf_remetente := nf.valor_icms_inter_uf_remetente + nf_item.ICMS.VALOR_ICMS_INTER_UF_REMETENTE;
  257.  
  258. list_itens.Add(nf_item);
  259. end;
  260.  
  261. nf.valor_seguro := nf.VALOR_SEGURO; //vSeg - Valor Total do Seguro
  262. nf.valor_total := (
  263. nf.VALOR_TOTAL_PRODUTO +
  264. nf.valor_icms_st +
  265. nf.valor_frete +
  266. nf.VALOR_SEGURO +
  267. nf.valor_despesas_acessorias +
  268. nf.VALOR_FPC_ST +
  269. nf.valor_ipi -
  270. nf.VALOR_DESCONTO
  271. ); //vNF - Valor Total da NF-e [(+) vProd (id:W07) (-) vDesc (id:W10) (+) vICMSST (id:W06) (+) vFrete (id:W09) (+) vSeg (id:W10) (+) vOutro (id:W15) (+) vII (id:W11) (+) vIPI (id:W12) (+) vServ (id:W19) (NT 2011/004)]
  272.  
  273.  
  274. //DÚVIDAS
  275. // 1 - O ICMS-ST e o FCP-ST são apenas para operações interestaduais?
  276. // 2 - Eu tenho que ter um CSON para operação interna e outro para externa?
  277. // 3 - Estou em dúvida nesse código em relação ao CST=60 para não calcular o imposto.
  278. // 4 - Esse meu cadastro de grupo tributário tá legal?
  279. // 5 - Dessa forma está preparado para emissão de NFC-e?
Add Comment
Please, Sign In to add comment