domingo, 25 de junho de 2017

CEST - tudo que você precisa saber

CEST? NCM?  É a mesma coisa? Um substitiu o outro? Vamos esclarecer de vez o que é, e sua obrigatoriedade na Nota Fiscal Eletrônica (NF-e)


O que é CEST?
CEST é a abreviação de "Código Especificador de Substituição Tributária", e nasceu com intuito de uniformizar a tributação dos produtos sujeitos à incidência do ICMS Substituição Tributária. Assim, o CEST é um novo código que se refere somente aos produtos relativos a substituição tributária.

CEST: Obrigatoriedade
A informação do código CEST na NFe é obrigatório desde Outubro de 2016. Assim, produtos sujeitos a substituição tributária somente poderão ser movimentados quando o XML da NFe possuir tal informação. Do contrário, as NFes não serão emitidas.

O Convênio ICMS 16/2016 alterou o Convênio ICMS 92, de 20-8-2015, que dispõe sobre as mercadorias que poderão ser submetidas ao regime de substituição tributária à partir de 2016. Ficou determinado que a obrigatoriedade de uso do CEST nos documentos fiscais para identificação das mercadorias passíveis de substituição tributária e de antecipação do recolhimento do ICMS, e se aplicam desde 01/10/2016.

CEST: É obrigatório na NF-e e/ou na NFC-e? Para quem?
Toda empresa que emitir NF-e ou NFC-e com produtos sujeitos à substituição tributária ou antecipação deverão informar o código CEST para emissão de tais documentos. Note que, mesmo empresas do Simples Nacional deverão informar o CEST na emissão dos documentos fiscais.

É importante ressaltar que o CEST não altera a fórmula de cálculo do ICMS Substituição Tributária.

NCM X CEST
A relação entre NCM e CEST é muito clara. Nas tabelas dos anexos do Convênio 92/2015, todos os códigos CEST são relacionados a um ou mais NCMs. Desta forma, ao realizar a emissão de um documento fiscal, os dois campos (NCM e CEST) deverão estar preenchidos respeitando essa relação.

Tabela com todos os códigos CEST (atualizada até convênio ICMS 146)
A tabela de códigos CEST está sendo atualizada constantemente, para verificar a tabela atual entre no site da CONFAZ. Link para a tabela aqui.

quarta-feira, 19 de agosto de 2015

Dica SQL - Performance em Banco de Dados - Stored Procedure


Algumas aplicações podem ter perda de performance na execução de procedures do SQL Server. Uma dica bem simples e importante, nunca utilize o SP_ nas stored procedures que você escreveu. Nunca!

Por exemplo, jamais criei uma Procedure com o nome SP_Cadastro_Clientes.

De que forma o sql interpreta uma stored procedure com o prefixo SP_?
Quando uma procedure é precedida por SP_ o SQL Server busca a procedure no banco Master. Isso permite que sejam criadas procedures globais para administrar o servidor. Essas procedures podem ficar no Master e serem chamadas a partir de qualquer banco que o SQL Server as encontra.

Então por que não devemos nomear todas nossas procedures como SP_ ?
O SQL Server mantém um cache de planos de execução das procedures. Assim sendo, quando uma aplicação executa uma procedure, primeiramente ele procura esta procedure no cache, se estiver lá utiliza estas informações, caso contrário terá que recompilar. A versão 7 e superiores mantém apenas 1 cópia de cada procedure no cache de procedures.

Para garantir isso o SQL Server precisa ter certeza que, recebendo 2 pedidos simultâneos para a mesma procedure, não tentará compila-la 2 vezes. Sendo assim, durante o processo de compilação o SQL Server gera um lock, chamado de compilation lock, que impede que outras aplicações compilem a procedure ao mesmo tempo. Ocorre que o compilation lock é gerado imediatamente após a procura no cache, e isso faz com que o SQL Server busque a procedure no cache, e se não achar, gera o lock.

No que isto interfere no desempenho?
Quando a procedure tem o prefixo SP_ ela é primeiramente procurada no Master e não no banco em que o usuário está trabalhando. Quando a procedure não é encontrada no Master é gerado o compilation lock. Posteriormente, antes de compilar a procedure, o SQL Server acaba descobrindo que ela já está no cache de procedures do banco de dados do usuário e reaproveita o cache, sem recompilar a procedure. Porém TODAS as chamadas desta procedure vão gerar o compilation lock e prejudicar seriamente o tempo de execução da procedure. Devido a isso, evite utilizar o prefixo SP_ nas suas procedures, utilize apenas quando necessário, para procedures administrativas.

quinta-feira, 6 de agosto de 2015

C# - Função para validar um E-mail com Expressão Regular (Regular Expressions - Regex)


Uma das postagens mais acessadas do blog, é uma função para validar E-mail em C#, que pode ser encontrada nesse link - Função para validar um E-mail - e recebemos uma sugestão de um leitor do blog para utilizarmos expressão regular na validação do e-mail.

Desenvolvi um pequeno trecho de código para mostrar o funcionando do código utilizando expressão regular. Você simplesmente passa uma string com o e-mail a ser validado e a função retorna se é válido (true) ou não (false).


Não se esqueça de importar a classe System.Text.RegularExpressions.
        using System.Text.RegularExpressions;

Essa é a classe:
//Função para validar Email com RegEx
        public static bool validarRegEx(string email)
        {
            
            Regex regExpEmail = new Regex("^[A-Za-z0-9](([_.-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([.-]?[a-zA-Z0-9]+)*)([.][A-Za-z]{2,4})$");
            Match match = regExpEmail.Match(email);
            
            if (match.Success)
                return true;
            else
                return false;
        }

terça-feira, 3 de junho de 2014

Erro no ASP.Net - Operation is not valid due to the current state of the object.




















Olá pessoal, depois de um bom tempo sem postar (a correria esta muito grande, os projetos cada vez mais complexos, e os problemas.... ahhhh os problemas...), me deparei com um pequeno problema. Havia uma tela em um sistema que faço manutenção que sempre funcionou perfeitamente, porém ao fazer um filtro e carregar um objeto DataGrid utilizando ItemTemplate com um CheckBox dentro, me retornou o erro "Operation is not valid due to the current state of the object.".













Pelo que entendi, o problema pode ocorrer quando uma grande quantidade de campos de form (Form Fields) são colocados dentro de um Repeater (no caso o DataGrid), foi um dos casos que foi constatado e resolvido adicionando a seguinte chave ao Web.Config da aplicação.

<add key="aspnet:MaxHttpCollectionKeys" value="2000" />

Espero que essa pequena dica possa fazer vocês pouparem tempo...

terça-feira, 14 de janeiro de 2014

Exame gratuito para a Certificação Microsoft 74-409 (Hyper-V)



















Para quem está pensando em fazer o exame 74-409 Microsoft Certified Specialist: Server Virtualization with Windows Server Hyper-V and System Center, eu tenho uma dica muito bacana.

Além de ganhar o voucher para esta certificação, você pode ter acesso ao material preparatório para o exame, disponibilizado no MVA (Microsoft Virtual Academy).

Para requisitar o voucher, acesse: Microsoft Virtual Academy – Special Offers.

Para ter acesso ao conteúdo, acesse: Microsoft Virtual Academy - Server Virtualization with Windows Server Hyper-V and System Center.

E para verificar todos os requisitos e informações do exame: Microsoft Learning – Exam 74-409.

Mas lembre-se: Os vouchers expiram e, todos os exames devem ser feitos até 30 de junho de 2014.
Boa sorte!