public void Salvar(Roteiro roteiro)
        {
            try
            {
                if (_validar.Salvar(roteiro))
                {
                    Mensagem msgSucesso;
                    bool     isEditar = false;

                    if (roteiro.Id > 0)
                    {
                        isEditar = true;
                    }

                    #region Arquivos/Diretorio
                    ArquivoBus _busArquivo = new ArquivoBus(eExecutorTipo.Interno);

                    if (roteiro.Anexos != null && roteiro.Anexos.Count > 0)
                    {
                        foreach (Anexo anexo in roteiro.Anexos)
                        {
                            if (anexo.Arquivo.Id == 0)
                            {
                                anexo.Arquivo = _busArquivo.Copiar(anexo.Arquivo);
                            }
                        }
                    }
                    #endregion

                    GerenciadorTransacao.ObterIDAtual();

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                    {
                        bancoDeDados.IniciarTransacao();

                        #region Arquivos/Banco
                        ArquivoDa arquivoDa = new ArquivoDa();

                        if (roteiro.Anexos != null && roteiro.Anexos.Count > 0)
                        {
                            foreach (Anexo anexo in roteiro.Anexos)
                            {
                                if (anexo.Arquivo.Id == 0)
                                {
                                    arquivoDa.Salvar(anexo.Arquivo, User.FuncionarioId, User.Name, User.Login, (int)eExecutorTipo.Interno, User.FuncionarioTid, bancoDeDados);
                                }
                            }
                        }
                        #endregion

                        int roteiroIdOriginal = roteiro.Id;
                        _da.Salvar(roteiro, bancoDeDados);
                        if (roteiroIdOriginal > 0)
                        {
                            AlterarSituacaoChecagensComRoteiros(roteiro.Id, 3, bancoDeDados);
                        }

                        bancoDeDados.Commit();
                    }

                    if (isEditar)
                    {
                        msgSucesso = Mensagem.Roteiro.Editar(roteiro.Numero, roteiro.Versao, _da.ObterVersaoAtual(roteiro.Id));
                    }
                    else
                    {
                        msgSucesso = Mensagem.Roteiro.Salvar(roteiro.Numero, _da.ObterVersaoAtual(roteiro.Id));
                    }

                    Validacao.Add(msgSucesso);
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }