terça-feira, 19 de janeiro de 2016

Construir uma Classe com o Método de validação do CNPJ em c#!

Classe com o Método de validação do CNPJ 


Validação

   Olá caros amigos e participante do meu blog, vou mostra como fiz meu método de validação em uma classe com o retorno que foi verdadeiro ou falso o teste para que o sistema continue com usa execução, sendo assim foi modificado do jeito em que mostre ao usuário se ele digitou corretamente ou não o CNPJ no "textBox", ao pesquisar em vários sites vi que não existia este método abaixo e por isso modifiquei e agora estou postando para que vejam e aprendam que existe vários modos de validação de um texto digitado.

Local que foi extraído o código de validação

   Segue anexo o link do site do Sintegra que tem o modelo do código para "Javascript" que foi modificado para reconhecimento no Csharp.

Site de Consulta do CNPJ

Código em Javascript a que foi copiado

     Aqui vou mostra o código completo em que foi modificado para o c#.
com o lado direito do mouse clique em "Exibir Código-Fonte", automaticamente o site mostra o código abaixo em linguagem de javascript.




código em c# com validação do CNPJ

   Abaixo fiz algumas modificações que depois possa ser melhorado no seu conteúdo.

   O primeiro foi a extração de espaços no começo e no final do texto.

   Em seguida foi extraído os pontos, traços e barras para melhor validação dos textos digitados.

   Os "alerts" foram modificado para mensagem de reconhecimento do c#.

   Como também foi modificado o teste  de verificação de cada caracteres que no inicio do método ele mesmo já extrai e não deixa passar, mas deixei como estava para que você caro leitor verifique o que foi modificado para que o c# entenda o que vai ser executado, veja e verifique linha por linha, junto com ele, também foi modificado o local que ao extrai cada linha para verificação do digito verificador e comparação do mesmo,

"int cgc01 = Convert.ToInt16( cgc.Substring(0, 1));"

 Depois de muito pesquisar verifiquei que a linha de codigo que segue abaixo teve que ser totalmente modificada,

 "var ch = int.Parse(checkStr.Substring(i, 1));" 

Encontrei a melhor opção para extrair valores de um texto e converter em inteiro para a verificação de valores incorreto, verifique o original abaixo que foi totalmente modificado.

"ch = checkStr.charAt(i);"

com isso consegui extrair cada "string" do texto sem nenhum problema.

verifique abaixo por completo:

namespace GerenciandoeAdministramdoNFc.Controllers.Clientes
{
    class ValidarCnpj
    {
        //ClsClientes _dadosClsClientes;

        internal static bool ValidarCnpjDigitado(ClsClientes dadosClsClientes)
        {


            dadosClsClientes.Cnpj = dadosClsClientes.Cnpj.Trim();
            dadosClsClientes.Cnpj = dadosClsClientes.Cnpj.Replace(".", "").Replace("-", "").Replace("/", "");

            if (dadosClsClientes.Cnpj == "")
            {

                MessageBox.Show("Por favor, preencha o campo \"CNPJ\"." + dadosClsClientes.Cnpj);
                return (false);
            }
            if (dadosClsClientes.Cnpj == "00000000000000")
            {
                MessageBox.Show("Valor de \"CNPJ\" inválido.");
   return (false);
   }

            if (dadosClsClientes.Cnpj.Length < 14)
            {
       MessageBox.Show("Por favor, preencha o campo \"CNPJ\" com 14 dígitos.");
       return (false);
   }

            if (dadosClsClientes.Cnpj.Length > 14)
     {
       MessageBox.Show("Por favor, preencha o campo \"CNPJ\" com 14 dígitos.");
       return (false);
     }
   const string checkOk = "0123456789";
   var checkStr = dadosClsClientes.Cnpj;
   var allValid = true;
   int decPoints = 0;
   var allNum = "";
            int i;
            int j;
            for (i = 0;  i < checkStr.Length;  i++)
   {

                var ch = int.Parse(checkStr.Substring(i, 1));

       for (j = 0;  j < checkOk.Length;  j++)
                    if (ch == int.Parse(checkOk.Substring(j, 1)))
                    //if (ch == checkOk.Substring(j))
                    break;

   if (j == checkOk.Length)
   {
       allValid = false;
       break;
   }
 
     allNum += ch;
   }
   if (!allValid)
                   {
   MessageBox.Show("Por favor, preencha o campo \"CNPJ\" apenas com dígitos.");
   return (false);
   }
            string cgc = dadosClsClientes.Cnpj;
            int cgc01 = Convert.ToInt16( cgc.Substring(0, 1));
            int cgc02 = Convert.ToInt16( cgc.Substring(1, 1));
            int cgc03 = Convert.ToInt16( cgc.Substring(2, 1));
            int cgc04 = Convert.ToInt16( cgc.Substring(3, 1));
            int cgc05 = Convert.ToInt16( cgc.Substring(4, 1));
            int cgc06 = Convert.ToInt16( cgc.Substring(5, 1));
            int cgc07 = Convert.ToInt16( cgc.Substring(6, 1));
            int cgc08 = Convert.ToInt16( cgc.Substring(7, 1));
            int cgc09 = Convert.ToInt16( cgc.Substring(8, 1));
            int cgc10 = Convert.ToInt16( cgc.Substring(9, 1));
            int cgc11 = Convert.ToInt16( cgc.Substring(10, 1));
            int cgc12 = Convert.ToInt16( cgc.Substring(11, 1));
            int cgc13 = Convert.ToInt16( cgc.Substring(12, 1));
            int cgc14 = Convert.ToInt16( cgc.Substring(13, 1));
            decimal aux1 = 10*(cgc01*5 + cgc02*4 + cgc03*3 + cgc04*2 + cgc05*9 + cgc06*8 +
                       cgc07*7 + cgc08*6 + cgc09*5 + cgc10*4 + cgc11*3 + cgc12*2);
            decimal aux2 = aux1/11;
            decimal aux3 = Math.Floor(aux2);
            decimal aux4 = aux3*11;
            decimal dv1 = (aux1 - aux4);
   if (dv1 == 10)
   {
       dv1 = 0;
   }
            aux1 = 10*(cgc01*6 + cgc02*5 + cgc03*4 + cgc04*3 + cgc05*2 + cgc06*9 +
                       cgc07*8 + cgc08*7 + cgc09*6 + cgc10*5 + cgc11*4 + cgc12*3 +
                       dv1*2);
            aux2 = aux1/11;
            aux3 = Math.Floor(aux2);
            aux4 = aux3*11;
            decimal dv2 = (aux1 - aux4);
   if (dv2 == 10)
   {
       dv2 = 0;
   }
   if (dv1 != cgc13 || dv2 != cgc14)
   {
       MessageBox.Show("Dígito verificador do campo \"CNPJ\" não confere.");
       return (false);
   }
            return true;
        }
    }
}



Espero que gostem, comentem e dê sua opinião para que melhore as minhas postagem.

segunda-feira, 18 de janeiro de 2016

Preencher um "comboBox" com estados cadastrados em uma tabela do banco de dados Firebird e populando com os dados capturados.

Preenchendo comboBox com estados, populando de um banco de dados Firebird.

Mostrando o Form.

     Vou explicar de um moto rápido, para quem já entende um pouco de acesso ao banco de dados e tendo em vista que já esta um pouco mais avançado na programação em c#.

     Então fiz um "Form" e que dentro dele tenha uma "comboBox" que vai ser preenchido com os estados cadastrados dentro de uma tabela no banco de dados firebird.

A figura 01 abaixo mostra o Form com a comboBox a ser preenchido.

Figura 01


Executando dentro do "Form".

     Ao entrar no "Form" verifique que no metodo "Load", o comboBox é preenchido com os dados que vai ser buscado na tabela

vamos verificar como ficou, para um melhor entendimento.

        public string ReceberDadosTabelaEstados = "estados";

       private void Form1_Load(object sender, EventArgs e)
        {
            comboBoxEstados.DataSource = Controllers.Estados.EstadosFb.fb_GetDados(ReceberDadosTabelaEstados);
            comboBoxEstados.DisplayMember = "uf";
        }

Acessando a tabela dentro do banco de dados.


     Configurando a chamada de dentro do banco de dados Firebird.

Segue abaixo o método criado para acesso ao banco de dados e selecionar todos os estados cadastrados.

veja como ficou simples e de fácil entendimento.

        public static DataTable fb_GetDados(string receberDadosTabela)
        {
            using (FbConnection conexaoFireBird = Models.Dados.ClsAcessoFB.getInstancia().getConexao())
            {
                try
                {
                    conexaoFireBird.Open();                         //abre a conexao...
                    string mSql = "Select uf from " + receberDadosTabela;         //seleciona tudo da
                    FbCommand cmd = new FbCommand(mSql, conexaoFireBird); // dar um comando dentro do banco...
                    FbDataAdapter da = new FbDataAdapter(cmd);      //cria uma instancia "da" para receber os comandos.
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                    return dt;  // retorna os dados capturados ao acesso ao banco de dados.
                }
                catch (FbException fbex)
                {
                    throw fbex;
                }
                finally
                {
                    conexaoFireBird.Close();
                }
            }
        }

Navegando no webBrowser.

     Ao executar um botão o sistema navegara em uma webBrowser e buscarar o estado escolhido antes da abertura.



    webBrowserSintegra.Navigating += new WebBrowserNavigatingEventHandler(webBrowserSintegra_Navigating);

As urls ele executara dependendo do estado escolhido.
exemplo:

  if (Convert.ToBoolean(_comboBoxEstados == "PR"))
 webBrowserSintegra.Navigate(new Uri("http://www.sintegra.fazenda.pr.gov.br/sintegra/"));



Sites Cadastrados

     Veja agora todas as Urls dos site de conferencia do Sintegra apos escolher o estado no comboBox.

segue abaixo:

    if (Convert.ToBoolean(_comboBoxEstados == "AC"))
webBrowserSintegra.Navigate(new Uri("http://sefaznet.ac.gov.br/sefazonline/servlet/hpfsincon"));
 
    if (Convert.ToBoolean(_comboBoxEstados == "AL")) webBrowserSintegra.Navigate(new Uri("http://www.sefaz.al.gov.br/asp/sintegra/sintegra.asp?estado=AL"));

    if (Convert.ToBoolean(_comboBoxEstados == "AP")) webBrowserSintegra.Navigate(new Uri("http://www.sintegra.ap.gov.br/"));

    if (Convert.ToBoolean(_comboBoxEstados == "AM")) webBrowserSintegra.Navigate(new Uri("http://www.sefaz.am.gov.br/sintegra/sintegra0.asp"));

    if (Convert.ToBoolean(_comboBoxEstados == "BA")) webBrowserSintegra.Navigate(new Uri("http://www.sefaz.ba.gov.br/Sintegra/sintegra.asp?estado=BA"));

    if (Convert.ToBoolean(_comboBoxEstados == "CE")) webBrowserSintegra.Navigate(new Uri("http://www.sefaz.ce.gov.br/Sintegra/Sintegra.Asp?estado=CE"));

    if (Convert.ToBoolean(_comboBoxEstados == "DF")) webBrowserSintegra.Navigate(new Uri("http://www.fazenda.df.gov.br/area.cfm?id_area=110"));

    if (Convert.ToBoolean(_comboBoxEstados == "ES")) webBrowserSintegra.Navigate(new Uri("http://www.sintegra.es.gov.br/"));

    if (Convert.ToBoolean(_comboBoxEstados == "GO")) webBrowserSintegra.Navigate(new Uri("http://appasp.sefaz.go.gov.br/Sintegra/Consulta/default.asp?"));

    if (Convert.ToBoolean(_comboBoxEstados == "MA")) webBrowserSintegra.Navigate(new Uri("http://www.sefaz.ma.gov.br/sintegra/sintegra.asp"));

    if (Convert.ToBoolean(_comboBoxEstados == "MT")) webBrowserSintegra.Navigate(new Uri("http://www.sefaz.mt.gov.br/sid/consulta/infocadastral/consultar/publica"));

    if (Convert.ToBoolean(_comboBoxEstados == "MS")) webBrowserSintegra.Navigate(new Uri("http://www1.sefaz.ms.gov.br/Cadastro/sintegra/cadastromsCCI.asp"));

    if (Convert.ToBoolean(_comboBoxEstados == "MG")) webBrowserSintegra.Navigate(new Uri("http://consultasintegra.fazenda.mg.gov.br"));

    if (Convert.ToBoolean(_comboBoxEstados == "PA")) webBrowserSintegra.Navigate(new Uri("http://app.sefa.pa.gov.br/Sintegra/"));

    if (Convert.ToBoolean(_comboBoxEstados == "PB")) webBrowserSintegra.Navigate(new Uri("http://sintegra.receita.pb.gov.br/sintegra/sintegra.asp?estado=pb"));

    if (Convert.ToBoolean(_comboBoxEstados == "PR")) webBrowserSintegra.Navigate(new Uri("http://www.sintegra.fazenda.pr.gov.br/sintegra/"));

    if (Convert.ToBoolean(_comboBoxEstados == "PE")) webBrowserSintegra.Navigate(new Uri("http://www.sintegra.sefaz.pe.gov.br"));

    if (Convert.ToBoolean(_comboBoxEstados == "PI")) webBrowserSintegra.Navigate(new Uri("http://web.sintegra.sefaz.pi.gov.br"));

    webBrowserSintegra.Navigate(new Uri("if (Convert.ToBoolean(_comboBoxEstados == "RJ")) http://www.fazenda.rj.gov.br/projetoCPS"));

    if (Convert.ToBoolean(_comboBoxEstados == "RN")) webBrowserSintegra.Navigate(new Uri("http://www.set.rn.gov.br/uvt/consultacontribuinte.aspx"));

    if (Convert.ToBoolean(_comboBoxEstados == "RS")) webBrowserSintegra.Navigate(new Uri("http://sintegra.sefaz.rs.gov.br/sef_root/inf/Sintegra_Entrada.asp"));

    if (Convert.ToBoolean(_comboBoxEstados == "RO")) http://www.sefin.ro.gov.br/sint_consul.asp"));

    if (Convert.ToBoolean(_comboBoxEstados == "RR")) webBrowserSintegra.Navigate(new Uri("https://www.sefaz.rr.gov.br/siate/servlet/wp_siate_consultasintegra"));

    if (Convert.ToBoolean(_comboBoxEstados == "SC")) webBrowserSintegra.Navigate(new Uri("http://sistemas3.sef.sc.gov.br/sintegra/consulta_empresa_pesquisa.aspx"));

    if (Convert.ToBoolean(_comboBoxEstados == "SP")) webBrowserSintegra.Navigate(new Uri("http://pfeserv1.fazenda.sp.gov.br/sintegrapfe/consultaSintegraServlet"));

    if (Convert.ToBoolean(_comboBoxEstados == "SE")) webBrowserSintegra.Navigate(new Uri("http://www.sefaz.se.gov.br/sintegra"));

    if (Convert.ToBoolean(_comboBoxEstados == "TO")) webBrowserSintegra.Navigate(new Uri("http://sintegra.sefaz.to.gov.br"));

    if (Convert.ToBoolean(_comboBoxEstados == " ")) webBrowserSintegra.Navigate(new Uri("http://www.suframa.gov.br/sintegra"));


Obrigado por Participar do meu Blogger.

     Qualquer duvida estou aqui para ajudar.

sábado, 2 de janeiro de 2016

Atualizar a alíquota de 18% nas impressoras fiscais.

Procedimento de atualização a alíquota de 18% nas impressoras fiscais.

Sem intervenção do Ecf.

1 - Procedimento


Baixe o Ecfteste.exe no site do Projeto Acbr.

Segue o link do Projeto caso não tenha o cadastro, tenho uma versão antiga para download
no servidor segue o link como também o link da dll responsável na execução.

2 - Procedimento

Ao baixar o arquivo Ecfteste.exe, execute antes de fazer qualquer vendas ou abertura do dia.
caso tenha feito algum movimento a única Ecf que não deixa cadastra é a Bematech.

veja abaixo a imagem do procedimento.



Procure o modelo de sua Ecf, como também a Porta que corresponde a comunicação com a mesma.
caso não saiba selecione diretamente Ativar para que o programa encontre.


ao não encontrar o ecf ele mostra a seguinte mensagem como na imagem acima.

3 - procedimento

Quando o programa encontra o Ecf correspondente selecione o Menu Variáveis.



Ao executar ele mostra todas as alíquotas cadastradas no ecf.



4 - procedimento

Agora vamos executar o cadastro de uma nova alíquota.
selecione no Menu Utilitários.



ao executar o programa de alíquota ele mostra qual alíquota vai se usada.


clique em "ok" para cadastra o desejado.


Confirme a aliquota desejada "SIM" = ICMS e "NÃO" = ISS.


pressione "YES" para programar a alíquota desejada.


Agora verifique como ficou a sua programação da nova alíquota no ecf.


Obrigado por compartilha suas ideias com todos,

@alexssandrolima












sexta-feira, 1 de janeiro de 2016

Usando ADO para conexão com o bando de dados Firebird!

Modificando dados na tabela do banco de dados Firebird.

Conexão com o banco de dados.

Boa noite, 
   Em primeiro lugar, crie uma classe que vai ter a conexão com o banco de dados, e que também  não possa ser herdada e nem instanciada usando o ADO para criação das classes de acesso.

   Como veremos abaixo o condigo de conexão com o banco de dados, sendo que, o mesmo tem que pegar algumas de suas configurações no app.config para posteriores modificações, assim mostrado a seguir.

Codigo de modelo de conexão com o banco de dados:

using FirebirdSql.Data.FirebirdClient;
using System.Configuration;

namespace GerenciandoeAdministramdoNFc.Models.Dados
{
    public class ClsAcessoFB   //deixar a classe publica
    {
        #region " base acesso ao banco de dados "
        private static readonly ClsAcessoFB instanciaFirebird = new ClsAcessoFB(); // instancia vai dar erro...
        private ClsAcessoFB() {}    // caso acessar direto nao mostrara nada.
        #endregion
        #region "INSTANCIAR O FIERBIRD"
        public static ClsAcessoFB getInstancia()    //INSTANCIAR BANCO DE DADOS....
        {
            return instanciaFirebird;
        }
        #endregion

        #region "STRING DE CONEXÃO E CONFIGURAÇÃO COM OS DADOS"
        public FbConnection getConexao()    // string de conexao com o bando de dados pegando do arquivo config...
        {
            string conn = ConfigurationManager.ConnectionStrings["FireBirdConnectionString"].ToString();
            return new FbConnection(conn);
        }
        #endregion
}


Veja a seguir os dados de configuração com o banco de dados, que contem o usuário como sua senha padrão de acesso, e o local onde se encontra o banco de dados para que a classe que o acesse consiga total conexão.

Configurando o app.config de configuração ao banco de dados:

 
             connectionString="Server=localhost;User=SYSDBA;Password=masterkey;Database=C:\dados\DADOS_systems.FDB" />
 


   Segue um breve exemplo de modificação de dados de uma tabela do banco de dados
recebendo como referencia do "Form" de alteração o nome da tabela que vai ser modificada, que aqui chamei de [usuarios] e como os respectivos dados a ser modificado.


        #region "Modificar e alterar Dados da tabela"
        internal static void Fb_AlterarDados(string receberDadosTabela, Models.Usuarios.ClsUsuarios tabeladedados)
        {
            using (FbConnection conexaoFireBird = Models.Dados.ClsAcessoFB.getInstancia().getConexao())
            {
                try
                {
                    conexaoFireBird.Open();
                    if (receberDadosTabela == "usuarios") // caso não seja a tabela a que foi designado o sistema não modificara os dados.
                    {
                        string mSql = "UPDATE " + receberDadosTabela + " SET nome = '" + tabeladedados.Nome + "', nivelacesso = '" + tabeladedados.Nivelacesso + "'" + " WHERE codigo= " + tabeladedados.ID;
                        FbCommand cmd = new FbCommand(mSql, conexaoFireBird);
                        cmd.ExecuteNonQuery(); // Gravando os dados no bando.
                    }
                }
                catch (FbException fbex)
                {
                    //MessageBox.Show("error no -> " + Fbex);
                    throw fbex;
                }
                finally
                {
                    conexaoFireBird.Close();
                }
            }
        }
        #endregion


Espero que gostem do exemplo que usei para conexão com o banco de dados firebrid.
Obrigado e boa noite.