private void btnGeraPdf_Click(object sender, EventArgs e)
        {
            try
            {
                List<DadosImpressao> objListDados = new List<DadosImpressao>();
                FileInfo[] fArquivoImprimir = null;
                DirectoryInfo dPasta = null;

                if (Acesso.TP_EMIS == 1)
                {
                    #region Verifica Selecionadas

                    for (int i = 0; i < dgvArquivos.RowCount; i++)
                    {
                        if (dgvArquivos["cl_assina", i].Value != null)
                        {
                            if (dgvArquivos["cl_assina", i].Value.ToString().Equals("True"))
                            {
                                string sProtEnvio = objGerais.VerificaCampoProtocoloEnvio(dgvArquivos["cd_conheci", i].Value.ToString());
                                if (sProtEnvio == "")
                                {
                                    sProtEnvio = objGerais.VerificaCampoProtocoloEnvioByChave(dgvArquivos["cd_conheci", i].Value.ToString()
                                        , (dgvArquivos["ds_cancelamento", i].Value.ToString() == "0" ? false : true));
                                }
                                DadosImpressao objDados = new DadosImpressao();
                                objDados.sNumeroCte = dgvArquivos["cd_conheci", i].Value.ToString();
                                objDados.sProtocolo = sProtEnvio;
                                if (Convert.ToBoolean(dgvArquivos["ds_cancelamento", i].Value).ToString().Equals("True"))
                                {
                                    objDados.Cancelado = true;
                                }
                                objListDados.Add(objDados);

                            }
                        }
                    }

                    #endregion
                }
                else
                {
                    #region Verifica Notas em Contingencia

                    for (int i = 0; i < dgvArquivos.RowCount; i++)
                    {
                        if (dgvArquivos["cl_imprime", i].Value != null)
                        {
                            if (dgvArquivos["cl_imprime", i].Value.ToString().Equals("True") && Convert.ToBoolean(dgvArquivos["st_cte", i].Value) == false && Convert.ToBoolean(dgvArquivos["st_contingencia", i].Value) == true)
                            {
                                DadosImpressao objDados = new DadosImpressao();
                                objDados.sNumeroCte = dgvArquivos["cd_conheci", i].Value.ToString();
                                objListDados.Add(objDados);
                            }
                        }
                    }

                    #endregion
                }
                if (objListDados.Count() > 0)
                {
                    if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
                    {
                        #region Busca Arquivos XML
                        for (int i = 0; i < objListDados.Count; i++)
                        {
                            if (Acesso.TP_EMIS == 1)
                            {
                                string sChaveCteRet = objGerais.BuscaChaveRetornoCte(objListDados[i].sNumeroCte);
                                string sPasta = sChaveCteRet.Substring(4, 2) + "-" + sChaveCteRet.Substring(2, 2);

                                if (!objListDados[i].Cancelado)
                                {
                                    dPasta = new DirectoryInfo(Pastas.ENVIADOS + @"\\" + sPasta);
                                }
                                else
                                {
                                    dPasta = new DirectoryInfo(Pastas.CANCELADOS + @"\\" + sPasta);
                                }
                                if (dPasta.Exists)
                                {
                                    fArquivoImprimir = dPasta.GetFiles("Cte_" + sChaveCteRet + ".xml");
                                    if (fArquivoImprimir.Count() == 1)
                                    {
                                        objListDados[i].bArquivoEncontrado = true;
                                        objListDados[i].sCaminhoXml = dPasta.ToString() + "\\Cte_" + sChaveCteRet + ".xml";
                                    }
                                    else
                                    {
                                        throw new Exception("Arquivo Xml não Encontrado");
                                    }
                                }
                            }
                            else
                            {
                                XmlDocument doc = new XmlDocument();

                                string sChaveCteRet = objGerais.BuscaChaveRetornoCte(objListDados[i].sNumeroCte);
                                string sPasta = sChaveCteRet.Substring(4, 2) + "-" + sChaveCteRet.Substring(2, 2);

                                dPasta = new DirectoryInfo(Pastas.CONTINGENCIA + @"\\" + sPasta);
                                fArquivoImprimir = dPasta.GetFiles("*.xml", SearchOption.AllDirectories);

                                foreach (FileInfo arq in fArquivoImprimir)
                                {
                                    doc.Load(@arq.FullName);
                                    if (doc.GetElementsByTagName("infCte")[0].Attributes["Id"].Value.ToString().Replace("CTe", "").Equals(sChaveCteRet))
                                    {
                                        objListDados[i].bArquivoEncontrado = true;
                                        objListDados[i].sCaminhoXml = arq.FullName;
                                        break;
                                    }
                                }

                            }
                        }
                        #endregion

                        belPopulaDataSet objDataSet = new belPopulaDataSet();

                        dsCTe dsPadrao = new dsCTe();
                        dsCTe dsLotacao = new dsCTe();
                        dsCTe dsPadraoCancelado = new dsCTe();
                        dsCTe dsLotacaoCancelado = new dsCTe();

                        int iCount = 0;
                        for (int i = 0; i < objListDados.Count; i++)
                        {
                            if (objListDados[i].bArquivoEncontrado == true)
                            {
                                if (objDataSet.VerificaLotacao(objListDados[i].sCaminhoXml))
                                {
                                    if (!objListDados[i].Cancelado)
                                    {
                                        objDataSet.PopulaDataSet(dsLotacao, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                        GeraPDF(dsLotacao, TipoPDF.LOTACAO, objListDados[i].sNumeroCte, folderBrowserDialog1.SelectedPath);
                                        iCount++;
                                    }
                                    else
                                    {
                                        objDataSet.PopulaDataSet(dsLotacaoCancelado, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                        GeraPDF(dsLotacaoCancelado, TipoPDF.LOTACAO_CANCELADO, objListDados[i].sNumeroCte, folderBrowserDialog1.SelectedPath);
                                        iCount++;
                                    }
                                }
                                else
                                {
                                    if (!objListDados[i].Cancelado)
                                    {
                                        objDataSet.PopulaDataSet(dsPadrao, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                        GeraPDF(dsPadrao, TipoPDF.PADRAO, objListDados[i].sNumeroCte, folderBrowserDialog1.SelectedPath);
                                        iCount++;
                                    }
                                    else
                                    {
                                        objDataSet.PopulaDataSet(dsPadraoCancelado, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                        GeraPDF(dsPadraoCancelado, TipoPDF.PADRAO_CANCELADO, objListDados[i].sNumeroCte, folderBrowserDialog1.SelectedPath);
                                        iCount++;
                                    }
                                }
                            }
                            else
                            {
                                KryptonMessageBox.Show("Arquivo Xml do Conhecimento " + objListDados[i].sNumeroCte + " não foi Encontrado.", Mensagens.MSG_Alerta, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                        }
                        if (iCount > 0)
                        {
                            KryptonMessageBox.Show("Arquivos PDF gerados com sucesso!", Mensagens.CHeader, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
                else
                {
                    KryptonMessageBox.Show("Nenhum CT-e válido foi Selecionado para gerar PDF.", Mensagens.MSG_Aviso, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                new HLPexception(ex);
            }
        }
        private void GeraPDF(dsCTe ds, TipoPDF tpPdf, string sNumCte, string sCaminhoSalvar)
        {
            try
            {

                ReportDocument rpt = new ReportDocument();

                if (tpPdf == TipoPDF.PADRAO)
                {
                    rpt.Load(Util.GetPathRelatorio("rptCtePadrao.rpt"));
                }
                else if (tpPdf == TipoPDF.PADRAO_CANCELADO)
                {
                    rpt.Load(Util.GetPathRelatorio("rptCtePadraoCancelado.rpt"));
                }
                else if (tpPdf == TipoPDF.LOTACAO)
                {
                    rpt.Load(Util.GetPathRelatorio("rptCteLotacao.rpt"));
                }
                else if (tpPdf == TipoPDF.LOTACAO_CANCELADO)
                {
                    rpt.Load(Util.GetPathRelatorio("rptCteLotacaoCancelado.rpt"));
                }
                rpt.SetDataSource(ds);
                rpt.Refresh();



                Util.ExportPDF(rpt, sCaminhoSalvar + "\\Cte_" + sNumCte + ".pdf");

            }
            catch (Exception ex)
            {
                new HLPexception(ex);
            }
        }
        private void btnImpressao_Click(object sender, EventArgs e)
        {
            try
            {
                List<DadosImpressao> objListDados = new List<DadosImpressao>();

                DirectoryInfo dPasta = null;
                FileInfo[] fArquivoImprimir = null;

                if (Acesso.TP_EMIS == 1)
                {
                    #region Verifica Selecionadas

                    for (int i = 0; i < dgvArquivos.RowCount; i++)
                    {
                        if (dgvArquivos["cl_assina", i].Value != null)
                        {
                            if (dgvArquivos["cl_assina", i].Value.ToString().Equals("True"))
                            {
                                string sProtEnvio = objGerais.VerificaCampoProtocoloEnvio(dgvArquivos["cd_conheci", i].Value.ToString());

                                if (sProtEnvio == "")
                                {
                                    sProtEnvio = objGerais.VerificaCampoProtocoloEnvioByChave(dgvArquivos["cd_conheci", i].Value.ToString()
                                        , (dgvArquivos["ds_cancelamento", i].Value.ToString() == "0" ? false : true));
                                }

                                DadosImpressao objDados = new DadosImpressao();
                                objDados.sNumeroCte = dgvArquivos["cd_conheci", i].Value.ToString();
                                objDados.sProtocolo = sProtEnvio;
                                if (Convert.ToBoolean(dgvArquivos["ds_cancelamento", i].Value).ToString().Equals("True"))
                                {
                                    objDados.Cancelado = true;
                                }
                                objListDados.Add(objDados);

                            }
                        }
                    }

                    #endregion
                }
                else
                {
                    #region Verifica Notas em Contingencia

                    for (int i = 0; i < dgvArquivos.RowCount; i++)
                    {
                        if (dgvArquivos["cl_imprime", i].Value != null)
                        {
                            if (dgvArquivos["cl_imprime", i].Value.ToString().Equals("True") && Convert.ToBoolean(dgvArquivos["st_cte", i].Value) == false && Convert.ToBoolean(dgvArquivos["st_contingencia", i].Value) == true)
                            {
                                DadosImpressao objDados = new DadosImpressao();
                                objDados.sNumeroCte = dgvArquivos["cd_conheci", i].Value.ToString();
                                objListDados.Add(objDados);
                            }
                        }
                    }

                    #endregion
                }

                #region Popula Dataset com Cte Validos

                if (objListDados.Count > 0)
                {
                    for (int i = 0; i < objListDados.Count; i++)
                    {
                        if (Acesso.TP_EMIS == 1)
                        {
                            string sChaveCteRet = objGerais.BuscaChaveRetornoCte(objListDados[i].sNumeroCte);
                            string sPasta = sChaveCteRet.Substring(4, 2) + "-" + sChaveCteRet.Substring(2, 2);

                            if (!objListDados[i].Cancelado)
                            {
                                dPasta = new DirectoryInfo(Pastas.ENVIADOS + @"\\" + sPasta);
                            }
                            else
                            {
                                dPasta = new DirectoryInfo(Pastas.CANCELADOS + @"\\" + sPasta);
                            }
                            if (dPasta.Exists)
                            {
                                fArquivoImprimir = dPasta.GetFiles("Cte_" + sChaveCteRet + ".xml");
                                if (fArquivoImprimir.Count() == 1)
                                {
                                    objListDados[i].bArquivoEncontrado = true;
                                    objListDados[i].sCaminhoXml = dPasta.ToString() + "\\Cte_" + sChaveCteRet + ".xml";
                                }
                                else
                                {
                                    throw new Exception("Arquivo Xml do Conhecimento " + objListDados[i].sNumeroCte + " não Encontrado");
                                }
                            }
                            else
                            {
                                throw new Exception("A pasta do Mês " + sPasta + " não existe.");
                            }
                        }
                        else
                        {
                            XmlDocument doc = new XmlDocument();

                            string sChaveCteRet = objGerais.BuscaChaveRetornoCte(objListDados[i].sNumeroCte);
                            string sPasta = sChaveCteRet.Substring(4, 2) + "-" + sChaveCteRet.Substring(2, 2);

                            dPasta = new DirectoryInfo(Pastas.CONTINGENCIA + @"\\" + sPasta);
                            fArquivoImprimir = dPasta.GetFiles("*.xml", SearchOption.AllDirectories);

                            foreach (FileInfo arq in fArquivoImprimir)
                            {
                                doc.Load(@arq.FullName);
                                if (doc.GetElementsByTagName("infCte")[0].Attributes["Id"].Value.ToString().Replace("CTe", "").Equals(sChaveCteRet))
                                {
                                    objListDados[i].bArquivoEncontrado = true;
                                    objListDados[i].sCaminhoXml = arq.FullName;
                                    break;
                                }
                            }

                        }
                    }

                    belPopulaDataSet objDataSet = new belPopulaDataSet();

                    dsCTe dsPadrao = new dsCTe();
                    dsCTe dsPadraoPDF = new dsCTe();
                    dsCTe dsLotacao = new dsCTe();
                    dsCTe dsPadraoCancelado = new dsCTe();
                    dsCTe dsLotacaoCancelado = new dsCTe();

                    for (int i = 0; i < objListDados.Count; i++)
                    {
                        if (objListDados[i].bArquivoEncontrado == true)
                        {
                            if (objDataSet.VerificaLotacao(objListDados[i].sCaminhoXml))
                            {
                                if (!objListDados[i].Cancelado)
                                {
                                    objDataSet.PopulaDataSet(dsLotacao, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    dsPadraoPDF = new dsCTe();
                                    objDataSet.PopulaDataSet(dsPadraoPDF, objListDados[i].sCaminhoXml, 1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPadraoPDF, TipoPDF.LOTACAO, objListDados[i]);
                                    //GeraPDF(dsLotacao, TipoPDF.LOTACAO, objListDados[i]);

                                }
                                else
                                {
                                    objDataSet.PopulaDataSet(dsLotacaoCancelado, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    dsPadraoPDF = new dsCTe();
                                    objDataSet.PopulaDataSet(dsPadraoPDF, objListDados[i].sCaminhoXml, 1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPadraoPDF, TipoPDF.LOTACAO_CANCELADO, objListDados[i]);

                                    //GeraPDF(dsLotacaoCancelado, TipoPDF.LOTACAO_CANCELADO, objListDados[i]);
                                }
                            }
                            else
                            {
                                if (!objListDados[i].Cancelado)
                                {
                                    objDataSet.PopulaDataSet(dsPadrao, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    dsPadraoPDF = new dsCTe();
                                    objDataSet.PopulaDataSet(dsPadraoPDF, objListDados[i].sCaminhoXml,1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPadraoPDF, TipoPDF.PADRAO, objListDados[i]);
                                }
                                else
                                {
                                    objDataSet.PopulaDataSet(dsPadraoCancelado, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    dsPadraoPDF = new dsCTe();
                                    objDataSet.PopulaDataSet(dsPadraoPDF, objListDados[i].sCaminhoXml, 1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPadraoPDF, TipoPDF.PADRAO_CANCELADO, objListDados[i]);

                                    //GeraPDF(dsPadraoCancelado, TipoPDF.PADRAO_CANCELADO, objListDados[i]);
                                }
                            }
                        }
                    }

                    if (Convert.ToBoolean(Acesso.EMAIL_AUTOMATICO))
                    {
                        EnviaEmail(objListDados);
                    }
                    if (dsPadrao.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Util.GetPathRelatorio("rptCtePadrao.rpt"));
                        rpt.SetDataSource(dsPadrao);
                        rpt.Refresh();

                        frmRelatorio frm = new frmRelatorio(rpt, "Impressão de DACTE - Carga Fracionada");
                        frm.Show();
                    }
                    if (dsPadraoCancelado.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Util.GetPathRelatorio("rptCtePadraoCancelado.rpt"));
                        rpt.SetDataSource(dsPadraoCancelado);
                        rpt.Refresh();

                        frmRelatorio frm = new frmRelatorio(rpt, "Impressão de DACTE - Carga Fracionada(Cancelados)");
                        frm.Show();
                    }
                    if (dsLotacao.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Util.GetPathRelatorio("rptCteLotacao.rpt"));
                        rpt.SetDataSource(dsLotacao);
                        rpt.Refresh();

                        frmRelatorio frm = new frmRelatorio(rpt, "Impressão de DACTE - Lotação");
                        frm.Show();
                    }
                    if (dsLotacaoCancelado.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Util.GetPathRelatorio("rptCteLotacaoCancelado.rpt"));
                        rpt.SetDataSource(dsLotacaoCancelado);
                        rpt.Refresh();

                        frmRelatorio frm = new frmRelatorio(rpt, "Impressão de DACTE - Lotação(Cancelados)");
                        frm.Show();
                    }
                }
                else
                {
                    KryptonMessageBox.Show("Nenhum CT-e válido foi Selecionado para Impressão.", Mensagens.MSG_Aviso, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }



                #endregion
            }
            catch (Exception ex)
            {
                new HLPexception(ex);
            }
        }
        private void GeraPDF(dsCTe ds, TipoPDF tpPdf, DadosImpressao objDados)
        {
            try
            {

                ReportDocument rpt = new ReportDocument();
                DirectoryInfo dinfo = null;

                if (tpPdf == TipoPDF.PADRAO)
                {
                    rpt.Load(Util.GetPathRelatorio("rptCtePadrao.rpt"));
                    dinfo = new DirectoryInfo(Pastas.ENVIADOS + "\\PDF");
                }
                else if (tpPdf == TipoPDF.PADRAO_CANCELADO)
                {
                    rpt.Load(Util.GetPathRelatorio("rptCtePadraoCancelado.rpt"));
                    dinfo = new DirectoryInfo(Pastas.CANCELADOS + "\\PDF");
                }
                else if (tpPdf == TipoPDF.LOTACAO)
                {
                    rpt.Load(Util.GetPathRelatorio("Relatorios\\rptCteLotacao.rpt"));
                    dinfo = new DirectoryInfo(Pastas.ENVIADOS + "\\PDF");
                }
                else if (tpPdf == TipoPDF.LOTACAO_CANCELADO)
                {
                    rpt.Load(Util.GetPathRelatorio("rptCteLotacaoCancelado.rpt"));
                    dinfo = new DirectoryInfo(Pastas.CANCELADOS + "\\PDF");
                }
                rpt.SetDataSource(ds);
                rpt.Refresh();

                if (!dinfo.Exists)
                {
                    dinfo.Create();
                }

                string sCaminhoPDF = dinfo.FullName + "\\Cte_" + objDados.sNumeroCte + ".pdf";
                objDados.sCaminhoPDF = sCaminhoPDF;
                Util.ExportPDF(rpt, sCaminhoPDF);

            }
            catch (Exception ex)
            {
                new HLPexception(ex);
            }


        }
        public void PopulaDataSet(dsCTe dsCte, string sCaminho, int iChave, string sProtocolo)
        {
            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(sCaminho);



                Byte[] bLogo = Util.CarregaImagem(Acesso.LOGOTIPO);
                dsLogo = dsCte.Logotipo.NewLogotipoRow();
                if (bLogo != null)
                {
                    dsLogo.Logo = bLogo;
                }
                dsCte.Logotipo.AddLogotipoRow(dsLogo);
                dsLogo = dsCte.Logotipo.NewLogotipoRow();

                #region infCte

                string sCodBarras = "";
                dsCodBarras = dsCte.CodBarras.NewCodBarrasRow();
                dsCodBarras.codId = iChave;
                dsCodBarras.pk_infCte = iChave;

                dsInfCte = dsCte.infCte.NewinfCteRow();

                XmlNodeList infCte = doc.GetElementsByTagName("infCte");
                for (int i = 0; i < infCte.Count; i++)
                {
                    for (int j = 0; j < infCte[i].Attributes.Count; j++)
                    {
                        switch (infCte[i].Attributes[j].LocalName)
                        {
                            case "Id": sCodBarras = infCte[i].Attributes[j].Value.ToString();
                                dsInfCte.Id = sCodBarras.Substring(3, sCodBarras.Length - 3);
                                break;

                            case "versao": dsInfCte.versao = infCte[i].Attributes[j].Value;
                                break;
                        }
                    }

                }

                XmlNodeList infProt = doc.GetElementsByTagName("infProt");
                string nProt = "";
                string dhRecbto = "";
                for (int i = 0; i < infProt.Count; i++)
                {
                    for (int j = 0; j < infProt[i].ChildNodes.Count; j++)
                    {
                        switch (infProt[i].ChildNodes[j].LocalName)
                        {
                            case "nProt": nProt = infProt[i].ChildNodes[j].InnerText;
                                break;
                            case "dhRecbto": dhRecbto = Convert.ToDateTime(infProt[i].ChildNodes[j].InnerText).ToString();
                                break;
                        }
                    }
                }
                dsInfCte.nProt = nProt + "  " + dhRecbto;

                string sBar = sCodBarras.Substring(3, sCodBarras.Length - 3);
                Byte[] bimagem = SalvaCodBarras(sBar);
                dsCodBarras.cod_barras = bimagem;
                dsCte.CodBarras.AddCodBarrasRow(dsCodBarras);
                dsCodBarras = dsCte.CodBarras.NewCodBarrasRow();

                dsInfCte.pk_infCte = iChave;

                dsCte.infCte.AddinfCteRow(dsInfCte);
                dsInfCte = dsCte.infCte.NewinfCteRow();

                #endregion

                #region ide

                dsIde = dsCte.ide.NewideRow();
                XmlNodeList ide = doc.GetElementsByTagName("ide");
                for (int i = 0; i < ide.Count; i++)
                {
                    for (int j = 0; j < ide[i].ChildNodes.Count; j++)
                    {
                        switch (ide[i].ChildNodes[j].LocalName)
                        {
                            case "cUF": dsIde.cUF = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "cCT": dsIde.cCT = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "CFOP": dsIde.CFOP = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "natOp": dsIde.natOp = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "forPag": dsIde.forPag = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "mod": dsIde.mod = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "serie": dsIde.serie = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "nCT": dsIde.nCT = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "dhEmi":

                                dsIde.dhEmi = Convert.ToDateTime(ide[i].ChildNodes[j].InnerText).ToString();
                                break;

                            case "tpImp": dsIde.tpImp = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "tpEmis": dsIde.tpEmis = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "cDV": dsIde.cDV = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "tpAmb": dsIde.tpAmb = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "tpCTe": dsIde.tpCTe = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "procEmi": dsIde.procEmi = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "verProc": dsIde.verProc = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "cMunEmi": dsIde.cMunEmi = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "xMunEmi": dsIde.xMunEmi = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "UFEmi": dsIde.UFEmi = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "modal": dsIde.modal = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "tpServ": dsIde.tpServ = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "cMunIni": dsIde.cMunIni = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "xMunIni": dsIde.xMunIni = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "UFIni": dsIde.UFIni = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "cMunFim": dsIde.cMunFim = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "xMunFim": dsIde.xMunFim = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "UFFim": dsIde.UFFim = ide[i].ChildNodes[j].InnerText;
                                break;

                            case "retira": dsIde.retira = ide[i].ChildNodes[j].InnerText;
                                break;
                        }
                    }

                }
                dsIde.nProt = nProt;// dsInfCte.nProt; // sProtocolo;
                dsIde.pk_ide = iChave;
                dsIde.pk_infCte = iChave;
                string scCT = dsIde.cCT; //sicupira

                dsCte.ide.AddideRow(dsIde);
                dsIde = dsCte.ide.NewideRow();

                #endregion

                #region Compl

                XmlNodeList objcont = doc.GetElementsByTagName("ObsCont");
                dsCompl = dsCte.compl.NewcomplRow();
                dsCompl.pk_infCte = iChave;
                dsCompl.pk_compl = iChave;
                dsCte.compl.AddcomplRow(dsCompl);
                if (objcont.Count > 0)
                {
                    dsObsCont = dsCte.ObsCont.NewObsContRow();
                    for (int i = 0; i < objcont.Count; i++)
                    {
                        for (int j = 0; j < objcont[i].ChildNodes.Count; j++)
                        {
                            switch (objcont[i].ChildNodes[j].LocalName)
                            {
                                case "xTexto": dsObsCont.xTexto = objcont[i].ChildNodes[j].InnerText;
                                    break;
                            }
                        }
                    }
                    dsObsCont.xTexto += Environment.NewLine + daoUtil.BuscaNumNotas(scCT);
                    dsObsCont.pk_compl = iChave;
                    dsObsCont.pk_xObs = iChave;
                    dsCte.ObsCont.AddObsContRow(dsObsCont);
                }
                else
                {
                    dsObsCont = dsCte.ObsCont.NewObsContRow();
                    dsObsCont.xTexto = daoUtil.BuscaNumNotas(scCT);
                    dsObsCont.pk_compl = iChave;
                    dsObsCont.pk_xObs = iChave;
                    dsCte.ObsCont.AddObsContRow(dsObsCont);
                }
                #endregion

                #region Tomador


                XmlNodeList toma03 = doc.GetElementsByTagName("toma03");
                XmlNodeList toma4 = doc.GetElementsByTagName("toma4");
                XmlNodeList enderToma = doc.GetElementsByTagName("enderToma");

                if (toma03.Count > 0)
                {
                    dsToma03 = dsCte.toma03.Newtoma03Row();
                    for (int i = 0; i < toma03.Count; i++)
                    {
                        for (int j = 0; j < toma03[i].ChildNodes.Count; j++)
                        {
                            switch (toma03[i].ChildNodes[j].LocalName)
                            {
                                case "toma": dsToma03.toma = toma03[i].ChildNodes[j].InnerText;
                                    break;

                            }
                        }
                    }
                    dsToma03.pk_toma03 = iChave;
                    dsToma03.pk_ide = iChave;

                    dsCte.toma03.Addtoma03Row(dsToma03);
                    // dsToma03 = dsCte.toma03.Newtoma03Row();
                }



                #endregion

                #region emit

                #region Dados Emit

                dsEmit = dsCte.emit.NewemitRow();
                XmlNodeList emit = doc.GetElementsByTagName("emit");

                for (int i = 0; i < emit.Count; i++)
                {
                    for (int j = 0; j < emit[i].ChildNodes.Count; j++)
                    {
                        switch (emit[i].ChildNodes[j].LocalName)
                        {
                            case "CNPJ": dsEmit.CNPJ = emit[i].ChildNodes[j].InnerText;
                                break;

                            case "IE": dsEmit.IE = emit[i].ChildNodes[j].InnerText;
                                break;

                            case "xNome": dsEmit.xNome = emit[i].ChildNodes[j].InnerText;
                                break;

                            case "xFant": dsEmit.xFant = emit[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsEmit.pk_emit = iChave;
                dsEmit.pk_infCte = iChave;

                dsCte.emit.AddemitRow(dsEmit);
                dsEmit = dsCte.emit.NewemitRow();

                #endregion

                #region EnderEmit

                dsEnderEmit = dsCte.enderEmit.NewenderEmitRow();
                XmlNodeList enderEmit = doc.GetElementsByTagName("enderEmit");

                for (int i = 0; i < enderEmit.Count; i++)
                {
                    for (int j = 0; j < enderEmit[i].ChildNodes.Count; j++)
                    {
                        switch (enderEmit[i].ChildNodes[j].LocalName)
                        {
                            case "xLgr": dsEnderEmit.xLgr = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "nro": dsEnderEmit.nro = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "xCpl": dsEnderEmit.xCpl = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "xBairro": dsEnderEmit.xBairro = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "cMun": dsEnderEmit.cMun = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "xMun": dsEnderEmit.xMun = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "CEP": dsEnderEmit.CEP = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "UF": dsEnderEmit.UF = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "cPais": dsEnderEmit.cPais = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "xPais": dsEnderEmit.xPais = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                            case "fone": dsEnderEmit.fone = enderEmit[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsEnderEmit.pk_emit = iChave;
                dsEnderEmit.pk_enderEmit = iChave;

                dsCte.enderEmit.AddenderEmitRow(dsEnderEmit);
                dsEnderEmit = dsCte.enderEmit.NewenderEmitRow();

                #endregion


                #endregion

                #region rem

                #region Dados Rem
                dsRem = dsCte.rem.NewremRow();
                XmlNodeList rem = doc.GetElementsByTagName("rem");

                for (int i = 0; i < rem.Count; i++)
                {
                    for (int j = 0; j < rem[i].ChildNodes.Count; j++)
                    {
                        switch (rem[i].ChildNodes[j].LocalName)
                        {
                            case "CNPJ": dsRem.CNPJ = rem[i].ChildNodes[j].InnerText;
                                break;

                            case "CPF": dsRem.CPF = rem[i].ChildNodes[j].InnerText;
                                break;

                            case "IE": dsRem.IE = rem[i].ChildNodes[j].InnerText;
                                break;

                            case "xNome": dsRem.xNome = rem[i].ChildNodes[j].InnerText;
                                break;

                            case "xFant": dsRem.xFant = rem[i].ChildNodes[j].InnerText;
                                break;

                            case "fone": dsRem.fone = rem[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }
                dsRem.pk_infCte = iChave;
                dsRem.pk_rem = iChave;
                dsCte.rem.AddremRow(dsRem);
                //   dsRem = dsCte.rem.NewremRow();





                #endregion

                #region EnderReme

                dsEnderReme = dsCte.enderReme.NewenderRemeRow();
                XmlNodeList enderReme = doc.GetElementsByTagName("enderReme");

                for (int i = 0; i < enderReme.Count; i++)
                {
                    for (int j = 0; j < enderReme[i].ChildNodes.Count; j++)
                    {
                        switch (enderReme[i].ChildNodes[j].LocalName)
                        {
                            case "xLgr": dsEnderReme.xLgr = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "nro": dsEnderReme.nro = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "xCpl": dsEnderReme.xCpl = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "xBairro": dsEnderReme.xBairro = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "cMun": dsEnderReme.cMun = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "xMun": dsEnderReme.xMun = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "CEP": dsEnderReme.CEP = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "UF": dsEnderReme.UF = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "cPais": dsEnderReme.cPais = enderReme[i].ChildNodes[j].InnerText;
                                break;

                            case "xPais": dsEnderReme.xPais = enderReme[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsEnderReme.pk_enderReme = iChave;
                dsEnderReme.pk_rem = iChave;

                dsCte.enderReme.AddenderRemeRow(dsEnderReme);
                // dsEnderReme = dsCte.enderReme.NewenderRemeRow();

                #endregion

                #region infNF

                dsInfNF = dsCte.infNF.NewinfNFRow();

                XmlNodeList infNF = doc.GetElementsByTagName("infNF");

                for (int i = 0; i < infNF.Count; i++)
                {
                    string sNumNF = "";
                    for (int j = 0; j < infNF[i].ChildNodes.Count; j++)
                    {
                        switch (infNF[i].ChildNodes[j].LocalName)
                        {
                            case "serie": dsInfNF.serie = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "nDoc": dsInfNF.nDoc = infNF[i].ChildNodes[j].InnerText;
                                sNumNF = dsInfNF.nDoc;
                                break;

                            case "dEmi": dsInfNF.dEmi = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "vBC": dsInfNF.vBC = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "vICMS": dsInfNF.vICMS = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "vBCST": dsInfNF.vBCST = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "vST": dsInfNF.vST = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "vProd": dsInfNF.vProd = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "vNF": dsInfNF.vNF = infNF[i].ChildNodes[j].InnerText;
                                break;

                            case "nCFOP": dsInfNF.nCFOP = infNF[i].ChildNodes[j].InnerText;
                                break;
                        }

                    }
                    dsInfNF.TipoNf = "NF";
                    PopulaDadosNf(sNumNF);
                    dsInfNF.pk_infNF = iChaveNota;
                    iChaveNota++;
                    dsInfNF.pk_rem = iChave;

                    dsCte.infNF.AddinfNFRow(dsInfNF);
                    dsInfNF = dsCte.infNF.NewinfNFRow();
                }


                dsInfNF = dsCte.infNF.NewinfNFRow();
                XmlNodeList infNFe = doc.GetElementsByTagName("infNFe");
                for (int i = 0; i < infNFe.Count; i++)
                {

                    for (int j = 0; j < infNFe[i].ChildNodes.Count; j++)
                    {
                        switch (infNFe[i].ChildNodes[j].LocalName)
                        {
                            case "chave": dsInfNF.ChaveNfe = infNFe[i].ChildNodes[j].InnerText;
                                break;
                        }
                    }

                    dsInfNF.TipoNf = "NF-e";
                    dsInfNF.pk_infNF = iChaveNota;
                    iChaveNota++;
                    dsInfNF.pk_rem = iChave;

                    dsCte.infNF.AddinfNFRow(dsInfNF);
                    dsInfNF = dsCte.infNF.NewinfNFRow();
                }

                #endregion

                #region Outros Documentos


                XmlNodeList infOutros = doc.GetElementsByTagName("infOutros");


                dsInfNF = dsCte.infNF.NewinfNFRow();
                for (int i = 0; i < infOutros.Count; i++)
                {
                    string sNumNF = "";
                    for (int j = 0; j < infOutros[i].ChildNodes.Count; j++)
                    {

                        switch (infOutros[i].ChildNodes[j].LocalName)
                        {
                            case "tpDoc": dsInfNF.TipoNf = infOutros[i].ChildNodes[j].InnerText == "00" ? "00-Declaração" : "99-Outros";
                                break;
                            case "nDoc": dsInfNF.nDoc = infOutros[i].ChildNodes[j].InnerText;
                                sNumNF = dsInfNF.nDoc;
                                break;
                            case "dEmi": dsInfNF.dEmi = infOutros[i].ChildNodes[j].InnerText;
                                break;
                        }
                    }

                    PopulaDadosNf(sNumNF);
                    dsInfNF.pk_infNF = iChaveNota;
                    iChaveNota++;
                    dsInfNF.pk_rem = iChave;

                    dsCte.infNF.AddinfNFRow(dsInfNF);
                    dsInfNF = dsCte.infNF.NewinfNFRow();
                }

                #endregion


                #endregion

                #region exped

                #region Dados Exped

                dsExped = dsCte.exped.NewexpedRow();
                XmlNodeList exped = doc.GetElementsByTagName("exped");

                for (int i = 0; i < exped.Count; i++)
                {
                    for (int j = 0; j < exped[i].ChildNodes.Count; j++)
                    {
                        switch (rem[i].ChildNodes[j].LocalName)
                        {
                            case "CNPJ": dsExped.CNPJ = exped[i].ChildNodes[j].InnerText;
                                break;

                            case "CPF": dsExped.CPF = exped[i].ChildNodes[j].InnerText;
                                break;

                            case "IE": dsExped.IE = exped[i].ChildNodes[j].InnerText;
                                break;

                            case "xNome": dsExped.xNome = exped[i].ChildNodes[j].InnerText;
                                break;

                            case "fone": dsExped.fone = exped[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }
                dsExped.pk_infCte = iChave;
                dsExped.pk_exped = iChave;
                dsCte.exped.AddexpedRow(dsExped);
                dsExped = dsCte.exped.NewexpedRow();

                #endregion

                #region EnderExped

                dsEnderExped = dsCte.enderExped.NewenderExpedRow();
                XmlNodeList enderExped = doc.GetElementsByTagName("enderExped");

                for (int i = 0; i < enderExped.Count; i++)
                {
                    for (int j = 0; j < enderExped[i].ChildNodes.Count; j++)
                    {
                        switch (enderReme[i].ChildNodes[j].LocalName)
                        {
                            case "xLgr": dsEnderExped.xLgr = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "nro": dsEnderExped.nro = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "xCpl": dsEnderExped.xCpl = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "xBairro": dsEnderExped.xBairro = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "cMun": dsEnderExped.cMun = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "xMun": dsEnderExped.xMun = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "CEP":
                                {
                                    dsEnderExped.CEP = "";
                                    dsEnderExped.CEP = enderExped[i].ChildNodes[j].InnerText;
                                }
                                break;

                            case "UF": dsEnderExped.UF = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "cPais": dsEnderExped.cPais = enderExped[i].ChildNodes[j].InnerText;
                                break;

                            case "xPais": dsEnderExped.xPais = enderExped[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsEnderExped.pk_enderExped = iChave;
                dsEnderExped.pk_exped = iChave;

                dsCte.enderExped.AddenderExpedRow(dsEnderExped);
                dsEnderExped = dsCte.enderExped.NewenderExpedRow();

                #endregion

                #endregion

                #region receb

                #region Dados Receb

                dsReceb = dsCte.receb.NewrecebRow();
                XmlNodeList receb = doc.GetElementsByTagName("receb");

                for (int i = 0; i < receb.Count; i++)
                {
                    for (int j = 0; j < receb[i].ChildNodes.Count; j++)
                    {
                        switch (receb[i].ChildNodes[j].LocalName)
                        {
                            case "CNPJ": dsReceb.CNPJ = receb[i].ChildNodes[j].InnerText;
                                break;

                            case "CPF": dsReceb.CPF = receb[i].ChildNodes[j].InnerText;
                                break;

                            case "IE": dsReceb.IE = receb[i].ChildNodes[j].InnerText;
                                break;

                            case "xNome": dsReceb.xNome = receb[i].ChildNodes[j].InnerText;
                                break;

                            case "fone": dsReceb.fone = receb[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }
                dsReceb.pk_infCte = iChave;
                dsReceb.pk_receb = iChave;
                dsCte.receb.AddrecebRow(dsReceb);
                dsReceb = dsCte.receb.NewrecebRow();

                #endregion

                #region EnderReceb

                dsEnderReceb = dsCte.enderReceb.NewenderRecebRow();
                XmlNodeList enderReceb = doc.GetElementsByTagName("enderReceb");

                for (int i = 0; i < enderReceb.Count; i++)
                {
                    for (int j = 0; j < enderReceb[i].ChildNodes.Count; j++)
                    {
                        switch (enderReceb[i].ChildNodes[j].LocalName)
                        {
                            case "xLgr": dsEnderReceb.xLgr = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "nro": dsEnderReceb.nro = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "xCpl": dsEnderReceb.xCpl = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "xBairro": dsEnderReceb.xBairro = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "cMun": dsEnderReceb.cMun = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "xMun": dsEnderReceb.xMun = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "CEP": dsEnderReceb.CEP = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "UF": dsEnderReceb.UF = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "cPais": dsEnderReceb.cPais = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                            case "xPais": dsEnderReceb.xPais = enderReceb[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsEnderReceb.pk_enderReceb = iChave;
                dsEnderReceb.pk_receb = iChave;

                dsCte.enderReceb.AddenderRecebRow(dsEnderReceb);
                dsEnderReceb = dsCte.enderReceb.NewenderRecebRow();

                #endregion

                #endregion

                #region dest

                #region Dados Dest

                dsDest = dsCte.dest.NewdestRow();
                XmlNodeList dest = doc.GetElementsByTagName("dest");

                for (int i = 0; i < dest.Count; i++)
                {
                    for (int j = 0; j < dest[i].ChildNodes.Count; j++)
                    {
                        switch (dest[i].ChildNodes[j].LocalName)
                        {
                            case "CNPJ": dsDest.CNPJ = dest[i].ChildNodes[j].InnerText;
                                break;

                            case "CPF": dsDest.CPF = dest[i].ChildNodes[j].InnerText;
                                break;

                            case "IE": dsDest.IE = dest[i].ChildNodes[j].InnerText;
                                break;

                            case "xNome": dsDest.xNome = dest[i].ChildNodes[j].InnerText;
                                break;

                            case "fone": dsDest.fone = dest[i].ChildNodes[j].InnerText;
                                break;

                            case "ISUF": dsDest.ISUF = dest[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsDest.pk_dest = iChave;
                dsDest.pk_infCte = iChave;

                dsCte.dest.AdddestRow(dsDest);
                //dsDest = dsCte.dest.NewdestRow();

                #endregion

                #region  EnderDest

                dsEnderDest = dsCte.enderDest.NewenderDestRow();
                XmlNodeList enderDest = doc.GetElementsByTagName("enderDest");

                for (int i = 0; i < enderDest.Count; i++)
                {
                    for (int j = 0; j < enderDest[i].ChildNodes.Count; j++)
                    {
                        switch (enderDest[i].ChildNodes[j].LocalName)
                        {
                            case "xLgr": dsEnderDest.xLgr = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "nro": dsEnderDest.nro = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "xCpl": dsEnderDest.xCpl = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "xBairro": dsEnderDest.xBairro = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "cMun": dsEnderDest.cMun = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "xMun": dsEnderDest.xMun = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "CEP": dsEnderDest.CEP = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "UF": dsEnderDest.UF = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "cPais": dsEnderDest.cPais = enderDest[i].ChildNodes[j].InnerText;
                                break;

                            case "xPais": dsEnderDest.xPais = enderDest[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsEnderDest.pk_dest = iChave;
                dsEnderDest.pk_enderDest = iChave;

                dsCte.enderDest.AddenderDestRow(dsEnderDest);
                // dsEnderDest = dsCte.enderDest.NewenderDestRow();

                #endregion


                #endregion

                #region  vPrest

                dsVprest = dsCte.vPrest.NewvPrestRow();
                XmlNodeList vPrest = doc.GetElementsByTagName("vPrest");


                for (int i = 0; i < vPrest.Count; i++)
                {
                    for (int j = 0; j < vPrest[i].ChildNodes.Count; j++)
                    {
                        switch (vPrest[i].ChildNodes[j].LocalName)
                        {
                            case "vTPrest": dsVprest.vTPrest = vPrest[i].ChildNodes[j].InnerText;
                                break;

                            case "vRec": dsVprest.vRec = vPrest[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsVprest.pk_vPrest = iChave;
                dsVprest.pk_infCte = iChave;

                dsCte.vPrest.AddvPrestRow(dsVprest);
                dsVprest = dsCte.vPrest.NewvPrestRow();

                dsComp = dsCte.Comp.NewCompRow();
                XmlNodeList Comp = doc.GetElementsByTagName("Comp");


                for (int i = 0; i < Comp.Count; i++)
                {
                    for (int j = 0; j < Comp[i].ChildNodes.Count; j++)
                    {
                        switch (Comp[i].ChildNodes[j].LocalName)
                        {
                            case "xNome": dsComp.xNome = Comp[i].ChildNodes[j].InnerText;
                                break;

                            case "vComp": dsComp.vComp = Comp[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }

                    dsComp.pk_vPrest = iChave;
                    dsComp.pk_Comp = iChaveComp;
                    iChaveComp++;

                    dsCte.Comp.AddCompRow(dsComp);
                    dsComp = dsCte.Comp.NewCompRow();
                }

                #endregion

                #region imp

                dsImp = dsCte.imp.NewimpRow();
                dsImp.pk_imp = iChave;
                dsImp.pk_infCte = iChave;
                dsCte.imp.AddimpRow(dsImp);

                dsICMS = dsCte.ICMS.NewICMSRow();
                dsICMS.pk_ICMS = iChave;
                dsICMS.pk_imp = iChave;
                dsCte.ICMS.AddICMSRow(dsICMS);



                XmlNodeList ICMS00 = doc.GetElementsByTagName("ICMS00");
                XmlNodeList ICMS20 = doc.GetElementsByTagName("ICMS20");
                XmlNodeList ICMS45 = doc.GetElementsByTagName("ICMS45");
                XmlNodeList ICMS60 = doc.GetElementsByTagName("ICMS60");
                XmlNodeList ICMSOutraUF = doc.GetElementsByTagName("ICMSOutraUF");
                XmlNodeList ICMS90 = doc.GetElementsByTagName("ICMS90");

                if (ICMS00.Count > 0)
                {
                    #region ICMS00

                    dsICMS00 = dsCte.ICMS00.NewICMS00Row();

                    for (int i = 0; i < ICMS00.Count; i++)
                    {
                        for (int j = 0; j < ICMS00[i].ChildNodes.Count; j++)
                        {
                            switch (ICMS00[i].ChildNodes[j].LocalName)
                            {
                                case "CST": dsICMS00.CST = ICMS00[i].ChildNodes[j].InnerText;
                                    break;

                                case "vBC": dsICMS00.vBC = ICMS00[i].ChildNodes[j].InnerText;
                                    break;

                                case "pICMS": dsICMS00.pICMS = ICMS00[i].ChildNodes[j].InnerText;
                                    break;

                                case "vICMS": dsICMS00.vICMS = ICMS00[i].ChildNodes[j].InnerText;
                                    break;

                            }
                        }
                    }
                    dsICMS00.pk_ICMS00 = iChave;
                    dsICMS00.pk_ICMS = iChave;
                    dsCte.ICMS00.AddICMS00Row(dsICMS00);
                    dsICMS00 = dsCte.ICMS00.NewICMS00Row();

                    #endregion
                }
                else if (ICMS20.Count > 0)
                {
                    #region ICMS20
                    dsICMS20 = dsCte.ICMS20.NewICMS20Row();

                    for (int i = 0; i < ICMS20.Count; i++)
                    {
                        for (int j = 0; j < ICMS20[i].ChildNodes.Count; j++)
                        {
                            switch (ICMS20[i].ChildNodes[j].LocalName)
                            {
                                case "CST": dsICMS20.CST = ICMS20[i].ChildNodes[j].InnerText;
                                    break;

                                case "pRedBC": dsICMS20.pRedBC = ICMS20[i].ChildNodes[j].InnerText;
                                    break;

                                case "vBC": dsICMS20.vBC = ICMS20[i].ChildNodes[j].InnerText;
                                    break;

                                case "pICMS": dsICMS20.pICMS = ICMS20[i].ChildNodes[j].InnerText;
                                    break;

                                case "vICMS": dsICMS20.vICMS = ICMS20[i].ChildNodes[j].InnerText;
                                    break;

                            }
                        }
                    }
                    dsICMS20.pk_ICMS20 = iChave;
                    dsICMS20.pk_ICMS = iChave;
                    dsCte.ICMS20.AddICMS20Row(dsICMS20);
                    dsICMS20 = dsCte.ICMS20.NewICMS20Row();

                    #endregion
                }
                else if (ICMS45.Count > 0)
                {
                    #region ICMS45
                    dsICMS45 = dsCte.ICMS45.NewICMS45Row();

                    for (int i = 0; i < ICMS45.Count; i++)
                    {
                        for (int j = 0; j < ICMS45[i].ChildNodes.Count; j++)
                        {
                            switch (ICMS45[i].ChildNodes[j].LocalName)
                            {
                                case "CST": dsICMS45.CST = ICMS45[i].ChildNodes[j].InnerText;
                                    break;

                            }
                        }
                    }
                    dsICMS45.pk_ICMS45 = iChave;
                    dsICMS45.pk_ICMS = iChave;
                    dsCte.ICMS45.AddICMS45Row(dsICMS45);
                    dsICMS45 = dsCte.ICMS45.NewICMS45Row();

                    #endregion
                }
                else if (ICMS60.Count > 0)
                {
                    #region ICMS60
                    dsICMS60 = dsCte.ICMS60.NewICMS60Row();

                    for (int i = 0; i < ICMS60.Count; i++)
                    {
                        for (int j = 0; j < ICMS60[i].ChildNodes.Count; j++)
                        {
                            switch (ICMS60[i].ChildNodes[j].LocalName)
                            {
                                case "CST": dsICMS60.CST = ICMS60[i].ChildNodes[j].InnerText;
                                    break;

                                case "vBCSTRet": dsICMS60.vBCSTRet = ICMS60[i].ChildNodes[j].InnerText;
                                    break;

                                case "vICMSSTRet": dsICMS60.vICMSSTRet = ICMS60[i].ChildNodes[j].InnerText;
                                    break;

                                case "pICMSSTRet": dsICMS60.pICMSSTRet = ICMS60[i].ChildNodes[j].InnerText;
                                    break;

                                case "vCred": dsICMS60.vCred = ICMS60[i].ChildNodes[j].InnerText;
                                    break;

                            }
                        }
                    }
                    dsICMS60.pk_ICMS60 = iChave;
                    dsICMS60.pk_ICMS = iChave;
                    dsCte.ICMS60.AddICMS60Row(dsICMS60);
                    dsICMS60 = dsCte.ICMS60.NewICMS60Row();

                    #endregion
                }
                else if (ICMSOutraUF.Count > 0)
                {
                    #region ICMSOutraUF
                    dsICMSOutraUF = dsCte.ICMSOutraUF.NewICMSOutraUFRow();

                    for (int i = 0; i < ICMSOutraUF.Count; i++)
                    {
                        for (int j = 0; j < ICMSOutraUF[i].ChildNodes.Count; j++)
                        {
                            switch (ICMSOutraUF[i].ChildNodes[j].LocalName)
                            {
                                case "CST": dsICMSOutraUF.CST = ICMSOutraUF[i].ChildNodes[j].InnerText;
                                    break;

                                case "pRedBCOutraUF": dsICMSOutraUF.pRedBCOutraUF = ICMSOutraUF[i].ChildNodes[j].InnerText;
                                    break;

                                case "vBCOutraUF": dsICMSOutraUF.vBCOutraUF = ICMSOutraUF[i].ChildNodes[j].InnerText;
                                    break;

                                case "pICMSOutraUF": dsICMSOutraUF.pICMSOutraUF = ICMSOutraUF[i].ChildNodes[j].InnerText;
                                    break;

                                case "vICMSOutraUF": dsICMSOutraUF.vICMSOutraUF = ICMS60[i].ChildNodes[j].InnerText;
                                    break;

                            }
                        }
                    }
                    dsICMSOutraUF.pk_ICMSOutraUF = iChave;
                    dsICMSOutraUF.pk_ICMS = iChave;
                    dsCte.ICMSOutraUF.AddICMSOutraUFRow(dsICMSOutraUF);
                    dsICMSOutraUF = dsCte.ICMSOutraUF.NewICMSOutraUFRow();

                    #endregion
                }
                else if (ICMS90.Count > 0)
                {
                    #region ICMS90
                    dsICMS90 = dsCte.ICMS90.NewICMS90Row();

                    for (int i = 0; i < ICMS90.Count; i++)
                    {
                        for (int j = 0; j < ICMS90[i].ChildNodes.Count; j++)
                        {
                            switch (ICMS90[i].ChildNodes[j].LocalName)
                            {
                                case "CST": dsICMS90.CST = ICMS90[i].ChildNodes[j].InnerText;
                                    break;

                                case "pRedBC": dsICMS90.pRedBC = ICMS90[i].ChildNodes[j].InnerText;
                                    break;

                                case "vBC": dsICMS90.vBC = ICMS90[i].ChildNodes[j].InnerText;
                                    break;

                                case "vICMS": dsICMS90.vICMS = ICMS90[i].ChildNodes[j].InnerText;
                                    break;

                                case "pICMS": dsICMS90.pICMS = ICMS90[i].ChildNodes[j].InnerText;
                                    break;

                                case "vCred": dsICMS90.vCred = ICMS90[i].ChildNodes[j].InnerText;
                                    break;

                            }
                        }
                    }
                    dsICMS90.pk_ICMS90 = iChave;
                    dsICMS90.pk_ICMS = iChave;
                    dsCte.ICMS90.AddICMS90Row(dsICMS90);
                    dsICMS90 = dsCte.ICMS90.NewICMS90Row();

                    #endregion
                }

                dsImp = dsCte.imp.NewimpRow();
                dsICMS = dsCte.ICMS.NewICMSRow();
                #endregion

                #region infCTeNorm

                dsInfCTeNorm = dsCte.infCTeNorm.NewinfCTeNormRow();
                dsInfCTeNorm.pk_infCte = iChave;
                dsInfCTeNorm.pk_infCTeNorm = iChave;

                #region infCarga

                dsInfCarga = dsCte.infCarga.NewinfCargaRow();
                XmlNodeList infCarga = doc.GetElementsByTagName("infCarga");

                for (int i = 0; i < infCarga.Count; i++)
                {
                    for (int j = 0; j < infCarga[i].ChildNodes.Count; j++)
                    {
                        switch (infCarga[i].ChildNodes[j].LocalName)
                        {
                            case "vCarga": dsInfCarga.vMerc = infCarga[i].ChildNodes[j].InnerText;
                                break;

                            case "proPred": dsInfCarga.proPred = infCarga[i].ChildNodes[j].InnerText;
                                break;

                            case "xOutCat": dsInfCarga.proPred = infCarga[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }
                dsInfCarga.pk_infCarga = iChave;
                dsInfCarga.pk_infCTeNorm = iChave;

                dsCte.infCTeNorm.AddinfCTeNormRow(dsInfCTeNorm);
                dsCte.infCarga.AddinfCargaRow(dsInfCarga);

                dsInfCTeNorm = dsCte.infCTeNorm.NewinfCTeNormRow();
                dsInfCarga = dsCte.infCarga.NewinfCargaRow();

                #endregion

                #region infQ

                dsInfQ = dsCte.infQ.NewinfQRow();
                XmlNodeList infQ = doc.GetElementsByTagName("infQ");

                for (int i = 0; i < infQ.Count; i++)
                {
                    for (int j = 0; j < infQ[i].ChildNodes.Count; j++)
                    {
                        switch (infQ[i].ChildNodes[j].LocalName)
                        {
                            case "cUnid": dsInfQ.cUnid = infQ[i].ChildNodes[j].InnerText;
                                break;

                            case "tpMed": dsInfQ.tpMed = infQ[i].ChildNodes[j].InnerText;
                                break;

                            case "qCarga": dsInfQ.qCarga = infQ[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                    dsInfQ.pk_infCarga = iChave;
                    dsInfQ.pk_infQ = iChaveCarga;
                    iChaveCarga++;
                    if (dsInfQ.qCarga != "")
                    {
                        if (dsInfQ.cUnid.Equals("00"))
                        {
                            dsCte.ide[iChave - 1].Volume = Convert.ToDecimal(dsInfQ.qCarga.Replace(".", ","));
                        }
                        else
                        {
                            dsCte.ide[iChave - 1].Peso = Convert.ToDecimal(dsInfQ.qCarga.Replace(".", ","));
                        }
                    }


                    dsCte.infQ.AddinfQRow(dsInfQ);
                    dsInfQ = dsCte.infQ.NewinfQRow();
                }

                #endregion

                #region seg

                dsSeg = dsCte.seg.NewsegRow();
                XmlNodeList seg = doc.GetElementsByTagName("seg");

                for (int i = 0; i < seg.Count; i++)
                {
                    for (int j = 0; j < seg[i].ChildNodes.Count; j++)
                    {
                        switch (seg[i].ChildNodes[j].LocalName)
                        {
                            case "respSeg": dsSeg.respSeg = seg[i].ChildNodes[j].InnerText;
                                break;

                            case "nApol": dsSeg.nApol = seg[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsSeg.pk_infCTeNorm = iChave;
                dsSeg.pk_seg = iChave;

                dsCte.seg.AddsegRow(dsSeg);
                dsSeg = dsCte.seg.NewsegRow();

                #endregion

                #region rodo

                dsRodo = dsCte.rodo.NewrodoRow();
                XmlNodeList rodo = doc.GetElementsByTagName("rodo");

                for (int i = 0; i < rodo.Count; i++)
                {
                    for (int j = 0; j < rodo[i].ChildNodes.Count; j++)
                    {
                        switch (rodo[i].ChildNodes[j].LocalName)
                        {
                            case "RNTRC": dsRodo.RNTRC = rodo[i].ChildNodes[j].InnerText;
                                break;

                            case "dPrev": dsRodo.dPrev = Convert.ToDateTime(rodo[i].ChildNodes[j].InnerText);
                                break;

                            case "lota": dsRodo.lota = rodo[i].ChildNodes[j].InnerText;
                                break;

                        }
                    }
                }

                dsRodo.pk_infCTeNorm = iChave;
                dsRodo.pk_rodo = iChave;

                dsCte.rodo.AddrodoRow(dsRodo);
                dsRodo = dsCte.rodo.NewrodoRow();

                #endregion

                # region moto
                dsMoto = dsCte.moto.NewmotoRow();
                XmlNodeList moto = doc.GetElementsByTagName("moto");

                for (int i = 0; i < moto.Count; i++)
                {
                    for (int j = 0; j < moto[i].ChildNodes.Count; j++)
                    {
                        switch (moto[i].ChildNodes[j].LocalName)
                        {
                            case "xNome": dsMoto.xNome = moto[i].ChildNodes[j].InnerText;
                                break;

                            case "CPF": dsMoto.CPF = moto[i].ChildNodes[j].InnerText;
                                break;


                        }
                    }
                }

                dsMoto.pk_rodo = iChave;
                dsMoto.pk_moto = iChave;

                dsCte.moto.AddmotoRow(dsMoto);
                dsMoto = dsCte.moto.NewmotoRow();
                #endregion

                #region veic
                dsVeic = dsCte.veic.NewveicRow();

                XmlNodeList veic = doc.GetElementsByTagName("veic");

                for (int i = 0; i < veic.Count; i++)
                {

                    for (int j = 0; j < veic[i].ChildNodes.Count; j++)
                    {
                        switch (veic[i].ChildNodes[j].LocalName)
                        {
                            case "RENAVAM": dsVeic.RENAVAM = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "placa": dsVeic.placa = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "tara": dsVeic.tara = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "capKG": dsVeic.capKG = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "capM3": dsVeic.capM3 = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "tpProp": dsVeic.tpProp = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "tpVeic": dsVeic.tpVeic = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "tpRod": dsVeic.tpRod = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "tpCar": dsVeic.tpCar = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "UF": dsVeic.UF = veic[i].ChildNodes[j].InnerText;
                                break;

                            case "prop": dsVeic.RNTRC = veic[i].ChildNodes[j].ChildNodes.Item(1).InnerText;
                                break;

                        }

                    }

                    dsVeic.pk_rodo = iChave;
                    dsVeic.pk_veic = iChaveVeic;
                    iChaveVeic++;

                    dsCte.veic.AddveicRow(dsVeic);
                    dsVeic = dsCte.veic.NewveicRow();
                }



                #endregion

                dsInfCTeNorm = dsCte.infCTeNorm.NewinfCTeNormRow();

                #endregion


                if (dsToma03.toma == "0")  // remetente
                {
                    dsToma4 = dsCte.toma4.Newtoma4Row();
                    dsEnderToma = dsCte.enderToma.NewenderTomaRow();
                    dsToma4.CNPJ = dsRem.CNPJ;
                    //dsToma4.CPF = dsRem.CPF;
                    dsToma4.xNome = dsRem.xNome;
                    dsToma4.xFant = dsRem.xFant;
                    try
                    {
                        dsToma4.fone = dsRem.fone;
                    }
                    catch (Exception) { }
                    dsToma4.pk_toma4 = iChave;
                    dsToma4.pk_ide = iChave;
                    dsCte.toma4.Addtoma4Row(dsToma4);

                    dsEnderToma.xLgr = dsEnderReme.xLgr;
                    dsEnderToma.nro = dsEnderReme.nro;
                    try
                    {
                        dsEnderToma.xCpl = dsEnderReme.xCpl;
                    }
                    catch (Exception)
                    { }
                    dsEnderToma.xBairro = dsEnderReme.xBairro;
                    dsEnderToma.cMun = dsEnderReme.cMun;
                    dsEnderToma.xMun = dsEnderReme.xMun;
                    try
                    {
                        dsEnderToma.CEP = dsEnderReme.CEP;
                    }
                    catch (Exception)
                    { }
                    
                    dsEnderToma.UF = dsEnderReme.UF;
                    dsEnderToma.cPais = dsEnderReme.cPais;
                    dsEnderToma.xPais = dsEnderReme.xPais;
                    dsEnderToma.pk_toma4 = iChave;
                    dsEnderToma.pk_enderToma = iChave;

                    dsCte.enderToma.AddenderTomaRow(dsEnderToma);
                }
                else if (dsToma03.toma == "3") // destinatario
                {
                    dsToma4 = dsCte.toma4.Newtoma4Row();
                    dsEnderToma = dsCte.enderToma.NewenderTomaRow();
                    dsToma4.CNPJ = dsDest.CNPJ;
                    try { dsToma4.CPF = dsDest.CPF; }
                    catch (Exception) { }
                    dsToma4.xNome = dsDest.xNome;
                    dsToma4.xFant = dsDest.xNome;
                    try { dsToma4.fone = dsDest.fone; }
                    catch (Exception) { }

                    dsToma4.pk_toma4 = iChave;
                    dsToma4.pk_ide = iChave;
                    dsCte.toma4.Addtoma4Row(dsToma4);

                    dsEnderToma.xLgr = dsEnderDest.xLgr;
                    dsEnderToma.nro = dsEnderDest.nro;
                    try { dsEnderToma.xCpl = dsEnderDest.xCpl; }
                    catch (Exception) { }
                    dsEnderToma.xBairro = dsEnderDest.xBairro;
                    dsEnderToma.cMun = dsEnderDest.cMun;
                    dsEnderToma.xMun = dsEnderDest.xMun;
                    try
                    {
                        dsEnderToma.CEP = dsEnderDest.CEP;
                    }
                    catch (Exception) { }

                    dsEnderToma.UF = dsEnderDest.UF;
                    dsEnderToma.cPais = dsEnderDest.cPais;
                    dsEnderToma.xPais = dsEnderDest.xPais;
                    dsEnderToma.pk_toma4 = iChave;
                    dsEnderToma.pk_enderToma = iChave;

                    dsCte.enderToma.AddenderTomaRow(dsEnderToma);

                }

                //if (toma4.Count > 0)
                //{
                //    dsToma4 = dsCte.toma4.Newtoma4Row();
                //    dsEnderToma = dsCte.enderToma.NewenderTomaRow();

                //    #region Dados Tomador
                //    for (int i = 0; i < toma4.Count; i++)
                //    {
                //        for (int j = 0; j < toma4[i].ChildNodes.Count; j++)
                //        {
                //            switch (toma4[i].ChildNodes[j].LocalName)
                //            {
                //                case "toma": dsToma4.toma = toma4[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "CNPJ": dsToma4.CNPJ = toma4[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "CPF": dsToma4.CPF = toma4[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "IE": dsToma4.IE = toma4[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "xNome": dsToma4.xNome = toma4[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "xFant": dsToma4.xFant = toma4[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "fone": dsToma4.fone = toma4[i].ChildNodes[j].InnerText;
                //                    break;

                //            }
                //        }
                //    }

                //    dsToma4.pk_toma4 = iChave;
                //    dsToma4.pk_ide = iChave;

                //    dsCte.toma4.Addtoma4Row(dsToma4);
                //    dsToma4 = dsCte.toma4.Newtoma4Row();
                //    #endregion

                //    #region EnderecoToma

                //    for (int i = 0; i < enderToma.Count; i++)
                //    {
                //        for (int j = 0; j < enderToma[i].ChildNodes.Count; j++)
                //        {
                //            switch (enderToma[i].ChildNodes[j].LocalName)
                //            {
                //                case "xLgr": dsEnderToma.xLgr = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "nro": dsEnderToma.nro = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "xCpl": dsEnderToma.xCpl = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "xBairro": dsEnderToma.xBairro = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "cMun": dsEnderToma.cMun = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "xMun": dsEnderToma.xMun = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "CEP": dsEnderToma.CEP = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "UF": dsEnderToma.UF = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "cPais": dsEnderToma.cPais = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //                case "xPais": dsEnderToma.xPais = enderToma[i].ChildNodes[j].InnerText;
                //                    break;

                //            }
                //        }
                //    }
                //    dsEnderToma.pk_toma4 = iChave;
                //    dsEnderToma.pk_enderToma = iChave;
                //    dsCte.enderToma.AddenderTomaRow(dsEnderToma);
                //    dsEnderToma = dsCte.enderToma.NewenderTomaRow();
                //    #endregion
                //}


            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        private void GeraPDF(dsCTe ds, TipoPDF tpPdf, string sNumCte, string sCaminhoSalvar)
        {
            try
            {

                ReportDocument rpt = new ReportDocument();

                if (tpPdf == TipoPDF.PADRAO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCtePadrao.rpt");
                }
                else if (tpPdf == TipoPDF.PADRAO_CANCELADO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCtePadraoCancelado.rpt");
                }
                else if (tpPdf == TipoPDF.LOTACAO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCteLotacao.rpt");
                }
                else if (tpPdf == TipoPDF.LOTACAO_CANCELADO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCteLotacaoCancelado.rpt");
                }
                rpt.SetDataSource(ds);
                rpt.Refresh();



                ExportPDF(rpt, sCaminhoSalvar + "\\Cte_" + sNumCte + ".pdf");

            }
            catch (Exception ex)
            {
                KryptonMessageBox.Show(null, _sMessageException + (ex.InnerException != null ? ex.InnerException.Message : ex.Message).ToString(), "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information); ;
            }


        }
        private void GeraPDF(dsCTe ds, TipoPDF tpPdf, string sNumCte)
        {
            try
            {

                ReportDocument rpt = new ReportDocument();
                DirectoryInfo dinfo = null;

                if (tpPdf == TipoPDF.PADRAO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCtePadrao.rpt");
                    dinfo = new DirectoryInfo(belStaticPastas.ENVIADOS + "\\PDF");
                }
                else if (tpPdf == TipoPDF.PADRAO_CANCELADO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCtePadraoCancelado.rpt");
                    dinfo = new DirectoryInfo(belStaticPastas.CANCELADOS + "\\PDF");
                }
                else if (tpPdf == TipoPDF.LOTACAO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCteLotacao.rpt");
                    dinfo = new DirectoryInfo(belStaticPastas.ENVIADOS + "\\PDF");
                }
                else if (tpPdf == TipoPDF.LOTACAO_CANCELADO)
                {
                    rpt.Load(Application.StartupPath + "\\Relatorios\\rptCteLotacaoCancelado.rpt");
                    dinfo = new DirectoryInfo(belStaticPastas.CANCELADOS + "\\PDF");
                }
                rpt.SetDataSource(ds);
                rpt.Refresh();

                if (!dinfo.Exists)
                {
                    dinfo.Create();
                }

                ExportPDF(rpt, dinfo.FullName + "\\Cte_" + sNumCte + ".pdf");

            }
            catch (Exception ex)
            {
                KryptonMessageBox.Show(null, _sMessageException + (ex.InnerException != null ? ex.InnerException.Message : ex.Message).ToString(), "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information); ;
            }


        }
        private void btnImpressao_Click(object sender, EventArgs e)
        {
            try
            {
                List<DadosImpressao> objListDados = new List<DadosImpressao>();

                belGlobais objGlobais = new belGlobais();
                DirectoryInfo dPasta = null;
                FileInfo[] fArquivoImprimir = null;

                if (!belStatic.bModoContingencia)
                {
                    #region Verifica Selecionadas

                    for (int i = 0; i < dgvArquivos.RowCount; i++)
                    {
                        if (dgvArquivos["cl_imprime", i].Value != null)
                        {
                            if (dgvArquivos["cl_imprime", i].Value.ToString().Equals("True"))
                            {
                                //string sProtEnvio = objGerais.VerificaCampoProtocoloEnvio(dgvArquivos["cd_conheci", i].Value.ToString());
                                //if (sProtEnvio != "")
                                //{
                                DadosImpressao objDados = new DadosImpressao();
                                objDados.sNumeroCte = dgvArquivos["cd_conheci", i].Value.ToString();
                                objDados.sProtocolo = "";// sProtEnvio;
                                if (!dgvArquivos["ds_cancelamento", i].Value.ToString().Equals(""))
                                {
                                    objDados.Cancelado = true;
                                }
                                objListDados.Add(objDados);
                                //}

                            }
                        }
                    }

                    #endregion
                }
                else
                {
                    #region Verifica Notas em Contingencia

                    for (int i = 0; i < dgvArquivos.RowCount; i++)
                    {
                        if (dgvArquivos["cl_imprime", i].Value != null)
                        {
                            if (dgvArquivos["cl_imprime", i].Value.ToString().Equals("True") && Convert.ToBoolean(dgvArquivos["st_cte", i].Value) == false && Convert.ToBoolean(dgvArquivos["st_contingencia", i].Value) == true)
                            {
                                DadosImpressao objDados = new DadosImpressao();
                                objDados.sNumeroCte = dgvArquivos["cd_conheci", i].Value.ToString();
                                objListDados.Add(objDados);
                            }
                        }
                    }

                    #endregion
                }

                #region Popula Dataset com Cte Validos

                if (objListDados.Count > 0)
                {
                    for (int i = 0; i < objListDados.Count; i++)
                    {
                        if (!belStatic.bModoContingencia)
                        {
                            string sChaveCteRet = objGerais.BuscaChaveRetornoCte(objListDados[i].sNumeroCte);
                            string sPasta = sChaveCteRet.Substring(4, 2) + "-" + sChaveCteRet.Substring(2, 2);

                            if (!objListDados[i].Cancelado)
                            {
                                dPasta = new DirectoryInfo(belStaticPastas.ENVIADOS + @"\\" + sPasta);
                            }
                            else
                            {
                                dPasta = new DirectoryInfo(belStaticPastas.CANCELADOS + @"\\" + sPasta);
                            }
                            if (dPasta.Exists)
                            {
                                fArquivoImprimir = dPasta.GetFiles("Cte_" + sChaveCteRet + ".xml");
                                if (fArquivoImprimir.Count() == 1)
                                {
                                    objListDados[i].bArquivoEncontrado = true;
                                    objListDados[i].sCaminhoXml = dPasta.ToString() + "\\Cte_" + sChaveCteRet + ".xml";
                                }
                                else
                                {
                                    throw new Exception("Arquivo Xml não Encontrado");
                                }
                            }
                        }
                        else
                        {
                            XmlDocument doc = new XmlDocument();

                            string sChaveCteRet = objGerais.BuscaChaveRetornoCte(objListDados[i].sNumeroCte);
                            string sPasta = sChaveCteRet.Substring(4, 2) + "-" + sChaveCteRet.Substring(2, 2);

                            dPasta = new DirectoryInfo(belStaticPastas.CONTINGENCIA + @"\\" + sPasta);
                            fArquivoImprimir = dPasta.GetFiles("*.xml", SearchOption.AllDirectories);

                            foreach (FileInfo arq in fArquivoImprimir)
                            {
                                doc.Load(@arq.FullName);
                                if (doc.GetElementsByTagName("infCte")[0].Attributes["Id"].Value.ToString().Replace("CTe", "").Equals(sChaveCteRet))
                                {
                                    objListDados[i].bArquivoEncontrado = true;
                                    objListDados[i].sCaminhoXml = arq.FullName;
                                    break;
                                }
                            }

                        }
                    }

                    belPopulaDataSet objDataSet = new belPopulaDataSet();

                    dsCTe dsPadrao = new dsCTe();
                    dsCTe dsLotacao = new dsCTe();
                    dsCTe dsPadraoCancelado = new dsCTe();
                    dsCTe dsLotacaoCancelado = new dsCTe();

                    for (int i = 0; i < objListDados.Count; i++)
                    {
                        dsCTe dsPDF = new dsCTe();
                        if (objListDados[i].bArquivoEncontrado == true)
                        {
                            if (objDataSet.VerificaLotacao(objListDados[i].sCaminhoXml))
                            {
                                if (!objListDados[i].Cancelado)
                                {
                                    objDataSet.PopulaDataSet(dsLotacao, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    objDataSet.PopulaDataSet(dsPDF, objListDados[i].sCaminhoXml, 1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPDF, TipoPDF.LOTACAO, objListDados[i].sNumeroCte);

                                }
                                else
                                {
                                    objDataSet.PopulaDataSet(dsLotacaoCancelado, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    objDataSet.PopulaDataSet(dsPDF, objListDados[i].sCaminhoXml, 1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPDF, TipoPDF.LOTACAO_CANCELADO, objListDados[i].sNumeroCte);
                                }
                            }
                            else
                            {
                                if (!objListDados[i].Cancelado)
                                {
                                    objDataSet.PopulaDataSet(dsPadrao, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    objDataSet.PopulaDataSet(dsPDF, objListDados[i].sCaminhoXml, 1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPDF, TipoPDF.PADRAO, objListDados[i].sNumeroCte);
                                }
                                else
                                {
                                    objDataSet.PopulaDataSet(dsPadraoCancelado, objListDados[i].sCaminhoXml, i + 1, objListDados[i].sProtocolo);
                                    objDataSet.PopulaDataSet(dsPDF, objListDados[i].sCaminhoXml, 1, objListDados[i].sProtocolo);
                                    GeraPDF(dsPDF, TipoPDF.PADRAO_CANCELADO, objListDados[i].sNumeroCte);
                                }
                            }
                        }
                    }

                    if (objbelGlobais.LeRegWin("EmailAutomatico").ToString() == "True")
                    {
                        EnviaEmail(objListDados);
                    }
                    if (dsPadrao.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Application.StartupPath + "\\Relatorios\\rptCtePadrao.rpt");
                        rpt.SetDataSource(dsPadrao);
                        rpt.Refresh();

                        frmRelatorioCte frm = new frmRelatorioCte(rpt, "Impressão de DACTE - Carga Fracionada");
                        frm.Show();
                    }
                    if (dsPadraoCancelado.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Application.StartupPath + "\\Relatorios\\rptCtePadraoCancelado.rpt");
                        rpt.SetDataSource(dsPadraoCancelado);
                        rpt.Refresh();

                        frmRelatorioCte frm = new frmRelatorioCte(rpt, "Impressão de DACTE - Carga Fracionada(Cancelados)");
                        frm.Show();
                    }
                    if (dsLotacao.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Application.StartupPath + "\\Relatorios\\rptCteLotacao.rpt");
                        rpt.SetDataSource(dsLotacao);
                        rpt.Refresh();

                        frmRelatorioCte frm = new frmRelatorioCte(rpt, "Impressão de DACTE - Lotação");
                        frm.Show();
                    }
                    if (dsLotacaoCancelado.infCte.Count() > 0)
                    {
                        ReportDocument rpt = new ReportDocument();
                        rpt.Load(Application.StartupPath + "\\Relatorios\\rptCteLotacaoCancelado.rpt");
                        rpt.SetDataSource(dsLotacaoCancelado);
                        rpt.Refresh();

                        frmRelatorioCte frm = new frmRelatorioCte(rpt, "Impressão de DACTE - Lotação(Cancelados)");
                        frm.Show();
                    }


                }
                else
                {
                    KryptonMessageBox.Show("Nenhum Conhecimento Válido foi Selecionado para Impressão", "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information); ;
                }

            }
            catch (Exception ex)
            {
                KryptonMessageBox.Show(null, _sMessageException + (ex.InnerException != null ? ex.InnerException.Message : ex.Message).ToString(), "CT-e - AVISO", MessageBoxButtons.OK, MessageBoxIcon.Information); ;
            }


                #endregion

            CarregaGrid();
        }